Project

General

Profile

Download (5.49 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.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
}
    (1-1/1)