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