DarwinCoreArchive vernaculars first implementation
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 20 Apr 2011 07:58:58 +0000 (07:58 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 20 Apr 2011 07:58:58 +0000 (07:58 +0000)
.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaRecordBase.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExportConfigurator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExporter.java [deleted file]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxRecord.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularRecord.java [new file with mode: 0644]

index 92e1f49d51aa190f20878bbf3245398f278a3f30..d7805a18a9fdb2dced713f1c9b06f6586c9302c6 100644 (file)
@@ -250,10 +250,13 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/mapping/IXmlMapper.java -text
 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
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaRecordBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaRecordBase.java
new file mode 100644 (file)
index 0000000..c9f8965
--- /dev/null
@@ -0,0 +1,133 @@
+// $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
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExport.java
new file mode 100644 (file)
index 0000000..c275c2f
--- /dev/null
@@ -0,0 +1,345 @@
+/**\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
index e1f2eb76ece3b8e81034914e5187a9efe090b05d..11644fcfd3a25b12f0e00c235656f518c9aea9be 100644 (file)
@@ -53,7 +53,8 @@ public class DwcaTaxExportConfigurator extends XmlExportConfiguratorBase<DwcaTax
 //     @SuppressWarnings("unchecked")\r
        protected void makeIoClassList() {\r
                ioClassList = new Class[] {\r
-                               DwcaTaxExporter.class,\r
+                               DwcaTaxExport.class,\r
+                               DwcaVernacularExport.class\r
                };\r
        };\r
 \r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExporter.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaTaxExporter.java
deleted file mode 100644 (file)
index 3a66ce9..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/**\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
index d21df86479f26cf4db983914de9b53ae867287d8..7cfa056cec6545533c2a1dbeaf9386be0baee503 100644 (file)
@@ -11,7 +11,6 @@ package eu.etaxonomy.cdm.io.dwca.out;
 \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
@@ -26,17 +25,11 @@ import eu.etaxonomy.cdm.model.name.Rank;
  * @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
@@ -86,7 +79,8 @@ public class DwcaTaxRecord {
        \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
@@ -137,73 +131,15 @@ public class DwcaTaxRecord {
        }\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
@@ -469,5 +405,6 @@ public class DwcaTaxRecord {
        public void setInfraspecificEpithet(String infraspecificEpithet) {\r
                this.infraspecificEpithet = infraspecificEpithet;\r
        }\r
+\r
        \r
 }\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularExport.java
new file mode 100644 (file)
index 0000000..8934b73
--- /dev/null
@@ -0,0 +1,222 @@
+/**\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
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularRecord.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaVernacularRecord.java
new file mode 100644 (file)
index 0000000..d248692
--- /dev/null
@@ -0,0 +1,189 @@
+// $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