01: /*******************************************************************************
02: * Copyright (c) 2000, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.pde.internal.ui.editor.schema;
11:
12: import org.eclipse.jface.viewers.ViewerDropAdapter;
13: import org.eclipse.pde.internal.core.ischema.ISchemaAttribute;
14: import org.eclipse.pde.internal.core.ischema.ISchemaCompositor;
15: import org.eclipse.pde.internal.core.ischema.ISchemaElement;
16: import org.eclipse.pde.internal.core.ischema.ISchemaObjectReference;
17: import org.eclipse.pde.internal.ui.editor.ModelDataTransfer;
18: import org.eclipse.swt.dnd.TransferData;
19:
20: public class ElementSectionDropAdapter extends ViewerDropAdapter {
21: private TransferData fCurrentTransfer;
22: private ElementSection fSsection;
23: private ElementSectionDragAdapter fDragAdapter;
24:
25: public ElementSectionDropAdapter(
26: ElementSectionDragAdapter dragAdapter,
27: ElementSection section) {
28: super (section.getTreeViewer());
29: fSsection = section;
30: fDragAdapter = dragAdapter;
31: }
32:
33: /**
34: * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
35: */
36: public boolean performDrop(Object data) {
37: fSsection.handleOp(getCurrentTarget(), fDragAdapter
38: .getDragData(), getCurrentOperation());
39: return true;
40: }
41:
42: /**
43: * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
44: */
45: public boolean validateDrop(Object target, int operation,
46: TransferData transferType) {
47: fCurrentTransfer = transferType;
48: if (!ModelDataTransfer.getInstance().isSupportedType(
49: fCurrentTransfer))
50: return false;
51: Object cargo = getSelectedObject();
52:
53: if (cargo instanceof ISchemaObjectReference) { // dropping an element reference
54: // onto a compositor or reference
55: if ((target instanceof ISchemaCompositor || target instanceof ISchemaObjectReference))
56: return true;
57: } else if (cargo instanceof ISchemaElement) { // dropping an element
58: // onto a non referenced element
59: if (target instanceof ISchemaCompositor
60: || target instanceof ISchemaObjectReference
61: || isNonRefElement(target) || target == null)
62: return true;
63: } else if (cargo instanceof ISchemaCompositor) { // dropping a compositor
64: // onto a non referenced element
65: if (isNonRefElement(target)
66: || target instanceof ISchemaCompositor
67: || target instanceof ISchemaObjectReference)
68: return true;
69: } else if (cargo instanceof ISchemaAttribute) { // dropping an attribute
70: // onto a non referenced element or attribute
71: if (isNonRefElement(target)
72: || target instanceof ISchemaAttribute)
73: return true;
74: }
75: return false;
76: }
77:
78: private boolean isNonRefElement(Object obj) {
79: return (obj instanceof ISchemaElement && !(obj instanceof ISchemaObjectReference));
80: }
81: }
|