- added basic drag'n'drop support to DerivateView
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / derivate / DerivateDropListener.java
1 // $Id$
2 /**
3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10 package eu.etaxonomy.taxeditor.editor.view.derivate;
11
12 import org.eclipse.jface.viewers.TreeNode;
13 import org.eclipse.jface.viewers.Viewer;
14 import org.eclipse.jface.viewers.ViewerDropAdapter;
15 import org.eclipse.swt.dnd.DropTargetEvent;
16 import org.eclipse.swt.dnd.TransferData;
17 import org.eclipse.swt.widgets.TreeItem;
18
19 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
20 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
21 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
22 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
23
24 /**
25 * @author pplitzner
26 * @date 18.03.2014
27 *
28 */
29 public class DerivateDropListener extends ViewerDropAdapter {
30
31 /**
32 * @param viewer
33 */
34 protected DerivateDropListener(Viewer viewer) {
35 super(viewer);
36 }
37
38 /* (non-Javadoc)
39 * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
40 */
41 @Override
42 public boolean performDrop(Object data) {
43
44 // TermBase target = (TermBase) getCurrentTarget();//can be vocab
45 // //DefinedTermBase[] droppedElements = (DefinedTermBase[]) data;
46 // Object[] droppedTerms = (Object[]) data;
47 // Collection<DefinedTermBase> sourceTerms = new ArrayList<DefinedTermBase>(); //Arrays.asList(droppedElements)
48 //
49 // for (Object droppedTerm : droppedTerms) {
50 //
51 // DefinedTermBase term = (DefinedTermBase) droppedTerm;
52 // sourceTerms.add(term);
53 //
54 // }
55 //
56 // AbstractPostOperation operation = new MoveDefinedTermOperation("Move Descriptions", StoreUtil.getUndoContext(), target, sourceTerms, editor);
57 // //TODO: implement execute
58 // AbstractUtility.executeOperation(operation);
59 Object target = getCurrentTarget();
60 if(target instanceof TreeNode){
61 Object targetDerivate = ((TreeNode) target).getValue();
62 if(data instanceof Object[]){
63 Object[] droppedElements = (Object[])data;
64 for (Object droppedElement:droppedElements) {
65 //performDrop();
66 if(droppedElement instanceof DerivedUnit && targetDerivate instanceof SpecimenOrObservationBase<?>){
67 SpecimenOrObservationBase<?> originSpecimen = (SpecimenOrObservationBase<?>)targetDerivate;
68 DerivedUnit derivedSpecimen = (DerivedUnit)droppedElement;
69 originSpecimen.addDerivationEvent(DerivationEvent.NewSimpleInstance(originSpecimen, derivedSpecimen, DerivationEventType.GATHERING_IN_SITU()));
70 System.out.println("Add Derivate: " + droppedElement.getClass().getSimpleName() + " to " + targetDerivate.getClass().getSimpleName());
71 }
72 System.out.println("Drop: " + droppedElement.getClass().getSimpleName() + " to " + targetDerivate.getClass().getSimpleName());
73 }
74 }
75 return true;
76 }
77 return false;
78 }
79
80 /* (non-Javadoc)
81 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
82 */
83 @Override
84 public boolean validateDrop(Object target, int operation, TransferData transferType) {
85 if(SpecimenOrObservationTransfer.getInstance().isSupportedType(transferType)
86 && target instanceof TreeNode){
87 Object value = ((TreeNode) target).getValue();
88 return checkDropTarget(value);
89 }
90 return false;
91 }
92
93 /* (non-Javadoc)
94 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
95 */
96 @Override
97 public void dragOver(DropTargetEvent event) {
98 Object draggedDerivate = getCurrentTarget();
99
100 Object targetItem = event.item;
101 // System.out.println(event);
102 if(targetItem instanceof TreeItem){
103 TreeItem treeItem = (TreeItem)targetItem;
104 // System.out.println(treeItem.getData());
105 // System.out.println("Drag over: " + draggedDerivate.getClass().getSimpleName() + " to " + targetItem.getClass().getSimpleName());
106 }
107 super.dragOver(event);
108 }
109
110
111
112 /**
113 * @param value
114 * @return
115 */
116 private boolean checkDropTarget(Object value) {
117 // TODO Auto-generated method stub
118 return true;
119 }
120 }