Merge branch 'release/3.12.0'
[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 //DefinedTermBase[] droppedElements = (DefinedTermBase[]) data;
53 Object[] droppedTerms = (Object[]) data;
54 Collection<DefinedTermBase> sourceTerms = new ArrayList<DefinedTermBase>(); //Arrays.asList(droppedElements)
55
56 for (Object droppedTerm : droppedTerms) {
57
58 DefinedTermBase term = (DefinedTermBase) droppedTerm;
59 sourceTerms.add(term);
60
61 }
62
63 AbstractPostOperation operation = new MoveDefinedTermOperation("Move Descriptions",
64 StoreUtil.getUndoContext(),
65 target,
66 sourceTerms,
67 editor,
68 currentLocation);
69 //TODO: implement execute
70 StoreUtil.executeOperation(operation);
71 // select the newly moved objects
72 editor.getViewer().setSelection(new StructuredSelection(sourceTerms.toArray(new TermBase[sourceTerms.size()])));
73
74 return true;
75 }
76
77 /* (non-Javadoc)
78 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
79 */
80 @Override
81 public boolean validateDrop(Object target, int operation,
82 TransferData transferType) {
83 boolean transferDataIsSupported = TermTransfer.getInstance().isSupportedType(transferType);
84 // maybe don't need this - they will be all TermBase anyway
85 return target instanceof TermBase && transferDataIsSupported;
86 }
87
88 /* (non-Javadoc)
89 * @see org.eclipse.jface.viewers.ViewerDropAdapter#dragOver(org.eclipse.swt.dnd.DropTargetEvent)
90 */
91 @Override
92 public void dragOver(DropTargetEvent event) {
93 super.dragOver(event);
94 TermBase target = (TermBase) getCurrentTarget();
95 if(!(target instanceof OrderedTermBase)) {
96 // this is to only disable insert between items
97 event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_SCROLL;
98 }
99
100
101 }
102
103 }