- fix cdmlib version number in .classpath (why does maven not generate this anymore?)
[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.util.LocalSelectionTransfer;
13 import org.eclipse.jface.viewers.IStructuredSelection;
14 import org.eclipse.jface.viewers.TreeNode;
15 import org.eclipse.jface.viewers.ViewerDropAdapter;
16 import org.eclipse.swt.dnd.TransferData;
17
18 import eu.etaxonomy.cdm.api.service.IOccurrenceService;
19 import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
20 import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
21 import eu.etaxonomy.cdm.model.molecular.Amplification;
22 import eu.etaxonomy.cdm.model.molecular.DnaSample;
23 import eu.etaxonomy.cdm.model.molecular.Sequence;
24 import eu.etaxonomy.cdm.model.molecular.SingleRead;
25 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
26 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
27 import eu.etaxonomy.taxeditor.model.AbstractUtility;
28 import eu.etaxonomy.taxeditor.store.CdmStore;
29
30 /**
31 * @author pplitzner
32 * @date 18.03.2014
33 *
34 */
35 public class DerivateDropListener extends ViewerDropAdapter {
36
37 private final DerivateView derivateView;
38
39 /**
40 * @param derivateView
41 */
42 protected DerivateDropListener(DerivateView derivateView) {
43 super(derivateView.viewer);
44 this.derivateView = derivateView;
45 }
46
47 /* (non-Javadoc)
48 * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
49 */
50 @Override
51 public boolean performDrop(Object data) {
52 if(derivateView.isDirty()){
53 AbstractUtility.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
54 return false;
55 }
56 Object target = getCurrentTarget();
57 if(target instanceof TreeNode && data instanceof IStructuredSelection && ((IStructuredSelection) data).size()==1 && ((IStructuredSelection) data).getFirstElement() instanceof TreeNode){
58 TreeNode targetNode = (TreeNode) target;
59 TreeNode draggednode = (TreeNode) ((IStructuredSelection) data).getFirstElement();
60 if(moveDropTarget(draggednode, targetNode)){
61 derivateView.viewer.setInput(derivateView.getEditorInput());
62 return true;
63 }
64 }
65 return false;
66 }
67
68 /* (non-Javadoc)
69 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
70 */
71 @Override
72 public boolean validateDrop(Object target, int operation, TransferData transferType) {
73 System.out.println("VAL");
74 return LocalSelectionTransfer.getTransfer().isSupportedType(transferType) && target instanceof TreeNode;
75 }
76
77 /**
78 * @param value
79 * @return
80 */
81 private boolean moveDropTarget(TreeNode draggedObject, TreeNode target) {
82 Object dragValue = draggedObject.getValue();
83 Object targetValue = target.getValue();
84 TreeNode dragParentNode = draggedObject.getParent();
85 Object dragParentSpecimen = dragParentNode.getValue();
86
87 // drag'n'drop for SpecimenOrObservationBase
88 if(dragValue instanceof DerivedUnit && targetValue instanceof SpecimenOrObservationBase<?>){
89 DerivedUnit draggedSpecimen = (DerivedUnit) dragValue;
90 SpecimenOrObservationBase<?> targetSpecimen = (SpecimenOrObservationBase<?>) targetValue;
91 //check if type is a sub derivate type
92 if(!dragParentNode.equals(target)//don't drag on direct parent node
93 && dragParentSpecimen instanceof SpecimenOrObservationBase<?>){
94 CdmStore.getService(IOccurrenceService.class).moveDerivate((SpecimenOrObservationBase<?>)dragParentSpecimen, targetSpecimen, draggedSpecimen);
95 return true;
96 }
97 }
98
99 // drag'n'drop for SingleRead
100 else if(dragValue instanceof SingleRead && (targetValue instanceof Amplification || targetValue instanceof Sequence)){
101 SingleRead singleRead = (SingleRead) dragValue;
102 //amplification -> amplification
103 if(dragParentSpecimen instanceof Amplification && targetValue instanceof Amplification){
104 if(((Amplification) dragParentSpecimen).getSingleReads().size()>1){
105 CdmStore.getService(IAmplificationService.class).moveSingleRead((Amplification)dragParentSpecimen, (Amplification)targetValue, singleRead);
106 }
107 }
108 //amplification -> sequence
109 else if(dragParentSpecimen instanceof Amplification && targetValue instanceof Sequence){
110 //TODO: what does the user expect?
111 }
112 //sequence -> sequence
113 else if(dragParentSpecimen instanceof Sequence && targetValue instanceof Sequence){
114 CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)dragParentSpecimen, (Sequence)targetValue, singleRead);
115 }
116 //sequence -> amplification
117 else if(dragParentSpecimen instanceof Sequence && targetValue instanceof Amplification){
118 //TODO: what does the user expect?
119 }
120 return true;
121 }
122
123 // drag'n'drop for Sequence
124 else if(dragValue instanceof Sequence && targetValue instanceof DnaSample ){
125 Sequence sequence = (Sequence)dragValue;
126 if(dragParentSpecimen instanceof DnaSample){
127 CdmStore.getService(IOccurrenceService.class).moveSequence((DnaSample)dragParentSpecimen, (DnaSample)targetValue, sequence);
128 return true;
129 }
130 }
131 return false;
132 }
133
134 }