cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/InputTransformerBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/MultipleAttributeMapperBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/UndefinedTransformerMethodException.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaRecordBase.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExport.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExportConfigurator.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExportState.java -text
-cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExporter.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxRecord.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularRecord.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/excel/common/ExcelImportConfiguratorBase.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/excel/common/ExcelImportState.java -text
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/excel/common/ExcelImporterBase.java -text
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.io.dwca.out;\r
+\r
+import java.io.PrintWriter;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.log4j.Logger;\r
+import org.joda.time.DateTime;\r
+\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.description.Sex;\r
+import eu.etaxonomy.cdm.model.description.Stage;\r
+import eu.etaxonomy.cdm.model.media.Rights;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 18.04.2011\r
+ *\r
+ */\r
+public abstract class DwcaRecordBase {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(DwcaRecordBase.class);\r
+\r
+ protected static String FIELD_ENCLOSER = "\"";\r
+\r
+ final protected boolean IS_FIRST = false;\r
+ final protected boolean IS_NOT_FIRST = true;\r
+ \r
+ protected String SEP = ",";\r
+ \r
+ \r
+ \r
+ public abstract void write(PrintWriter writer);\r
+ \r
+\r
+ protected void print(Boolean boolValue, PrintWriter writer, boolean addSeparator) {\r
+ print(boolValue == null ? null : String.valueOf(boolValue), writer, addSeparator);\r
+ }\r
+ protected void print(Integer intValue, PrintWriter writer, boolean addSeparator) {\r
+ print(intValue == null ? null : String.valueOf(intValue), writer, addSeparator);\r
+ }\r
+ protected void print(String value, PrintWriter writer, boolean addSeparator) {\r
+ String strToPrint = addSeparator ? SEP : "";\r
+ if (StringUtils.isNotBlank(value)){\r
+ strToPrint += FIELD_ENCLOSER + value + FIELD_ENCLOSER;\r
+ }\r
+ writer.print(strToPrint);\r
+ }\r
+ \r
+ protected String getRights(Rights rights) {\r
+ if (rights == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return rights.getAbbreviatedText();\r
+ }\r
+ }\r
+\r
+ protected String getLanguage(Language language) {\r
+ if (language == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return language.getIso639_2();\r
+ }\r
+ }\r
+\r
+ protected String getDate(DateTime date) {\r
+ if (date == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return date.toString();\r
+ }\r
+ }\r
+\r
+ protected String getNomStatus(NomenclaturalStatusType nomStatus) {\r
+ if (nomStatus == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return nomStatus.getLabel();\r
+ }\r
+ }\r
+\r
+ protected String getNomCode(NomenclaturalCode nomCode) {\r
+ if (nomCode == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return nomCode.getTitleCache();\r
+ }\r
+ }\r
+\r
+ protected String getRank(Rank rank) {\r
+ if (rank == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return rank.getTitleCache();\r
+ }\r
+ }\r
+ \r
+ protected String getSex(Sex sex) {\r
+ if (sex == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return sex.getTitleCache();\r
+ }\r
+ }\r
+ \r
+ protected String getLifeStage(Stage stage) {\r
+ if (stage == null){\r
+ return "";\r
+ }else{\r
+ //TODO\r
+ return stage.getTitleCache();\r
+ }\r
+ }\r
+ \r
+}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.io.dwca.out;\r
+\r
+import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.OutputStreamWriter;\r
+import java.io.PrintWriter;\r
+import java.io.UnsupportedEncodingException;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.common.CdmExportBase;\r
+import eu.etaxonomy.cdm.io.common.ICdmExport;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.sdd.out.SDDDataSet;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 18.04.2011\r
+ */\r
+@Component\r
+public class DwcaTaxExport extends CdmExportBase<DwcaTaxExportConfigurator, DwcaTaxExportState> implements ICdmExport<DwcaTaxExportConfigurator, DwcaTaxExportState> {\r
+ private static final Logger logger = Logger.getLogger(DwcaTaxExport.class);\r
+\r
+ /**\r
+ * \r
+ */\r
+ public DwcaTaxExport() {\r
+ super();\r
+ this.ioName = this.getClass().getSimpleName();\r
+ }\r
+\r
+ /** Retrieves data from a CDM DB and serializes them CDM to XML.\r
+ * Starts with root taxa and traverses the classification to retrieve children taxa, synonyms and relationships.\r
+ * Taxa that are not part of the classification are not found.\r
+ * \r
+ * @param exImpConfig\r
+ * @param dbname\r
+ * @param filename\r
+ */\r
+ @Override\r
+ protected boolean doInvoke(DwcaTaxExportState state){\r
+ DwcaTaxExportConfigurator config = state.getConfig();\r
+ String dbname = config.getSource() != null ? config.getSource().getName() : "unknown";\r
+ String fileName = config.getDestinationNameString();\r
+ logger.info("Serializing DB " + dbname + " to file " + fileName);\r
+ TransactionStatus txStatus = startTransaction(true);\r
+\r
+ try {\r
+ final String coreTaxFileName = "coreTax.txt";\r
+ fileName = fileName + File.separatorChar + coreTaxFileName;\r
+ File f = new File(fileName);\r
+ if (!f.exists()){\r
+ f.createNewFile();\r
+ }\r
+ FileOutputStream fos = new FileOutputStream(f);\r
+ PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos, "UTF8"), true);\r
+\r
+ \r
+ \r
+ List<TaxonNode> allNodes = getClassificationService().getAllNodes();\r
+ for (TaxonNode node : allNodes){\r
+ DwcaTaxRecord record = new DwcaTaxRecord();\r
+ Taxon taxon = CdmBase.deproxy(node.getTaxon(), Taxon.class);\r
+ NonViralName<?> name = CdmBase.deproxy(taxon.getName(), NonViralName.class);\r
+ Taxon parent = node.getParent() == null ? null : node.getParent().getTaxon();\r
+ TaxonNameBase<?, ?> basionym = name.getBasionym();\r
+ \r
+ handleTaxonBase(record, taxon, name, taxon, parent, basionym, null);\r
+ \r
+ node.getClassification().getName();\r
+ //synonyms\r
+ handleSynonyms(taxon, writer);\r
+ \r
+ //misapplied names\r
+ handleMisapplication(taxon, writer);\r
+ \r
+ record.write(writer);\r
+ writer.flush();\r
+ \r
+ }\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (UnsupportedEncodingException e) {\r
+ e.printStackTrace();\r
+ } catch (ClassCastException e) {\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ commitTransaction(txStatus);\r
+ return true;\r
+ }\r
+ \r
+\r
+ private void handleSynonyms(Taxon taxon, PrintWriter writer) {\r
+ //TODO avoid duplicates\r
+ Set<SynonymRelationship> synRels = taxon.getSynonymRelations();\r
+ for (SynonymRelationship synRel :synRels ){\r
+ DwcaTaxRecord record = new DwcaTaxRecord();\r
+ Synonym synonym = synRel.getSynonym();\r
+ SynonymRelationshipType type = synRel.getType();\r
+ if (type == null){ // should not happen\r
+ type = SynonymRelationshipType.SYNONYM_OF();\r
+ }\r
+ NonViralName<?> name = CdmBase.deproxy(synonym.getName(), NonViralName.class);\r
+ //????\r
+ Taxon parent = null;\r
+ TaxonNameBase<?, ?> basionym = name.getBasionym();\r
+ \r
+ handleTaxonBase(record, synonym, name, taxon, parent, basionym, type);\r
+ record.write(writer);\r
+ \r
+ }\r
+ \r
+ }\r
+ \r
+\r
+ private void handleMisapplication(Taxon taxon, PrintWriter writer) {\r
+ //TODO avoid duplicates\r
+ Set<Taxon> misappliedNames = taxon.getMisappliedNames();\r
+ for (Taxon misappliedName : misappliedNames ){\r
+ DwcaTaxRecord record = new DwcaTaxRecord();\r
+ TaxonRelationshipType type = TaxonRelationshipType.MISAPPLIED_NAME_FOR();\r
+ NonViralName<?> name = CdmBase.deproxy(misappliedName.getName(), NonViralName.class);\r
+ //????\r
+ Taxon parent = null;\r
+ TaxonNameBase<?, ?> basionym = name.getBasionym();\r
+ \r
+ handleTaxonBase(record, misappliedName, name, taxon, parent, basionym, type);\r
+ record.write(writer);\r
+ }\r
+ \r
+ }\r
+\r
+ /**\r
+ * @param record\r
+ * @param taxon\r
+ * @param name\r
+ * @param parent\r
+ * @param basionym\r
+ * @param type \r
+ * @return\r
+ */\r
+ private void handleTaxonBase(DwcaTaxRecord record, TaxonBase taxonBase, NonViralName<?> name, \r
+ Taxon acceptedTaxon, Taxon parent, TaxonNameBase<?, ?> basionym, \r
+ RelationshipTermBase<?> type) {\r
+ //ids als UUIDs?\r
+ record.setId(taxonBase.getId());\r
+ record.setScientificNameId(name.getId());\r
+ record.setAcceptedNameUsageId(acceptedTaxon.getId());\r
+ record.setParentNameUsageId(parent == null ? null : parent.getId());\r
+ // ??? - is not a name usage (concept)\r
+// record.setOriginalNameUsageId(basionym.getId());\r
+ record.setNameAccordingToId(taxonBase.getSec().getId());\r
+ record.setNamePublishedInId(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getId());\r
+ // what is the difference to id\r
+ record.setTaxonConceptId(taxonBase.getId());\r
+ \r
+ record.setScientificName(name.getTitleCache());\r
+ // ???\r
+ record.setAcceptedNameUsage(acceptedTaxon.getTitleCache());\r
+ record.setParentNameUsage(parent == null ? null : parent.getTitleCache());\r
+ // ??? is not a nameUsage (concept)\r
+ record.setOriginalNameUsage(basionym == null ? null : basionym.getTitleCache());\r
+ record.setNameAccordingTo(taxonBase.getSec().getTitleCache());\r
+ record.setNamePublishedIn(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getTitleCache());\r
+ \r
+ //???\r
+ record.setHigherClassification(null);\r
+ //... higher ranks\r
+ \r
+ handleUninomialOrGenus(record, name);\r
+ \r
+ //TODO other subgneric ranks ??\r
+ record.setSubgenus(name.getInfraGenericEpithet());\r
+ record.setSpecificEpithet(name.getSpecificEpithet());\r
+ record.setInfraspecificEpithet(name.getInfraSpecificEpithet());\r
+ \r
+ record.setTaxonRank(name.getRank());\r
+ record.setVerbatimTaxonRank(name.getRank().getTitleCache());\r
+ record.setScientificNameAuthorship(name.getAuthorshipCache());\r
+ \r
+ // ???\r
+ record.setVernacularName(null);\r
+ \r
+ record.setNomenclaturalCode(name.getNomenclaturalCode());\r
+ // ??? TODO Misapplied Names, inferred synonyms\r
+ handleTaxonomicStatus(record, name, type);\r
+ handleNomStatus(record, taxonBase, name);\r
+ // ???\r
+ record.setTaxonRemarks(null);\r
+ // ??? which date is needed here (taxon, name, sec, ... ?)\r
+ record.setModified(taxonBase.getUpdated());\r
+ // ???\r
+ record.setLanguage(null);\r
+ \r
+ //....\r
+ \r
+ return;\r
+ }\r
+\r
+ /**\r
+ * @param record\r
+ * @param name\r
+ * @param type\r
+ */\r
+ private void handleTaxonomicStatus(DwcaTaxRecord record,\r
+ NonViralName<?> name, RelationshipTermBase<?> type) {\r
+ if (type == null){\r
+ record.setTaxonomicStatus(name.getNomenclaturalCode().acceptedTaxonStatusLabel());\r
+ }else{\r
+ String status = name.getNomenclaturalCode().synonymStatusLabel();\r
+ if (type.equals(SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF())){\r
+ status = "heterotypic synonym";\r
+ }else if(type.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())){\r
+ status = "homotypic synonym";\r
+ }else if(type.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){\r
+ status = "misapplied";\r
+ }\r
+ record.setTaxonomicStatus(status);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @param record\r
+ * @param name\r
+ */\r
+ private void handleUninomialOrGenus(DwcaTaxRecord record, NonViralName<?> name) {\r
+ //epethita\r
+ String firstEpi = name.getGenusOrUninomial();\r
+ if (!StringUtils.isBlank(firstEpi)){\r
+ Rank rank = name.getRank();\r
+ if (rank != null){\r
+ if (rank.isLower(Rank.GENUS())){\r
+ record.setGenus(firstEpi); \r
+ }else if (rank.equals(Rank.GENUS())){\r
+ record.setGenus(firstEpi); \r
+ }else if (rank.equals(Rank.KINGDOM())){\r
+ record.setKingdom(firstEpi); \r
+ }else if (rank.equals(Rank.PHYLUM())){\r
+ record.setPhylum(firstEpi); \r
+ }else if (rank.equals(Rank.CLASS())){\r
+ record.setClazz(firstEpi); \r
+ }else if (rank.equals(Rank.ORDER())){\r
+ record.setOrder(firstEpi); \r
+ }else if (rank.equals(Rank.FAMILY())){\r
+ record.setFamily(firstEpi); \r
+ }else{\r
+ // !!!\r
+ String message = "Rank not covered. Set uninomial as genus instead: " + rank.getLabel();\r
+ logger.warn(message);\r
+// record.setGenus(firstEpi); \r
+ } \r
+ \r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * @param record\r
+ * @param taxon\r
+ * @param name\r
+ */\r
+ private void handleNomStatus(DwcaTaxRecord record, TaxonBase taxon,\r
+ NonViralName<?> name) {\r
+ int nStatus = name.getStatus().size();\r
+ if (nStatus > 0){\r
+ if (name.getStatus().size()> 1){\r
+ String warning = "There is more than 1 nomenclatural status ( " + name.getStatus().size()+ "): " + taxon.getTitleCache();\r
+ logger.warn(warning);\r
+ }\r
+ NomenclaturalStatusType status = name.getStatus().iterator().next().getType();\r
+ record.setNomenclaturalStatus(status);\r
+ }else{\r
+ record.setNomenclaturalStatus(null);\r
+ }\r
+ }\r
+\r
+\r
+ private void retrieveData (IExportConfigurator config, SDDDataSet sddDataSet) {\r
+\r
+ DwcaTaxExportConfigurator sddExpConfig = (DwcaTaxExportConfigurator)config;\r
+ final int MAX_ROWS = 50000;\r
+\r
+// int agentRows = numberOfRows;\r
+// int definedTermBaseRows = numberOfRows;\r
+// int referenceBaseRows = numberOfRows;\r
+// int taxonNameBaseRows = numberOfRows;\r
+// int taxonBaseRows = numberOfRows;\r
+// int relationshipRows = numberOfRows;\r
+// int occurrencesRows = numberOfRows;\r
+// int mediaRows = numberOfRows;\r
+// int featureDataRows = numberOfRows;\r
+// int languageDataRows = numberOfRows;\r
+// int termVocabularyRows = numberOfRows;\r
+// int homotypicalGroupRows = numberOfRows;\r
+\r
+\r
+ }\r
+\r
+\r
+ @Override\r
+ protected boolean doCheck(DwcaTaxExportState state) {\r
+ boolean result = true;\r
+ logger.warn("No check implemented for Jaxb export");\r
+ return result;\r
+ }\r
+\r
+\r
+ @Override\r
+ protected boolean isIgnore(DwcaTaxExportState state) {\r
+ return false;\r
+ }\r
+ \r
+}\r
// @SuppressWarnings("unchecked")\r
protected void makeIoClassList() {\r
ioClassList = new Class[] {\r
- DwcaTaxExporter.class,\r
+ DwcaTaxExport.class,\r
+ DwcaVernacularExport.class\r
};\r
};\r
\r
+++ /dev/null
-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-\r
-package eu.etaxonomy.cdm.io.dwca.out;\r
-\r
-import java.io.File;\r
-import java.io.FileNotFoundException;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
-import java.io.OutputStreamWriter;\r
-import java.io.PrintWriter;\r
-import java.io.UnsupportedEncodingException;\r
-import java.util.List;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
-import org.apache.log4j.Logger;\r
-import org.springframework.stereotype.Component;\r
-import org.springframework.transaction.TransactionStatus;\r
-\r
-import eu.etaxonomy.cdm.io.common.CdmExportBase;\r
-import eu.etaxonomy.cdm.io.common.ICdmExport;\r
-import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
-import eu.etaxonomy.cdm.io.sdd.out.SDDDataSet;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 18.04.2011\r
- */\r
-@Component("dwcaTaxExporter")\r
-public class DwcaTaxExporter extends CdmExportBase<DwcaTaxExportConfigurator, DwcaTaxExportState> implements ICdmExport<DwcaTaxExportConfigurator, DwcaTaxExportState> {\r
- private static final Logger logger = Logger.getLogger(DwcaTaxExporter.class);\r
-\r
- /**\r
- * \r
- */\r
- public DwcaTaxExporter() {\r
- super();\r
- this.ioName = this.getClass().getSimpleName();\r
- }\r
-\r
- /** Retrieves data from a CDM DB and serializes them CDM to XML.\r
- * Starts with root taxa and traverses the classification to retrieve children taxa, synonyms and relationships.\r
- * Taxa that are not part of the classification are not found.\r
- * \r
- * @param exImpConfig\r
- * @param dbname\r
- * @param filename\r
- */\r
- @Override\r
- protected boolean doInvoke(DwcaTaxExportState state){\r
- DwcaTaxExportConfigurator config = state.getConfig();\r
- String dbname = config.getSource() != null ? config.getSource().getName() : "unknown";\r
- String fileName = config.getDestinationNameString();\r
- logger.info("Serializing DB " + dbname + " to file " + fileName);\r
- TransactionStatus txStatus = startTransaction(true);\r
-\r
- try {\r
- \r
- File f = new File(fileName);\r
- if (!f.exists()){\r
- f.createNewFile();\r
- }\r
- FileOutputStream fos = new FileOutputStream(f);\r
- PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos, "UTF8"), true);\r
-\r
- \r
- \r
- DwcaTaxRecord record = new DwcaTaxRecord();\r
- List<TaxonNode> allNodes = getClassificationService().getAllNodes();\r
- for (TaxonNode node : allNodes){\r
- Taxon taxon = CdmBase.deproxy(node.getTaxon(), Taxon.class);\r
- NonViralName<?> name = CdmBase.deproxy(taxon.getName(), NonViralName.class);\r
- Taxon parent = node.getParent() == null ? null : node.getParent().getTaxon();\r
- TaxonNameBase<?, ?> basionym = name.getBasionym();\r
- \r
- //ids als UUIDs?\r
- record.setScientificNameId(name.getId());\r
- record.setAcceptedNameUsageId(taxon.getId());\r
- record.setParentNameUsageId(parent == null ? null : parent.getId());\r
- // ??? - is not a name usage (concept)\r
-// record.setOriginalNameUsageId(basionym.getId());\r
- record.setNameAccordingToId(taxon.getSec().getId());\r
- record.setNamePublishedInId(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getId());\r
- record.setTaxonConceptId(taxon.getId());\r
- \r
- record.setScientificName(name.getTitleCache());\r
- // ???\r
- record.setAcceptedNameUsage(taxon.getTitleCache());\r
- record.setParentNameUsage(parent == null ? null : parent.getTitleCache());\r
- // ??? is not a nameUsage (concept)\r
- record.setOriginalNameUsage(basionym == null ? null : basionym.getTitleCache());\r
- record.setNameAccordingTo(taxon.getSec().getTitleCache());\r
- record.setNamePublishedIn(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getTitleCache());\r
- \r
- //???\r
- record.setHigherClassification(null);\r
- //... higher ranks\r
- \r
- //epethita\r
- Rank rank = name.getRank();\r
- String firstEpi = name.getGenusOrUninomial();\r
- if (!StringUtils.isBlank(firstEpi)){\r
- if (rank != null){\r
- if (rank.equals(Rank.GENUS())){\r
- record.setGenus(firstEpi); \r
- }else if (rank.equals(Rank.KINGDOM())){\r
- record.setKingdom(firstEpi); \r
- }else if (rank.equals(Rank.PHYLUM())){\r
- record.setPhylum(firstEpi); \r
- }else if (rank.equals(Rank.CLASS())){\r
- record.setClazz(firstEpi); \r
- }else if (rank.equals(Rank.ORDER())){\r
- record.setOrder(firstEpi); \r
- }else if (rank.equals(Rank.FAMILY())){\r
- record.setFamily(firstEpi); \r
- }else{\r
- // !!!\r
- String message = "Rank not covered. Set uninomial as genus instead: " + rank.getLabel();\r
- logger.warn(message);\r
- record.setGenus(firstEpi); \r
- } \r
- \r
- }\r
- }\r
- //TODO other subgneric ranks ??\r
- record.setSubgenus(name.getInfraGenericEpithet());\r
- record.setSpecificEpithet(name.getSpecificEpithet());\r
- record.setInfraspecificEpithet(name.getInfraSpecificEpithet());\r
- \r
- record.setTaxonRank(name.getRank());\r
- record.setVerbatimTaxonRank(name.getRank().getTitleCache());\r
- record.setScientificNameAuthorship(name.getAuthorshipCache());\r
- \r
- // ???\r
- record.setVernacularName(null);\r
- \r
- record.setNomenclaturalCode(name.getNomenclaturalCode());\r
- // ???\r
- record.setTaxonomicStatus("Synonym");\r
- handleNomStatus(record, taxon, name);\r
- // ???\r
- record.setTaxonRemarks(null);\r
- // ??? which date is needed here (taxon, name, sec, ... ?)\r
- record.setModified(taxon.getUpdated());\r
- // ???\r
- record.setLanguage(null);\r
- \r
- //....\r
- record.write(writer);\r
- writer.flush();\r
- \r
- }\r
- } catch (FileNotFoundException e) {\r
- e.printStackTrace();\r
- } catch (UnsupportedEncodingException e) {\r
- e.printStackTrace();\r
- } catch (ClassCastException e) {\r
- e.printStackTrace();\r
- } catch (IOException e) {\r
- e.printStackTrace();\r
- }\r
- \r
-\r
- commitTransaction(txStatus);\r
- \r
- return true;\r
-\r
- }\r
-\r
- /**\r
- * @param record\r
- * @param taxon\r
- * @param name\r
- */\r
- private void handleNomStatus(DwcaTaxRecord record, Taxon taxon,\r
- NonViralName<?> name) {\r
- int nStatus = name.getStatus().size();\r
- if (nStatus > 0){\r
- if (name.getStatus().size()> 1){\r
- String warning = "There is more than 1 nomenclatural status ( " + name.getStatus().size()+ "): " + taxon.getTitleCache();\r
- logger.warn(warning);\r
- }\r
- NomenclaturalStatusType status = name.getStatus().iterator().next().getType();\r
- record.setNomenclaturalStatus(status);\r
- }else{\r
- record.setNomenclaturalStatus(null);\r
- }\r
- }\r
-\r
-\r
- private void retrieveData (IExportConfigurator config, SDDDataSet sddDataSet) {\r
-\r
- DwcaTaxExportConfigurator sddExpConfig = (DwcaTaxExportConfigurator)config;\r
- final int MAX_ROWS = 50000;\r
-\r
-// int agentRows = numberOfRows;\r
-// int definedTermBaseRows = numberOfRows;\r
-// int referenceBaseRows = numberOfRows;\r
-// int taxonNameBaseRows = numberOfRows;\r
-// int taxonBaseRows = numberOfRows;\r
-// int relationshipRows = numberOfRows;\r
-// int occurrencesRows = numberOfRows;\r
-// int mediaRows = numberOfRows;\r
-// int featureDataRows = numberOfRows;\r
-// int languageDataRows = numberOfRows;\r
-// int termVocabularyRows = numberOfRows;\r
-// int homotypicalGroupRows = numberOfRows;\r
-\r
-\r
- }\r
-\r
-\r
- @Override\r
- protected boolean doCheck(DwcaTaxExportState state) {\r
- boolean result = true;\r
- logger.warn("No check implemented for Jaxb export");\r
- return result;\r
- }\r
-\r
-\r
- @Override\r
- protected boolean isIgnore(DwcaTaxExportState state) {\r
- return false;\r
- }\r
- \r
-}\r
\r
import java.io.PrintWriter;\r
\r
-import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
import org.joda.time.DateTime;\r
\r
* @date 18.04.2011\r
*\r
*/\r
-public class DwcaTaxRecord {\r
- private static final String FIELD_ENCLOSER = "\"";\r
-\r
+public class DwcaTaxRecord extends DwcaRecordBase{\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(DwcaTaxRecord.class);\r
\r
- final boolean IS_FIRST = false;\r
- final boolean IS_NOT_FIRST = true;\r
- \r
- private String SEP = ",";\r
- \r
+ private Integer id;\r
private Integer scientificNameId;\r
private Integer acceptedNameUsageId;\r
private Integer parentNameUsageId;\r
\r
\r
public void write(PrintWriter writer) {\r
- print(scientificNameId, writer, IS_FIRST);\r
+ print(id, writer, IS_FIRST);\r
+ print(scientificNameId, writer, IS_NOT_FIRST);\r
print(acceptedNameUsageId, writer, IS_NOT_FIRST);\r
print(parentNameUsageId, writer, IS_NOT_FIRST);\r
print(originalNameUsageId, writer, IS_NOT_FIRST);\r
}\r
\r
\r
- private void print(Integer intValue, PrintWriter writer, boolean addSeparator) {\r
- print(intValue == null ? null : String.valueOf(intValue), writer, addSeparator);\r
- }\r
- private void print(String value, PrintWriter writer, boolean addSeparator) {\r
- String strToPrint = addSeparator ? SEP : "";\r
- if (StringUtils.isNotBlank(value)){\r
- strToPrint += FIELD_ENCLOSER + value + FIELD_ENCLOSER;\r
- }\r
- writer.print(strToPrint);\r
- }\r
- \r
- private String getRights(Rights rights) {\r
- if (rights == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return rights.getAbbreviatedText();\r
- }\r
- }\r
-\r
- private String getLanguage(Language language) {\r
- if (language == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return language.getIso639_2();\r
- }\r
- }\r
-\r
- private String getDate(DateTime date) {\r
- if (date == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return date.toString();\r
- }\r
- }\r
-\r
- private String getNomStatus(NomenclaturalStatusType nomStatus) {\r
- if (nomStatus == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return nomStatus.getLabel();\r
- }\r
- }\r
\r
- private String getNomCode(NomenclaturalCode nomCode) {\r
- if (nomCode == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return nomCode.getTitleCache();\r
- }\r
+ public void setId(Integer id) {\r
+ this.id = id;\r
}\r
\r
- private String getRank(Rank rank) {\r
- if (rank == null){\r
- return "";\r
- }else{\r
- //TODO\r
- return rank.getTitleCache();\r
- }\r
+ public Integer getId() {\r
+ return id;\r
}\r
\r
-\r
-\r
public int getScientificNameId() {\r
return scientificNameId;\r
}\r
public void setInfraspecificEpithet(String infraspecificEpithet) {\r
this.infraspecificEpithet = infraspecificEpithet;\r
}\r
+\r
\r
}\r
--- /dev/null
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.io.dwca.out;\r
+\r
+import java.io.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.OutputStreamWriter;\r
+import java.io.PrintWriter;\r
+import java.io.UnsupportedEncodingException;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.common.CdmExportBase;\r
+import eu.etaxonomy.cdm.io.common.ICdmExport;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 18.04.2011\r
+ */\r
+@Component\r
+public class DwcaVernacularExport extends CdmExportBase<DwcaTaxExportConfigurator, DwcaTaxExportState> implements ICdmExport<DwcaTaxExportConfigurator, DwcaTaxExportState> {\r
+ private static final Logger logger = Logger.getLogger(DwcaVernacularExport.class);\r
+\r
+ /**\r
+ * Constructor\r
+ */\r
+ public DwcaVernacularExport() {\r
+ super();\r
+ this.ioName = this.getClass().getSimpleName();\r
+ }\r
+\r
+ /** Retrieves data from a CDM DB and serializes them CDM to XML.\r
+ * Starts with root taxa and traverses the classification to retrieve children taxa, synonyms and relationships.\r
+ * Taxa that are not part of the classification are not found.\r
+ * \r
+ * @param exImpConfig\r
+ * @param dbname\r
+ * @param filename\r
+ */\r
+ @Override\r
+ protected boolean doInvoke(DwcaTaxExportState state){\r
+ DwcaTaxExportConfigurator config = state.getConfig();\r
+ String dbname = config.getSource() != null ? config.getSource().getName() : "unknown";\r
+ String fileName = config.getDestinationNameString();\r
+ logger.info("Serializing DB " + dbname + " to file " + fileName);\r
+ TransactionStatus txStatus = startTransaction(true);\r
+\r
+ try {\r
+ \r
+ final String coreTaxFileName = "vernacular.txt";\r
+ fileName = fileName + File.separatorChar + coreTaxFileName;\r
+ File f = new File(fileName);\r
+ if (!f.exists()){\r
+ f.createNewFile();\r
+ }\r
+ FileOutputStream fos = new FileOutputStream(f);\r
+ PrintWriter writer = new PrintWriter(new OutputStreamWriter(fos, "UTF8"), true);\r
+\r
+ \r
+ \r
+ List<TaxonNode> allNodes = getClassificationService().getAllNodes();\r
+ for (TaxonNode node : allNodes){\r
+ DwcaVernacularRecord record = new DwcaVernacularRecord();\r
+ Taxon taxon = CdmBase.deproxy(node.getTaxon(), Taxon.class);\r
+ Set<? extends DescriptionBase> descriptions = taxon.getDescriptions();\r
+ for (DescriptionBase description : descriptions){\r
+ for (Object o : description.getElements()){\r
+ DescriptionElementBase el = CdmBase.deproxy(o, DescriptionElementBase.class);\r
+ if (el.isInstanceOf(CommonTaxonName.class)){\r
+ CommonTaxonName commonTaxonName = CdmBase.deproxy(el, CommonTaxonName.class);\r
+ handleCommonTaxonName(record, commonTaxonName, taxon);\r
+ }else if (el.getFeature().equals(Feature.COMMON_NAME())){\r
+ //TODO\r
+ String message = "Vernacular name export for TextData not yet implemented";\r
+ logger.warn(message);\r
+ }\r
+ }\r
+ }\r
+ \r
+ record.write(writer);\r
+ writer.flush();\r
+ \r
+ }\r
+ } catch (FileNotFoundException e) {\r
+ e.printStackTrace();\r
+ } catch (UnsupportedEncodingException e) {\r
+ e.printStackTrace();\r
+ } catch (ClassCastException e) {\r
+ e.printStackTrace();\r
+ } catch (IOException e) {\r
+ e.printStackTrace();\r
+ }\r
+ commitTransaction(txStatus);\r
+ return true;\r
+ }\r
+ \r
+\r
+\r
+\r
+ private void handleCommonTaxonName(DwcaVernacularRecord record, CommonTaxonName commonTaxonName, Taxon taxon) {\r
+ record.setCoreid(taxon.getId());\r
+ record.setVernacularName(commonTaxonName.getName());\r
+ //TODO mulitple sources \r
+ record.setSource(null);\r
+ record.setLanguage(commonTaxonName.getLanguage());\r
+ // does not exist in CDM\r
+ record.setTemporal(null);\r
+ \r
+ if (commonTaxonName.getArea() != null){\r
+ NamedArea area = commonTaxonName.getArea();\r
+ record.setLocationId(area.getId());\r
+ record.setLocality(area.getLabel());\r
+ if (area.isInstanceOf(WaterbodyOrCountry.class)){\r
+ WaterbodyOrCountry country = CdmBase.deproxy(area, WaterbodyOrCountry.class);\r
+ record.setCountryCode(country.getIso3166_A2());\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @param record\r
+ * @param taxon\r
+ * @param name\r
+ * @param parent\r
+ * @param basionym\r
+ * @param type \r
+ * @return\r
+ */\r
+ private void handleTaxonBase(DwcaTaxRecord record, TaxonBase taxonBase, NonViralName<?> name, \r
+ Taxon acceptedTaxon, Taxon parent, TaxonNameBase<?, ?> basionym, \r
+ RelationshipTermBase<?> type) {\r
+ //ids als UUIDs?\r
+ record.setId(taxonBase.getId());\r
+ record.setScientificNameId(name.getId());\r
+ record.setAcceptedNameUsageId(acceptedTaxon.getId());\r
+ record.setParentNameUsageId(parent == null ? null : parent.getId());\r
+ // ??? - is not a name usage (concept)\r
+// record.setOriginalNameUsageId(basionym.getId());\r
+ record.setNameAccordingToId(taxonBase.getSec().getId());\r
+ record.setNamePublishedInId(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getId());\r
+ // what is the difference to id\r
+ record.setTaxonConceptId(taxonBase.getId());\r
+ \r
+ record.setScientificName(name.getTitleCache());\r
+ // ???\r
+ record.setAcceptedNameUsage(acceptedTaxon.getTitleCache());\r
+ record.setParentNameUsage(parent == null ? null : parent.getTitleCache());\r
+ // ??? is not a nameUsage (concept)\r
+ record.setOriginalNameUsage(basionym == null ? null : basionym.getTitleCache());\r
+ record.setNameAccordingTo(taxonBase.getSec().getTitleCache());\r
+ record.setNamePublishedIn(name.getNomenclaturalReference() == null ? null : name.getNomenclaturalReference().getTitleCache());\r
+ \r
+ //???\r
+ record.setHigherClassification(null);\r
+ //... higher ranks\r
+ \r
+ //TODO other subgneric ranks ??\r
+ record.setSubgenus(name.getInfraGenericEpithet());\r
+ record.setSpecificEpithet(name.getSpecificEpithet());\r
+ record.setInfraspecificEpithet(name.getInfraSpecificEpithet());\r
+ \r
+ record.setTaxonRank(name.getRank());\r
+ record.setVerbatimTaxonRank(name.getRank().getTitleCache());\r
+ record.setScientificNameAuthorship(name.getAuthorshipCache());\r
+ \r
+ // ???\r
+ record.setVernacularName(null);\r
+ \r
+ record.setNomenclaturalCode(name.getNomenclaturalCode());\r
+ // ???\r
+ record.setTaxonRemarks(null);\r
+ // ??? which date is needed here (taxon, name, sec, ... ?)\r
+ record.setModified(taxonBase.getUpdated());\r
+ // ???\r
+ record.setLanguage(null);\r
+ \r
+ //....\r
+ \r
+ return;\r
+ }\r
+\r
+\r
+ @Override\r
+ protected boolean doCheck(DwcaTaxExportState state) {\r
+ boolean result = true;\r
+ logger.warn("No check implemented for Jaxb export");\r
+ return result;\r
+ }\r
+\r
+\r
+ @Override\r
+ protected boolean isIgnore(DwcaTaxExportState state) {\r
+ return false;\r
+ }\r
+ \r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.io.dwca.out;\r
+\r
+import java.io.PrintWriter;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.description.Sex;\r
+import eu.etaxonomy.cdm.model.description.Stage;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 18.04.2011\r
+ *\r
+ */\r
+public class DwcaVernacularRecord extends DwcaRecordBase{\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(DwcaVernacularRecord.class);\r
+ private Integer coreid;\r
+ private String vernacularName;\r
+ private String source;\r
+ private Language language;\r
+ private String temporal;\r
+ private Integer locationId;\r
+ private String locality;\r
+ private String countryCode;\r
+ private Sex sex;\r
+ private Stage lifeStage;\r
+ private Boolean isPlural;\r
+ private Boolean isPreferredName;\r
+ private String organismPart;\r
+ private String taxonRemarks;\r
+ \r
+ public void write(PrintWriter writer) {\r
+ print(coreid, writer, IS_FIRST);\r
+ print(vernacularName, writer, IS_NOT_FIRST);\r
+ print(source, writer, IS_NOT_FIRST);\r
+ print(getLanguage(language), writer, IS_NOT_FIRST);\r
+ print(temporal, writer, IS_NOT_FIRST);\r
+ print(locationId, writer, IS_NOT_FIRST);\r
+ print(locality, writer, IS_NOT_FIRST);\r
+ print(countryCode, writer, IS_NOT_FIRST);\r
+ print(getSex(sex), writer, IS_NOT_FIRST);\r
+ print(getLifeStage(lifeStage), writer, IS_NOT_FIRST);\r
+ print(isPlural, writer, IS_NOT_FIRST);\r
+ print(isPreferredName, writer, IS_NOT_FIRST);\r
+ print(organismPart, writer, IS_NOT_FIRST);\r
+ print(taxonRemarks, writer, IS_NOT_FIRST);\r
+ writer.println();\r
+ }\r
+\r
+\r
+\r
+ public String getVernacularName() {\r
+ return vernacularName;\r
+ }\r
+ public void setVernacularName(String vernacularName) {\r
+ this.vernacularName = vernacularName;\r
+ }\r
+ public String getTaxonRemarks() {\r
+ return taxonRemarks;\r
+ }\r
+ public void setTaxonRemarks(String taxonRemarks) {\r
+ this.taxonRemarks = taxonRemarks;\r
+ }\r
+ public Language getLanguage() {\r
+ return language;\r
+ }\r
+ public void setLanguage(Language language) {\r
+ this.language = language;\r
+ }\r
+ public String getSource() {\r
+ return source;\r
+ }\r
+ public void setSource(String source) {\r
+ this.source = source;\r
+ }\r
+\r
+ public Integer getCoreid() {\r
+ return coreid;\r
+ }\r
+\r
+ public void setCoreid(Integer coreid) {\r
+ this.coreid = coreid;\r
+ }\r
+\r
+\r
+ public String getTemporal() {\r
+ return temporal;\r
+ }\r
+\r
+\r
+ public void setTemporal(String temporal) {\r
+ this.temporal = temporal;\r
+ }\r
+\r
+\r
+ public String getLocality() {\r
+ return locality;\r
+ }\r
+\r
+\r
+ public void setLocality(String locality) {\r
+ this.locality = locality;\r
+ }\r
+\r
+\r
+ public String getCountryCode() {\r
+ return countryCode;\r
+ }\r
+\r
+\r
+ public void setCountryCode(String countryCode) {\r
+ this.countryCode = countryCode;\r
+ }\r
+\r
+\r
+ public Stage getLifeStage() {\r
+ return lifeStage;\r
+ }\r
+\r
+\r
+ public void setLifeStage(Stage lifeStage) {\r
+ this.lifeStage = lifeStage;\r
+ }\r
+\r
+\r
+ public Integer getLocationId() {\r
+ return locationId;\r
+ }\r
+\r
+\r
+ public void setLocationId(Integer locationId) {\r
+ this.locationId = locationId;\r
+ }\r
+\r
+\r
+ public Sex getSex() {\r
+ return sex;\r
+ }\r
+\r
+\r
+ public void setSex(Sex sex) {\r
+ this.sex = sex;\r
+ }\r
+\r
+\r
+ public Boolean getIsPlural() {\r
+ return isPlural;\r
+ }\r
+\r
+\r
+ public void setIsPlural(Boolean isPlural) {\r
+ this.isPlural = isPlural;\r
+ }\r
+\r
+\r
+ public Boolean getIsPreferredName() {\r
+ return isPreferredName;\r
+ }\r
+\r
+\r
+ public void setIsPreferredName(Boolean isPreferredName) {\r
+ this.isPreferredName = isPreferredName;\r
+ }\r
+\r
+\r
+ public String getOrganismPart() {\r
+ return organismPart;\r
+ }\r
+\r
+\r
+ public void setOrganismPart(String organismPart) {\r
+ this.organismPart = organismPart;\r
+ }\r
+\r
+ \r
+\r
+ \r
+}\r