performed javacscript:fix and worked on documentation
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / NameEditorDropTargetListener.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.name;
5
6 import org.apache.log4j.Logger;
7 import org.eclipse.core.runtime.Assert;
8 import org.eclipse.swt.dnd.DND;
9 import org.eclipse.swt.dnd.DropTargetAdapter;
10 import org.eclipse.swt.dnd.DropTargetEvent;
11
12 import eu.etaxonomy.cdm.model.common.ICdmBase;
13 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
14 import eu.etaxonomy.cdm.model.taxon.Synonym;
15 import eu.etaxonomy.cdm.model.taxon.Taxon;
16 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
17 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
18 import eu.etaxonomy.taxeditor.editor.EditorUtil;
19 import eu.etaxonomy.taxeditor.editor.IDropTargetable;
20 import eu.etaxonomy.taxeditor.operations.AbstractPostOperation;
21 import eu.etaxonomy.taxeditor.operations.ChangeConceptRelationshipTypeOperation;
22 import eu.etaxonomy.taxeditor.operations.ChangeConceptToSynonymOperation;
23 import eu.etaxonomy.taxeditor.operations.ChangeHomotypicGroupOperation;
24 import eu.etaxonomy.taxeditor.operations.ChangeSynonymToMisapplicationOperation;
25
26 /**
27 * <p>NameEditorDropTargetListener class.</p>
28 *
29 * @author n.hoffmann
30 * @version $Id: $
31 */
32 public class NameEditorDropTargetListener extends DropTargetAdapter {
33
34 private static final Logger logger = Logger.getLogger(NameEditorDropTargetListener.class);
35
36 private TaxonNameEditor editor;
37
38 private IDropTargetable target;
39
40 /**
41 * <p>Constructor for NameEditorDropTargetListener.</p>
42 *
43 * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
44 */
45 public NameEditorDropTargetListener(IDropTargetable target){
46 this.target = target;
47 editor = target.getNameEditor();
48 }
49
50 /** {@inheritDoc} */
51 public void dragEnter(DropTargetEvent dropTargetEvent) {
52 target.dragEntered();
53
54 // if(! EditorUtil.getActiveMultiPageTaxonEditor().equals(editor.getMultiPageTaxonEditor())){
55 // editor.getMultiPageTaxonEditor().setFocus();
56 // }
57 }
58
59 /** {@inheritDoc} */
60 public void dragLeave(DropTargetEvent dropTargetEvent) {
61 target.dragLeft();
62 }
63
64 /** {@inheritDoc} */
65 public void drop(DropTargetEvent dropTargetEvent) {
66
67 TaxonBase taxonBase = getDroppedTaxonBase(dropTargetEvent);
68
69 Assert.isNotNull(taxonBase);
70
71 if(taxonBase.getHomotypicGroup().equals(getHomotypicalGroup())){
72 // do nothing when dragged to the same group
73 dropTargetEvent.detail = DND.DROP_NONE;
74 return;
75 }
76
77 // Execute operations at end of drag event
78 AbstractPostOperation operation = createOperation(taxonBase);
79
80 // Execute operation if it has been initiated
81 if (operation == null) {
82 logger.warn("User unsuccessfully tried to drop: " + taxonBase.getClass() +
83 ". Target: " + target);
84 dropTargetEvent.detail = DND.DROP_NONE;
85 } else {
86 EditorUtil.executeOperation(operation);
87 }
88 }
89
90 private AbstractPostOperation createOperation(TaxonBase taxonBase) {
91
92 if(taxonBase instanceof Synonym){
93 Synonym synonym = (Synonym) taxonBase;
94
95 if(target instanceof HomotypicalSynonymGroup){
96 HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
97
98 return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(),
99 editor.getTaxon(), synonym, homotypicalGroup, target);
100 }
101 else if(target instanceof MisappliedGroup){
102 return new ChangeSynonymToMisapplicationOperation("Change Synonym to Misapplication", editor.getUndoContext(),
103 editor.getTaxon(), synonym, target);
104 }
105 else if(target instanceof TaxonNameEditor){
106 return new ChangeHomotypicGroupOperation("Change Homotypical Group", editor.getUndoContext(),
107 editor.getTaxon(), synonym, null, target);
108 }
109
110 }else if(taxonBase instanceof Taxon){
111 Taxon concept = (Taxon) taxonBase;
112
113 if(target instanceof HomotypicalSynonymGroup){
114 HomotypicalGroup homotypicalGroup = ((HomotypicalSynonymGroup) target).getGroup();
115
116 return new ChangeConceptToSynonymOperation("Change to Synonym", editor.getUndoContext(),
117 editor.getTaxon(), concept, homotypicalGroup, target);
118 }
119 else if(target instanceof MisappliedGroup ){
120 return new ChangeConceptRelationshipTypeOperation("Change", editor.getUndoContext(),
121 editor.getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
122 }
123 }
124
125
126 return null;
127 }
128
129 /** {@inheritDoc} */
130 @Override
131 public void dropAccept(DropTargetEvent event) {
132 // pass
133 }
134
135
136 private HomotypicalGroup getHomotypicalGroup() {
137 if(target instanceof HomotypicalSynonymGroup){
138 return ((HomotypicalSynonymGroup) target).getGroup();
139 }
140 return null;
141 }
142
143 private TaxonBase getDroppedTaxonBase(DropTargetEvent dropTargetEvent){
144 if(dropTargetEvent.data instanceof ICdmBase[]){
145
146 ICdmBase[] cdmBaseObjects = (ICdmBase[]) dropTargetEvent.data;
147
148 if(cdmBaseObjects[0] instanceof TaxonBase){
149 return (TaxonBase) cdmBaseObjects[0];
150 }
151 }
152 return null;
153 }
154 }