import eu.etaxonomy.cdm.io.common.ExportResult.ExportResultState;
import eu.etaxonomy.cdm.io.common.TaxonNodeOutStreamPartitioner;
import eu.etaxonomy.cdm.io.common.XmlExportState;
+import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
import eu.etaxonomy.cdm.model.common.Annotation;
allowedRanks.add(Rank.GENUS());
allowedRanks.add(Rank.SUBGENUS());
allowedRanks.add(Rank.SECTION_BOTANY());
+ allowedRanks.add(Rank.SUBSECTION_BOTANY());
allowedRanks.add(Rank.SPECIES());
allowedRanks.add(Rank.SUBSPECIES());
allowedRanks.add(Rank.VARIETY());
}
private void handleDescription(WfoContentExportState state, DescriptionElementBase deb, Taxon taxon) {
- WfoContentExportTable table = WfoContentExportTable.DESCRIPTION;
- //TODO i18n
- List<Language> languages = new ArrayList<>();
- languages.add(Language.ENGLISH());
- languages.add(Language.FRENCH());
- languages.add(Language.SPANISH_CASTILIAN());
- languages.add(Language.GERMAN());
-
- String[] csvLine = new String[table.getSize()];
- //type
- //TODO 1 description type
+ try {
+ WfoContentExportTable table = WfoContentExportTable.DESCRIPTION;
+ //TODO i18n
+ List<Language> languages = new ArrayList<>();
+ languages.add(Language.ENGLISH());
+ languages.add(Language.FRENCH());
+ languages.add(Language.SPANISH_CASTILIAN());
+ languages.add(Language.GERMAN());
- //description
- String text = null;
- if (deb instanceof TextData) {
- TextData td = (TextData)deb;
+ String[] csvLine = new String[table.getSize()];
- //TODO i18n
- LanguageString ls = td.getPreferredLanguageString(languages, INCLUDE_UNPUBLISHED);
- if (ls != null) {
- text = ls.getText();
- //language TODO
+ //TODO 3 description types still need fine-tuning
+ String type = getDescriptionTpe(state, deb);
+ if (type == null) {
+ return;
}
- } else if (deb instanceof CategoricalData) {
+
+ //description
+ String text = null;
+ if (deb instanceof TextData) {
+ TextData td = (TextData)deb;
+
+ //TODO i18n
+ LanguageString ls = td.getPreferredLanguageString(languages, INCLUDE_UNPUBLISHED);
+ if (ls != null) {
+ text = ls.getText();
+ //language TODO
+ }
+ } else if (deb instanceof CategoricalData) {
// DefaultCategoricalDescriptionBuilder builder = new DefaultCategoricalDescriptionBuilder();
// text = builder.build((CategoricalData)deb, languages);
- //TODO which formatter to use
- CategoricalDataFormatter formatter = CategoricalDataFormatter.NewInstance(null);
- text = formatter.format(deb);
- } else {
- //TODO other types or only message?
- }
- csvLine[table.getIndex(WfoContentExportTable.DESC_DESCRIPTION)] = text;
-
- //audience TODO
- csvLine[table.getIndex(WfoContentExportTable.AUDIENCE)] = null;
+ //TODO which formatter to use
+ CategoricalDataFormatter formatter = CategoricalDataFormatter.NewInstance(null);
+ text = formatter.format(deb);
+ } else {
+ //TODO other types or only message?
+ }
+ csvLine[table.getIndex(WfoContentExportTable.DESC_DESCRIPTION)] = text;
- //rights holder
- handleRightsHolder(state, deb, csvLine, table, taxon);
+ //audience TODO
+ csvLine[table.getIndex(WfoContentExportTable.AUDIENCE)] = null;
- //created TODO
- handleCreated(state, deb, csvLine, table, taxon);
+ //rights holder
+ handleRightsHolder(state, deb, csvLine, table, taxon);
- //creator
- handleCreator(state, deb, csvLine, table, taxon);
+ //created TODO
+ handleCreated(state, deb, csvLine, table, taxon);
- //source
- handleSource(state, deb, table);
+ //creator
+ handleCreator(state, deb, csvLine, table, taxon);
- //rights
- handleRights(state, null, csvLine, table, taxon);
+ //source
+ handleSource(state, deb, table);
- //license
- handleLicense(state, null, csvLine, table, taxon);
+ //rights
+ handleRights(state, null, csvLine, table, taxon);
+ //license
+ handleLicense(state, null, csvLine, table, taxon);
+ } catch (Exception e) {
+ state.getResult().addException(e, "An unexpected error occurred when handling single description "
+ + cdmBaseStr(deb) + ": " + e.getMessage());
+ }
+ }
+ private String getDescriptionTpe(WfoContentExportState state, DescriptionElementBase deb) {
+ try {
+ return state.getTransformer().getCacheByFeature(deb.getFeature());
+ } catch (UndefinedTransformerMethodException e) {
+// e.printStackTrace();
+ return null; //should not happen
+ }
}
private void handleCreator(WfoContentExportState state, DescriptionElementBase deb, String[] csvLine,
//scientificNameID
//TODO 9 add IPNI ID if exists
- csvLine[table.getIndex(WfoContentExportTable.NAME_SCIENTIFIC_NAME_ID)] = null;
+ boolean warnIfNotExists = false;
+ csvLine[table.getIndex(WfoContentExportTable.NAME_SCIENTIFIC_NAME_ID)] = getIpniId(state, name, warnIfNotExists);
//scientificName
if (name.isProtectedTitleCache()) {
return wfoId;
}
+ private String getIpniId(WfoContentExportState state, TaxonName name, boolean warnIfNotExists) {
+ Identifier ipniId = name.getIdentifier(IdentifierType.uuidIpniNameIdentifier);
+ if (ipniId == null && warnIfNotExists) {
+ String message = "No ipni-id given for name: " + name.getTitleCache()+"/"+ name.getUuid();
+ state.getResult().addWarning(message); //TODO 5 data location
+ }
+ return ipniId == null ? null : ipniId.getIdentifier();
+ }
+
private String getWfoId(WfoContentExportState state, TaxonName name, boolean warnIfNotExists) {
Identifier wfoId = name.getIdentifier(IdentifierType.uuidWfoNameIdentifier);
if (wfoId == null && warnIfNotExists) {