add SortMode enum and change the param for sorting of loadChildNodesOfTaxonNode from...
authorKatja Luther <k.luther@bgbm.org>
Tue, 2 Jun 2015 11:44:51 +0000 (11:44 +0000)
committerKatja Luther <k.luther@bgbm.org>
Tue, 2 Jun 2015 11:44:51 +0000 (11:44 +0000)
.gitattributes
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonNodeService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NodeSortMode.java [new file with mode: 0644]
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonNodeServiceImpl.java

index c4512263697e73d9cc39126fed79d6fed4e082f7..22a11957fb9a18a88dd215fd360e5c89dff8348c 100644 (file)
@@ -2301,6 +2301,7 @@ cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/MicroFormatCategorica
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/MicroFormatQuantitativeDescriptionBuilder.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NaturalLanguageGenerator.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NodeSortMode.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyNodeServiceImpl.java -text
 cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/PolytomousKeyServiceImpl.java -text
index e50ecda42e294dabcca1892584c1e84b856df36d..6502638fd96e27c45bde511fd033a4dc58ab1bec 100644 (file)
@@ -31,12 +31,12 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 public interface ITaxonNodeService extends IAnnotatableService<TaxonNode>{
 
        /**
-        *returns the childnodes of the taxonNode, if recursive is true it returns all descendants
+        *returns the childnodes of the taxonNode, if recursive is true it returns all descendants, if sort is true the nodes are sorted
         *
         * @param taxonNode
         * @param propertyPaths
         * @param recursive
-        * @return
+        * @return List<TaxonNode>
         */
        public List<TaxonNode> loadChildNodesOfTaxonNode(TaxonNode taxonNode, List<String> propertyPaths, boolean recursive, boolean sort);
 
@@ -101,6 +101,9 @@ public interface ITaxonNodeService extends IAnnotatableService<TaxonNode>{
        UpdateResult moveTaxonNode(UUID taxonNodeUuid, UUID targetNodeUuid,
                        boolean moveToParent);
 
+       List<TaxonNode> loadChildNodesOfTaxonNode(TaxonNode taxonNode,
+                       List<String> propertyPaths, boolean recursive, NodeSortMode sortMode);
+
 
 
 
diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NodeSortMode.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NodeSortMode.java
new file mode 100644 (file)
index 0000000..fd9829c
--- /dev/null
@@ -0,0 +1,7 @@
+package eu.etaxonomy.cdm.api.service;\r
+\r
+public enum NodeSortMode {\r
+       doNaturalOrder,\r
+       doRankAndAlphabeticalOrder,\r
+       doAlphabeticalOrder\r
+}\r
index c132b3da2912333e2e946dd007e7ef77cd394cfb..9a7d02362519b74f1fdb41ebb347360ef3e31fb6 100644 (file)
@@ -39,6 +39,8 @@ import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.model.taxon.TaxonComparatorSearch;
+import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
@@ -72,7 +74,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
 
     @Override
     public List<TaxonNode> loadChildNodesOfTaxonNode(TaxonNode taxonNode,
-            List<String> propertyPaths, boolean recursive, boolean sorted) {
+            List<String> propertyPaths, boolean recursive, NodeSortMode sortMode) {
         taxonNode = dao.load(taxonNode.getUuid());
         List<TaxonNode> childNodes;
         if (recursive == true){
@@ -80,9 +82,13 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
         }else{
                childNodes = new ArrayList<TaxonNode>(taxonNode.getChildNodes());
         }
-        if (sorted){
-               Collections.sort(childNodes, taxonNodeComparator);
-        }
+        if (sortMode.equals(NodeSortMode.doNaturalOrder)){
+               TaxonNaturalComparator comparator = new TaxonNaturalComparator();
+               Collections.sort(childNodes, comparator);
+        } else if (sortMode.equals(NodeSortMode.doAlphabeticalOrder)){
+               Collections.sort(childNodes, this.taxonNodeComparator);
+        } 
+        
         defaultBeanInitializer.initializeAll(childNodes, propertyPaths);
         return childNodes;
     }
@@ -242,6 +248,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
                result.includeResult(deleteTaxonNode(oldTaxonNode, conf));
         }
         result.addUpdatedObject(newAcceptedTaxon);
+        result.addUpdatedObject(oldTaxon);
 
         //oldTaxonNode.delete();
         return result;
@@ -264,7 +271,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
                        if (treeNode instanceof TaxonNode){
                                TaxonNode taxonNode;
                            taxonNode = HibernateProxyHelper.deproxy(treeNode, TaxonNode.class);
-
+                           TaxonNode parent = taxonNode.getParent();
                                //check whether the node has children or the children are already deleted
                            if(taxonNode.hasChildNodes()){
                                Set<ITaxonTreeNode> children = new HashSet<ITaxonTreeNode> ();
@@ -289,7 +296,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
 
                                } else {
                                        //move the children to the parent
-                                       TaxonNode parent = taxonNode.getParent();
+                                       
                                        for (TaxonNode child: childNodesList){
                                                parent.addChildNode(child, child.getReference(), child.getMicroReference());
                                        }
@@ -312,6 +319,7 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
                                        if (config.getTaxonNodeConfig().isDeleteTaxon()){
                                            taxonService.saveOrUpdate(taxon);
                                            saveOrUpdate(taxonNode);
+                                           
                                                TaxonDeletionConfigurator configNew = new TaxonDeletionConfigurator();
                                                DeleteResult resultTaxon = taxonService.deleteTaxon(taxon, configNew, classification);
                                                if (!resultTaxon.isOk()){
@@ -328,10 +336,11 @@ public class TaxonNodeServiceImpl extends AnnotatableServiceBase<TaxonNode, ITax
                                Taxon taxon = taxonNode.getTaxon();
                                //node is rootNode
                                if (taxon != null){
-                                       taxonNode.getTaxon().removeTaxonNode(taxonNode);
+                                       taxon.removeTaxonNode(taxonNode);
                                        if (config.getTaxonNodeConfig().isDeleteTaxon()){
                                                TaxonDeletionConfigurator configNew = new TaxonDeletionConfigurator();
                                                saveOrUpdate(taxonNode);
+                                               
                                                taxonService.saveOrUpdate(taxon);
                                                DeleteResult resultTaxon = taxonService.deleteTaxon(taxon, configNew, classification);
                                 if (!resultTaxon.isOk()){