ref #8322: adapt TaxonNodeDtoComparator to compare the names by taggedTitle
authorKatja Luther <k.luther@bgbm.org>
Mon, 3 Jun 2019 11:01:18 +0000 (13:01 +0200)
committerKatja Luther <k.luther@bgbm.org>
Mon, 3 Jun 2019 11:03:47 +0000 (13:03 +0200)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdmLight/CdmLightClassificationExport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdmLight/CdmLightExportResultProcessor.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/cdmLight/CdmLightExportTable.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeByNameComparator.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonNodeByRankAndNameComparator.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dto/TaxonNodeDtoByRankAndNameComparator.java

index f5101725c549954cb354e02d253ce1589b7d64ea..35c79be213cd1f93d36b84432ee6e2321a32ac4f 100755 (executable)
@@ -884,6 +884,9 @@ public class CdmLightClassificationExport
            csvLine[table.getIndex(CdmLightExportTable.SYN_SEC_REFERENCE_FK)] = getId(state, synonym.getSec());
            csvLine[table.getIndex(CdmLightExportTable.SYN_SEC_REFERENCE)] = getTitleCache(synonym.getSec());
            csvLine[table.getIndex(CdmLightExportTable.PUBLISHED)] = synonym.isPublish()?"1":"0";
+           csvLine[table.getIndex(CdmLightExportTable.IS_PRO_PARTE)] = "0";
+           csvLine[table.getIndex(CdmLightExportTable.IS_PARTIAL)] = "0";
+           csvLine[table.getIndex(CdmLightExportTable.IS_MISAPPLIED)] = "0";
            state.getProcessor().put(table, synonym, csvLine);
         } catch (Exception e) {
             state.getResult().addException(e, "An unexpected error occurred when handling synonym " +
index 3899075959ebbb84d817858aeed8e199a9190754..2733405010bc0a979410692f01cf2624a2855b18 100755 (executable)
@@ -40,6 +40,15 @@ public class CdmLightExportResultProcessor {
     public CdmLightExportResultProcessor(CdmLightExportState state) {
         super();
         this.state = state;
+        Map<String,String[]> resultMap;
+        for (CdmLightExportTable table: CdmLightExportTable.values()){
+            resultMap = new HashMap<>();
+            if (state.getConfig().isHasHeaderLines()){
+                resultMap.put(HEADER, table.getColumnNames());
+            }
+            result.put(table, resultMap);
+        }
+
     }
 
 
index dd04485369920953426803aa3626fbe0861d90b6..461e5d753afabacba66a9dc435959dcdcf2d45ec 100644 (file)
@@ -19,7 +19,7 @@ public enum CdmLightExportTable {
     SCIENTIFIC_NAME("ScientificName", nameColumns()),
     NAME_RELATIONSHIP("NameRelationship",nameRelationColumns()),
     HOMOTYPIC_GROUP("HomotypicGroup",homotypicGroupColumns()),
-    NOMENCLATURAL_AUTHOR("TeamOrPerson", nomenclaturalAuthorColumns()),
+    NOMENCLATURAL_AUTHOR("PersonOrTeam", nomenclaturalAuthorColumns()),
     NOMENCLATURAL_AUTHOR_TEAM_RELATION("PersonTeamRelation", nomenclaturalAuthorTeamRelColumns()),
     TYPE_DESIGNATION("TypeDesignation", typeDesignationColumns()),
     SPECIMEN("Specimen", specimenColumns()),
index 13f4bbd898d5b3e091b70ea3e1663dac3d89a39a..af7f72b9711f583eed2746cf1c0f8c49941d5581 100644 (file)
@@ -38,43 +38,29 @@ public class TaxonNodeByNameComparator extends AbstractStringComparator<TaxonNod
     public int compare(TaxonNode node1, TaxonNode node2) {\r
         if (node1 == null && node2 == null) {\r
             return 0;\r
-        }\r
-        else if (node1 == null) {\r
+        } else if (node1 == null) {\r
             return 1;\r
-        }\r
-        else if (node2 == null) {\r
-            return -1;\r
-        }\r
-        if (node1.equals(node2)){\r
-               return 0;\r
-        }\r
-        boolean node1Excluded = node1.isExcluded();\r
-        boolean node2Excluded = node2.isExcluded();\r
-        boolean node1Unplaced = node1.isUnplaced();\r
-        boolean node2Unplaced = node2.isUnplaced();\r
-\r
-      //They should both be put to the end (first unplaced then excluded)\r
-        if (node2Excluded && !node1Excluded){\r
-            return -1;\r
-        }\r
-        if (node2Unplaced && !(node1Unplaced || node1Excluded)){\r
+        } else if (node2 == null) {\r
             return -1;\r
         }\r
 \r
-        if (node1Excluded && !node2Excluded){\r
-            return 1;\r
+        if (node1.equals(node2)){\r
+            return 0;\r
         }\r
-        if (node1Unplaced && !(node2Unplaced || node2Excluded)){\r
-            return 1;\r
+        int nodeResult = compareNodes(node1, node2);\r
+        if (nodeResult != 0){\r
+            return nodeResult;\r
         }\r
+        return compareNames(node1, node2);\r
+    }\r
 \r
-        if (node1Unplaced && node2Excluded){\r
-            return -1;\r
-        }\r
-        if (node2Unplaced && node1Excluded){\r
-            return 1;\r
-        }\r
 \r
+    /**\r
+     * @param node1\r
+     * @param node2\r
+     * @return\r
+     */\r
+    protected int compareNames(TaxonNode node1, TaxonNode node2) {\r
         String titleCache1 = createSortableTitleCache(node1);\r
         String titleCache2 = createSortableTitleCache(node2);\r
 \r
@@ -115,6 +101,43 @@ public class TaxonNodeByNameComparator extends AbstractStringComparator<TaxonNod
     }\r
 \r
 \r
+    /**\r
+     * @param node1\r
+     * @param node2\r
+     */\r
+    protected int compareNodes(TaxonNode node1, TaxonNode node2) {\r
+\r
+\r
+        boolean node1Excluded = node1.isExcluded();\r
+        boolean node2Excluded = node2.isExcluded();\r
+        boolean node1Unplaced = node1.isUnplaced();\r
+        boolean node2Unplaced = node2.isUnplaced();\r
+\r
+      //They should both be put to the end (first unplaced then excluded)\r
+        if (node2Excluded && !node1Excluded){\r
+            return -1;\r
+        }\r
+        if (node2Unplaced && !(node1Unplaced || node1Excluded)){\r
+            return -1;\r
+        }\r
+\r
+        if (node1Excluded && !node2Excluded){\r
+            return 1;\r
+        }\r
+        if (node1Unplaced && !(node2Unplaced || node2Excluded)){\r
+            return 1;\r
+        }\r
+\r
+        if (node1Unplaced && node2Excluded){\r
+            return -1;\r
+        }\r
+        if (node2Unplaced && node1Excluded){\r
+            return 1;\r
+        }\r
+        return 0;\r
+    }\r
+\r
+\r
     private String createSortableTitleCache(TaxonNode taxonNode) {\r
 \r
         String titleCache = null;\r
index a7a5fc283a7c355fc99f0dec80c61987e1a381f3..f68b76b32faddc60a84905b50e369ded05eefa85 100644 (file)
@@ -9,7 +9,6 @@
 package eu.etaxonomy.cdm.model.taxon;
 
 import java.io.Serializable;
-import java.util.Comparator;
 import java.util.UUID;
 
 import eu.etaxonomy.cdm.model.name.Rank;
@@ -20,43 +19,15 @@ import eu.etaxonomy.cdm.model.name.TaxonName;
  * @since 18.03.2010
  *
  */
-public class TaxonNodeByRankAndNameComparator implements Serializable, Comparator<TaxonNode> {
+public class TaxonNodeByRankAndNameComparator extends TaxonNodeByNameComparator implements Serializable {
        private static final long serialVersionUID = 2596641007876609704L;
 
        @Override
     public int compare(TaxonNode node1, TaxonNode node2) {
-
-           boolean node1Excluded = node1.isExcluded();
-           boolean node2Excluded = node2.isExcluded();
-           boolean node1Unplaced = node1.isUnplaced();
-           boolean node2Unplaced = node2.isUnplaced();
-
-
-               if (node1.getUuid().equals(node2.getUuid())){
-                       return 0;
-               }
-               //They should both be put to the end (first unplaced then excluded)
-               if (node2Excluded && !node1Excluded){
-                   return -1;
-               }
-               if (node2Unplaced && !(node1Unplaced || node1Excluded)){
-                   return -1;
-               }
-
-               if (node1Excluded && !node2Excluded){
-            return 1;
+           if (node1.getUuid().equals(node2.getUuid())){
+            return 0;
         }
-        if (node1Unplaced && !(node2Unplaced || node2Excluded)){
-            return 1;
-        }
-
-        if (node1Unplaced && node2Excluded){
-            return -1;
-        }
-        if (node2Unplaced && node1Excluded){
-            return 1;
-        }
-
+           compareNodes(node1, node2);
 
                TaxonBase<?> taxon1 = node1.getTaxon();
                TaxonBase<?> taxon2 = node2.getTaxon();
@@ -77,12 +48,8 @@ public class TaxonNodeByRankAndNameComparator implements Serializable, Comparato
                }else if (rankTax1 == null && rankTax2 == null || rankTax1.equals(rankTax2)) {
                        if (name1 != null && name2 != null){
                                //same rank, order by name
-                               int result = name1.compareToName(name2);
-                               if (result == 0){
-                                       return getTaxonUuid(taxon1, node1).compareTo(getTaxonUuid(taxon2, node2));
-                               }else{
-                                       return result;
-                               }
+                               return compareNames(node1, node2);
+
                        }else {
                                //this is maybe not 100% correct, we need to compare name cases, but it is a very rare case
                                return getTaxonTitle(taxon1, node1).compareTo(getTaxonTitle(taxon2, node2));
index e6bac3bd2713b8ed5899721721355267d3255119..d4a7809d70549357f77a47105c0009eeed089d5a 100644 (file)
@@ -15,6 +15,8 @@ import java.util.UUID;
 import eu.etaxonomy.cdm.model.common.OrderIndexComparator;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.strategy.cache.TagEnum;
+import eu.etaxonomy.cdm.strategy.cache.TaggedText;
 
 /**
  * @author k.luther
@@ -68,9 +70,22 @@ public class TaxonNodeDtoByRankAndNameComparator implements Serializable, Compar
                int rankOrder = OrderIndexComparator.instance().compare(rankTax1, rankTax2);
 
                if (rankOrder == 0) {
-                       if (node1.getTitleCache() != null && node2.getTitleCache() != null){
+                       if (node1.getTaggedTitle() != null && node2.getTaggedTitle() != null){
                                //same rank, order by name
-                               int result = node1.getNameTitleCache().compareTo(node2.getNameTitleCache());
+                           String sortableName1 = "";
+                           for (TaggedText tagged: node1.getTaggedTitle()){
+                               if (tagged.getType().equals(TagEnum.name)){
+                                   sortableName1 += " " + tagged.getText();
+                               }
+                           }
+
+                           String sortableName2 = "";
+                for (TaggedText tagged: node2.getTaggedTitle()){
+                    if (tagged.getType().equals(TagEnum.name)){
+                        sortableName2 += " " + tagged.getText();
+                    }
+                }
+                               int result = sortableName1.compareTo(sortableName2);
                                if (result == 0){
                                        return node1.getTaxonUuid().compareTo(node2.getTaxonUuid());
                                }else{