- enhanced DerivateHierarchyDTO data
authorPatric Plitzner <p.plitzner@bgbm.org>
Tue, 5 Aug 2014 14:14:15 +0000 (14:14 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Tue, 5 Aug 2014 14:14:15 +0000 (14:14 +0000)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/dto/DerivateHierarchyDTO.java

index 4c6a037b51cf6c9f3d472643a294673d82cb6138..202715a32345646e256f7c5d3ef3facafb5346bf 100644 (file)
@@ -64,6 +64,8 @@ import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;\r
 import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
 import eu.etaxonomy.cdm.model.molecular.Sequence;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;\r
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
@@ -326,12 +328,21 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
     }\r
 \r
     private DerivateHierarchyDTO assembleDerivateHierarchyDTO(FieldUnit fieldUnit, Taxon associatedTaxon){\r
+        final String separator = ", ";\r
 \r
         DerivateHierarchyDTO dto = new DerivateHierarchyDTO();\r
+        Map<UUID, SpecimenTypeDesignation> typeSpecimenUUIDtoTypeDesignation = new HashMap<UUID, SpecimenTypeDesignation>();\r
 \r
         //types\r
-        TaxonNameBase name = associatedTaxon.getName();\r
-        dto.setHasType(!name.getTypeDesignations().isEmpty());\r
+        TaxonNameBase<?,?> name = associatedTaxon.getName();\r
+        Set<?> typeDesignations = name.getSpecimenTypeDesignations();\r
+        for (Object object : typeDesignations) {\r
+            if(object instanceof SpecimenTypeDesignation){\r
+                SpecimenTypeDesignation specimenTypeDesignation = (SpecimenTypeDesignation)object;\r
+                DerivedUnit typeSpecimen = specimenTypeDesignation.getTypeSpecimen();\r
+                typeSpecimenUUIDtoTypeDesignation.put(typeSpecimen.getUuid(), specimenTypeDesignation);\r
+            }\r
+        }\r
 \r
         if(fieldUnit.getGatheringEvent()!=null){\r
             GatheringEvent gatheringEvent = fieldUnit.getGatheringEvent();\r
@@ -351,6 +362,8 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
         getDerivedUnitsFor(fieldUnit, derivedUnits);\r
         //Herbaria map\r
         Map<eu.etaxonomy.cdm.model.occurrence.Collection, Integer> collectionToCountMap = new HashMap<eu.etaxonomy.cdm.model.occurrence.Collection, Integer>();\r
+        //Type map\r
+        Map<String, List<String>> typeStatusToAccessionNumber = new HashMap<String, List<String>>();\r
 \r
         //iterate over sub derivates\r
         for (DerivedUnit derivedUnit : derivedUnits) {\r
@@ -371,6 +384,14 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
                 }\r
                 collectionToCountMap.put(collection, count);\r
             }\r
+            //check if derived unit is a type\r
+            if(typeSpecimenUUIDtoTypeDesignation.keySet().contains(derivedUnit.getUuid())){\r
+                dto.setHasType(true);\r
+                SpecimenTypeDesignation specimenTypeDesignation = typeSpecimenUUIDtoTypeDesignation.get(derivedUnit.getUuid());\r
+                SpecimenTypeDesignationStatus specimenTypeDesignationStatus = specimenTypeDesignation.getTypeStatus();\r
+                String typeStatus = specimenTypeDesignationStatus.getLabel(Language.DEFAULT());\r
+                dto.addTypes(typeStatus, currentAccessionNumber);\r
+            }\r
             //assemble molecular data\r
             if(derivedUnit instanceof DnaSample){//.getRecordBasis()==SpecimenOrObservationType.DnaSample){\r
                 dto.setHasDna(true);\r
@@ -410,25 +431,31 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
             }\r
         }\r
 \r
-        //citation\r
+        //assemble citation\r
         String citation = "";\r
         citation += dto.getCountry();\r
+        citation += separator;\r
         if(fieldUnit.getGatheringEvent()!=null){\r
             if(fieldUnit.getGatheringEvent().getLocality()!=null){\r
                 citation += fieldUnit.getGatheringEvent().getLocality().getText();\r
+                citation += separator;\r
             }\r
             if(fieldUnit.getGatheringEvent().getExactLocation()!=null\r
                     && fieldUnit.getGatheringEvent().getExactLocation().getLatitude()!=null\r
                     && fieldUnit.getGatheringEvent().getExactLocation().getLongitude()!=null){\r
                 citation += fieldUnit.getGatheringEvent().getExactLocation().getLatitude().toString();\r
-                citation += ", ";\r
+                citation += separator;\r
                 citation += fieldUnit.getGatheringEvent().getExactLocation().getLongitude().toString();\r
+                citation += separator;\r
             }\r
         }\r
+        if(citation.endsWith(separator)){\r
+            citation = citation.substring(0, citation.length()-separator.length());\r
+        }\r
+        dto.setCitation(citation);\r
 \r
         //assemble herbaria string\r
         String herbariaString = "";\r
-        final String herbariaSeparator = ", ";\r
         for(Entry<eu.etaxonomy.cdm.model.occurrence.Collection, Integer> e:collectionToCountMap.entrySet()){\r
             eu.etaxonomy.cdm.model.occurrence.Collection collection = e.getKey();\r
             if(collection.getCode()!=null){\r
@@ -437,13 +464,12 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
             if(e.getValue()>1){\r
                 herbariaString += "("+e.getValue()+")";\r
             }\r
-            herbariaString += herbariaSeparator;\r
+            herbariaString += separator;\r
         }\r
-        if(herbariaString.endsWith(herbariaSeparator)){\r
-            herbariaString = herbariaString.substring(0, herbariaString.length()-herbariaSeparator.length());\r
+        if(herbariaString.endsWith(separator)){\r
+            herbariaString = herbariaString.substring(0, herbariaString.length()-separator.length());\r
         }\r
         dto.setHerbarium(herbariaString);\r
-        dto.setCitation(citation);\r
         return dto;\r
     }\r
 \r
index 3f80245bbfdf9710323c5a9618d0e1bb0c27e1b4..e94879b69fcac66c327cea5d3f27d01ed6e12763 100644 (file)
@@ -23,7 +23,7 @@ public class DerivateHierarchyDTO {
        private String taxonName;
        private String protologue;
        private String citation;
-       private List<String> types;
+       private Map<String, List<String>> types;
        private Map<String, String> specimenScans;
        private Map<String, String> molecularData;
        private Map<String, String> detailImages;
@@ -159,24 +159,28 @@ public class DerivateHierarchyDTO {
     public void setCitation(String citation) {
         this.citation = citation;
     }
+
     /**
-     * @return the types
+     * @param types the types to set
      */
-    public List<String> getTypes() {
-        return types;
+    public void setTypes(Map<String, List<String>> types) {
+        this.types = types;
     }
     /**
-     * @param types the types to set
+     * @return the types
      */
-    public void setTypes(List<String> types) {
-        this.types = types;
+    public Map<String, List<String>> getTypes() {
+        return types;
     }
-
-    public void addTypes(String uri){
+    public void addTypes(String typeStatus, String accessionNumber){
         if(types==null){
-            types = new ArrayList<String>();
+            types = new HashMap<String, List<String>>();
+        }
+        List<String> list = types.get(typeStatus);
+        if(list==null){
+            list = new ArrayList<String>();
         }
-        types.add(uri);
+        list.add(accessionNumber);
     }
     /**
      * @return the specimenScans