fix #3465 Progressmonitor API and better UpdateResult handling for setSecundumForSubtree
authorAndreas Müller <a.mueller@bgbm.org>
Mon, 9 Jan 2017 22:10:52 +0000 (23:10 +0100)
committerAndreas Müller <a.mueller@bgbm.org>
Mon, 9 Jan 2017 22:11:12 +0000 (23:11 +0100)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonNodeDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/taxon/ITaxonNodeDao.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/config/SetSecundumForSubtreeConfigurator.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImplTest.java

index b75ec240e32781e67b7f3e382344065fe1f0591f..4c25c5014a1feba6ab317e08985efeaac3b39b04 100644 (file)
@@ -13,6 +13,7 @@ import java.math.BigInteger;
 import java.util.ArrayList;\r
 import java.util.Collection;\r
 import java.util.HashMap;\r
+import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
 import java.util.Map;\r
@@ -437,8 +438,12 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
     }\r
 \r
 \r
+    /**\r
+     * {@inheritDoc}\r
+     */\r
+    //#3465\r
     @Override\r
-    public void setSecundumForSubtreeAcceptedTaxa(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail) {\r
+    public Set<Taxon> setSecundumForSubtreeAcceptedTaxa(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail) {\r
         //for some reason this does not work, maybe because the listeners are not activated,\r
         //but also the first taxon for some reason does not get updated in terms of secundum, but only by the udpate listener\r
 //        String where = "SELECT t.id FROM TaxonNode tn JOIN tn.taxon t " +\r
@@ -472,10 +477,13 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
             }\r
         }\r
 \r
+        Set<Taxon> result = new HashSet<>(taxonList);\r
+        return result;\r
+\r
     }\r
 \r
     @Override\r
-    public void setSecundumForSubtreeSynonyms(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail) {\r
+    public Set<Synonym> setSecundumForSubtreeSynonyms(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail) {\r
         String where = "SELECT syn FROM TaxonNode tn JOIN tn.taxon t JOIN t.synonyms syn" +\r
                 " WHERE tn.treeIndex like '%s%%' ";\r
         if (!overwriteExisting){\r
@@ -494,6 +502,8 @@ public class TaxonNodeDaoHibernateImpl extends AnnotatableDaoImpl<TaxonNode>
                 taxon.setSecMicroReference(null);\r
             }\r
         }\r
+        Set<Synonym> result = new HashSet<>(synonymList);\r
+        return result;\r
     }\r
 \r
 \r
index 40d398eab53463ba877e14ba7d60e8a3192d7359..d7e9c7c9759374e570c992668c0538add8bff294 100644 (file)
@@ -12,11 +12,14 @@ package eu.etaxonomy.cdm.persistence.dao.taxon;
 import java.util.Collection;\r
 import java.util.List;\r
 import java.util.Map;\r
+import java.util.Set;\r
 import java.util.UUID;\r
 \r
 import eu.etaxonomy.cdm.model.common.TreeIndex;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IAnnotatableDao;\r
@@ -124,12 +127,13 @@ public interface ITaxonNodeDao extends IAnnotatableDao<TaxonNode> {
 \r
     /**\r
      * @param ref\r
+     * @return\r
      */\r
-    public void setSecundumForSubtreeAcceptedTaxa(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail);\r
+    public Set<Taxon> setSecundumForSubtreeAcceptedTaxa(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail);\r
 \r
     /**\r
      * @param ref\r
      */\r
-    public void setSecundumForSubtreeSynonyms(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail);\r
+    public  Set<Synonym> setSecundumForSubtreeSynonyms(TreeIndex subTreeIndex, Reference newSec, boolean overwriteExisting, boolean includeSharedTaxa, boolean emptyDetail);\r
 \r
 }\r
index 97193066ae32b95315d74de1fcd85b9fb6dd1a81..deed79e34502ac064db5afb537f2ed9fcc6b2a04 100644 (file)
@@ -17,6 +17,7 @@ import java.util.UUID;
 import eu.etaxonomy.cdm.api.service.config.SetSecundumForSubtreeConfigurator;
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Classification;
@@ -249,6 +250,6 @@ public interface ITaxonNodeService extends IAnnotatableService<TaxonNode>{
      * @param configurator
      * @return UpdateResult
      */
-    UpdateResult setSecundumForSubtree(SetSecundumForSubtreeConfigurator configurator);
+    UpdateResult setSecundumForSubtree(SetSecundumForSubtreeConfigurator configurator, IProgressMonitor monitor);
 
 }
index 93534f33be01b9ed5b6c7be09c7841b356ed3076..0cb9a628be204f047ea1e29e3ff22dda0511124e 100644 (file)
@@ -32,6 +32,8 @@ import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.api.service.pager.PagerUtils;
 import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
+import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
 import eu.etaxonomy.cdm.hibernate.HHH_9751_Util;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
@@ -738,28 +740,35 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
     }
 
     @Override
-    public UpdateResult setSecundumForSubtree(SetSecundumForSubtreeConfigurator config) {
+    public UpdateResult setSecundumForSubtree(SetSecundumForSubtreeConfigurator config, IProgressMonitor monitor) {
         UpdateResult result = new UpdateResult();
+        if (monitor == null){
+            monitor = DefaultProgressMonitor.NewInstance();
+        }
         UUID subtreeUuid = config.getSubtreeUuid();
         if (subtreeUuid == null){
             result.setError();
             result.addException(new NullPointerException("No subtree given"));
+            monitor.done();
             return result;
         }
         TaxonNode subTree = find(subtreeUuid);
         if (subTree == null){
             result.setError();
             result.addException(new NullPointerException("Subtree does not exist"));
+            monitor.done();
             return result;
         }
         TreeIndex subTreeIndex = TreeIndex.NewInstance(subTree.treeIndex());
 
         Reference ref = config.getNewSecundum();
         if (config.isIncludeAcceptedTaxa()){
-            dao.setSecundumForSubtreeAcceptedTaxa(subTreeIndex, ref, config.isOverwriteExistingAccepted(), config.isIncludeSharedTaxa() ,config.isEmptySecundumDetail());
+            Set<Taxon> updatedTaxa = dao.setSecundumForSubtreeAcceptedTaxa(subTreeIndex, ref, config.isOverwriteExistingAccepted(), config.isIncludeSharedTaxa() ,config.isEmptySecundumDetail());
+            result.addUpdatedObjects(updatedTaxa);
         }
         if (config.isIncludeSynonyms()){
-            dao.setSecundumForSubtreeSynonyms(subTreeIndex, ref, config.isOverwriteExistingSynonyms(), config.isIncludeSharedTaxa() , config.isEmptySecundumDetail());
+            Set<Synonym> updatedSynonyms = dao.setSecundumForSubtreeSynonyms(subTreeIndex, ref, config.isOverwriteExistingSynonyms(), config.isIncludeSharedTaxa() , config.isEmptySecundumDetail());
+            result.addUpdatedObjects(updatedSynonyms);
         }
 
         return result;
index e23acaaa43181a0958c36641a3363bb7d717f6c1..1e29a7e11f34786c9fc00a3a0919c5cd9049203b 100644 (file)
@@ -28,6 +28,17 @@ public class SetSecundumForSubtreeConfigurator {
     private boolean emptySecundumDetail = true;
     private boolean includeSharedTaxa = true;
 
+
+
+    /**
+     * @param subtreeUuid
+     * @param newSecundum
+     */
+    public SetSecundumForSubtreeConfigurator(UUID subtreeUuid, Reference newSecundum) {
+        super();
+        this.subtreeUuid = subtreeUuid;
+        this.newSecundum = newSecundum;
+    }
     /**
      * @return the subtreeUuid
      */
index 17e38acbe398645a8adc4b31164b5f151d2698f6..8a92dd04350efeaf93191866873561c92fe9c56c 100644 (file)
@@ -723,10 +723,8 @@ public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
         Assert.assertNotNull(taxon5.getSecMicroReference());
 
         //set secundum
-        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator();
-        config.setSubtreeUuid(subTreeUuid);
-        config.setNewSecundum(newSec);
-        taxonNodeService.setSecundumForSubtree(config);
+        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator(subTreeUuid, newSec);
+        taxonNodeService.setSecundumForSubtree(config, null);
 
         commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
         Assert.assertEquals(newSec, taxonService.find(1).getSec());
@@ -758,12 +756,10 @@ public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
         Assert.assertNotNull(taxon5.getSecMicroReference());
 
         //set secundum
-        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator();
-        config.setSubtreeUuid(subTreeUuid);
-        config.setNewSecundum(newSec);
+        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator(subTreeUuid, newSec);
         config.setOverwriteExistingAccepted(false);
         config.setOverwriteExistingSynonyms(false);
-        taxonNodeService.setSecundumForSubtree(config);
+        taxonNodeService.setSecundumForSubtree(config, null);
 
         commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
         Assert.assertEquals(newSec, taxonService.find(1).getSec());
@@ -795,11 +791,9 @@ public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
         Assert.assertNotNull(taxon5.getSecMicroReference());
 
         //set secundum
-        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator();
-        config.setSubtreeUuid(subTreeUuid);
-        config.setNewSecundum(newSec);
+        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator(subTreeUuid, newSec);
         config.setIncludeSynonyms(false);
-        taxonNodeService.setSecundumForSubtree(config);
+        taxonNodeService.setSecundumForSubtree(config, null);
 
         commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
         Assert.assertEquals(newSec, taxonService.find(1).getSec());
@@ -829,11 +823,9 @@ public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
         Assert.assertNotNull(taxon5.getSecMicroReference());
 
         //set secundum
-        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator();
-        config.setSubtreeUuid(subTreeUuid);
-        config.setNewSecundum(newSec);
+        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator(subTreeUuid, newSec);
         config.setIncludeAcceptedTaxa(false);
-        taxonNodeService.setSecundumForSubtree(config);
+        taxonNodeService.setSecundumForSubtree(config, null);
 
         commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
         Assert.assertNull(taxonService.find(1).getSec());
@@ -865,11 +857,9 @@ public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
         Assert.assertNotNull(taxon5.getSecMicroReference());
 
         //set secundum
-        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator();
-        config.setSubtreeUuid(subTreeUuid);
-        config.setNewSecundum(newSec);
+        SetSecundumForSubtreeConfigurator config = new SetSecundumForSubtreeConfigurator(subTreeUuid, newSec);
         config.setIncludeSharedTaxa(false);
-        taxonNodeService.setSecundumForSubtree(config);
+        taxonNodeService.setSecundumForSubtree(config, null);
 
         commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
         Assert.assertNull("Shared taxon must not be set", taxonService.find(1).getSec());