minor
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / specimen / excel / in / SpecimenRow.java
index 985bbeb308b750fc41efec4df79f12e635bcbbcd..881aca90f08a777b77be723d9c576a84bf46f1a1 100644 (file)
@@ -12,10 +12,11 @@ package eu.etaxonomy.cdm.io.specimen.excel.in;
 import java.util.ArrayList;\r
 import java.util.List;\r
 import java.util.TreeMap;\r
-import java.util.UUID;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.apache.log4j.Logger;\r
 \r
+import eu.etaxonomy.cdm.io.excel.common.ExcelRowBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
@@ -27,65 +28,87 @@ import eu.etaxonomy.cdm.model.reference.Reference;
  * @created 08.04.2011\r
  * @version 1.0\r
  */\r
-public class SpecimenRow {\r
+public class SpecimenRow extends ExcelRowBase{\r
        @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(SpecimenRow.class);\r
 \r
-       private UUID uuid = null; \r
        private String basisOfRecord;\r
+\r
        private String country;\r
        private String isoCountry;\r
        private String locality;\r
        private String latitude;\r
        private String longitude;\r
+       private String referenceSystem;\r
+       private String errorRadius;\r
+       private String altitude;\r
+       private String altitudeMax;\r
        private String fieldNotes;\r
-       private String fieldNumber;\r
+       private String collectingDate;\r
+       private String collectingDateEnd;\r
+       private String collectorsNumber;\r
+       private String primaryCollector;\r
+\r
+       private String sex;\r
+\r
        private String accessionNumber;\r
        private String barcode;\r
-       private String author;\r
-       private String absoluteElevation;\r
-       private String family;\r
-       private String genus;\r
-       private String specificEpithet;\r
-       private String sex;\r
-       private String ecology;\r
-       private String plantDescription;\r
+       \r
+       //      private String author;\r
+\r
+//     private String family;\r
+//     private String genus;\r
+//     private String specificEpithet;\r
        private String collectionCode;\r
        private String collection;\r
-       private String collectingDate;\r
-       private String collectingDateEnd;\r
-       private String collectorsNumber;\r
-       private String referenceSystem;\r
-       private String errorRadius;\r
        \r
        \r
        private TreeMap<Integer, IdentifiableSource> sources = new TreeMap<Integer, IdentifiableSource>();\r
        private TreeMap<Integer, String> collectors = new TreeMap<Integer, String>();\r
+       private TreeMap<Integer, String> unitNotes = new TreeMap<Integer, String>();\r
        private TreeMap<Integer, SpecimenTypeDesignation> types = new TreeMap<Integer, SpecimenTypeDesignation>();\r
+       private TreeMap<Integer, DeterminationLight> determinations = new TreeMap<Integer, DeterminationLight>();\r
+       private List<PostfixTerm> levels  = new ArrayList<PostfixTerm>(); \r
        \r
+\r
        \r
+       public SpecimenRow() {\r
+       }\r
        \r
 \r
        \r
-       public SpecimenRow() {\r
+       //      may be public if necessary\r
+       protected class DeterminationLight{\r
+               String taxonUuid;\r
+               String family;\r
+               String genus;\r
+               String rank;\r
+               String fullName;\r
+               String speciesEpi;\r
+               String infraSpeciesEpi;\r
+               String author;\r
+               String modifier;\r
+               String determinedBy;\r
+               String determinedWhen;\r
+               String notes;\r
+               \r
+               public boolean hasTaxonInformation() {\r
+                       boolean result = StringUtils.isNotBlank(taxonUuid) \r
+                               || StringUtils.isNotBlank(family)       \r
+                               || StringUtils.isNotBlank(genus)\r
+                               || StringUtils.isNotBlank(rank)\r
+                               || StringUtils.isNotBlank(fullName)\r
+                               || StringUtils.isNotBlank(speciesEpi)\r
+                               || StringUtils.isNotBlank(author)\r
+                               || StringUtils.isNotBlank(infraSpeciesEpi);\r
+                       return result;\r
+               }\r
 \r
-//             commonNames = new HashMap<String, List<String>>();\r
        }\r
-\r
+       \r
        \r
 // **************************** GETTER / SETTER *********************************/     \r
        \r
-\r
-       public void setUuid(UUID uuid) {\r
-               this.uuid = uuid;\r
-       }\r
-\r
-\r
-       public UUID getUuid() {\r
-               return uuid;\r
-       }\r
-\r
-\r
        public void setBasisOfRecord(String basisOfRecord) {\r
                this.basisOfRecord = basisOfRecord;\r
        }\r
@@ -146,129 +169,39 @@ public class SpecimenRow {
        }\r
 \r
 \r
-       public void setFieldNumber(String fieldNumber) {\r
-               this.fieldNumber = fieldNumber;\r
-       }\r
-\r
-\r
-       public String getFieldNumber() {\r
-               return fieldNumber;\r
-       }\r
-\r
-\r
        public void setBarcode(String barcode) {\r
                this.barcode = barcode;\r
        }\r
-       \r
-       /**\r
-        * @return the author\r
-        */\r
-       public String getAuthor() {\r
-               return author;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param author the author to set\r
-        */\r
-       public void setAuthor(String author) {\r
-               this.author = author;\r
-       }\r
+//     \r
+//     /**\r
+//      * @return the author\r
+//      */\r
+//     public String getAuthor() {\r
+//             return author;\r
+//     }\r
+//\r
+//\r
+//     /**\r
+//      * @param author the author to set\r
+//      */\r
+//     public void setAuthor(String author) {\r
+//             this.author = author;\r
+//     }\r
 \r
 \r
        /**\r
         * @return the absoluteElevation\r
         */\r
-       public String getAbsoluteElevation() {\r
-               return absoluteElevation;\r
+       public String getAltitude() {\r
+               return altitude;\r
        }\r
 \r
 \r
        /**\r
         * @param absoluteElevation the absoluteElevation to set\r
         */\r
-       public void setAbsoluteElevation(String absoluteElevation) {\r
-               this.absoluteElevation = absoluteElevation;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the family\r
-        */\r
-       public String getFamily() {\r
-               return family;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param family the family to set\r
-        */\r
-       public void setFamily(String family) {\r
-               this.family = family;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the genus\r
-        */\r
-       public String getGenus() {\r
-               return genus;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param genus the genus to set\r
-        */\r
-       public void setGenus(String genus) {\r
-               this.genus = genus;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the specificEpithet\r
-        */\r
-       public String getSpecificEpithet() {\r
-               return specificEpithet;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param specificEpithet the specificEpithet to set\r
-        */\r
-       public void setSpecificEpithet(String specificEpithet) {\r
-               this.specificEpithet = specificEpithet;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the ecology\r
-        */\r
-       public String getEcology() {\r
-               return ecology;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param ecology the ecology to set\r
-        */\r
-       public void setEcology(String ecology) {\r
-               this.ecology = ecology;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the plantDescription\r
-        */\r
-       public String getPlantDescription() {\r
-               return plantDescription;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param plantDescription the plantDescription to set\r
-        */\r
-       public void setPlantDescription(String plantDescription) {\r
-               this.plantDescription = plantDescription;\r
+       public void setAltitude(String altitude) {\r
+               this.altitude = altitude;\r
        }\r
 \r
 \r
@@ -389,6 +322,30 @@ public class SpecimenRow {
                return getOrdered(sources);\r
        }\r
 \r
+\r
+       public void setCollectors(String value) {\r
+               //TODO better parse somewhere else? Quick and dirty implementation\r
+               List<String> authors = new ArrayList<String>();\r
+               String[] splits = value.split("&");\r
+               for (String split: splits){\r
+                       split = split.trim();\r
+                       authors.add(split);\r
+               }\r
+               int index = 1;\r
+               for (int i = 0; i < authors.size() ; i++){\r
+                       String author = authors.get(i);\r
+                       if (i < authors.size()-1){\r
+                               String[] internalSplits = author.split(",");\r
+                               for (String internal : internalSplits){\r
+                                       internal = internal.trim();\r
+                                       this.collectors.put(index++, internal);\r
+                               }\r
+                       }else{\r
+                               this.collectors.put(index++, author);\r
+                       }\r
+               }\r
+       }\r
+       \r
        public void putCollector(int key, String collector){\r
                this.collectors.put(key, collector);\r
        }\r
@@ -397,6 +354,14 @@ public class SpecimenRow {
                return getOrdered(collectors);\r
        }\r
        \r
+       public void putUnitNote(int key, String unitNote){\r
+               this.unitNotes.put(key, unitNote);\r
+       }\r
+\r
+       public List<String> getUnitNotes() {\r
+               return getOrdered(unitNotes);\r
+       }\r
+       \r
        \r
        \r
        /**\r
@@ -438,8 +403,99 @@ public class SpecimenRow {
                return designation;\r
        }\r
        \r
+       public void putDeterminationFamily(int key, String family){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.family = family;\r
+       }\r
+\r
+       public void putDeterminationFullName(int key, String fullName){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.fullName = fullName;\r
+       }\r
+       \r
+       public void putDeterminationTaxonUuid(int key, String taxonUuid){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.taxonUuid = taxonUuid;\r
+       }\r
+\r
+       public void putDeterminationRank(int key, String rank){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.rank = rank;\r
+       }\r
+\r
+       public void putDeterminationGenus(int key, String genus){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.genus = genus;\r
+       }\r
+       \r
+       public void putDeterminationSpeciesEpi(int key, String speciesEpi){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.speciesEpi = speciesEpi;\r
+       }\r
+\r
+       public void putDeterminationInfraSpeciesEpi(int key, String infraSpeciesEpi){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.infraSpeciesEpi = infraSpeciesEpi;\r
+       }\r
+\r
+       public void putDeterminationAuthor(int key, String author){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.author = author;\r
+       }\r
+\r
+       public void putDeterminationDeterminedBy(int key, String determinedBy){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.determinedBy = determinedBy;\r
+       }\r
+\r
+       public void putDeterminationDeterminedWhen(int key, String determinedWhen){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.determinedWhen = determinedWhen;\r
+       }\r
+\r
+       public void putDeterminationDeterminationNotes(int key, String notes){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.notes = notes;\r
+       }\r
+       \r
+       public void putDeterminationDeterminationModifier(int key, String modifier){\r
+               DeterminationLight determinationEvent = getOrMakeDetermination(key);\r
+               determinationEvent.modifier = modifier;\r
+       }\r
+       \r
+       \r
+       public List<DeterminationLight> getDetermination() {\r
+               List<DeterminationLight> result = getOrdered(determinations);\r
+               if (determinations.size() > 1 && getCommonDetermination()!= null ){\r
+                       result.remove(getCommonDetermination());\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       /**\r
+        * Returns the determination with key "0".\r
+        * @return\r
+        */\r
+       public DeterminationLight getCommonDetermination() {\r
+               if (determinations.get(0) != null){\r
+                       return determinations.get(0);\r
+               }\r
+               return null;\r
+       }\r
+       \r
+       \r
        \r
-       private<T extends Object> List<T> getOrdered(TreeMap<Integer, T> tree) {\r
+       private DeterminationLight getOrMakeDetermination(int key) {\r
+               DeterminationLight determination = this.determinations.get(key);\r
+               if (determination == null){\r
+                       determination = new DeterminationLight();\r
+                       this.determinations.put(key, determination);\r
+               }\r
+               return determination;\r
+       }\r
+       \r
+\r
+       private<T extends Object> List<T> getOrdered(TreeMap<?, T> tree) {\r
                List<T> result = new ArrayList<T>();\r
                for (T value : tree.values()){\r
                        result.add(value);\r
@@ -497,9 +553,42 @@ public class SpecimenRow {
        public String getCollection() {\r
                return collection;\r
        }\r
+\r
+\r
+       public void addLeveledArea(String levelPostfix, String value) {\r
+               PostfixTerm area = new PostfixTerm();\r
+               area.term = value;\r
+               area.postfix = levelPostfix;\r
+               this.levels.add(area);\r
+       }\r
        \r
+       public List<PostfixTerm> getLeveledAreas(){\r
+               return levels;\r
+       }\r
        \r
+       public void setAltitudeMax(String altitudeMax) {\r
+               this.altitudeMax = altitudeMax;\r
+       }\r
+\r
+\r
+       public String getAltitudeMax() {\r
+               return altitudeMax;\r
+       }\r
+\r
+\r
+       /**\r
+        * @param primaryCollector the primaryCollector to set\r
+        */\r
+       public void setPrimaryCollector(String primaryCollector) {\r
+               this.primaryCollector = primaryCollector;\r
+       }\r
 \r
 \r
+       /**\r
+        * @return the primaryCollector\r
+        */\r
+       public String getPrimaryCollector() {\r
+               return primaryCollector;\r
+       }\r
        \r
 }\r