3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.editor
.view
.derivate
;
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
;
18 import eu
.etaxonomy
.cdm
.api
.service
.IOccurrenceService
;
19 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.ISequenceService
;
20 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
21 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
22 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
23 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
24 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
25 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
26 import eu
.etaxonomy
.taxeditor
.model
.AbstractUtility
;
27 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
34 public class DerivateDropListener
extends ViewerDropAdapter
{
36 private final DerivateView derivateView
;
41 protected DerivateDropListener(DerivateView derivateView
) {
42 super(derivateView
.getViewer());
43 this.derivateView
= derivateView
;
47 * @see org.eclipse.jface.viewers.ViewerDropAdapter#performDrop(java.lang.Object)
50 public boolean performDrop(Object data
) {
51 if(derivateView
.isDirty()){
52 AbstractUtility
.warningDialog("View has unsaved changes", this, "You need to save before performing this action");
55 Object target
= getCurrentTarget();
56 if(target
instanceof TreeNode
&& data
instanceof IStructuredSelection
){
57 TreeNode targetNode
= (TreeNode
) target
;
58 TreeNode draggednode
= EditorUtil
.getTreeNodeOfSelection((IStructuredSelection
) data
);
59 if(draggednode
!=null){
60 if(moveTreeNode(draggednode
, targetNode
)){
61 derivateView
.refreshTree();
62 LocalSelectionTransfer
.getTransfer().setSelection(null);
71 * @see org.eclipse.jface.viewers.ViewerDropAdapter#validateDrop(java.lang.Object, int, org.eclipse.swt.dnd.TransferData)
74 public boolean validateDrop(Object target
, int operation
, TransferData transferType
) {
75 return LocalSelectionTransfer
.getTransfer().isSupportedType(transferType
) && target
instanceof TreeNode
;
82 private boolean moveTreeNode(TreeNode from
, TreeNode to
) {
83 Object fromValue
= from
.getValue();
84 Object toValue
= to
.getValue();
85 TreeNode fromParentNode
= from
.getParent();
86 Object fromParentSpecimen
= fromParentNode
.getValue();
88 // drag'n'drop for SpecimenOrObservationBase
89 if(fromValue
instanceof DerivedUnit
&& toValue
instanceof SpecimenOrObservationBase
<?
>){
90 DerivedUnit draggedSpecimen
= (DerivedUnit
) fromValue
;
91 SpecimenOrObservationBase
<?
> targetSpecimen
= (SpecimenOrObservationBase
<?
>) toValue
;
92 //check if type is a sub derivate type
93 if(!fromParentNode
.equals(to
)//don't drag on direct parent node
94 && fromParentSpecimen
instanceof SpecimenOrObservationBase
<?
>){
95 CdmStore
.getService(IOccurrenceService
.class).moveDerivate((SpecimenOrObservationBase
<?
>)fromParentSpecimen
, targetSpecimen
, draggedSpecimen
);
100 // drag'n'drop for SingleRead
101 else if(fromValue
instanceof SingleRead
&& toValue
instanceof Sequence
){
102 SingleRead singleRead
= (SingleRead
) fromValue
;
103 if(fromParentSpecimen
instanceof Sequence
){
104 CdmStore
.getService(ISequenceService
.class).moveSingleRead((Sequence
)fromParentSpecimen
, (Sequence
)toValue
, singleRead
);
109 // drag'n'drop for Sequence
110 else if(fromValue
instanceof Sequence
&& toValue
instanceof DnaSample
){
111 Sequence sequence
= (Sequence
)fromValue
;
112 if(fromParentSpecimen
instanceof DnaSample
){
113 CdmStore
.getService(IOccurrenceService
.class).moveSequence((DnaSample
)fromParentSpecimen
, (DnaSample
)toValue
, sequence
);