package com.revolsys.swing.tree.node.layer;
import java.awt.Component;
import java.beans.PropertyChangeEvent;
import javax.swing.JTree;
import com.revolsys.awt.WebColors;
import com.revolsys.swing.map.MapPanel;
import com.revolsys.swing.map.layer.Layer;
import com.revolsys.swing.parallel.Invoke;
import com.revolsys.swing.tree.node.ListTreeNode;
import com.revolsys.swing.tree.node.OpenStateTreeNode;
public abstract class AbstractLayerTreeNode extends ListTreeNode implements OpenStateTreeNode {
public AbstractLayerTreeNode(final Layer layer) {
super(layer);
setName(layer.getName());
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
@SuppressWarnings("unchecked")
public <V extends Layer> V getLayer() {
return (V)getUserData();
}
@Override
public LayerGroupTreeNode getParent() {
return (LayerGroupTreeNode)super.getParent();
}
@Override
public Component getTreeCellRendererComponent(Component renderer, final JTree tree,
final Object value, final boolean selected, final boolean expanded, final boolean leaf,
final int row, final boolean hasFocus) {
renderer = super.getTreeCellRendererComponent(renderer, tree, value, selected, expanded, leaf,
row, hasFocus);
if (isUserObjectInitialized()) {
final Layer layer = getLayer();
final MapPanel map = layer.getMapPanel();
if (map != null) {
final double scale = map.getScale();
if (layer.getRenderer() != null && !layer.isVisible(scale)) {
renderer.setForeground(WebColors.Gray);
}
}
}
return renderer;
}
@Override
public boolean isCopySupported() {
final Layer layer = getLayer();
return layer.isClonable();
}
@Override
public boolean isOpen() {
final Layer layer = getLayer();
return layer.isOpen();
}
@Override
public boolean isUserObjectInitialized() {
return getLayer().isInitialized();
}
@Override
protected void propertyChangeDo(final PropertyChangeEvent e) {
super.propertyChangeDo(e);
final Object source = e.getSource();
if (source == getLayer()) {
final String propertyName = e.getPropertyName();
if ("name".equals(propertyName)) {
Invoke.later(() -> {
setName(getLayer().getName());
nodeChanged();
});
}
}
}
@Override
public void setOpen(final boolean open) {
final Layer layer = getLayer();
layer.setOpen(open);
}
}