SimpleTreeDragDropDriver.java Sample

This topic inludes the source code for the SimpleTreeDragDropDriver.java Sample.

Sample Location

This sample is located in the following directory in your WebLogic Workshop installation:

BEA_HOME/weblogic81/samples/workshop/ExtensionDevKit/IdeDevKit/DragDropSimple/src/ideExtensions/dragDropSimple/

Sample Source Code


001 package ideExtensions.dragDropSimple;
002 
003 import com.bea.ide.core.MessageSvc;
004 import com.bea.ide.core.ResourceSvc;
005 import com.bea.ide.core.datatransfer.DefaultDragDropDriver;
006 import ideExtensions.dragDropSimple.SimpleTree.ItemInfo;
007 
008 import java.awt.Component;
009 import java.awt.Image;
010 import java.awt.Point;
011 import java.awt.datatransfer.StringSelection;
012 import java.awt.datatransfer.Transferable;
013 import javax.swing.tree.DefaultMutableTreeNode;
014 import javax.swing.tree.TreeSelectionModel;
015 
016 /**
017  * A drag/drop driver that supports copying data from the simple
018  * tree to a document source. This drag/drop driver is registered by
019  * the TreePanelView as the tree's driver for drag/drop operations.
020  * This driver knows how to extract data from the tree that will be
021  * copied to the drop source.
022  */
023 public class SimpleTreeDragDropDriver extends DefaultDragDropDriver
024 {
025     /**
026      * Called by the IDE to get the IDragSourceInfo instance through which
027      * the IDE can retrieve the data to copy from the drag source to
028      * the drop target.
029      *
030      @param component The drag source.
031      @param point The point representing the start of the drag.
032      @return The drag source info containing transfer data.
033      */
034     public IDragSourceInfo getDragInfo(Component component, Point point)
035     {
036         IDragSourceInfo dragInfo = null;
037         try
038         {
039             /**
040              * If there's anything selected in the tree, construct a draginfo
041              * from the selected node. Note that this tree does not support
042              * multiple selections; see SimpleTree for more information.
043              */
044             SimpleTree simpleTree = (SimpleTreecomponent;
045             TreeSelectionModel selectionModel = simpleTree.getSelectionModel();
046             DefaultMutableTreeNode node =
047                     (DefaultMutableTreeNode) (selectionModel.getSelectionPath().getLastPathComponent());
048             dragInfo = new TreeViewDragInfo(node);
049             return dragInfo;
050         catch (Exception e)
051         {
052             MessageSvc.get().displayError("Error while dragging: " +
053                     e.getMessage()1);
054             e.printStackTrace();
055             return null;
056         }
057     }
058 
059     /**
060      * A drag info class to support copying data from the simple tree
061      * to a document.
062      */
063     class TreeViewDragInfo implements IDragSourceInfo
064     {
065         private String m_infoData = null;
066         StringBuffer m_infoBuffer = new StringBuffer();
067 
068         /**
069          * Constructs an instance of this class with a node from the simple
070          * tree, extracting data from the node for copying to the drop
071          * target.
072          *
073          @param selection The selected tree node.
074          */
075         public TreeViewDragInfo(DefaultMutableTreeNode selection)
076         {
077             // Retrieve the object that contains node data.
078             Object itemInfo = selection.getUserObject();
079             /**
080              * If the node is a leaf (that is, if it has no children) then simply
081              * get its data out as a string for copying to the drop target.
082              */
083             if (selection.isLeaf())
084             {
085                 m_infoData = ((ItemInfoitemInfo).getItemData();
086            /**
087             * If the node is not a leaf (it has children) then collect the
088             * data from each of its children for copying to the drop target.
089             */
090             else
091             {
092                 DefaultMutableTreeNode node = (DefaultMutableTreeNodeselection;
093                 ItemInfo itemUserObject = (ItemInfonode.getUserObject();
094                 String infoData = itemUserObject.getItemData();
095                 m_infoBuffer.append(infoData + "\n\n");
096 
097                 int count = selection.getChildCount();
098                 for (int i = 0; i < count; i++)
099                 {
100                     node = (DefaultMutableTreeNodeselection.getChildAt(i);
101                     extractInfoFromNode(node);
102                 }
103                 m_infoData = m_infoBuffer.toString();
104             }
105         }
106         
107         /**
108          * Extracts info from a child node, calling itself for any children
109          * the child has.
110          */
111         private void extractInfoFromNode(DefaultMutableTreeNode node)
112         {
113             ItemInfo itemUserObject = (ItemInfonode.getUserObject();
114             String infoData = itemUserObject.getItemData();
115             m_infoBuffer.append(infoData + "\n\n");
116             for (int i = 0; i < node.getChildCount(); i++)
117             {
118                 extractInfoFromNode((DefaultMutableTreeNode)node.getChildAt(i));
119             }
120         }
121 
122         /**
123          * Called by the IDE to retrieve the image that should be displayed
124          * with the pointer during dragging.
125          *
126          @return The image to display.
127          */
128         public Image getDragImage()
129         {
130             return ResourceSvc.get().getImage("images/txt.gif");
131         }
132 
133         /**
134          * Called by the IDE to retrieve the icon image's offset from the
135          * mouse pointer.
136          *
137          @return The offset point.
138          */
139         public Point getIconOffset()
140         {
141             return new Point(00);
142         }
143 
144         /**
145          * Called by the IDE to retrieve the Transferable instance
146          * that contains data to be copied (transferred) from the
147          * drag source to the drop target. This method uses the string
148          * extracted from the selected simple tree node to construct
149          * an instance of StringSelection, which implements Transferable.
150          *
151          @return The Transferable instance.
152          */
153         public Transferable getTransferable()
154         {
155             Transferable dropData = new StringSelection(m_infoData);
156             return dropData;
157         }
158     }
159 }