fix problem when reusing name for new taxon
authorKatja Luther <k.luther@bgbm.org>
Tue, 5 Dec 2017 12:39:24 +0000 (13:39 +0100)
committerKatja Luther <k.luther@bgbm.org>
Tue, 5 Dec 2017 12:41:16 +0000 (13:41 +0100)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java

index 65a4e6d86b6c49e6bdf0aec606716f1d32936d9c..b35f09c08220e6b5de24046bf312cacd61cf5f83 100644 (file)
@@ -82,6 +82,9 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
     @Autowired
     private IAgentService agentService;
 
+    @Autowired
+    private INameService nameService;
+
     @Autowired
     private ITaxonNodeFilterDao nodeFilterDao;
 
@@ -690,7 +693,10 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
     @Transactional
     public UpdateResult createNewTaxonNode(UUID parentNodeUuid, Taxon newTaxon, Reference ref, String microref){
         UpdateResult result = new UpdateResult();
-
+        if (newTaxon.getName().getId() != 0){
+            TaxonName name = nameService.load(newTaxon.getName().getUuid());
+            newTaxon.setName(name);
+        }
         UUID taxonUUID = taxonService.saveOrUpdate(newTaxon);
         newTaxon = (Taxon) taxonService.load(taxonUUID);
 
@@ -729,7 +735,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
         }
 //        child = dao.save(child);
 
-        dao.saveOrUpdate(child);
+//        dao.saveOrUpdate(child);
         result.addUpdatedObject(parent);
         if (child != null){
             result.setCdmEntity(child);
@@ -764,22 +770,30 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
         if (monitor == null){
             monitor = DefaultProgressMonitor.NewInstance();
         }
+        TaxonNode subTree = load(config.getSubtreeUuid());
+        TreeIndex subTreeIndex = null;
+        if (subTree != null){
+            subTreeIndex = TreeIndex.NewInstance(subTree.treeIndex());
+            Long count = dao.countChildrenOf(subTree, subTree.getClassification(), true);
+            int intCount = count.intValue();
+            monitor.beginTask("Update Secundum Reference", intCount);
+        }
+
 
-        monitor.beginTask("Update Secundum Reference", 100);
         if (config.getSubtreeUuid() == null){
             result.setError();
             result.addException(new NullPointerException("No subtree given"));
             monitor.done();
             return result;
         }
-        TaxonNode subTree = load(config.getSubtreeUuid());
+
         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()){