- finished DerivateHierarchyDTO citation
authorPatric Plitzner <p.plitzner@bgbm.org>
Wed, 13 Aug 2014 09:21:46 +0000 (09:21 +0000)
committerPatric Plitzner <p.plitzner@bgbm.org>
Wed, 13 Aug 2014 09:21:46 +0000 (09:21 +0000)
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java

index 300c3d6314a6c2b9564a21970ded6bbd47d0fc11..53bce7db76c8664dd6963e9b04913c3bcda679fa 100644 (file)
@@ -317,7 +317,6 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
 \r
     @Override\r
     public DerivateHierarchyDTO assembleDerivateHierarchyDTO(FieldUnit fieldUnit, UUID associatedTaxonUuid){\r
-        final String separator = ", ";\r
 \r
         if(!getSession().contains(fieldUnit)){\r
             fieldUnit = (FieldUnit) load(fieldUnit.getUuid());\r
@@ -347,7 +346,7 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
             //Collection\r
             final AgentBase collector = gatheringEvent.getCollector();\r
             final String fieldNumber = fieldUnit.getFieldNumber();\r
-            dto.setCollection((collector!=null?collector:"") + " " + (fieldNumber!=null?fieldNumber:""));\r
+            dto.setCollection(((collector!=null?collector:"") + " " + (fieldNumber!=null?fieldNumber:"")).trim());\r
             //Date\r
             final Partial gatheringDate = gatheringEvent.getGatheringDate();\r
             dto.setDate(gatheringDate!=null?gatheringDate.toString():"");\r
@@ -359,8 +358,11 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
 \r
         Collection<DerivedUnit> derivedUnits = new ArrayList<DerivedUnit>();\r
         getDerivedUnitsFor(fieldUnit, derivedUnits);\r
+\r
         //Herbaria map\r
         Map<eu.etaxonomy.cdm.model.occurrence.Collection, Integer> collectionToCountMap = new HashMap<eu.etaxonomy.cdm.model.occurrence.Collection, Integer>();\r
+        //List of accession numbers for citation\r
+        List<String> preservedSpecimenAccessionNumbers = new ArrayList<String>();\r
 \r
         //iterate over sub derivates\r
         for (DerivedUnit derivedUnit : derivedUnits) {\r
@@ -426,14 +428,16 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
             }\r
             //assemble preserved specimen data\r
             else if(derivedUnit.getRecordBasis()==SpecimenOrObservationType.PreservedSpecimen){\r
-\r
+                if(!currentAccessionNumber.isEmpty()){\r
+                    preservedSpecimenAccessionNumbers.add(currentAccessionNumber);\r
+                }\r
             }\r
         }\r
 \r
+        final String separator = ", ";\r
         //assemble citation\r
         String citation = "";\r
-        citation += dto.getCountry();\r
-        citation += separator;\r
+        citation += !dto.getCountry().isEmpty()?dto.getCountry()+separator:"";\r
         if(fieldUnit.getGatheringEvent()!=null){\r
             if(fieldUnit.getGatheringEvent().getLocality()!=null){\r
                 citation += fieldUnit.getGatheringEvent().getLocality().getText();\r
@@ -448,10 +452,18 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
                 citation += separator;\r
             }\r
         }\r
-        citation += dto.getCollection();\r
-        if(citation.endsWith(separator)){\r
-            citation = citation.substring(0, citation.length()-separator.length());\r
+        citation += !dto.getCollection().isEmpty()?dto.getCollection()+separator:"";\r
+        if(!preservedSpecimenAccessionNumbers.isEmpty()){\r
+            citation += "(";\r
+            for(String accessionNumber:preservedSpecimenAccessionNumbers){\r
+                if(!accessionNumber.isEmpty()){\r
+                    citation += accessionNumber+separator;\r
+                }\r
+            }\r
+            citation = removeTail(citation, separator);\r
+            citation += ")";\r
         }\r
+        citation = removeTail(citation, separator);\r
         dto.setCitation(citation);\r
 \r
         //assemble herbaria string\r
@@ -466,13 +478,25 @@ public class OccurrenceServiceImpl extends IdentifiableServiceBase<SpecimenOrObs
             }\r
             herbariaString += separator;\r
         }\r
-        if(herbariaString.endsWith(separator)){\r
-            herbariaString = herbariaString.substring(0, herbariaString.length()-separator.length());\r
-        }\r
+        herbariaString = removeTail(herbariaString, separator);\r
         dto.setHerbarium(herbariaString);\r
+\r
         return dto;\r
     }\r
 \r
+\r
+    /**\r
+     * @param string\r
+     * @param tail\r
+     * @return\r
+     */\r
+    private String removeTail(String string, final String tail) {\r
+        if(string.endsWith(tail)){\r
+            string = string.substring(0, string.length()-tail.length());\r
+        }\r
+        return string;\r
+    }\r
+\r
     private String getMediaUriString(MediaSpecimen mediaSpecimen){\r
         String mediaUri = null;\r
         Collection<MediaRepresentation> mediaRepresentations = mediaSpecimen.getMediaSpecimen().getRepresentations();\r