package org.chartsy.chatsy.chat.component; import javax.swing.Icon; import javax.swing.tree.DefaultMutableTreeNode; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; public class JiveTreeNode extends DefaultMutableTreeNode implements Transferable { private Icon closedImage = null; private Icon openImage = null; public static final DataFlavor[] DATA_FLAVORS = {new DataFlavor(JiveTreeNode.class, "JiveTreeNodeFlavor")}; private Object associatedObject; public JiveTreeNode(TreeFolder folder) { super(folder.getDisplayName(), true); closedImage = null; openImage = null; associatedObject = folder; } public JiveTreeNode(String name, boolean allowsChildren) { super(name, allowsChildren); if (allowsChildren) { closedImage = null; openImage = null; } } public JiveTreeNode(Object o, boolean allowsChildren) { super(o, allowsChildren); } public JiveTreeNode(TreeItem item) { super(item.getDisplayName(), false); associatedObject = item; } public JiveTreeNode(TreeFolder folder, Icon img) { this(folder); closedImage = img; } public JiveTreeNode(TreeItem item, Icon img) { this(item); closedImage = img; } public JiveTreeNode(String userobject) { super(userobject); } public JiveTreeNode(String userObject, boolean allowChildren, Icon icon) { super(userObject, allowChildren); closedImage = icon; openImage = icon; } public Icon getIcon() { return closedImage; } public Icon getOpenIcon() { return openImage; } public Icon getClosedIcon() { return closedImage; } public void setIcon(Icon icon) { closedImage = icon; } public Object getAssociatedObject() { return associatedObject; } public void setAssociatedObject(Object o) { this.associatedObject = o; } public final boolean hasParent(String parentName) { JiveTreeNode parent = (JiveTreeNode)getParent(); while (true) { if (parent.getAssociatedObject() == null) break; final TreeFolder folder = (TreeFolder)parent.getAssociatedObject(); if (folder.getDisplayName().equals(parentName)) return true; parent = (JiveTreeNode)parent.getParent(); } return false; } public DataFlavor[] getTransferDataFlavors() { return DATA_FLAVORS; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor == DATA_FLAVORS[0]; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (this.isDataFlavorSupported(flavor)) return this; throw new UnsupportedFlavorException(flavor); } }