Correct publish flag import for BM import
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / cyprus / CyprusExcelImport.java
index 8b0dd8dcda9c73be74b336e6912db592df35e208..9554f00404f07b1da63b05f8f4205f9657e79bfa 100644 (file)
@@ -21,19 +21,17 @@ import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;\r
 \r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.common.TdwgAreaProvider;\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.Language;\r
-import eu.etaxonomy.cdm.model.common.Marker;\r
-import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.description.Distribution;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
-import eu.etaxonomy.cdm.model.location.TdwgArea;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 import eu.etaxonomy.cdm.model.name.NonViralName;\r
@@ -63,7 +61,7 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
        \r
        @Override\r
        protected boolean isIgnore(CyprusImportState state) {\r
-               return false;\r
+               return ! state.getConfig().isDoTaxa();\r
        }\r
        \r
        \r
@@ -123,10 +121,9 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
        \r
        \r
        @Override\r
-    protected boolean analyzeRecord(HashMap<String, String> record, CyprusImportState state) {\r
+    protected void analyzeRecord(HashMap<String, String> record, CyprusImportState state) {\r
                \r
-               boolean success = true;\r
-       Set<String> keys = record.keySet();\r
+               Set<String> keys = record.keySet();\r
        \r
        CyprusRow cyprusRow = new CyprusRow();\r
        state.setCyprusRow(cyprusRow);\r
@@ -191,65 +188,98 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
                                cyprusRow.setDivision(value);\r
                        \r
                        } else {\r
-                               success = false;\r
+                               state.setUnsuccessfull();\r
                                logger.error("Unexpected column header " + key);\r
                        }\r
        }\r
-       return success;\r
+       return;\r
     }\r
        \r
        private static INonViralNameParser nameParser = NonViralNameParserImpl.NewInstance();\r
-       private static NomenclaturalCode nc = NomenclaturalCode.ICBN;\r
+       private static NomenclaturalCode nc = NomenclaturalCode.ICNAFP;\r
        private Feature redBookCategory;\r
-       private PresenceTerm indigenous;\r
-       private PresenceTerm casual;\r
-       private PresenceTerm nonInvasive;\r
-       private PresenceTerm invasive;\r
-       private PresenceTerm questionable;\r
-\r
+       private Feature endemism;\r
+       private PresenceAbsenceTerm indigenous;\r
+       private PresenceAbsenceTerm indigenousDoubtful;\r
+       private PresenceAbsenceTerm cultivatedDoubtful;\r
+       \r
+       private PresenceAbsenceTerm casual;\r
+       private PresenceAbsenceTerm casualDoubtful;\r
+       private PresenceAbsenceTerm nonInvasive;\r
+       private PresenceAbsenceTerm nonInvasiveDoubtful;\r
+       private PresenceAbsenceTerm invasive;\r
+       private PresenceAbsenceTerm invasiveDoubtful;\r
+       private PresenceAbsenceTerm questionable;\r
+       private PresenceAbsenceTerm questionableDoubtful;\r
+       \r
+       private boolean termsCreated = false;\r
+       \r
        private boolean makeTerms(CyprusImportState state) {\r
-               IInputTransformer transformer = state.getTransformer();\r
-               \r
-               try {\r
-                       UUID redBookUuid = transformer.getFeatureUuid("Red book");\r
-                       redBookCategory = this.getFeature(state, redBookUuid, "Red book category", "Red data book category", "Red book");\r
-                       getTermService().save(redBookCategory);\r
+               if (termsCreated == false){\r
+                       IInputTransformer transformer = state.getTransformer();\r
                        \r
-                       UUID indigenousUuid = transformer.getPresenceTermUuid("IN");\r
-                       indigenous = this.getPresenceTerm(state, indigenousUuid, "Indigenous", "Indigenous", "IN");\r
-                       getTermService().save(indigenous);\r
-                       \r
-                       UUID casualUuid = transformer.getPresenceTermUuid("CA");\r
-                       casual = this.getPresenceTerm(state, casualUuid, "Casual", "Casual", "CA");\r
-                       getTermService().save(redBookCategory);\r
-                       \r
-                       UUID nonInvasiveUuid = transformer.getPresenceTermUuid("NN");\r
-                       nonInvasive = this.getPresenceTerm(state, nonInvasiveUuid, "Naturalized  non-invasive", "Naturalized  non-invasive", "NN");\r
-                       getTermService().save(nonInvasive);\r
-\r
-                       UUID invasiveUuid = transformer.getPresenceTermUuid("NA");\r
-                       invasive = this.getPresenceTerm(state, invasiveUuid, "Naturalized  invasive", "Naturalized  invasive", "NA");\r
-                       getTermService().save(invasive);\r
+                       try {\r
+                               //feature\r
+                               UUID redBookUuid = transformer.getFeatureUuid("Red book");\r
+                               redBookCategory = this.getFeature(state, redBookUuid, "Red book category", "Red data book category", "Red book", null);\r
+                               getTermService().save(redBookCategory);\r
+                               \r
+                               UUID endemismUuid = transformer.getFeatureUuid("Endemism");\r
+                               endemism = this.getFeature(state, endemismUuid, "Endemism", "Endemism", "Endemism", null);\r
+                               getTermService().save(endemism);\r
+                               \r
+                               //status\r
+                               \r
+                               UUID indigenousUuid = transformer.getPresenceTermUuid("IN");\r
+                               indigenous = this.getPresenceTerm(state, indigenousUuid, "indigenous", "Indigenous", "IN");\r
+                               getTermService().save(indigenous);\r
+                               UUID indigenousDoubtfulUuid = transformer.getPresenceTermUuid("IN?");\r
+                               indigenousDoubtful = this.getPresenceTerm(state, indigenousDoubtfulUuid, "indigenous?", "Indigenous?", "IN?");\r
+                               getTermService().save(indigenousDoubtful);\r
+\r
+                               UUID cultivatedDoubtfulUuid = transformer.getPresenceTermUuid("CU?");\r
+                               cultivatedDoubtful = this.getPresenceTerm(state, cultivatedDoubtfulUuid, "cultivated?", "Cultivated?", "CU?");\r
+                               getTermService().save(cultivatedDoubtful);\r
+                               \r
+                               \r
+                               UUID casualUuid = transformer.getPresenceTermUuid("CA");\r
+                               casual = this.getPresenceTerm(state, casualUuid, "casual", "Casual", "CA");\r
+                               getTermService().save(casual);\r
+                               UUID casualDoubtfulUuid = transformer.getPresenceTermUuid("CA?");\r
+                               casualDoubtful = this.getPresenceTerm(state, casualDoubtfulUuid, "casual?", "Casual?", "CA?");\r
+                               getTermService().save(casualDoubtful);\r
 \r
-                       \r
-                       UUID questionableUuid = transformer.getPresenceTermUuid("Q");\r
-                       questionable = this.getPresenceTerm(state, questionableUuid, "Questionable", "Questionable", "Q");\r
-                       getTermService().save(questionable);\r
-                       \r
-                       return true;\r
-               } catch (UndefinedTransformerMethodException e) {\r
-                       e.printStackTrace();\r
-                       return false;\r
-               }\r
+                               \r
+                               UUID nonInvasiveUuid = transformer.getPresenceTermUuid("NN");\r
+                               nonInvasive = this.getPresenceTerm(state, nonInvasiveUuid, "naturalized  non-invasive", "Naturalized  non-invasive", "NN");\r
+                               getTermService().save(nonInvasive);\r
+                               UUID nonInvasiveDoubtfulUuid = transformer.getPresenceTermUuid("NN?");\r
+                               nonInvasiveDoubtful = this.getPresenceTerm(state, nonInvasiveDoubtfulUuid, "naturalized  non-invasive?", "Naturalized  non-invasive?", "NN?");\r
+                               getTermService().save(nonInvasiveDoubtful);\r
        \r
-               \r
-//             UUID redBookUuid = UUID.fromString("d8416d46-b5b4-45d5-b26b-9bda4fa491c9");\r
-//             term = this.getPresenceTerm(state, redBookUuid, "Red book category", "Red data book category", "Red book");\r
-//             getTermService().save(term);\r
-//             \r
-//             UUID redBookUuid = UUID.fromString("813a58bd-f8ab-4a80-9029-87a112dbb59f");\r
-//             term = this.getPresenceTerm(state, redBookUuid, "Red book category", "Red data book category", "Red book");\r
-//             getTermService().save(term);\r
+                               UUID invasiveUuid = transformer.getPresenceTermUuid("NA");\r
+                               invasive = this.getPresenceTerm(state, invasiveUuid, "naturalized  invasive", "Naturalized  invasive", "NA");\r
+                               getTermService().save(invasive);\r
+                               UUID invasiveDoubtfulUuid = transformer.getPresenceTermUuid("NA?");\r
+                               invasiveDoubtful = this.getPresenceTerm(state, invasiveDoubtfulUuid, "naturalized  invasive?", "Naturalized  invasive?", "NA?");\r
+                               getTermService().save(invasiveDoubtful);\r
+       \r
+                               UUID questionableUuid = transformer.getPresenceTermUuid("Q");\r
+                               questionable = this.getPresenceTerm(state, questionableUuid, "questionable", "Questionable", "Q");\r
+                               getTermService().save(questionable);\r
+                               UUID questionableDoubtfulUuid = transformer.getPresenceTermUuid("Q?");\r
+                               questionableDoubtful = this.getPresenceTerm(state, questionableDoubtfulUuid, "questionable?", "Questionable?", "Q?");\r
+                               getTermService().save(questionableDoubtful);\r
+                               \r
+                               termsCreated = true;\r
+                               \r
+                               return true;\r
+                       } catch (UndefinedTransformerMethodException e) {\r
+                               e.printStackTrace();\r
+                               return false;\r
+                       }\r
+               }\r
+               return true;\r
                \r
        }\r
        \r
@@ -257,8 +287,8 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
         *  Stores taxa records in DB\r
         */\r
        @Override\r
-    protected boolean firstPass(CyprusImportState state) {\r
-               boolean success = true;\r
+    protected void firstPass(CyprusImportState state) {\r
+               \r
                makeTerms(state);\r
                CyprusRow taxonLight = state.getCyprusRow();\r
                Reference citation = null;\r
@@ -277,25 +307,33 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
                String statusString = taxonLight.getStatus();\r
                String redBookCategory = taxonLight.getRedDataBookCategory();\r
                \r
-               //              BotanicalName subSpeciesName = (BotanicalName)nameParser.parseSimpleName(subSpeciesStr, nc, Rank.SUBSPECIES());\r
-//             BotanicalName speciesName = (BotanicalName)nameParser.parseSimpleName(speciesStr, nc, Rank.SPECIES());\r
-               \r
-//             Classification classification = null;\r
-                       \r
                if (StringUtils.isNotBlank(speciesStr)) {\r
+                       boolean speciesIsExisting = false;\r
                        Taxon mainTaxon = null;\r
+                       //species\r
                        Taxon speciesTaxon = (Taxon)createTaxon(state, Rank.SPECIES(), speciesStr, Taxon.class, nc);\r
                        mainTaxon = speciesTaxon;\r
+                       \r
+                       //subspecies\r
                        if (StringUtils.isNotBlank(subSpeciesStr)){\r
+                               Taxon existingSpecies = state.getHigherTaxon(speciesStr);\r
+                               if (existingSpecies != null){\r
+                                       speciesIsExisting = true;\r
+                                       speciesTaxon = existingSpecies;\r
+                               }\r
+                               \r
                                Taxon subSpeciesTaxon = (Taxon)createTaxon(state, Rank.SUBSPECIES(), subSpeciesStr, Taxon.class, nc);\r
                                \r
                                if (subSpeciesTaxon != null){\r
                                        makeParent(state, speciesTaxon, subSpeciesTaxon, citation, microCitation);\r
                                }\r
                                mainTaxon = subSpeciesTaxon;\r
+                               state.putHigherTaxon(speciesStr, speciesTaxon);\r
                        }\r
                        \r
-                       makeHigherTaxa(state, taxonLight, speciesTaxon, citation, microCitation);\r
+                       if (! speciesIsExisting){\r
+                               makeHigherTaxa(state, taxonLight, speciesTaxon, citation, microCitation);\r
+                       }\r
                        makeHomotypicSynonyms(state, citation, microCitation, homotypicSynonymList, mainTaxon);                 \r
                        makeHeterotypicSynonyms(state, citation, microCitation, heterotypicSynonymList, mainTaxon);                     \r
                        makeSystematics(systematicsString, mainTaxon);\r
@@ -306,7 +344,7 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
 //                     state.putHigherTaxon(higherName, uuid);//(speciesStr, mainTaxon);\r
                        getTaxonService().save(mainTaxon);\r
                }\r
-               return success;\r
+               return;\r
     }\r
 \r
 \r
@@ -366,7 +404,7 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
                if (StringUtils.isNotBlank(systematicsString)){\r
                        TaxonDescription td = this.getTaxonDescription(mainTaxon, false, true);\r
                        TextData textData = TextData.NewInstance(Feature.SYSTEMATICS());\r
-                       textData.putText(systematicsString, Language.UNDETERMINED());\r
+                       textData.putText(Language.UNDETERMINED(), systematicsString);\r
                        td.addElement(textData);\r
                }\r
        }\r
@@ -375,57 +413,70 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
        private void makeEndemism(String endemismString, Taxon mainTaxon) {\r
                //endemism\r
                if (StringUtils.isNotBlank(endemismString)){\r
-                       boolean flag;\r
-                       if (endemismString.trim().equalsIgnoreCase("not endemic") || endemismString.trim().equalsIgnoreCase("ne?")){\r
-                               flag = false;\r
-                       }else if (endemismString.trim().equalsIgnoreCase("endemic")){\r
-                               flag = true;\r
-                       }else{\r
-                               throw new RuntimeException(endemismString + " is not a valid value for endemism");\r
-                       }\r
-                       Marker marker = Marker.NewInstance(MarkerType.ENDEMIC(), flag);\r
-                       mainTaxon.addMarker(marker);\r
+                       //OLD - not wanted as marker\r
+//                     boolean flag;\r
+//                     if (endemismString.trim().equalsIgnoreCase("not endemic") || endemismString.trim().equalsIgnoreCase("ne?")){\r
+//                             flag = false;\r
+//                     }else if (endemismString.trim().equalsIgnoreCase("endemic")){\r
+//                             flag = true;\r
+//                     }else{\r
+//                             throw new RuntimeException(endemismString + " is not a valid value for endemism");\r
+//                     }\r
+//                     Marker marker = Marker.NewInstance(MarkerType.ENDEMIC(), flag);\r
+//                     mainTaxon.addMarker(marker);\r
+                       //text data\r
+                       TaxonDescription td = this.getTaxonDescription(mainTaxon, false, true);\r
+                       TextData textData = TextData.NewInstance(endemism);\r
+                       textData.putText(Language.ENGLISH(), endemismString);\r
+                       td.addElement(textData);\r
                }\r
        }\r
 \r
 \r
        private void makeStatus(String statusString, Taxon mainTaxon) {\r
                //status\r
-               //FIXME doubtful\r
                if (StringUtils.isNotBlank(statusString)){\r
-                       PresenceTerm status = null;\r
-                       if (statusString.contains("Indigenous")){\r
+                       PresenceAbsenceTerm status = null;\r
+                       if (statusString.contains("Indigenous?")){\r
+                               status = indigenousDoubtful;\r
+                       }else if (statusString.contains("Indigenous")){\r
                                status = indigenous;\r
-                       }else if (statusString.contains("Casual") || statusString.contains("Causal")){\r
+                       }else if (statusString.contains("Casual?") || statusString.contains("Causal?")){\r
+                               status = casualDoubtful;\r
+                       }else if (statusString.contains("Casual")){\r
                                status = casual;\r
+                       }else if (statusString.contains("Cultivated?")){\r
+                               status = cultivatedDoubtful;\r
                        }else if (statusString.contains("Cultivated")){\r
-                               status = PresenceTerm.CULTIVATED();\r
+                               status = PresenceAbsenceTerm.CULTIVATED();\r
+                       }else if (statusString.contains("non-invasive?")){\r
+                               status = nonInvasiveDoubtful;\r
                        }else if (statusString.contains("non-invasive")){\r
                                status = nonInvasive;\r
+                       }else if (statusString.contains("invasive?")){\r
+                               status = invasiveDoubtful;\r
                        }else if (statusString.contains("invasive")){\r
                                status = invasive;\r
+                       }else if (statusString.contains("Questionable?")){\r
+                               status = questionableDoubtful;\r
                        }else if (statusString.contains("Questionable")){\r
-//                             status = PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();\r
                                status = questionable;\r
                        }else if (statusString.startsWith("F")){\r
-                               //FIXME\r
-                               status = PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();\r
+                               status = null;\r
                        }else if (statusString.equals("##")){\r
-                               //FIXME\r
-                               status = PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();\r
+                               status = null;\r
                        }else{\r
                                logger.warn("Unknown status: " + statusString);\r
-                               status = PresenceTerm.PRESENT();\r
+                               status = null;\r
                        }\r
                        TaxonDescription td = this.getTaxonDescription(mainTaxon, false, true);\r
-                       NamedArea area = TdwgArea.getAreaByTdwgAbbreviation("CYP");\r
+                       NamedArea area = TdwgAreaProvider.getAreaByTdwgAbbreviation("CYP");\r
                        Distribution distribution = Distribution.NewInstance(area, status);\r
                        td.addElement(distribution);\r
                        \r
                        //text data\r
-                       //FIXME feature \r
                        TextData textData = TextData.NewInstance(Feature.STATUS());\r
-                       textData.putText(statusString, Language.ENGLISH());\r
+                       textData.putText(Language.ENGLISH(), statusString);\r
                        td.addElement(textData);\r
                }\r
        }\r
@@ -435,9 +486,8 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
                //red data book category\r
                if (StringUtils.isNotBlank(redBookCategory)){\r
                        TaxonDescription td = this.getTaxonDescription(mainTaxon, false, true);\r
-                       //FIXME feature type\r
                        TextData textData = TextData.NewInstance(this.redBookCategory);\r
-                       textData.putText(redBookCategory, Language.ENGLISH());\r
+                       textData.putText(Language.ENGLISH(), redBookCategory);\r
                        td.addElement(textData);\r
                }\r
        }\r
@@ -449,11 +499,9 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
         *  Stores parent-child, synonym and common name relationships\r
         */\r
        @Override\r
-    protected boolean secondPass(CyprusImportState state) {\r
-               boolean success = true;\r
+    protected void secondPass(CyprusImportState state) {\r
 //             CyprusRow cyprusRow = state.getCyprusRow();\r
-\r
-               return success;\r
+               return;\r
        }\r
 \r
 \r
@@ -507,7 +555,7 @@ public class CyprusExcelImport extends ExcelImporterBase<CyprusImportState> {
                Classification tree = state.getTree(sec);\r
                if (tree == null){\r
                        tree = makeTree(state, sec);\r
-                       tree.setTitleCache("Cyprus");\r
+                       tree.setTitleCache(state.getConfig().getSourceReferenceTitle());\r
                }\r
                if (sec.equals(childTaxon.getSec())){\r
                        success &=  (null !=  tree.addParentChild(parentTaxon, childTaxon, citation, microCitation));\r