Revision 95ee1b51
Added by U-BGBM\k.luther over 8 years ago
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
moving more than one taxon node, merge of team and person, reusing name for new taxon