| /* |
| * Copyright 2000-2012 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.designer.model; |
| |
| import com.intellij.designer.propertyTable.PropertyEditor; |
| import com.intellij.designer.propertyTable.PropertyRenderer; |
| import com.intellij.psi.PsiElement; |
| import com.intellij.util.ui.TextTransferable; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import java.awt.datatransfer.Transferable; |
| import java.util.Collections; |
| import java.util.List; |
| |
| /** |
| * @author Alexander Lobas |
| */ |
| public abstract class Property<T extends PropertiesContainer> { |
| private final Property myParent; |
| private final String myName; |
| private boolean myImportant; |
| private boolean myExpert; |
| private boolean myDeprecated; |
| |
| public Property(@Nullable Property parent, @NotNull String name) { |
| myParent = parent; |
| myName = name; |
| } |
| |
| @Nullable |
| public Property<T> createForNewPresentation() { |
| return createForNewPresentation(myParent, myName); |
| } |
| |
| @Nullable |
| public Property<T> createForNewPresentation(@Nullable Property parent, @NotNull String name) { |
| return null; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Hierarchy |
| // |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @Nullable |
| public String getGroup() { |
| return null; |
| } |
| |
| @Nullable |
| public final Property getParent() { |
| return myParent; |
| } |
| |
| @NotNull |
| public List<? extends Property<T>> getChildren(@Nullable T container) { |
| return Collections.emptyList(); |
| } |
| |
| @NotNull |
| public String getPath() { |
| return myParent == null ? myName : myParent.getPath() + "/" + myName; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Value |
| // |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @Nullable |
| public Object getValue(@NotNull T container) throws Exception { |
| return null; |
| } |
| |
| public void setValue(@NotNull T container, @Nullable Object value) throws Exception { |
| } |
| |
| public boolean showAsDefault(@NotNull T container) throws Exception { |
| return isDefaultRecursively(container); |
| } |
| |
| public final boolean isDefaultRecursively(@NotNull T container) throws Exception { |
| if (!isDefaultValue(container)) return false; |
| for (Property<T> child : getChildren(container)) { |
| if (!child.isDefaultRecursively(container)) return false; |
| } |
| return true; |
| } |
| |
| public boolean isDefaultValue(@NotNull T container) throws Exception { |
| return true; |
| } |
| |
| public void setDefaultValue(@NotNull T container) throws Exception { |
| } |
| |
| public boolean availableFor(List<PropertiesContainer> components) { |
| return true; |
| } |
| |
| public boolean needRefreshPropertyList(@NotNull T container, @Nullable Object oldValue, @Nullable Object newValue) throws Exception { |
| return false; |
| } |
| |
| public boolean needRefreshPropertyList() { |
| return false; |
| } |
| |
| public boolean closeEditorDuringRefresh() { |
| return false; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Copy |
| // |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @NotNull |
| public Transferable doCopy(@NotNull T container, @NotNull Object commonValue) { |
| return new TextTransferable(commonValue.toString()); |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Presentation |
| // |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @NotNull |
| public final String getName() { |
| return myName; |
| } |
| |
| @Nullable |
| public String getTooltip() { |
| return null; |
| } |
| |
| public boolean isImportant() { |
| return myImportant; |
| } |
| |
| public void setImportant(boolean important) { |
| myImportant = important; |
| } |
| |
| public boolean isExpert() { |
| return myExpert; |
| } |
| |
| public void setExpert(boolean expert) { |
| myExpert = expert; |
| } |
| |
| public boolean isDeprecated() { |
| return myDeprecated; |
| } |
| |
| public void setDeprecated(boolean deprecated) { |
| myDeprecated = deprecated; |
| } |
| |
| @NotNull |
| public abstract PropertyRenderer getRenderer(); |
| |
| @Nullable |
| public abstract PropertyEditor getEditor(); |
| |
| public boolean isEditable(@Nullable T component) { |
| return getEditor() != null; |
| } |
| |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| // |
| // Javadoc |
| // |
| ////////////////////////////////////////////////////////////////////////////////////////// |
| |
| @Nullable |
| public PsiElement getJavadocElement() { |
| return null; |
| } |
| |
| @Nullable |
| public String getJavadocText() { |
| return null; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| return obj instanceof Property && getPath().equals(((Property) obj).getPath()); |
| } |
| } |