package org.chartsy.main.chart; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Externalizable; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import java.lang.reflect.InvocationTargetException; import java.util.logging.Logger; import org.chartsy.main.utils.SerialVersion; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.PropertySupport; import org.openide.nodes.Sheet; import org.openide.util.lookup.Lookups; /** * * @author Viorel */ public abstract class AbstractPropertiesNode extends AbstractNode implements PropertyChangeListener, Externalizable { private static final long serialVersionUID = SerialVersion.APPVERSION; protected static final Logger LOG = Logger.getLogger(AbstractPropertiesNode.class.getPackage().getName()); public AbstractPropertiesNode(String name) { super(Children.LEAF); setDisplayName(name); } public AbstractPropertiesNode(String name, AbstractPropertyListener listener) { super(Children.LEAF, Lookups.singleton(listener)); setDisplayName(name); listener.addPropertyChangeListener((PropertyChangeListener) this); } public AbstractPropertyListener getAbstractPropertyListener() { return getLookup().lookup(AbstractPropertyListener.class); } public Sheet.Set[] getSets() { return new Sheet.Set[] { getPropertiesSet() }; } protected Sheet.Set getPropertiesSet() { return getPropertiesSet(getDisplayName()); } protected Sheet.Set getPropertiesSet(String name) { return getPropertiesSet(name, name); } protected Sheet.Set getPropertiesSet(String name, String description) { Sheet.Set set = new Sheet.Set(); set.setName(name); set.setDisplayName(name); set.setShortDescription(description); return set; } protected PropertySupport.Reflection getProperty (String name, String description, Class clazz, Class property, Class propertyEditor, String getMethod, String setMethod, final Object defaultValue) throws NoSuchMethodException { @SuppressWarnings(value = "unchecked") PropertySupport.Reflection reflection = new PropertySupport.Reflection(getLookup().lookup(clazz), property, getMethod, setMethod) { public @Override void restoreDefaultValue() throws IllegalAccessException, InvocationTargetException { super.setValue(defaultValue); } public @Override boolean supportsDefaultValue() { return true; } }; reflection.setName(name); reflection.setDisplayName(name); reflection.setShortDescription(description); reflection.setPropertyEditorClass(propertyEditor); return reflection; } public void propertyChange(PropertyChangeEvent evt) { firePropertySetsChange(null, getPropertySets()); } public void writeExternal(ObjectOutput out) throws IOException {} public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {} }