import java.util.HashSet;\r
import java.util.List;\r
import java.util.Set;\r
+import java.util.UUID;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
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
\r
@Override\r
protected boolean isIgnore(CyprusImportState state) {\r
- return false;\r
+ return ! state.getConfig().isDoTaxa();\r
}\r
\r
\r
\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
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 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
+ if (termsCreated == false){\r
+ IInputTransformer transformer = state.getTransformer();\r
+ \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 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
+ 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
/** \r
* Stores taxa records in DB\r
*/\r
@Override\r
- protected boolean firstPass(CyprusImportState state) {\r
- boolean success = true;\r
- Rank rank = null;\r
+ protected void firstPass(CyprusImportState state) {\r
+ \r
+ makeTerms(state);\r
CyprusRow taxonLight = state.getCyprusRow();\r
Reference citation = null;\r
String microCitation = null;\r
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
// state.putHigherTaxon(higherName, uuid);//(speciesStr, mainTaxon);\r
getTaxonService().save(mainTaxon);\r
}\r
- return success;\r
+ return;\r
}\r
\r
\r
//Systematics\r
if (StringUtils.isNotBlank(systematicsString)){\r
TaxonDescription td = this.getTaxonDescription(mainTaxon, false, true);\r
- //FIXME feature type\r
- TextData textData = TextData.NewInstance(Feature.ANATOMY());\r
- textData.putText(systematicsString, Language.UNDETERMINED());\r
+ TextData textData = TextData.NewInstance(Feature.SYSTEMATICS());\r
+ textData.putText(Language.UNDETERMINED(), systematicsString);\r
td.addElement(textData);\r
}\r
}\r
private void makeEndemism(String endemismString, Taxon mainTaxon) {\r
//endemism\r
if (StringUtils.isNotBlank(endemismString)){\r
- boolean flag;\r
- if (endemismString.trim().equalsIgnoreCase("not endemic")){\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
- //FIXME marker type\r
- Marker marker = Marker.NewInstance(MarkerType.IS_DOUBTFUL(), 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
private void makeStatus(String statusString, Taxon mainTaxon) {\r
//status\r
if (StringUtils.isNotBlank(statusString)){\r
- PresenceTerm status = null;\r
- if (statusString.contains("Indigenous")){\r
- //FIXME \r
- status = PresenceTerm.INTRODUCED();\r
- }else if (statusString.contains("Casual") || statusString.contains("Causal")){\r
- //FIXME\r
- status = PresenceTerm.CULTIVATED();\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
+ 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
- //FIXME\r
- status = PresenceTerm.NATURALISED();\r
+ status = nonInvasive;\r
+ }else if (statusString.contains("invasive?")){\r
+ status = invasiveDoubtful;\r
}else if (statusString.contains("invasive")){\r
- //FIXME\r
- status = PresenceTerm.NATURALISED();\r
+ status = invasive;\r
+ }else if (statusString.contains("Questionable?")){\r
+ status = questionableDoubtful;\r
}else if (statusString.contains("Questionable")){\r
- //FIXME\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.DISTRIBUTION());\r
- textData.putText(statusString, Language.ENGLISH());\r
+ TextData textData = TextData.NewInstance(Feature.STATUS());\r
+ textData.putText(Language.ENGLISH(), statusString);\r
td.addElement(textData);\r
}\r
}\r
//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(Feature.DESCRIPTION());\r
- textData.putText(redBookCategory, Language.ENGLISH());\r
+ TextData textData = TextData.NewInstance(this.redBookCategory);\r
+ textData.putText(Language.ENGLISH(), redBookCategory);\r
td.addElement(textData);\r
}\r
}\r
* Stores parent-child, synonym and common name relationships\r
*/\r
@Override\r
- protected boolean secondPass(CyprusImportState state) {\r
- boolean success = true;\r
- CyprusRow cyprusRow = state.getCyprusRow();\r
-// try {\r
-// String taxonNameStr = state.getTaxonLight().getScientificName();\r
-// String nameStatus = state.getTaxonLight().getNameStatus();\r
-// String commonNameStr = state.getTaxonLight().getCommonName();\r
-// Integer parentId = state.getTaxonLight().getParentId();\r
-// Integer childId = state.getTaxonLight().getId();\r
-// \r
-// Taxon parentTaxon = (Taxon)state.getTaxonBase(parentId);\r
-// if (CdmUtils.isNotEmpty(taxonNameStr)) {\r
-// nameStatus = CdmUtils.Nz(nameStatus).trim().toLowerCase();\r
-// if (validMarkers.contains(nameStatus)){\r
-// Taxon taxon = (Taxon)state.getTaxonBase(childId);\r
-// // Add the parent relationship\r
-// if (state.getTaxonLight().getParentId() != 0) {\r
-// if (parentTaxon != null) {\r
-// //Taxon taxon = (Taxon)state.getTaxonBase(childId);\r
-// \r
-// Reference citation = state.getConfig().getSourceReference();\r
-// String microCitation = null;\r
-// Taxon childTaxon = taxon;\r
-// success &= makeParent(state, parentTaxon, childTaxon, citation, microCitation);\r
-// getTaxonService().saveOrUpdate(parentTaxon);\r
-// } else {\r
-// logger.warn("Taxonomic parent not found for " + taxonNameStr);\r
-// success = false;\r
-// }\r
-// }else{\r
-// //do nothing (parent == 0) no parent exists\r
-// }\r
-// }else if (synonymMarkers.contains(nameStatus)){\r
-// //add synonym relationship\r
-// try {\r
-// TaxonBase taxonBase = state.getTaxonBase(childId);\r
-// Synonym synonym = CdmBase.deproxy(taxonBase,Synonym.class);\r
-// parentTaxon.addSynonym(synonym, SynonymRelationshipType.SYNONYM_OF());\r
-// getTaxonService().saveOrUpdate(parentTaxon);\r
-// } catch (Exception e) {\r
-// logger.warn("Child id = " + childId);\r
-// e.printStackTrace();\r
-// }\r
-// }\r
-// } \r
-// if (CdmUtils.isNotEmpty(commonNameStr)){ // add common name to taxon\r
-// handleCommonName(state, taxonNameStr, commonNameStr, parentId);\r
-// }\r
-// } catch (Exception e) {\r
-// e.printStackTrace();\r
-// }\r
- return success;\r
+ protected void secondPass(CyprusImportState state) {\r
+// CyprusRow cyprusRow = state.getCyprusRow();\r
+ return;\r
}\r
\r
\r
INonViralNameParser parser = nameParser;//NonViralNameParserImpl.NewInstance();\r
taxonNameBase = (NonViralName<BotanicalName>)parser.parseFullName(taxonNameStr, nc, rank);\r
\r
- taxonNameBase.setNameCache(taxonNameStr);\r
+ //taxonNameBase.setNameCache(taxonNameStr);\r
\r
}\r
\r
Classification tree = state.getTree(sec);\r
if (tree == null){\r
tree = makeTree(state, sec);\r
+ tree.setTitleCache(state.getConfig().getSourceReferenceTitle());\r
}\r
if (sec.equals(childTaxon.getSec())){\r
success &= (null != tree.addParentChild(parentTaxon, childTaxon, citation, microCitation));\r