Project

General

Profile

Download (6.08 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.taxeditor.editor.name.e4.dnd;
5

    
6
import org.eclipse.core.runtime.Assert;
7
import org.eclipse.e4.ui.di.UISynchronize;
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.l10n.Messages;
19
import eu.etaxonomy.taxeditor.editor.name.e4.IDropTargetableE4;
20
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
21
import eu.etaxonomy.taxeditor.editor.name.e4.container.AbstractHomotypicalGroupContainerE4;
22
import eu.etaxonomy.taxeditor.editor.name.e4.container.MisappliedGroupE4;
23
import eu.etaxonomy.taxeditor.editor.name.e4.operation.MoveSynonymToAnotherAcceptedTaxonOperationE4;
24
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptRelationshipTypeOperation;
25
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeConceptToSynonymOperation;
26
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation;
27
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeSynonymToMisapplicationOperation;
28
import eu.etaxonomy.taxeditor.event.EventUtility;
29
import eu.etaxonomy.taxeditor.model.AbstractUtility;
30
import eu.etaxonomy.taxeditor.model.MessagingUtils;
31
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
32

    
33
/**
34
 * @author pplitzner
35
 * @date Aug 24, 2017
36
 */
37
public class NameEditorDropTargetListenerE4 extends DropTargetAdapter {
38

    
39
	private IDropTargetableE4 target;
40

    
41
	public NameEditorDropTargetListenerE4(IDropTargetableE4 target){
42
		this.target = target;
43
	}
44

    
45
	@Override
46
    public void dragEnter(DropTargetEvent dropTargetEvent) {
47
		target.dragEntered();
48
	}
49

    
50
	@Override
51
    public void dragLeave(DropTargetEvent dropTargetEvent) {
52
		target.dragLeft();
53
	}
54

    
55
	@Override
56
    public void drop(DropTargetEvent dropTargetEvent) {
57

    
58
		TaxonBase<?> taxonBase = getDroppedTaxonBase(dropTargetEvent);
59

    
60
		Assert.isNotNull(taxonBase);
61

    
62
		if(taxonBase.getHomotypicGroup().equals(getHomotypicalGroup())){
63
			// do nothing when dragged to the same group
64
			dropTargetEvent.detail = DND.DROP_NONE;
65
			return;
66
		}
67

    
68
		if (target instanceof MisappliedGroupE4){
69
		   dropTargetEvent.detail = DND.DROP_NONE;
70
	       return;
71
		}
72

    
73
		// Execute operations at end of drag event
74
		AbstractPostOperation<?> operation = createOperation(taxonBase);
75

    
76
		// Execute operation if it has been initiated
77
		if (operation == null) {
78
			MessagingUtils.warn(getClass(), String.format(Messages.NameEditorDropTargetListener_UNSUCCESSFULL_DROP, taxonBase.getClass(), target));
79
			dropTargetEvent.detail = DND.DROP_NONE;
80
		} else {
81
			AbstractUtility.executeOperation(operation, target.getContext().get(UISynchronize.class));
82
		}
83
		target.getEditor().getConversationHolder().commit();
84
		if (!target.equals(EventUtility.getTaxonEditor())){
85
		    ((TaxonNameEditorE4)EventUtility.getTaxonEditor()).redraw();
86
			((TaxonNameEditorE4)EventUtility.getTaxonEditor()).getConversationHolder().commit();
87

    
88
		}
89
//		target.getEditor().redraw();
90

    
91
//		target.getEditor().getContainer(taxonBase).setFocus();
92

    
93
	}
94

    
95
	private AbstractPostOperation createOperation(TaxonBase taxonBase) {
96

    
97
		if(taxonBase instanceof Synonym){
98
			Synonym synonym = (Synonym) taxonBase;
99

    
100
			if(target instanceof AbstractHomotypicalGroupContainerE4){
101
				HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainerE4) target).getGroup();
102

    
103
				return new ChangeHomotypicGroupOperation(Messages.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP, getEditor().getUndoContext(),
104
						getEditor().getTaxon(), synonym, homotypicalGroup, target);
105
			}
106
			else if(target instanceof MisappliedGroupE4){
107
				return new ChangeSynonymToMisapplicationOperation(Messages.NameEditorDropTargetListener_CHANGE_SYNONYM_TO_MISAPP, getEditor().getUndoContext(),
108
						getEditor().getTaxon(), synonym, target);
109
			}
110
			else if(target instanceof TaxonNameEditorE4){
111
				if (target.equals(getEditor())){
112
					return new ChangeHomotypicGroupOperation(Messages.NameEditorDropTargetListener_CHANGE_HOMOTYPICAL_GROUP, getEditor().getUndoContext(),
113
						getEditor().getTaxon(), synonym, null, target);
114
				} else{
115
					getEditor().getConversationHolder().commit();
116
					((TaxonNameEditorE4) target).getConversationHolder().commit();
117

    
118
					return new MoveSynonymToAnotherAcceptedTaxonOperationE4(Messages.NameEditorDropTargetListener_CHANGE_ACC_TAXON, getEditor().getUndoContext(), synonym.getUuid(), ((TaxonNameEditorE4) target).getTaxon(), (TaxonNameEditorE4) target, (TaxonNameEditorE4) target);
119

    
120
				}
121
			}
122

    
123
		}else if(taxonBase instanceof Taxon){
124
			Taxon concept = (Taxon) taxonBase;
125

    
126
			if(target instanceof AbstractHomotypicalGroupContainerE4){
127
				HomotypicalGroup homotypicalGroup = ((AbstractHomotypicalGroupContainerE4) target).getGroup();
128

    
129
				return new ChangeConceptToSynonymOperation(Messages.NameEditorDropTargetListener_CHANGE_SYNONYM, getEditor().getUndoContext(),
130
						getEditor().getTaxon(), concept, homotypicalGroup, target);
131
			}
132
			else if(target instanceof MisappliedGroupE4){
133
				return new ChangeConceptRelationshipTypeOperation(Messages.NameEditorDropTargetListener_CHANGE, getEditor().getUndoContext(),
134
						getEditor().getTaxon(), concept, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), target);
135
			}
136
		}
137

    
138

    
139
		return null;
140
	}
141

    
142
	@Override
143
	public void dropAccept(DropTargetEvent event) {
144
		// pass
145
	}
146

    
147
	private HomotypicalGroup getHomotypicalGroup() {
148
		if(target instanceof AbstractHomotypicalGroupContainerE4){
149
			return ((AbstractHomotypicalGroupContainerE4) target).getGroup();
150
		}
151
		return null;
152
	}
153

    
154
	private TaxonBase getDroppedTaxonBase(DropTargetEvent dropTargetEvent){
155
		if(dropTargetEvent.data instanceof ICdmBase[]){
156

    
157
			ICdmBase[] cdmBaseObjects = (ICdmBase[]) dropTargetEvent.data;
158

    
159
			if(cdmBaseObjects[0] instanceof TaxonBase){
160
				return (TaxonBase) cdmBaseObjects[0];
161
			}
162
		}
163
		return null;
164
	}
165

    
166
	private TaxonNameEditorE4 getEditor() {
167
		return (TaxonNameEditorE4) EventUtility.getTaxonEditor();
168
	}
169
}
(4-4/4)