Project

General

Profile

« Previous | Next » 

Revision 95ee1b51

Added by U-BGBM\k.luther over 8 years ago

moving more than one taxon node, merge of team and person, reusing name for new taxon

View differences:

eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapter.java
14 14
import java.util.HashSet;
15 15
import java.util.Iterator;
16 16
import java.util.Set;
17
import java.util.UUID;
17 18

  
18 19
import org.apache.log4j.Logger;
19 20
import org.eclipse.core.commands.operations.IUndoContext;
20
import org.eclipse.core.runtime.IStatus;
21
import org.eclipse.core.runtime.Status;
22
import org.eclipse.jface.dialogs.IconAndMessageDialog;
23 21
import org.eclipse.jface.dialogs.MessageDialog;
24 22
import org.eclipse.jface.util.LocalSelectionTransfer;
25 23
import org.eclipse.jface.viewers.ISelection;
26 24
import org.eclipse.jface.viewers.TreeSelection;
27
import org.eclipse.jface.viewers.Viewer;
28 25
import org.eclipse.jface.viewers.ViewerDropAdapter;
29 26
import org.eclipse.swt.dnd.DND;
30 27
import org.eclipse.swt.dnd.DropTargetEvent;
31 28
import org.eclipse.swt.dnd.TransferData;
32
import org.eclipse.swt.graphics.Image;
33
import org.eclipse.swt.widgets.Shell;
34
import org.eclipse.ui.handlers.HandlerUtil;
35
import org.eclipse.ui.navigator.CommonDropAdapter;
36
import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
37
import org.eclipse.ui.navigator.CommonViewer;
38 29

  
39 30
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
40 31
import eu.etaxonomy.cdm.model.common.CdmBase;
41
import eu.etaxonomy.cdm.model.common.OrderedTermBase;
42
import eu.etaxonomy.cdm.model.common.TermBase;
43 32
import eu.etaxonomy.cdm.model.taxon.Classification;
44 33
import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
45 34
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
46 35
import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
47
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermEditor;
48 36
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
49 37
import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation;
50 38
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
......
67 55
	protected TreeNodeDropAdapter(TaxonNavigatorViewer navigatorViewer) {
68 56
		super(navigatorViewer);
69 57
		this.navigatorViewer = navigatorViewer;
70
		
58

  
71 59
	}
72
	
60

  
73 61
	private final TaxonNavigatorViewer navigatorViewer;
74 62
	private static final Logger logger = Logger.getLogger(TreeNodeDropAdapter.class);
75 63

  
......
77 65
	public static final String ID = "eu.etaxonomy.taxeditor.navigation.navigator.dropassistant"; //$NON-NLS-1$
78 66

  
79 67
	private static final EnumSet<CRUD> UPDATE = EnumSet.of(CRUD.UPDATE);
80
	
81
	
82
	
68

  
69

  
70

  
83 71
	/* (non-Javadoc)
84 72
	 * @see org.eclipse.ui.navigator.CommonDropAdapterAssistant#handleDrop(org.eclipse.ui.navigator.CommonDropAdapter, org.eclipse.swt.dnd.DropTargetEvent, java.lang.Object)
85 73
	 */
......
87 75
	@Override
88 76
	public boolean performDrop(Object target) {
89 77

  
90
		
78

  
91 79
		if (target instanceof ITaxonTreeNode) {
92 80
			Set<TaxonNode> taxonNodes = getSelectedTaxa();
93 81
			ITaxonTreeNode targetTreeNode = (ITaxonTreeNode) target;
......
97 85
			}
98 86
			if(taxonNodes != null) {
99 87
				if (taxonNodes.size() == 1){
100
					return moveTaxon(taxonNodes.iterator().next(), targetTreeNode);
88
					return moveTaxon(taxonNodes, targetTreeNode);
101 89
				} else{
102 90
					if( MessageDialog.openConfirm(null, "Moving taxon", "The operation move accepted taxon to other parent is available only for a single taxon.")){
103 91
						return true;
......
105 93
				}
106 94
            }
107 95
		}
108
		
96

  
109 97
		return false;
110 98
	}
111 99

  
......
135 123
	@Override
136 124
	public boolean validateDrop(Object target, int operation,
137 125
			TransferData transferType) {
138
		
126

  
139 127
		if (target instanceof ITaxonTreeNode) {
140
			
128

  
141 129
		    // check users permissions with target taxonnode and taxon
142 130
		    if (target instanceof TaxonNode) {
143 131
		        TaxonNode targetNode = (TaxonNode)target;
......
187 175
	 * @param parentTaxon
188 176
	 * @return
189 177
	 */
190
	private boolean moveTaxon(TaxonNode taxonNode, ITaxonTreeNode targetITaxonTreeNode) {
178
	private boolean moveTaxon(Set<TaxonNode> taxonNodes, ITaxonTreeNode targetITaxonTreeNode) {
191 179

  
192 180
		TaxonNavigator taxonNavigator;
193 181
		taxonNavigator = (TaxonNavigator) NavigationUtil.showView(TaxonNavigator.ID);
......
203 191
			}
204 192

  
205 193
		}
194
		Iterator<TaxonNode> taxIterator = taxonNodes.iterator();
195
        Set<UUID> uuids = new HashSet<UUID>();
196
        TaxonNode node = null;
197
        while(taxIterator.hasNext()){
198
            node = taxIterator.next();
199
            uuids.add(node.getUuid());
200
        }
206 201
		if (!PreferencesUtil.getSortNodesNaturally()){
207 202
			IUndoContext workspaceUndoContext = NavigationUtil.getWorkbenchUndoContext();
208 203
			if (workspaceUndoContext == null) {
209 204
				logger.error("Workspace undo context is null. DND operation cancelled");
210 205
				return false;
211 206
			}
212
	
207

  
213 208
			AbstractPostOperation operation = new MoveTaxonOperation
214
					("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
209
					("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true);
215 210
			NavigationUtil.executeOperation(operation);
216
			
211

  
217 212
			logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
218 213
			return true;
219 214
		}else{
......
227 222
					logger.error("Workspace undo context is null. DND operation cancelled");
228 223
					return false;
229 224
				}
230
		
225

  
231 226
				AbstractPostOperation operation = new MoveTaxonOperation
232
						("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
227
						("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true);
233 228
				NavigationUtil.executeOperation(operation);
234
				
229

  
235 230
				logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
236 231
				return true;
237 232
			}else if (returnCode == 1){
......
240 235
					logger.error("Workspace undo context is null. DND operation cancelled");
241 236
					return false;
242 237
				}
243
		
238

  
244 239
				AbstractPostOperation operation = new MoveTaxonOperation
245
						("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, false);
240
						("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, false);
246 241
				NavigationUtil.executeOperation(operation);
247
				
242

  
248 243
				logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
249 244
				return true;
250 245
			} else{
251 246
				return false;
252 247
			}
253
			
254
			
248

  
249

  
255 250
		}
256 251
	}
257 252

  
......
278 273
	public void dragOver(DropTargetEvent event) {
279 274
		super.dragOver(event);
280 275
		event.feedback = DND.FEEDBACK_SELECT | DND.FEEDBACK_INSERT_AFTER;
281
		
276

  
282 277
	}
283
	
278

  
284 279
}

Also available in: Unified diff