4 package eu
.etaxonomy
.taxeditor
.editor
.name
.dnd
;
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
;
11 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
12 import eu
.etaxonomy
.cdm
.model
.name
.HomotypicalGroup
;
13 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
14 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
15 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
16 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
17 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
18 import eu
.etaxonomy
.taxeditor
.editor
.IDropTargetable
;
19 import eu
.etaxonomy
.taxeditor
.editor
.l10n
.Messages
;
20 import eu
.etaxonomy
.taxeditor
.editor
.name
.TaxonNameEditor
;
21 import eu
.etaxonomy
.taxeditor
.editor
.name
.container
.AbstractHomotypicalGroupContainer
;
22 import eu
.etaxonomy
.taxeditor
.editor
.name
.container
.MisappliedGroup
;
23 import eu
.etaxonomy
.taxeditor
.editor
.name
.operation
.ChangeConceptRelationshipTypeOperation
;
24 import eu
.etaxonomy
.taxeditor
.editor
.name
.operation
.ChangeConceptToSynonymOperation
;
25 import eu
.etaxonomy
.taxeditor
.editor
.name
.operation
.ChangeHomotypicGroupOperation
;
26 import eu
.etaxonomy
.taxeditor
.editor
.name
.operation
.ChangeSynonymToMisapplicationOperation
;
27 import eu
.etaxonomy
.taxeditor
.editor
.name
.operation
.MoveSynonymToAnotherAcceptedTaxonOperation
;
28 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
29 import eu
.etaxonomy
.taxeditor
.operation
.AbstractPostOperation
;
32 * <p>NameEditorDropTargetListener class.</p>
37 public class NameEditorDropTargetListener
extends DropTargetAdapter
{
39 private IDropTargetable target
;
43 * <p>Constructor for NameEditorDropTargetListener.</p>
45 * @param target a {@link eu.etaxonomy.taxeditor.editor.IDropTargetable} object.
47 public NameEditorDropTargetListener(IDropTargetable target
){
53 public void dragEnter(DropTargetEvent dropTargetEvent
) {
56 // if(! EditorUtil.getActiveMultiPageTaxonEditor().equals(editor.getMultiPageTaxonEditor())){
57 // editor.getMultiPageTaxonEditor().setFocus();
63 public void dragLeave(DropTargetEvent dropTargetEvent
) {
69 public void drop(DropTargetEvent dropTargetEvent
) {
71 TaxonBase taxonBase
= getDroppedTaxonBase(dropTargetEvent
);
73 Assert
.isNotNull(taxonBase
);
75 if(taxonBase
.getHomotypicGroup().equals(getHomotypicalGroup())){
76 // do nothing when dragged to the same group
77 dropTargetEvent
.detail
= DND
.DROP_NONE
;
81 // Execute operations at end of drag event
82 AbstractPostOperation operation
= createOperation(taxonBase
);
84 // Execute operation if it has been initiated
85 if (operation
== null) {
86 MessagingUtils
.warn(getClass(), String
.format(Messages
.NameEditorDropTargetListener_UNSUCCESSFULL_DROP
, taxonBase
.getClass(), target
));
87 dropTargetEvent
.detail
= DND
.DROP_NONE
;
89 EditorUtil
.executeOperation(operation
);
91 target
.getEditor().getConversationHolder().commit();
92 if (!target
.equals(EditorUtil
.getActiveMultiPageTaxonEditor().getActiveEditor())){
93 ((TaxonNameEditor
)EditorUtil
.getActiveMultiPageTaxonEditor().getActiveEditor()).redraw();
94 ((TaxonNameEditor
)EditorUtil
.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit();
97 target
.getEditor().redraw();
101 private AbstractPostOperation
createOperation(TaxonBase taxonBase
) {
103 if(taxonBase
instanceof Synonym
){
104 Synonym synonym
= (Synonym
) taxonBase
;
106 if(target
instanceof AbstractHomotypicalGroupContainer
){
107 HomotypicalGroup homotypicalGroup
= ((AbstractHomotypicalGroupContainer
) target
).getGroup();
109 return new ChangeHomotypicGroupOperation(Messages
.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP
, getEditor().getUndoContext(),
110 getEditor().getTaxon(), synonym
, homotypicalGroup
, target
);
112 else if(target
instanceof MisappliedGroup
){
113 return new ChangeSynonymToMisapplicationOperation(Messages
.NameEditorDropTargetListener_CHANGE_SYNONYM_TO_MISAPP
, getEditor().getUndoContext(),
114 getEditor().getTaxon(), synonym
, target
);
116 else if(target
instanceof TaxonNameEditor
){
117 if (target
.equals(getEditor())){
118 return new ChangeHomotypicGroupOperation(Messages
.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP
, getEditor().getUndoContext(),
119 getEditor().getTaxon(), synonym
, null, target
);
121 getEditor().getConversationHolder().commit();
122 ((TaxonNameEditor
) target
).getConversationHolder().commit();
124 return new MoveSynonymToAnotherAcceptedTaxonOperation(Messages
.NameEditorDropTargetListener_CHANGE_ACC_TAXON
, getEditor().getUndoContext(), getEditor().getTaxon().getUuid(), synonym
.getUuid(), ((TaxonNameEditor
) target
).getTaxon(), null );
129 }else if(taxonBase
instanceof Taxon
){
130 Taxon concept
= (Taxon
) taxonBase
;
132 if(target
instanceof AbstractHomotypicalGroupContainer
){
133 HomotypicalGroup homotypicalGroup
= ((AbstractHomotypicalGroupContainer
) target
).getGroup();
135 return new ChangeConceptToSynonymOperation(Messages
.NameEditorDropTargetListener_CHANGE_SYNONYM
, getEditor().getUndoContext(),
136 getEditor().getTaxon(), concept
, homotypicalGroup
, target
);
138 else if(target
instanceof MisappliedGroup
){
139 return new ChangeConceptRelationshipTypeOperation(Messages
.NameEditorDropTargetListener_CHANGE
, getEditor().getUndoContext(),
140 getEditor().getTaxon(), concept
, TaxonRelationshipType
.MISAPPLIED_NAME_FOR(), target
);
150 public void dropAccept(DropTargetEvent event
) {
155 private HomotypicalGroup
getHomotypicalGroup() {
156 if(target
instanceof AbstractHomotypicalGroupContainer
){
157 return ((AbstractHomotypicalGroupContainer
) target
).getGroup();
162 private TaxonBase
getDroppedTaxonBase(DropTargetEvent dropTargetEvent
){
163 if(dropTargetEvent
.data
instanceof ICdmBase
[]){
165 ICdmBase
[] cdmBaseObjects
= (ICdmBase
[]) dropTargetEvent
.data
;
167 if(cdmBaseObjects
[0] instanceof TaxonBase
){
168 return (TaxonBase
) cdmBaseObjects
[0];
178 private TaxonNameEditor
getEditor() {
179 return (TaxonNameEditor
) EditorUtil
.getActiveMultiPageTaxonEditor().getActiveEditor();