From: Patric Plitzner
Date: Mon, 26 Jan 2015 14:23:45 +0000 (+0000)
Subject: - added "Move Factual Data" option to navigator context menu
X-Git-Tag: 3.6.0~242
X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/5ecc7b46cac8be9412ed9686f0464bb2431616a3
- added "Move Factual Data" option to navigator context menu
---
diff --git a/.gitattributes b/.gitattributes
index ea07532d9..95a3ad7ce 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -981,6 +981,7 @@ eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigatio
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/CopyHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/EditHandler.java -text
+eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NewClassificationHandler.java -text
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NewTaxonNodeHandler.java -text
diff --git a/eu.etaxonomy.taxeditor.navigation/plugin.xml b/eu.etaxonomy.taxeditor.navigation/plugin.xml
index 8b061b761..91eb7bbe2 100644
--- a/eu.etaxonomy.taxeditor.navigation/plugin.xml
+++ b/eu.etaxonomy.taxeditor.navigation/plugin.xml
@@ -174,6 +174,11 @@
+
+
@@ -380,6 +385,11 @@
id="eu.etaxonomy.taxeditor.navigation.key.polytomous.refreshKeyNodes"
name="%command.name.9">
+
+
diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java
new file mode 100644
index 000000000..ce5b2bf1e
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java
@@ -0,0 +1,134 @@
+package eu.etaxonomy.taxeditor.navigation.navigator.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.cdm.api.service.IDescriptionService;
+import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.ITaxonService;
+import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.common.Annotation;
+import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.editor.EditorUtil;
+import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
+import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
+
+public class MoveFactualDataHandler extends AbstractHandler {
+
+ @SuppressWarnings("unused")
+ private static final Logger logger = Logger.getLogger(MoveFactualDataHandler.class);
+
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ ISelection currentSelection = HandlerUtil.getCurrentSelection(event);
+ IWorkbenchPart activePart = AbstractUtility.getActivePart();
+ TaxonNavigator navigator = null;
+ if(activePart instanceof TaxonNavigator){
+ navigator = (TaxonNavigator)activePart;
+ }
+ if(navigator!=null && currentSelection instanceof TreeSelection){
+ Object object = ((TreeSelection) currentSelection).getFirstElement();
+ if(object instanceof TaxonNode){
+ TaxonNode taxonNode = HibernateProxyHelper.deproxy(object, TaxonNode.class);
+ final TaxonNode sourceTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNode.getUuid());
+ if(NavigationUtil.isDirty(sourceTaxonNode)){
+ MessageDialog.openWarning(HandlerUtil.getActiveShell(event), "Unsaved Source Taxon", "There are unsaved " +
+ "changes in the source taxon. Please save first.");
+ return null;
+ }
+ //reload to avoid session conflicts
+ Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(sourceTaxonNode.getTaxon().getUuid()), Taxon.class);
+ if(taxon!=null){
+ // Choose the target taxon
+ List excludeTaxa = new ArrayList();
+ excludeTaxa.add(taxon.getUuid());
+ TaxonNode dialogTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
+ navigator.getConversationHolder(),
+ "Choose the accepted taxon",
+ excludeTaxa,
+ null,
+ null);
+ if (dialogTaxonNode == null) {
+ return null;
+ }
+ //reload to avoid session conflicts
+ final TaxonNode targetTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(dialogTaxonNode.getUuid());
+ if(NavigationUtil.isDirty(targetTaxonNode)){
+ MessageDialog.openWarning(HandlerUtil.getActiveShell(event), "Unsaved Target Taxon", "There are unsaved " +
+ "changes in the target taxon. Please save first.");
+ return null;
+ }
+ for(TaxonDescription description : taxon.getDescriptions()){
+ //reload to avoid session conflicts
+ description = HibernateProxyHelper.deproxy(CdmStore.getService(IDescriptionService.class).load(description.getUuid()), TaxonDescription.class);
+
+ String moveMessage = String.format("Description moved from %s", taxon);
+ if(description.isProtectedTitleCache()){
+ String separator = "";
+ if(!StringUtils.isBlank(description.getTitleCache())){
+ separator = " - ";
+ }
+ description.setTitleCache(description.getTitleCache() + separator + moveMessage, true);
+ }
+ Annotation annotation = Annotation.NewInstance(moveMessage, Language.getDefaultLanguage());
+ annotation.setAnnotationType(AnnotationType.TECHNICAL());
+ description.addAnnotation(annotation);
+ targetTaxonNode.getTaxon().addDescription(description);
+ CdmStore.getService(IDescriptionService.class).saveOrUpdate(description);
+ navigator.getConversationHolder().bind();
+ navigator.getConversationHolder().commit();
+
+ Display.getDefault().asyncExec(new Runnable(){
+
+ @Override
+ public void run() {
+ try {
+ //close and re-open to refresh factual data view
+ MultiPageTaxonEditor sourceEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(sourceTaxonNode.getUuid());
+ MultiPageTaxonEditor targetEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(targetTaxonNode.getUuid());
+ if(targetEditor != null){
+ AbstractUtility.close(sourceEditor);
+ AbstractUtility.close(targetEditor);
+ }
+ EditorUtil.openTaxonNode(sourceTaxonNode.getUuid());
+ EditorUtil.openTaxonNode(targetTaxonNode.getUuid());
+ } catch (PartInitException e) {
+ MessagingUtils.error(this.getClass(), e);
+ throw new RuntimeException(e);
+ } catch (Exception e) {
+ MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage());
+ }
+ }
+
+ });
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+}