/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * MetaTreeNodeTransferable.java * * Created on 15. September 2004, 10:42 */ package Sirius.navigator.ui.dnd; import Sirius.navigator.types.treenode.*; import Sirius.navigator.ui.tree.*; import Sirius.server.middleware.types.MetaObjectNode; import org.apache.log4j.Logger; import java.awt.datatransfer.*; import java.util.ArrayList; import java.util.List; /** * DOCUMENT ME! * * @author pascal * @version $Revision$, $Date$ */ public class MetaTreeNodeTransferable implements MetaTransferable { //~ Static fields/initializers --------------------------------------------- static DataFlavor[] dataFlavors = null; //~ Instance fields -------------------------------------------------------- private MetaCatalogueTree metaCatalogueTree; private List<DefaultMetaTreeNode> metaNodes; /** Holds value of property transferAction. */ private int transferAction; //~ Constructors ----------------------------------------------------------- /** * Creates a new instance of MetaTreeNodeTransferable. * * @param metaCatalogueTree DOCUMENT ME! */ public MetaTreeNodeTransferable(final MetaCatalogueTree metaCatalogueTree) { this.metaCatalogueTree = metaCatalogueTree; } /** * Creates a new instance of MetaTreeNodeTransferable. If you use this constructor, the getTransferData method will * not return the selected node of a tree, but the given metaTreeNodes * * @param metaNode DOCUMENT ME! */ public MetaTreeNodeTransferable(final List<DefaultMetaTreeNode> metaNode) { this.metaNodes = metaNode; } //~ Methods ---------------------------------------------------------------- @Override public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, java.io.IOException { if (getTransferDataFlavors().length > 0) { if (getTransferDataFlavors()[0].equals(flavor)) { // Logger.getLogger(MetaTreeNodeTransferable.class).debug("getTransferData(): MetaTreeNode"); if (this.metaCatalogueTree != null) { return this.metaCatalogueTree.getSelectedNode(); } else { return this.metaNodes.get(0); } } else if (getTransferDataFlavors()[1].equals(flavor)) { // Logger.getLogger(MetaTreeNodeTransferable.class).debug("getTransferData(): Collection of nodes"); if (this.metaCatalogueTree != null) { return this.metaCatalogueTree.getSelectedNodes(); } else { return metaNodes; } } else { Logger.getLogger(MetaTreeNodeTransferable.class).warn("getTransferData(): UnsupportedFlavorException"); // NOI18N throw new UnsupportedFlavorException(flavor); } } // Logger.getLogger(MetaTreeNodeTransferable.class).debug("getTransferData(): no flavours available"); return null; } @Override public DataFlavor[] getTransferDataFlavors() { // lazily construct flavors if (dataFlavors == null) { dataFlavors = new DataFlavor[2]; try { // MetaTreeNode String mimeType = DataFlavor.javaJVMLocalObjectMimeType + ";class=" + DefaultMetaTreeNode.class.getName(); // NOI18N DataFlavor dataFlavor = new DataFlavor(mimeType); dataFlavor.setHumanPresentableName("a DefaultMetaTreeNode"); // NOI18N dataFlavors[0] = dataFlavor; // Collection of nodes mimeType = DataFlavor.javaJVMLocalObjectMimeType + ";class=" + java.util.Collection.class.getName(); // NOI18N dataFlavor = new DataFlavor(mimeType); dataFlavor.setHumanPresentableName( "a java.util.Collection of Sirius.navigator.types.treenode.DefaultMetaTreeNode objects"); // NOI18N dataFlavors[1] = dataFlavor; } catch (ClassNotFoundException cnfe) { Logger.getLogger(MetaTreeNodeTransferable.class) .error("getTransferDataFlavors() could not create DnD data flavours", cnfe); // NOI18N dataFlavors = new DataFlavor[0]; } } return dataFlavors; } @Override public boolean isDataFlavorSupported(final DataFlavor flavor) { if ((getTransferDataFlavors().length > 0) && (dataFlavors[0].equals(flavor) || dataFlavors[1].equals(flavor))) { return true; } return false; } /** * Getter for property transferAction. * * @return Value of property transferAction. */ @Override public int getTransferAction() { return this.transferAction; } /** * Setter for property transferAction. * * @param transferAction New value of property transferAction. */ @Override public void setTransferAction(final int transferAction) { this.transferAction = transferAction; } }