Final version of Cyprus Distribution import
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 1 Mar 2011 18:49:51 +0000 (18:49 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 1 Mar 2011 18:49:51 +0000 (18:49 +0000)
app-import/src/main/java/eu/etaxonomy/cdm/app/cyprus/CyprusActivator.java
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusDistributionImport.java
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusImportConfigurator.java
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusTransformer.java

index c85d8f26c4e5716004e0babc6fdbce1af1934cca..bf7a56075faeb320dc6cd97a9de1f44686f7f90f 100644 (file)
@@ -27,7 +27,6 @@ import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
 import eu.etaxonomy.cdm.io.cyprus.CyprusImportConfigurator;\r
 import eu.etaxonomy.cdm.io.cyprus.CyprusTransformer;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.FeatureNode;\r
 import eu.etaxonomy.cdm.model.description.FeatureTree;\r
@@ -43,15 +42,16 @@ public class CyprusActivator {
        private static final Logger logger = Logger.getLogger(CyprusActivator.class);\r
        \r
        //database validation status (create, update, validate ...)\r
-       static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;\r
+       static DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;\r
        static final URI source = cyprus_distribution();\r
+//     static final URI source = cyprus_local();\r
 \r
        \r
-//     static final ICdmDataSource cdmDestination = CdmDestinations.localH2();\r
+//     static final ICdmDataBSource cdmDestination = CdmDestinations.localH2();\r
 //     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_local_postgres_CdmTest();\r
-       static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();\r
+//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();\r
 //     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_dev();\r
-//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_production();\r
+       static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_production();\r
 \r
        \r
        //feature tree uuid\r
@@ -77,8 +77,6 @@ public class CyprusActivator {
                config.setCheck(check);\r
                config.setDoDistribution(doDistribution);\r
                config.setDoTaxa(doTaxa);\r
-//             config.setDefaultLanguageUuid(defaultLanguageUuid);\r
-//             config.setDoPrintKeys(doPrintKeys);\r
                config.setDbSchemaValidation(hbm2dll);\r
                \r
                CdmDefaultImport myImport = new CdmDefaultImport();\r
@@ -158,7 +156,7 @@ public class CyprusActivator {
        public static URI cyprus_distribution() {\r
                URI sourceUrl;\r
                try {\r
-                       sourceUrl = new URI("file:/C:/localCopy/Data/zypern/Zypern_distribution.xls");\r
+                       sourceUrl = new URI("file:/C:/localCopy/Data/zypern/Zypern_distribution_RH_corr.xls");\r
                        return sourceUrl;\r
                } catch (URISyntaxException e) {\r
                        e.printStackTrace();\r
index 5c481bcd2fe926971694ea80f1d25889673c5606..a3797067e459ec814a1de04a1c32b60a5cb0b22a 100644 (file)
@@ -9,10 +9,11 @@
 \r
 package eu.etaxonomy.cdm.io.cyprus;\r
 \r
-import java.util.Arrays;\r
+import java.util.ArrayList;\r
 import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Iterator;\r
+import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
 import java.util.UUID;\r
@@ -21,12 +22,14 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Component;\r
 \r
+import eu.etaxonomy.cdm.api.service.pager.Pager;\r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;\r
 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;\r
 import eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
@@ -35,14 +38,12 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaType;\r
+import eu.etaxonomy.cdm.model.location.TdwgArea;\r
+import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.strategy.parser.INonViralNameParser;\r
-import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;\r
 \r
 /**\r
  * @author a.babadshanjan\r
@@ -54,9 +55,6 @@ import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
 public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportState> {\r
        private static final Logger logger = Logger.getLogger(CyprusDistributionImport.class);\r
        \r
-       public static Set<String> validMarkers = new HashSet<String>(Arrays.asList(new String[]{"", "valid", "accepted", "a", "v", "t"}));\r
-       public static Set<String> synonymMarkers = new HashSet<String>(Arrays.asList(new String[]{"", "invalid", "synonym", "s", "i"}));\r
-       \r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)\r
         */\r
@@ -74,64 +72,11 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
 \r
        private Reference refMeikle1977 = ReferenceFactory.newGeneric();\r
        private Reference refMeikle1985 = ReferenceFactory.newGeneric();\r
-\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase#analyzeRecord(java.util.HashMap, eu.etaxonomy.cdm.io.excel.common.ExcelImportState)\r
-        */\r
-       @Override\r
-    protected boolean analyzeRecord(HashMap<String, String> record, CyprusImportState state) {\r
-               \r
-               boolean success = true;\r
-       Set<String> keys = record.keySet();\r
-       \r
-       CyprusDistributionRow cyprusDistributionRow = new CyprusDistributionRow();\r
-       state.setCyprusDistributionRow(cyprusDistributionRow);\r
-       \r
-       for (String originalKey: keys) {\r
-               Integer index = 0;\r
-               String indexedKey = CdmUtils.removeDuplicateWhitespace(originalKey.trim()).toString();\r
-               String[] split = indexedKey.split("_");\r
-               String key = split[0];\r
-               if (split.length > 1){\r
-                       String indexString = split[1];\r
-                       try {\r
-                                       index = Integer.valueOf(indexString);\r
-                               } catch (NumberFormatException e) {\r
-                                       String message = "Index must be integer";\r
-                                       logger.error(message);\r
-                                       continue;\r
-                               }\r
-               }\r
-               \r
-               String value = (String) record.get(indexedKey);\r
-               if (! StringUtils.isBlank(value)) {\r
-                       if (logger.isDebugEnabled()) { logger.debug(key + ": " + value); }\r
-                       value = CdmUtils.removeDuplicateWhitespace(value.trim()).toString();\r
-               }else{\r
-                       continue;\r
-               }\r
-               \r
-               \r
-               if (key.equalsIgnoreCase(SPECIES_COLUMN)) {\r
-                       cyprusDistributionRow.setSpecies(value);\r
-                       \r
-                       } else if(key.equalsIgnoreCase(DISTRIBUTION_COLUMN)) {\r
-                               cyprusDistributionRow.setDistribution(value);\r
-                               \r
-                       } else if(key.equalsIgnoreCase(REFERENCE_COLUMN)) {\r
-                               cyprusDistributionRow.setReference(value);\r
-                       \r
-                       } else {\r
-                               success = false;\r
-                               logger.error("Unexpected column header " + key);\r
-                       }\r
-       }\r
-       return success;\r
-    }\r
-       \r
-       private static INonViralNameParser nameParser = NonViralNameParserImpl.NewInstance();\r
        \r
+       private Map<String, Taxon> taxonWithAuthorStore = new HashMap<String, Taxon>(); \r
+       private Map<String, Taxon> taxonNameOnlyStore = new HashMap<String, Taxon>();\r
+\r
+\r
        private boolean areasCreated = false;\r
        private Map<String, NamedArea> divisions = new HashMap<String, NamedArea>();\r
        \r
@@ -141,35 +86,17 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
                        \r
                        try {\r
                                //divisions\r
+                               makeNewDivisions(state, transformer);\r
                                \r
+                               loadReferences();\r
+                               loadStatus();\r
+                               loadTaxa();\r
                                \r
-                               NamedAreaType areaType = NamedAreaType.NATURAL_AREA();\r
-                               NamedAreaLevel areaLevel = NamedAreaLevel.NewInstance("Cyprus Division", "Cyprus Division", null);\r
-                               getTermService().save(areaLevel);\r
-                               \r
-                               TermVocabulary areaVocabulary = TermVocabulary.NewInstance("Cyprus devisions", "Cyprus divisions", null, null);\r
-                               areaVocabulary.setUuid(CyprusTransformer.uuidCyprusDivisionsVocabulary);\r
-                               getVocabularyService().save(areaVocabulary);\r
-                               \r
-                               for(int i = 1; i <= 8; i++){\r
-                                       UUID divisionUuid = transformer.getNamedAreaUuid(String.valueOf(i));\r
-                                       NamedArea division = this.getNamedArea(state, divisionUuid, "Division " + i, "Cyprus: Division " + i, String.valueOf(i), areaType, areaLevel, areaVocabulary);\r
-                                       divisions.put(String.valueOf(i), division);\r
-                                       getTermService().save(division);\r
-                               }\r
-                               \r
-//                             refMeikle1977 = getReferenceService().findByTitle(Reference.class, "Meikle 1977", null, null, null, null, null, null);\r
-//                             refMeikle1985 = getReferenceService().findByTitle(Reference.class, "Meikle 1977", null, null, null, null, null, null);\r
-\r
                                areasCreated = true;\r
-                               indigenousStatus = (PresenceTerm)getTermService().find(CyprusTransformer.indigenousUuid);\r
-                               casualStatus = (PresenceTerm)getTermService().find(CyprusTransformer.casualUuid);\r
-                               nonInvasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.nonInvasiveUuid);\r
-                               invasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.invasiveUuid);\r
-                               questionableStatus = (PresenceTerm)getTermService().find(CyprusTransformer.questionableUuid);\r
                                \r
                                return true;\r
-                       } catch (UndefinedTransformerMethodException e) {\r
+\r
+                       } catch (Exception e) {\r
                                e.printStackTrace();\r
                                return false;\r
                        }\r
@@ -180,7 +107,7 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
                return true;\r
                \r
        }\r
-       \r
+\r
        /** \r
         *  Stores taxa records in DB\r
         */\r
@@ -188,17 +115,22 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
     protected boolean firstPass(CyprusImportState state) {\r
                \r
                boolean success = true;\r
-               makeAreasAndReference(state);\r
-               CyprusDistributionRow taxonLight = state.getCyprusDistributionRow();\r
+               success &= makeAreasAndReference(state);\r
                \r
+               CyprusDistributionRow taxonLight = state.getCyprusDistributionRow();\r
                //species name\r
                String taxonStr = taxonLight.getSpecies();\r
+               if ("#entfällt#".equalsIgnoreCase(taxonStr)){\r
+                       logger.warn("entfällt");\r
+                       return success;\r
+               }\r
                Taxon taxon = getTaxon(state, taxonStr);\r
                Reference ref = getReference(taxonLight.getReference());\r
-               makeDistribution(state, taxon, taxonLight.getDistribution(), ref);\r
-                       \r
+               if (taxon != null){\r
+                       makeDistribution(state, taxon, taxonLight.getDistribution(), ref);\r
+                       getTaxonService().save(taxon);\r
+               }       \r
                        \r
-               getTaxonService().save(taxon);\r
                return success;\r
     }\r
 \r
@@ -209,19 +141,30 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
        protected static final boolean IMAGE_GALLERY = false;\r
        \r
        private void makeDistribution(CyprusImportState state, Taxon taxon, String distributionStr, Reference ref) {\r
-               TaxonDescription description = getTaxonDescription(taxon, NO_IMAGE_GALLERY, CREATE);\r
+               \r
+//             TaxonDescription description = getTaxonDescription(taxon, NO_IMAGE_GALLERY, CREATE);\r
+               TaxonDescription description = getNewDescription(state, taxon);\r
+               PresenceAbsenceTermBase<?> status = getStatus(taxon);\r
+               status = removeDoubtfulStatus(status);\r
+               removeDistributions(taxon);\r
+               \r
                for (int i = 1; i <= 8; i++){\r
                        if (distributionStr.contains(String.valueOf(i))){\r
                                NamedArea area = this.divisions.get(String.valueOf(i));\r
-                               PresenceAbsenceTermBase<?> status = getStatus(taxon);\r
-                               status = removeDoubtfulStatus(status);\r
-                               removeDistributions(taxon);\r
                                Distribution distribution = Distribution.NewInstance(area, status);\r
                                distribution.addSource(null, null, ref, null);\r
                                description.addElement(distribution);\r
                        }\r
                }\r
        }\r
+       \r
+       private TaxonDescription getNewDescription(CyprusImportState state, Taxon taxon) {\r
+               Reference excelRef = state.getConfig().getSourceReference();\r
+               TaxonDescription desc = TaxonDescription.NewInstance(taxon, false);\r
+               desc.setTitleCache(excelRef.getTitleCache() + " for " + taxon.getTitleCache(), true);\r
+               desc.addSource(null, null, excelRef, null);\r
+               return desc;\r
+       }\r
 \r
        private PresenceAbsenceTermBase<?> indigenousStatus;\r
        private PresenceAbsenceTermBase<?> casualStatus;\r
@@ -230,6 +173,9 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
        private PresenceAbsenceTermBase<?> questionableStatus;\r
        \r
        private PresenceAbsenceTermBase<?> removeDoubtfulStatus(PresenceAbsenceTermBase<?> status) {\r
+               if (status == null){\r
+                       return null;\r
+               }\r
                if (status.getUuid().equals(CyprusTransformer.indigenousDoubtfulUuid)){\r
                        status = indigenousStatus;\r
                }else if (status.getUuid().equals(CyprusTransformer.casualDoubtfulUuid)){\r
@@ -273,20 +219,26 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
         * @param taxon\r
         * @param statusSet\r
         */\r
-       private Set<Distribution> removeDistributions(Taxon taxon) {\r
-               Set<Distribution> result = new HashSet<Distribution>();\r
+       private void removeDistributions(Taxon taxon) {\r
+               Set<Distribution> toRemove = new HashSet<Distribution>();\r
                for (TaxonDescription desc : taxon.getDescriptions()){\r
                        if (desc.isImageGallery() == NO_IMAGE_GALLERY ){\r
                                Iterator<DescriptionElementBase> iterator = desc.getElements().iterator();\r
                                while (iterator.hasNext()){\r
                                        DescriptionElementBase element = iterator.next();\r
                                        if (element.isInstanceOf(Distribution.class)){\r
-                                               iterator.remove();\r
+                                               toRemove.add(CdmBase.deproxy(element, Distribution.class));\r
+//                                             iterator.remove();\r
                                        }\r
                                }\r
                        }\r
                }\r
-               return result;\r
+               for (Distribution distribution : toRemove){\r
+                       DescriptionBase desc = distribution.getInDescription();\r
+                       desc.removeElement(distribution);\r
+                       getDescriptionService().saveOrUpdate(desc);\r
+               }\r
+               return;\r
        }\r
        \r
        /**\r
@@ -321,30 +273,170 @@ public class CyprusDistributionImport extends ExcelImporterBase<CyprusImportStat
                return result;\r
        }\r
 \r
-       Map<String, Taxon> taxonStore = new HashMap<String, Taxon>();\r
-\r
-\r
        private Taxon getTaxon(CyprusImportState state, String taxonStr) {\r
                Taxon result;\r
 \r
-               if (taxonStore.get(taxonStr) != null){\r
-                       result = taxonStore.get(taxonStr);\r
-               }else{\r
+               if (taxonWithAuthorStore.get(taxonStr) != null){\r
+                       result = taxonWithAuthorStore.get(taxonStr);\r
+               }else if(taxonNameOnlyStore.get(taxonStr) != null){\r
+                       result = taxonNameOnlyStore.get(taxonStr);\r
+               }else {\r
 //                     result = getTaxonService().findBestMatchingTaxon(taxonStr);\r
-                       TaxonNameBase name = BotanicalName.NewInstance(Rank.SPECIES());\r
-                       name.setTitleCache(taxonStr, true);\r
-                       \r
-                       result = Taxon.NewInstance(name, null);\r
-                       if (result == null){\r
+//                     TaxonNameBase name = BotanicalName.NewInstance(Rank.SPECIES());\r
+//                     name.setTitleCache(taxonStr, true);\r
+//                     \r
+//                     result = Taxon.NewInstance(name, null);\r
+//                     if (result == null){\r
                                logger.warn("Taxon not found: " +  taxonStr);\r
-                       }else{\r
-                               taxonStore.put(taxonStr, result);\r
-                       }\r
+//                     }else{\r
+//                             taxonStore.put(taxonStr, result);\r
+//                     }\r
+                       result = null;\r
                }\r
                return result;\r
        }\r
 \r
+       \r
 \r
+       /**\r
+        * \r
+        */\r
+       private void loadTaxa() {\r
+               List<String> propertyPaths = new ArrayList();\r
+               propertyPaths.add("*.name");\r
+               List<Taxon> taxonList = (List)getTaxonService().list(Taxon.class, null, null, null, propertyPaths);\r
+               for (Taxon taxon: taxonList){\r
+                       if (taxon.getTaxonNodes().size() == 0){\r
+                               continue;\r
+                       }\r
+                       String nameTitle = taxon.getName().getTitleCache();\r
+                       String nameCache = CdmBase.deproxy(taxon.getName(), BotanicalName.class).getNameCache();\r
+                       Taxon returnValue = taxonWithAuthorStore.put(nameTitle, taxon);\r
+                       if (returnValue != null){\r
+                               logger.warn("Duplicate titleCache entry for taxon: " + nameTitle);\r
+                       }\r
+                       returnValue = taxonNameOnlyStore.put(nameCache, taxon);\r
+                       if (returnValue != null){\r
+                               logger.warn("Duplicate nameCache entry for taxon: " + nameCache);\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @param meikle1977List\r
+        */\r
+       private void loadReferences() {\r
+               Pager<Reference> meikle1977List = getReferenceService().findByTitle(Reference.class, "R. D. Meikle, Flora of Cyprus 1. 1977", null, null, null, null, null, null);\r
+               \r
+               if (meikle1977List.getCount() != 1){\r
+                       logger.error("There is not exactly 1 Meikle 1977 reference");\r
+               }else{\r
+                       refMeikle1977 = meikle1977List.getRecords().iterator().next();\r
+               }\r
+               \r
+               Pager<Reference> meikle1985List = getReferenceService().findByTitle(Reference.class, "R. D. Meikle, Flora of Cyprus 2. 1985", null, null, null, null, null, null);\r
+               if (meikle1985List.getCount() != 1){\r
+                       logger.error("There is not exactly 1 Meikle 1985 reference");\r
+               }else{\r
+                       refMeikle1985 = meikle1977List.getRecords().iterator().next();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * \r
+        */\r
+       private void loadStatus() {\r
+               indigenousStatus = (PresenceTerm)getTermService().find(CyprusTransformer.indigenousUuid);\r
+               casualStatus = (PresenceTerm)getTermService().find(CyprusTransformer.casualUuid);\r
+               nonInvasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.nonInvasiveUuid);\r
+               invasiveStatus = (PresenceTerm)getTermService().find(CyprusTransformer.invasiveUuid);\r
+               questionableStatus = (PresenceTerm)getTermService().find(CyprusTransformer.questionableUuid);\r
+       }\r
+\r
+       /**\r
+        * @param state\r
+        * @param transformer\r
+        * @throws UndefinedTransformerMethodException\r
+        */\r
+       private void makeNewDivisions(CyprusImportState state,\r
+                       IInputTransformer transformer)\r
+                       throws UndefinedTransformerMethodException {\r
+               NamedAreaType areaType = NamedAreaType.NATURAL_AREA();\r
+               NamedAreaLevel areaLevel = (NamedAreaLevel)getTermService().find(CyprusTransformer.uuidCyprusDivisionsAreaLevel);\r
+               if (areaLevel == null){\r
+                       areaLevel = NamedAreaLevel.NewInstance("Cyprus Division", "Cyprus Division", null);\r
+                       getTermService().save(areaLevel);\r
+               }\r
+               \r
+               TermVocabulary areaVocabulary = getVocabulary(CyprusTransformer.uuidCyprusDivisionsVocabulary, "Cyprus devisions", "Cyprus divisions", null, null, true);\r
+               TdwgArea tdwg4Cyprus = (TdwgArea)getTermService().find(UUID.fromString("9d447b51-e363-4dde-ae40-84c55679983c"));\r
+               WaterbodyOrCountry isoCountryCyprus = (WaterbodyOrCountry)getTermService().find(UUID.fromString("4b13d6b8-7eca-4d42-8172-f2018051ca19"));\r
+               \r
+               for(int i = 1; i <= 8; i++){\r
+                       UUID divisionUuid = transformer.getNamedAreaUuid(String.valueOf(i));\r
+                       NamedArea division = this.getNamedArea(state, divisionUuid, "Division " + i, "Cyprus: Division " + i, String.valueOf(i), areaType, areaLevel, areaVocabulary);\r
+                       divisions.put(String.valueOf(i), division);\r
+                       tdwg4Cyprus.addIncludes(division);\r
+                       isoCountryCyprus.addIncludes(division);\r
+                       getTermService().save(division);\r
+               }\r
+       }\r
+\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase#analyzeRecord(java.util.HashMap, eu.etaxonomy.cdm.io.excel.common.ExcelImportState)\r
+        */\r
+       @Override\r
+    protected boolean analyzeRecord(HashMap<String, String> record, CyprusImportState state) {\r
+               \r
+               boolean success = true;\r
+       Set<String> keys = record.keySet();\r
+       \r
+       CyprusDistributionRow cyprusDistributionRow = new CyprusDistributionRow();\r
+       state.setCyprusDistributionRow(cyprusDistributionRow);\r
+       \r
+       for (String originalKey: keys) {\r
+               String indexedKey = CdmUtils.removeDuplicateWhitespace(originalKey.trim()).toString();\r
+               String[] split = indexedKey.split("_");\r
+               String key = split[0];\r
+               if (split.length > 1){\r
+                       String indexString = split[1];\r
+                       try {\r
+                                       Integer.valueOf(indexString);\r
+                               } catch (NumberFormatException e) {\r
+                                       String message = "Index must be integer";\r
+                                       logger.error(message);\r
+                                       continue;\r
+                               }\r
+               }\r
+               \r
+               String value = (String) record.get(indexedKey);\r
+               if (! StringUtils.isBlank(value)) {\r
+                       if (logger.isDebugEnabled()) { logger.debug(key + ": " + value); }\r
+                       value = CdmUtils.removeDuplicateWhitespace(value.trim()).toString();\r
+               }else{\r
+                       continue;\r
+               }\r
+               \r
+               \r
+               if (key.equalsIgnoreCase(SPECIES_COLUMN)) {\r
+                       cyprusDistributionRow.setSpecies(value);\r
+                       \r
+                       } else if(key.equalsIgnoreCase(DISTRIBUTION_COLUMN)) {\r
+                               cyprusDistributionRow.setDistribution(value);\r
+                               \r
+                       } else if(key.equalsIgnoreCase(REFERENCE_COLUMN)) {\r
+                               cyprusDistributionRow.setReference(value);\r
+                       \r
+                       } else {\r
+                               success = false;\r
+                               logger.error("Unexpected column header " + key);\r
+                       }\r
+       }\r
+       return success;\r
+    }\r
+       \r
+       \r
        /** \r
         *  \r
         */\r
index 17f5ddf4d50a536baec3f98f371faffd6f7142fb..dc96dbc4d65904a004ad222a9122b7a79d69356a 100644 (file)
@@ -35,7 +35,7 @@ public class CyprusImportConfigurator extends ExcelImportConfiguratorBase implem
 \r
        private UUID uuidCyprusReference = UUID.fromString("b5281cd3-9d5d-4ae2-8d55-b62a592ce846");\r
        \r
-       private String cyprusReferenceTitle = "Cyprus";\r
+       private String cyprusReferenceTitle = "Cyprus Distributions Excel Import";\r
 \r
        private boolean doDistribution;\r
        private boolean isDoTaxa;\r
index e6a1e1fd204c73b0a2fa2f1f1425f777d6f95647..0dec1e3c72c67a5e45253ea560d8cea7cb95936d 100644 (file)
@@ -51,6 +51,7 @@ public final class CyprusTransformer extends InputTransformerBase {
        \r
        //Named Area - divisions \r
        public static final UUID uuidCyprusDivisionsVocabulary = UUID.fromString("2119f610-1f93-4d87-af28-40aeefaca100");\r
+       public static final UUID uuidCyprusDivisionsAreaLevel = UUID.fromString("ff52bbd9-f73d-4476-af39-f3991fa892bd");\r
        \r
        public static final UUID uuidDivision1 = UUID.fromString("ab17eee9-1abb-4ce9-a9a2-563f840cdbfc");\r
        public static final UUID uuidDivision2 = UUID.fromString("c3606165-efb7-4224-a168-63e009eb4aa5");\r