7ea235d19d1a2e77b68cd694b2cc32233cb6fc3d
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / editor / definedterm / DefinedTermDropAdapter.java
1 // $Id$
2 /**
3 * Copyright (C) 2009 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.definedterm;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14
15 import org.eclipse.jface.viewers.StructuredSelection;
16 import org.eclipse.jface.viewers.ViewerDropAdapter;
17 import org.eclipse.swt.dnd.DND;
18 import org.eclipse.swt.dnd.DropTargetEvent;
19 import org.eclipse.swt.dnd.TransferData;
20
21 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
22 import eu.etaxonomy.cdm.model.common.OrderedTermBase;
23 import eu.etaxonomy.cdm.model.common.TermBase;
24 import eu.etaxonomy.taxeditor.editor.definedterm.operation.MoveDefinedTermOperation;
25 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
26 import eu.etaxonomy.taxeditor.store.StoreUtil;
27
28 /**
29 * @author l.morris
30 * @date 10 Jan 2012
31 *
32 */
33 public class DefinedTermDropAdapter extends ViewerDropAdapter {
34
35 private final DefinedTermEditor editor;
36 /**
37 * @param viewer
38 */
39 protected DefinedTermDropAdapter(DefinedTermEditor editor) {
40 super(editor.getViewer());
41 this.editor = editor;
42 }
43
44 /* (non-Javadoc)
45 * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
46 */
47 @Override
48 public boolean performDrop(Object data) {
49
50 TermBase target = (TermBase) getCurrentTarget();//can be vocab
51 int currentLocation = getCurrentLocation();
52 System.out.println("current location : " + currentLocation + " , target : " + target.getTitleCache());
53 //DefinedTermBase[] droppedElements = (DefinedTermBase[]) data;
54 Object[] droppedTerms = (Object[]) data;
55 Collection<DefinedTermBase> sourceTerms = new ArrayList<DefinedTermBase>(); //Arrays.asList(droppedElements)
56
57 for (Object droppedTerm : droppedTerms) {
58
59 DefinedTermBase term = (DefinedTermBase) droppedTerm;
60 sourceTerms.add(term);
61
62 }
63
64 AbstractPostOperation operation = new MoveDefinedTermOperation("Move Descriptions",
65 StoreUtil.getUndoContext(),
66 target,
67 sourceTerms,
68 editor,
69 currentLocation);
70 //TODO: implement execute
71 StoreUtil.executeOperation(operation);
72 // select the newly moved objects
73 editor.getViewer().setSelection(new StructuredSelection(sourceTerms.toArray(new TermBase[sourceTerms.size()])));
74
75 return true;
76 }
77
78 /* (non-Javadoc)
79 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
80 */
81 @Override
82 public boolean validateDrop(Object target, int operation,
83 TransferData transferType) {
84 boolean transferDataIsSupported = TermTransfer.getInstance().isSupportedType(transferType);
85 // maybe don't need this - they will be all TermBase anyway
86 return target instanceof TermBase && transferDataIsSupported;
87 }
88
89 /* (non-Javadoc)
90 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
91 */
92 @Override
93 public void dragOver(DropTargetEvent event) {
94 super.dragOver(event);
95 TermBase target = (TermBase) getCurrentTarget();
96 if(!(target instanceof OrderedTermBase)) {
97 // this is to only disable insert between items
98 event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
99 }
100
101
102 }
103
104 }