Merge branch 'develop' into wset
[taxeditor.git] / eu.etaxonomy.taxeditor.navigation / src / main / java / eu / etaxonomy / taxeditor / navigation / navigator / operation / ChangeAcceptedTaxonToSynonymOperation.java
index 81a4af179e8f15b98267d2ad0f4981a0cb6aa3cb..adc2d45ac6f440d95b511b3b105d4e3819058b72 100644 (file)
@@ -1,4 +1,3 @@
-// $Id$
 /**
 * Copyright (C) 2007 EDIT
 * European Distributed Institute of Taxonomy
 
 package eu.etaxonomy.taxeditor.navigation.navigator.operation;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
-import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin;
+import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
@@ -45,6 +44,7 @@ public class ChangeAcceptedTaxonToSynonymOperation extends
        private final TaxonNode newAcceptedTaxonNode;
        private final ICdmEntitySessionEnabled cdmEntitySessionEnabled;
 
+
        //private TaxonNode oldTaxonNode;
 
        /**
@@ -80,19 +80,38 @@ public class ChangeAcceptedTaxonToSynonymOperation extends
 
                monitor.worked(20);
                bind();
-       Synonym synonym = null;
-       Taxon oldTaxon = (Taxon) HibernateProxyHelper.deproxy(((TaxonNode) taxonNode).getTaxon());
 
-               synonym = CdmStore.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode(taxonNode.getUuid(), newAcceptedTaxonNode.getUuid(), null, null, null);
-               Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
-               for(Taxon taxon : synonym.getAcceptedTaxa()) {
-                   affectedObjects.addAll(taxon.getTaxonNodes());
-               }
-               //FIXME:Remoting add new taxonNode.getParent to affectedObjects
-
-               cdmEntitySessionEnabled.getCdmEntitySession().update(synonym, affectedObjects);
+       Taxon oldTaxon = HibernateProxyHelper.deproxy(((TaxonNode) taxonNode).getTaxon(), Taxon.class);
+       Taxon newAcceptedTaxon = HibernateProxyHelper.deproxy(newAcceptedTaxonNode.getTaxon(), Taxon.class);
+
+               try {
+                   UpdateResult result = CdmStore.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode(taxonNode.getUuid(), newAcceptedTaxonNode.getUuid(), null, null, null);
+
+
+                   if (!result.getExceptions().isEmpty() && result.isOk()){
+                       String separator = ", "; //$NON-NLS-1$
+                           String exceptionString = ""; //$NON-NLS-1$
+                           int count = result.getExceptions().size();
+                           int n = 0;
+                           for (Exception exception : result.getExceptions()) {
+                               n++;
+                           exceptionString += exception.getLocalizedMessage();
+                           if (n<count){
+                               exceptionString += separator;
+                           }
+                       }
+
+                       MessagingUtils.informationDialog(Messages.ChangeAcceptedTaxonToSynonymOperation_CREATE_SUCCESS, exceptionString);
+                   } else if (result.isAbort() || result.isError()){
+                       MessagingUtils.errorDialog(Messages.ChangeAcceptedTaxonToSynonymOperation_CREATE_FAIL, null, result.toString(), TaxeditorNavigationPlugin.PLUGIN_ID, null, true);
+                   }
+               } catch (IllegalArgumentException e) {
+            MessagingUtils.errorDialog(Messages.ChangeAcceptedTaxonToSynonymOperation_OP_FAIL, this, e.getMessage(), TaxeditorNavigationPlugin.PLUGIN_ID, e, false);
+            return Status.CANCEL_STATUS;
+        }
 
                monitor.worked(40);
+
                return postExecute(oldTaxon);
        }