Merge branch 'develop' into nameEditorE4
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / e4 / dnd / NameEditorDropTargetListenerE4.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.editor.name.e4.dnd;
5
6 import org.eclipse.core.runtime.Assert;
7 import org.eclipse.swt.dnd.DND;
8 import org.eclipse.swt.dnd.DropTargetAdapter;
9 import org.eclipse.swt.dnd.DropTargetEvent;
10
11 import eu.etaxonomy.cdm.model.common.ICdmBase;
12 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
13 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
14 import eu.etaxonomy.taxeditor.editor.EditorUtil;
15 import eu.etaxonomy.taxeditor.editor.l10n.Messages;
16 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
17 import eu.etaxonomy.taxeditor.editor.name.container.AbstractHomotypicalGroupContainer;
18 import eu.etaxonomy.taxeditor.editor.name.e4.IDropTargetableE4;
19 import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
20 import eu.etaxonomy.taxeditor.model.AbstractUtility;
21 import eu.etaxonomy.taxeditor.model.MessagingUtils;
22 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
23
24 /**
25 *
26 * @author pplitzner
27 * @date Aug 24, 2017
28 *
29 */
30 public class NameEditorDropTargetListenerE4 extends DropTargetAdapter {
31
32 private IDropTargetableE4 target;
33
34 public NameEditorDropTargetListenerE4(IDropTargetableE4 target){
35 this.target = target;
36 }
37
38 /** {@inheritDoc} */
39 @Override
40 public void dragEnter(DropTargetEvent dropTargetEvent) {
41 target.dragEntered();
42 }
43
44 /** {@inheritDoc} */
45 @Override
46 public void dragLeave(DropTargetEvent dropTargetEvent) {
47 target.dragLeft();
48 }
49
50 /** {@inheritDoc} */
51 @Override
52 public void drop(DropTargetEvent dropTargetEvent) {
53
54 TaxonBase taxonBase = getDroppedTaxonBase(dropTargetEvent);
55
56 Assert.isNotNull(taxonBase);
57
58 if(taxonBase.getHomotypicGroup().equals(getHomotypicalGroup())){
59 // do nothing when dragged to the same group
60 dropTargetEvent.detail = DND.DROP_NONE;
61 return;
62 }
63
64 // Execute operations at end of drag event
65 AbstractPostOperation operation = createOperation(taxonBase);
66
67 // Execute operation if it has been initiated
68 if (operation == null) {
69 MessagingUtils.warn(getClass(), String.format(Messages.NameEditorDropTargetListener_UNSUCCESSFULL_DROP, taxonBase.getClass(), target));
70 dropTargetEvent.detail = DND.DROP_NONE;
71 } else {
72 AbstractUtility.executeOperation(operation);
73 }
74 target.getEditor().getConversationHolder().commit();
75 if (!target.equals(EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor())){
76 ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).redraw();
77 ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit();
78
79 }
80 target.getEditor().redraw();
81
82 }
83
84 private AbstractPostOperation createOperation(TaxonBase taxonBase) {
85
86 //FIXME E4 migrate dnd
87
88 // if(taxonBase instanceof Synonym){
89 // Synonym synonym = (Synonym) taxonBase;
90 //
91 // if(target instanceof AbstractHomotypicalGroupContainer){
92 // HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
93 //
94 // return new ChangeHomotypicGroupOperation(Messages.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP, getEditor().getUndoContext(),
95 // getEditor().getTaxon(), synonym, homotypicalGroup, target);
96 // }
97 // else if(target instanceof MisappliedGroup){
98 // return new ChangeSynonymToMisapplicationOperation(Messages.NameEditorDropTargetListener_CHANGE_SYNONYM_TO_MISAPP, getEditor().getUndoContext(),
99 // getEditor().getTaxon(), synonym, target);
100 // }
101 // else if(target instanceof TaxonNameEditor){
102 // if (target.equals(getEditor())){
103 // return new ChangeHomotypicGroupOperation(Messages.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP, getEditor().getUndoContext(),
104 // getEditor().getTaxon(), synonym, null, target);
105 // } else{
106 // getEditor().getConversationHolder().commit();
107 // ((TaxonNameEditor) target).getConversationHolder().commit();
108 //
109 // return new MoveSynonymToAnotherAcceptedTaxonOperation(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), getEditor().getTaxon().getUuid(), synonym.getUuid(), ((TaxonNameEditor) target).getTaxon(), null );
110 //
111 // }
112 // }
113 //
114 // }else if(taxonBase instanceof Taxon){
115 // Taxon concept = (Taxon) taxonBase;
116 //
117 // if(target instanceof AbstractHomotypicalGroupContainer){
118 // HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainer) target).getGroup();
119 //
120 // return new ChangeConceptToSynonymOperation(Messages.NameEditorDropTargetListener_CHANGE_SYNONYM, getEditor().getUndoContext(),
121 // getEditor().getTaxon(), concept, homotypicalGroup, target);
122 // }
123 // else if(target instanceof MisappliedGroup ){
124 // return new ChangeConceptRelationshipTypeOperation(Messages.NameEditorDropTargetListener_CHANGE, getEditor().getUndoContext(),
125 // getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
126 // }
127 // }
128
129
130 return null;
131 }
132
133 /** {@inheritDoc} */
134 @Override
135 public void dropAccept(DropTargetEvent event) {
136 // pass
137 }
138
139
140 private HomotypicalGroup getHomotypicalGroup() {
141 if(target instanceof AbstractHomotypicalGroupContainer){
142 return ((AbstractHomotypicalGroupContainer) target).getGroup();
143 }
144 return null;
145 }
146
147 private TaxonBase getDroppedTaxonBase(DropTargetEvent dropTargetEvent){
148 if(dropTargetEvent.data instanceof ICdmBase[]){
149
150 ICdmBase[] cdmBaseObjects = (ICdmBase[]) dropTargetEvent.data;
151
152 if(cdmBaseObjects[0] instanceof TaxonBase){
153 return (TaxonBase) cdmBaseObjects[0];
154 }
155 }
156 return null;
157 }
158
159 private TaxonNameEditorE4 getEditor() {
160 return (TaxonNameEditorE4) EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor();
161 }
162 }