Revision 6c7a1f64
Added by Andreas Kohlbecker over 9 years ago
.gitattributes | ||
---|---|---|
463 | 463 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DescriptionsMenuPropertyTester.java -text |
464 | 464 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DynamicFeatureMenu.java -text |
465 | 465 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java -text |
466 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java -text |
|
466 | 467 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateDescriptionElementOperation.java -text |
467 | 468 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/CreateTaxonDescriptionOperation.java -text |
468 | 469 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java -text |
469 | 470 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java -text |
470 | 471 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/EditInXper2Handler.java -text |
471 | 472 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java -text |
473 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java -text |
|
472 | 474 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaContentProvider.java -text |
473 | 475 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaLabelProvider.java -text |
474 | 476 |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java -text |
eu.etaxonomy.taxeditor.editor/plugin.xml | ||
---|---|---|
495 | 495 |
visible="true"> |
496 | 496 |
</separator> |
497 | 497 |
<command |
498 |
commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements"
|
|
499 |
label="Move Elements"
|
|
498 |
commandId="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon"
|
|
499 |
label="Move Description to Taxon"
|
|
500 | 500 |
style="push"> |
501 | 501 |
<visibleWhen |
502 | 502 |
checkEnabled="true"> |
503 | 503 |
<reference |
504 |
definitionId="isDescriptionElement">
|
|
504 |
definitionId="isDescription"> |
|
505 | 505 |
</reference> |
506 | 506 |
</visibleWhen> |
507 | 507 |
</command> |
508 |
<command |
|
509 |
commandId="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements" |
|
510 |
label="Move Elements to Taxon" |
|
511 |
style="push"> |
|
512 |
<visibleWhen |
|
513 |
checkEnabled="true"> |
|
514 |
<or> |
|
515 |
<reference |
|
516 |
definitionId="isDescriptionElement"> |
|
517 |
</reference> |
|
518 |
<reference |
|
519 |
definitionId="isFeatureNodeContainer"> |
|
520 |
</reference> |
|
521 |
</or> |
|
522 |
</visibleWhen> |
|
523 |
</command> |
|
508 | 524 |
<separator |
509 | 525 |
name="eu.etaxonomy.taxeditor.taxonDescriptionEditor.separator.afterNew" |
510 | 526 |
visible="true"> |
... | ... | |
898 | 914 |
categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category" |
899 | 915 |
defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionElementsHandler" |
900 | 916 |
id="eu.etaxonomy.taxeditor.description.commands.moveDescriptionElements" |
901 |
name="Move Description Elements"> |
|
917 |
name="Move Description Elements to Taxon"> |
|
918 |
</command> |
|
919 |
<command |
|
920 |
categoryId="eu.etaxonomy.taxeditor.editor.view.descriptive.command.category" |
|
921 |
defaultHandler="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.MoveDescriptionToOtherTaxonHandler" |
|
922 |
id="eu.etaxonomy.taxeditor.editor.commands.description.moveDescriptionToTaxon" |
|
923 |
name="Move Description to Taxon"> |
|
902 | 924 |
</command> |
903 | 925 |
<category |
904 | 926 |
id="eu.etaxonomy.taxeditor.editor.view.uses.command.category" |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java | ||
---|---|---|
24 | 24 |
|
25 | 25 |
import eu.etaxonomy.cdm.api.service.IDescriptionService; |
26 | 26 |
import eu.etaxonomy.cdm.api.service.ITaxonService; |
27 |
import eu.etaxonomy.cdm.model.common.Annotation; |
|
28 |
import eu.etaxonomy.cdm.model.common.AnnotationType; |
|
29 |
import eu.etaxonomy.cdm.model.common.Language; |
|
27 | 30 |
import eu.etaxonomy.cdm.model.description.DescriptionElementBase; |
28 | 31 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
29 | 32 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
30 | 33 |
import eu.etaxonomy.taxeditor.editor.EditorUtil; |
31 | 34 |
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart; |
32 | 35 |
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionElementsOperation; |
36 |
import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; |
|
33 | 37 |
import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; |
34 | 38 |
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; |
35 | 39 |
import eu.etaxonomy.taxeditor.store.CdmStore; |
... | ... | |
64 | 68 |
UUID uuid = ((DescriptionElementBase) element).getUuid(); |
65 | 69 |
|
66 | 70 |
elements.add(CdmStore.getService(IDescriptionService.class).loadDescriptionElement(uuid, null)); |
71 |
} else if(element instanceof FeatureNodeContainer){ |
|
72 |
for(DescriptionElementBase de : ((FeatureNodeContainer)element).getDescriptionElements()){ |
|
73 |
elements.add( |
|
74 |
(DescriptionElementBase)CdmStore.getService(IDescriptionService.class).loadDescriptionElement(de.getUuid(), null) |
|
75 |
); |
|
76 |
} |
|
67 | 77 |
} |
68 | 78 |
} |
69 | 79 |
|
80 |
if(elements.size() == 0){ |
|
81 |
return null; |
|
82 |
} |
|
83 |
|
|
70 | 84 |
Taxon targetTaxon = TaxonBaseSelectionDialog.selectTaxon(HandlerUtil.getActiveShell(event), EditorUtil.getActiveMultiPageTaxonEditor().getConversationHolder(), null); |
85 |
|
|
86 |
if(targetTaxon == null){ |
|
87 |
// canceled |
|
88 |
return null; |
|
89 |
} |
|
71 | 90 |
|
72 | 91 |
TaxonDescription targetDescription = TaxonDescription.NewInstance(targetTaxon); |
73 |
targetDescription.setTitleCache(String.format("Copied from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()), true); |
|
92 |
String moveMessage = String.format("Elements moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()); |
|
93 |
targetDescription.setTitleCache(moveMessage, true); |
|
94 |
Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT()); |
|
95 |
annotation.setAnnotationType(AnnotationType.TECHNICAL()); |
|
96 |
targetDescription.addAnnotation(annotation); |
|
74 | 97 |
|
75 | 98 |
try { |
76 | 99 |
AbstractPostOperation operation = new MoveDescriptionElementsOperation( |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java | ||
---|---|---|
1 |
/** |
|
2 |
* |
|
3 |
*/ |
|
4 |
package eu.etaxonomy.taxeditor.editor.view.descriptive.handler; |
|
5 |
|
|
6 |
import java.util.ArrayList; |
|
7 |
import java.util.List; |
|
8 |
import java.util.UUID; |
|
9 |
|
|
10 |
import javax.lang.model.element.Element; |
|
11 |
|
|
12 |
import org.apache.log4j.Logger; |
|
13 |
import org.eclipse.core.commands.AbstractHandler; |
|
14 |
import org.eclipse.core.commands.ExecutionEvent; |
|
15 |
import org.eclipse.core.commands.ExecutionException; |
|
16 |
import org.eclipse.core.commands.IHandler; |
|
17 |
import org.eclipse.core.commands.common.NotDefinedException; |
|
18 |
import org.eclipse.jface.viewers.ISelection; |
|
19 |
import org.eclipse.jface.viewers.IStructuredSelection; |
|
20 |
import org.eclipse.swt.widgets.Display; |
|
21 |
import org.eclipse.ui.PartInitException; |
|
22 |
import org.eclipse.ui.handlers.HandlerUtil; |
|
23 |
|
|
24 |
import eu.etaxonomy.cdm.api.service.IDescriptionService; |
|
25 |
import eu.etaxonomy.cdm.model.common.CdmBase; |
|
26 |
import eu.etaxonomy.cdm.model.description.DescriptionElementBase; |
|
27 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
|
28 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
|
29 |
import eu.etaxonomy.taxeditor.editor.EditorUtil; |
|
30 |
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; |
|
31 |
import eu.etaxonomy.taxeditor.editor.Page; |
|
32 |
import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; |
|
33 |
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor; |
|
34 |
import eu.etaxonomy.taxeditor.editor.name.operation.ChangeAcceptedTaxonToSynonymOperation; |
|
35 |
import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation; |
|
36 |
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; |
|
37 |
import eu.etaxonomy.taxeditor.store.CdmStore; |
|
38 |
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; |
|
39 |
|
|
40 |
/** |
|
41 |
* <p>ChangeAcceptedTaxonToSynonymHandler class.</p> |
|
42 |
* |
|
43 |
* @author a.kohlbecker |
|
44 |
* @created Okt. 11, 2013 |
|
45 |
* @version 1.0 |
|
46 |
* |
|
47 |
*/ |
|
48 |
public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler |
|
49 |
implements IHandler, IPostOperationEnabled { |
|
50 |
private static final Logger logger = Logger |
|
51 |
.getLogger(MoveDescriptionToOtherTaxonHandler.class); |
|
52 |
private MoveDescriptionToOtherTaxonOperation operation; |
|
53 |
|
|
54 |
private UUID newAcceptedTaxonNodeUuid; |
|
55 |
private TaxonNameEditor editor; |
|
56 |
|
|
57 |
/* (non-Javadoc) |
|
58 |
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) |
|
59 |
*/ |
|
60 |
/** {@inheritDoc} */ |
|
61 |
public Object execute(ExecutionEvent event) throws ExecutionException { |
|
62 |
|
|
63 |
ISelection selection = HandlerUtil.getCurrentSelection(event); |
|
64 |
|
|
65 |
if(selection instanceof IStructuredSelection){ |
|
66 |
|
|
67 |
List<TaxonDescription> descriptions = new ArrayList<TaxonDescription>(); |
|
68 |
|
|
69 |
IStructuredSelection structuredSelection = (IStructuredSelection) selection; |
|
70 |
|
|
71 |
for(Object element : structuredSelection.toArray()){ |
|
72 |
if (element instanceof TaxonDescription){ |
|
73 |
UUID uuid = ((TaxonDescription)element).getUuid(); |
|
74 |
descriptions.add((TaxonDescription) CdmStore.getService(IDescriptionService.class).load(uuid, null)); |
|
75 |
} |
|
76 |
} |
|
77 |
if(descriptions.size() == 0){ |
|
78 |
return null; |
|
79 |
} |
|
80 |
|
|
81 |
// Choose the target taxon |
|
82 |
List<UUID> excludeTaxa = new ArrayList<UUID>(); |
|
83 |
editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME); |
|
84 |
excludeTaxa.add(descriptions.get(0).getTaxon().getUuid()); |
|
85 |
TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), |
|
86 |
editor.getConversationHolder(), |
|
87 |
"Choose the accepted taxon", |
|
88 |
excludeTaxa, |
|
89 |
null, |
|
90 |
null); |
|
91 |
|
|
92 |
if (newAcceptedTaxonNode == null) { |
|
93 |
return null; |
|
94 |
} |
|
95 |
|
|
96 |
newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid(); |
|
97 |
|
|
98 |
try { |
|
99 |
for(TaxonDescription description : descriptions){ |
|
100 |
operation = new MoveDescriptionToOtherTaxonOperation(event.getCommand().getName(), |
|
101 |
editor.getUndoContext(), description, newAcceptedTaxonNode, this, editor); |
|
102 |
EditorUtil.executeOperation(operation); |
|
103 |
} |
|
104 |
|
|
105 |
} catch (NotDefinedException e) { |
|
106 |
logger.warn("Command name not set"); |
|
107 |
} |
|
108 |
} |
|
109 |
|
|
110 |
return null; |
|
111 |
|
|
112 |
} |
|
113 |
|
|
114 |
/* (non-Javadoc) |
|
115 |
* @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) |
|
116 |
*/ |
|
117 |
/** {@inheritDoc} */ |
|
118 |
public boolean postOperation(CdmBase objectAffectedByOperation) { |
|
119 |
Display.getDefault().asyncExec(new Runnable(){ |
|
120 |
|
|
121 |
public void run() { |
|
122 |
EditorUtil.close(editor.getMultiPageTaxonEditor()); |
|
123 |
|
|
124 |
try { |
|
125 |
MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid); |
|
126 |
if(possibleOpenEditor != null){ |
|
127 |
EditorUtil.close(possibleOpenEditor); |
|
128 |
} |
|
129 |
EditorUtil.openTaxonNode(newAcceptedTaxonNodeUuid); |
|
130 |
} catch (PartInitException e) { |
|
131 |
EditorUtil.error(this.getClass(), e); |
|
132 |
throw new RuntimeException(e); |
|
133 |
} catch (Exception e) { |
|
134 |
EditorUtil.warningDialog("Could not create Taxon", this, e.getMessage()); |
|
135 |
} |
|
136 |
} |
|
137 |
|
|
138 |
}); |
|
139 |
|
|
140 |
|
|
141 |
return true; |
|
142 |
} |
|
143 |
|
|
144 |
/** |
|
145 |
* <p>onComplete</p> |
|
146 |
* |
|
147 |
* @return a boolean. |
|
148 |
*/ |
|
149 |
public boolean onComplete() { |
|
150 |
// TODO Auto-generated method stub |
|
151 |
return false; |
|
152 |
} |
|
153 |
} |
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java | ||
---|---|---|
1 |
// $Id$ |
|
2 |
/** |
|
3 |
* Copyright (C) 2007 EDIT |
|
4 |
* European Distributed Institute of Taxonomy |
|
5 |
* http://www.e-taxonomy.eu |
|
6 |
* |
|
7 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
|
8 |
* See LICENSE.TXT at the top of this package for the full license terms. |
|
9 |
*/ |
|
10 |
|
|
11 |
package eu.etaxonomy.taxeditor.editor.view.descriptive.operation; |
|
12 |
|
|
13 |
import org.apache.commons.lang.StringUtils; |
|
14 |
import org.eclipse.core.commands.ExecutionException; |
|
15 |
import org.eclipse.core.commands.operations.IUndoContext; |
|
16 |
import org.eclipse.core.runtime.IAdaptable; |
|
17 |
import org.eclipse.core.runtime.IProgressMonitor; |
|
18 |
import org.eclipse.core.runtime.IStatus; |
|
19 |
|
|
20 |
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; |
|
21 |
import eu.etaxonomy.cdm.api.service.IDescriptionService; |
|
22 |
import eu.etaxonomy.cdm.api.service.ITaxonNodeService; |
|
23 |
import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException; |
|
24 |
import eu.etaxonomy.cdm.model.common.Annotation; |
|
25 |
import eu.etaxonomy.cdm.model.common.AnnotationType; |
|
26 |
import eu.etaxonomy.cdm.model.common.Language; |
|
27 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
|
28 |
import eu.etaxonomy.cdm.model.taxon.Synonym; |
|
29 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
|
30 |
import eu.etaxonomy.taxeditor.editor.EditorUtil; |
|
31 |
import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; |
|
32 |
import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; |
|
33 |
import eu.etaxonomy.taxeditor.store.CdmStore; |
|
34 |
|
|
35 |
/** |
|
36 |
* <p>MoveDescriptionToOtherTaxonOperation</p> |
|
37 |
* |
|
38 |
* @author a.kohlbecker |
|
39 |
* @created Okt. 11, 2013 |
|
40 |
*/ |
|
41 |
public class MoveDescriptionToOtherTaxonOperation extends |
|
42 |
AbstractPersistentPostOperation { |
|
43 |
|
|
44 |
private TaxonNode newAcceptedTaxonNode; |
|
45 |
|
|
46 |
private TaxonDescription description; |
|
47 |
|
|
48 |
/** |
|
49 |
* <p>Constructor for ChangeAcceptedTaxonToSynonymOperation.</p> |
|
50 |
* |
|
51 |
* @param label a {@link java.lang.String} object. |
|
52 |
* @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. |
|
53 |
* @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. |
|
54 |
* @param description a {@link TaxonDescription} object. |
|
55 |
* @param targetTaxonNode a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object. |
|
56 |
* @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. |
|
57 |
*/ |
|
58 |
public MoveDescriptionToOtherTaxonOperation(String label, |
|
59 |
IUndoContext undoContext, TaxonDescription description, TaxonNode targetTaxonNode, |
|
60 |
IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { |
|
61 |
super(label, undoContext, postOperationEnabled, conversationEnabled); // FIXME is this the right constructor ??? |
|
62 |
this.description = description; |
|
63 |
this.newAcceptedTaxonNode = targetTaxonNode; |
|
64 |
} |
|
65 |
|
|
66 |
|
|
67 |
/* (non-Javadoc) |
|
68 |
* @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) |
|
69 |
*/ |
|
70 |
/** {@inheritDoc} */ |
|
71 |
@Override |
|
72 |
public IStatus execute(IProgressMonitor monitor, IAdaptable info) |
|
73 |
throws ExecutionException { |
|
74 |
|
|
75 |
monitor.worked(20); |
|
76 |
bind(); |
|
77 |
|
|
78 |
String moveMessage = String.format("Description moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()); |
|
79 |
if(description.isProtectedTitleCache()){ |
|
80 |
String separator = ""; |
|
81 |
if(!StringUtils.isBlank(description.getTitleCache())){ |
|
82 |
separator = " - "; |
|
83 |
} |
|
84 |
description.setTitleCache(description.getTitleCache() + separator + moveMessage); |
|
85 |
} |
|
86 |
Annotation annotation = Annotation.NewInstance(moveMessage, Language.DEFAULT()); |
|
87 |
annotation.setAnnotationType(AnnotationType.TECHNICAL()); |
|
88 |
description.addAnnotation(annotation); |
|
89 |
description.setTaxon(newAcceptedTaxonNode.getTaxon()); |
|
90 |
CdmStore.getService(IDescriptionService.class).saveOrUpdate(description); |
|
91 |
monitor.worked(40); |
|
92 |
|
|
93 |
return postExecute(description); |
|
94 |
} |
|
95 |
|
|
96 |
/* (non-Javadoc) |
|
97 |
* @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) |
|
98 |
*/ |
|
99 |
/** {@inheritDoc} */ |
|
100 |
@Override |
|
101 |
public IStatus redo(IProgressMonitor monitor, IAdaptable info) |
|
102 |
throws ExecutionException { |
|
103 |
// TODO Auto-generated method stub |
|
104 |
return null; |
|
105 |
} |
|
106 |
|
|
107 |
/* (non-Javadoc) |
|
108 |
* @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) |
|
109 |
*/ |
|
110 |
/** {@inheritDoc} */ |
|
111 |
@Override |
|
112 |
public IStatus undo(IProgressMonitor monitor, IAdaptable info) |
|
113 |
throws ExecutionException { |
|
114 |
// TODO Auto-generated method stub |
|
115 |
return null; |
|
116 |
} |
|
117 |
} |
Also available in: Unified diff
implementing #3791 (Implement operation to move a Description to another Taxon) and improving the operation to move elements