blob: 51d27b767691268ab0a2a6fcff4af07754abdac7 [file] [log] [blame]
/*
* 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());
}
}