001: /* Copyright 2002-2005 The Apache Software Foundation
002: *
003: * Licensed under the Apache License, Version 2.0 (the "License");
004: * you may not use this file except in compliance with the License.
005: * You may obtain a copy of the License at
006: *
007: * http://www.apache.org/licenses/LICENSE-2.0
008: *
009: * Unless required by applicable law or agreed to in writing, software
010: * distributed under the License is distributed on an "AS IS" BASIS,
011: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: * See the License for the specific language governing permissions and
013: * limitations under the License.
014: */
015:
016: package org.apache.ojb.tools.mapping.reversedb2.ojbmetatreemodel;
017:
018: import org.apache.ojb.tools.mapping.reversedb2.dnd2.*;
019: import java.awt.Component;
020: import java.awt.datatransfer.Transferable;
021: import java.awt.Image;
022: import org.apache.ojb.broker.metadata.AttributeDescriptorBase;
023:
024: /**
025: *
026: * @author Florian Bruckner
027: */
028: public class OjbMetaTreeNodesDragWorker implements
029: DragCopyCutWorkerInterface {
030:
031: /** Creates a new instance of OjbMetaTreeNodesDragWorker */
032: public OjbMetaTreeNodesDragWorker() {
033: }
034:
035: /** Is called to notify you that the export this Worker has been notified of
036: * has finished. action shows you which action has been performed, e.g. if it
037: * is DRAG_MOVE you can remove the dragged items from your model.
038: * @param c The component that acts as the drag source
039: * @param action The drag action that has been performed
040: *
041: */
042: public void exportDone(Component c, int action) {
043: }
044:
045: /** Is called to notify you that the export has started. This is always
046: * called after getTransferable, so you should know which items are exported.
047: * This method is currently not called by the framework, but may be in future.
048: * @param c The component that acts as the drag source
049: * @param action The drag action that is going to be performed
050: *
051: */
052: public void exportStarted(Component c, int action) {
053: }
054:
055: /** Return a bitmask of acceptable actions. In most cases you will only support
056: * DRAG_COPY, but sometimes you might support DRAG_LINK or DRAG_MOVE as well.
057: * @param c The component that acts as the drag source
058: * @return A bitmask of possible drag actions for the given Component
059: *
060: */
061: public int getAcceptableActions(Component c) {
062: if (c instanceof javax.swing.JTree
063: && ((javax.swing.JTree) c).getModel() instanceof OjbMetaDataTreeModel)
064: return DnDWorkerConstants.DRAG_COPY
065: | DnDWorkerConstants.DRAG_LINK;
066: else
067: return DnDWorkerConstants.NONE;
068: }
069:
070: /** DnD on some platforms supports displaying a drag image in addition
071: * to the drag cursor (Windows is known not to support it, so if you are
072: * on Windows you might be doing all right, but still see no image)
073: * @return an Image that shall be displayed with the cursor.
074: * @param c The component that acts as the drag source
075: * @param t The transferable that is used in this DnD process
076: * @param action The currently requested action for the ongoing drag process
077: *
078: */
079: public Image getDragImage(Component c, Transferable t, int action) {
080: return null;
081: }
082:
083: /** Return a Transferable with the data you whish to export. You also get
084: * the Component the DnD actions has been started for. If the component
085: * supports selection you must first check which items are selected and
086: * afterwards put those items in the Transferable.
087: * @param c The component that acts as the drag source
088: * @return a Transferable containing the exported data
089: *
090: */
091: public Transferable getTransferable(Component c) {
092: if (c instanceof javax.swing.JTree
093: && ((javax.swing.JTree) c).getModel() instanceof OjbMetaDataTreeModel) {
094: try {
095: javax.swing.JTree tree = (javax.swing.JTree) c;
096: OjbMetaDataTreeModel model = (OjbMetaDataTreeModel) tree
097: .getModel();
098: AttributeDescriptorBase descriptors[] = new AttributeDescriptorBase[tree
099: .getSelectionCount()];
100: for (int i = 0; tree.getSelectionPaths() != null
101: && i < tree.getSelectionPaths().length; i++) {
102: Object o = ((OjbMetaTreeNode) tree
103: .getSelectionPaths()[i]
104: .getLastPathComponent())
105: .getAssociatedDescriptor();
106: if (o instanceof AttributeDescriptorBase) {
107: System.err.println(" adding Node" + o);
108: descriptors[i] = (AttributeDescriptorBase) o;
109: }
110: }
111: return new OjbMetadataTransferable(descriptors);
112: } catch (Throwable t) {
113: t.printStackTrace();
114: }
115: }
116: return null;
117: }
118:
119: }
|