private static final String COLLECTION_AND_TYPE = "collectionAndType";\r
private static final String COLLECTION_TYPE_STATUS = "collectionTypeStatus";\r
private static final String COLLECTOR = "collector";\r
+ private static final String COLLECTION = "collection";\r
private static final String COORDINATES = "coordinates";\r
private static final String COUPLET = "couplet";\r
private static final String DATES = "dates";\r
checkMandatoryElement(hasTitle, parentEvent, TAXONTITLE);\r
checkMandatoryElement(hasNomenclature, parentEvent, NOMENCLATURE);\r
handleUnexpectedAttributes(parentEvent.getLocation(),attributes);\r
+ if (taxon.getName().getRank() == null){\r
+ String warning = "No rank exists for taxon " + taxon.getTitleCache();\r
+ fireWarningEvent(warning, next, 12);\r
+ }\r
\r
makeKeyNodes(state, parentEvent, taxonTitle);\r
state.setCurrentTaxon(null);\r
} else if (isEndingElement(next, KEYNOTES)){\r
popUnimplemented(next.asEndElement());\r
} else if (isStartingElement(next, KEY_TITLE)) {\r
- handleKeyTitle(state, reader, next);\r
+ handleKeyTitle(state, reader, next);\r
} else if (isStartingElement(next, KEYNOTES)) {\r
//TODO\r
handleNotYetImplementedElement(next);\r
* @param childList\r
*/\r
private void completeCouplet(MarkupImportState state, XMLEvent parentEvent,\r
- PolytomousKeyNode parentNode, String num,\r
- List<PolytomousKeyNode> childList) {\r
+ PolytomousKeyNode parentNode, String num, List<PolytomousKeyNode> childList) {\r
if (parentNode != null){\r
for (PolytomousKeyNode childNode : childList){\r
parentNode.addChild(childNode);\r
handleToCouplet(state, reader, next, myNode);\r
} else if (isStartingElement(next, TO_TAXON)) {\r
handleToTaxon(state, reader, next, myNode);\r
- \r
} else if (isStartingElement(next, TO_KEY)) {\r
//TODO\r
handleNotYetImplementedElement(next);\r
private Taxon createTaxonAndName(MarkupImportState state,\r
Map<String, Attribute> attributes) {\r
NonViralName<?> name;\r
- Rank rank = Rank.SPECIES(); // default\r
- boolean isCultivar = checkAndRemoveAttributeValue(attributes, CLASS,\r
- "cultivated");\r
+ Rank rank = null; //Rank.SPECIES(); // default\r
+ boolean isCultivar = checkAndRemoveAttributeValue(attributes, CLASS, "cultivated");\r
if (isCultivar) {\r
name = CultivarPlantName.NewInstance(rank);\r
} else {\r
name = createNameByCode(state, rank);\r
}\r
- Taxon taxon = Taxon.NewInstance(name, state.getConfig()\r
- .getSourceReference());\r
+ Taxon taxon = Taxon.NewInstance(name, state.getConfig().getSourceReference());\r
if (checkAndRemoveAttributeValue(attributes, CLASS, "dubious")) {\r
taxon.setDoubtful(true);\r
} else if (checkAndRemoveAttributeValue(attributes, CLASS, "excluded")) {\r
throw new IllegalStateException("<Reference> has no closing tag");\r
}\r
\r
- private void handleHomotypes(MarkupImportState state,\r
- XMLEventReader reader, StartElement parentEvent)\r
+ private void handleHomotypes(MarkupImportState state, XMLEventReader reader, StartElement parentEvent)\r
throws XMLStreamException {\r
checkNoAttributes(parentEvent);\r
\r
}\r
} else if (next.isStartElement()) {\r
if (isStartingElement(next, NOM)) {\r
- NonViralName<?> name = handleNom(state, reader, next,\r
- homotypicalGroup);\r
+ NonViralName<?> name = handleNom(state, reader, next, homotypicalGroup);\r
homotypicalGroup = name.getHomotypicalGroup();\r
hasNom = true;\r
} else if (isStartingElement(next, NAME_TYPE)) {\r
\r
}\r
\r
- private void handleSpecimenType(MarkupImportState state,\r
- XMLEventReader reader, XMLEvent parentEvent,\r
- HomotypicalGroup homotypicalGroup) throws XMLStreamException {\r
+ private void handleSpecimenType(MarkupImportState state, XMLEventReader reader, XMLEvent parentEvent,\r
+ HomotypicalGroup homotypicalGroup) throws XMLStreamException {\r
// attributes\r
Map<String, Attribute> attributes = getAttributes(parentEvent);\r
String typeStatus = getAndRemoveAttributeValue(attributes, TYPE_STATUS);\r
String message = "There is no name in a homotypical group. Can't create the specimen type";\r
fireWarningEvent(message, parentEvent, 8);\r
} else {\r
- firstName = CdmBase.deproxy(names.iterator().next(),\r
- NonViralName.class);\r
+ firstName = CdmBase.deproxy(names.iterator().next(),NonViralName.class);\r
}\r
\r
- DerivedUnitFacade facade = DerivedUnitFacade\r
- .NewInstance(DerivedUnitType.Specimen);\r
+ DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(DerivedUnitType.Specimen);\r
String text = "";\r
// elements\r
while (reader.hasNext()) {\r
XMLEvent next = readNoWhitespace(reader);\r
if (next.isEndElement()) {\r
if (isMyEndingElement(next, parentEvent)) {\r
- makeSpecimenType(state, facade, text, firstName,\r
- parentEvent);\r
+ makeSpecimenType(state, facade, text, firstName, parentEvent);\r
return;\r
} else {\r
if (isEndingElement(next, FULL_TYPE)) {\r
handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, COLLECTION_AND_TYPE)) {\r
handleNotYetImplementedElement(next);\r
+ } else if (isStartingElement(next, CITATION)) {\r
+ handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, NOTES)) {\r
handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, ANNOTATION)) {\r
throw new IllegalStateException("Specimen type has no closing tag"); \r
}\r
\r
- private void makeSpecimenType(MarkupImportState state,\r
- DerivedUnitFacade facade, String text, NonViralName name,\r
- XMLEvent parentEvent) {\r
+ private void makeSpecimenType(MarkupImportState state, DerivedUnitFacade facade, String text, \r
+ NonViralName name, XMLEvent parentEvent) {\r
text = text.trim();\r
// remove brackets\r
if (text.matches("^\\(.*\\)\\.?$")) {\r
} else if (isEndingElement(next, COLLECTION_TYPE_STATUS)) {\r
// NOT YET IMPLEMENTED\r
popUnimplemented(next.asEndElement());\r
+ } else if (isEndingElement(next, COLLECTION_AND_TYPE)) {\r
+ // NOT YET IMPLEMENTED , does this make sense here? \r
+ popUnimplemented(next.asEndElement());\r
} else if (isEndingElement(next,\r
ALTERNATIVE_COLLECTION_TYPE_STATUS)) {\r
// NOT YET IMPLEMENTED\r
} else if (isEndingElement(next, SUB_COLLECTION)) {\r
// NOT YET IMPLEMENTED\r
popUnimplemented(next.asEndElement());\r
+ } else if (isEndingElement(next, COLLECTION)) {\r
+ // NOT YET IMPLEMENTED\r
+ popUnimplemented(next.asEndElement());\r
} else if (isEndingElement(next, DATES)) {\r
// NOT YET IMPLEMENTED\r
popUnimplemented(next.asEndElement());\r
handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, COLLECTION_TYPE_STATUS)) {\r
handleNotYetImplementedElement(next);\r
- } else if (isStartingElement(next,\r
- ALTERNATIVE_COLLECTION_TYPE_STATUS)) {\r
+ } else if (isStartingElement(next, COLLECTION_AND_TYPE)) { //does this make sense here?\r
+ handleNotYetImplementedElement(next);\r
+ } else if (isStartingElement(next, ALTERNATIVE_COLLECTION_TYPE_STATUS)) {\r
handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, SUB_COLLECTION)) {\r
handleNotYetImplementedElement(next);\r
+ } else if (isStartingElement(next, COLLECTION)) {\r
+ handleNotYetImplementedElement(next);\r
} else if (isStartingElement(next, LOCALITY)) {\r
handleLocality(state, reader, next, facade);\r
} else if (isStartingElement(next, DATES)) {\r
if (isEndingElement(next, FULL_NAME)) {\r
// NOT YET IMPLEMENTED\r
popUnimplemented(next.asEndElement());\r
- } else if (isEndingElement(next, NUM)) {\r
- // NOT YET IMPLEMENTED\r
- popUnimplemented(next.asEndElement());\r
} else if (isEndingElement(next, HOMONYM)) {\r
// NOT YET IMPLEMENTED\r
popUnimplemented(next.asEndElement());\r
// homotypicalGroup = handleNom(state, reader, next, taxon,\r
// homotypicalGroup);\r
} else if (isStartingElement(next, NUM)) {\r
- handleNotYetImplementedElement(next);\r
+ String num = getCData(state, reader, next);\r
+ num = num.replace(".", "");\r
+ num = num.replace(")", "");\r
+ if (StringUtils.isNotBlank(num)){\r
+ if (state.getCurrentTaxonNum() != null && ! state.getCurrentTaxonNum().equals(num) ){\r
+ String message = "Taxontitle num and homotypes/nom/num differ ( %s <-> %s ). I use the later one.";\r
+ message = String.format(message, state.getCurrentTaxonNum(), num);\r
+ fireWarningEvent(message, next, 4);\r
+ }\r
+ state.setCurrentTaxonNum(num);\r
+ }\r
} else if (isStartingElement(next, NAME)) {\r
handleName(state, reader, next, nameMap);\r
} else if (isStartingElement(next, CITATION)) {\r
try {\r
// TODO handle trim earlier\r
statusStr = statusStr.trim();\r
- NomenclaturalStatusType nomStatusType = NomenclaturalStatusType\r
- .getNomenclaturalStatusTypeByAbbreviation(statusStr);\r
+ NomenclaturalStatusType nomStatusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusStr);\r
name.addStatus(NomenclaturalStatus.NewInstance(nomStatusType));\r
} catch (UnknownCdmTypeException e) {\r
String message = "Status '%s' could not be recognized";\r
}\r
String value = nameMap.get(key);\r
if (rank.isSupraGeneric() || rank.isGenus()) {\r
- name.setGenusOrUninomial(value);\r
+ name.setGenusOrUninomial(toFirstCapital(value));\r
} else if (rank.isInfraGeneric()) {\r
- name.setInfraGenericEpithet(value);\r
+ name.setInfraGenericEpithet(toFirstCapital(value));\r
} else if (rank.isSpecies()) {\r
- name.setSpecificEpithet(value);\r
+ name.setSpecificEpithet(value.toLowerCase());\r
} else if (rank.isInfraSpecific()) {\r
- name.setInfraSpecificEpithet(value);\r
+ name.setInfraSpecificEpithet(value.toLowerCase());\r
} else {\r
String message = "Invalid rank '%s'. Can't decide which epithet to fill with '%s'";\r
message = String.format(message, rank.getTitleCache(),value);\r
}\r
}\r
\r
+ private String toFirstCapital(String value) {\r
+ if (StringUtils.isBlank(value)){\r
+ return value;\r
+ }else{\r
+ String result = "";\r
+ result += value.substring(0,1).toUpperCase();\r
+ if (value.length()>1){\r
+ result += value.substring(1).toLowerCase();\r
+ }\r
+ return result;\r
+ }\r
+ }\r
+\r
/**\r
* @param name\r
* @param event\r
* @param infrParAut\r
* @param infrAut\r
*/\r
- private void testRankAuthorConsistency(NonViralName name, XMLEvent event,\r
- String authorStr, String paraut, String infrParAut, String infrAut) {\r
+ private void testRankAuthorConsistency(NonViralName name, XMLEvent event, \r
+ String authorStr, String paraut, String infrParAut, String infrAut) {\r
if (name.getRank() == null){\r
return;\r
}\r
if (name.getRank().isInfraSpecific()) {\r
if (StringUtils.isBlank(infrParAut)\r
- && StringUtils.isNotBlank(infrAut)\r
- && (StringUtils.isNotBlank(paraut) || StringUtils.isNotBlank(authorStr))) {\r
+ && StringUtils.isBlank(infrAut) //was isNotBlank before 29.5.2012\r
+ && (StringUtils.isNotBlank(paraut) || StringUtils.isNotBlank(authorStr)) \r
+ && ! name.isAutonym()) {\r
String message = "Rank is infraspecicific but has only specific or higher author(s)";\r
fireWarningEvent(message, event, 4);\r
}\r
if (homotypicalGroup != null) {\r
name.setHomotypicalGroup(homotypicalGroup);\r
}\r
- SynonymRelationshipType synonymType = SynonymRelationshipType\r
- .HETEROTYPIC_SYNONYM_OF();\r
+ SynonymRelationshipType synonymType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();\r
if (taxon.getHomotypicGroup().equals(homotypicalGroup)) {\r
synonymType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();\r
}\r
unmatchedLeads.saveToSession(getPolytomousKeyNodeService());\r
\r
// TODO generally do not store the reference object in the config\r
- Reference sourceReference = state.getConfig().getSourceReference();\r
+ Reference<?> sourceReference = state.getConfig().getSourceReference();\r
getReferenceService().saveOrUpdate(sourceReference);\r
}\r
\r
// public static final UUID uuid = UUID.fromString("");\r
\r
\r
+// guianas\r
+ public static final UUID uuidExtraxylarySclerenchyma = UUID.fromString("cdddefbe-2f41-4d5c-89e8-4790b6d069fb");\r
+\r
+ \r
+ \r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.io.common.mapping.InputTransformerBase#getFeatureByKey(java.lang.String)\r
*/\r
@Override\r
public Feature getFeatureByKey(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
\r
}else if (key.equalsIgnoreCase("ecology")){return Feature.ECOLOGY();\r
+ }else if (key.equalsIgnoreCase("phenology")){return Feature.PHENOLOGY();\r
}else if (key.equalsIgnoreCase("uses")){return Feature.USES();\r
}else if (key.equalsIgnoreCase("anatomy")){return Feature.ANATOMY();\r
}else if (key.equalsIgnoreCase("description")){return Feature.DESCRIPTION();\r
*/\r
@Override\r
public UUID getFeatureUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
\r
- \r
}else if (key.equalsIgnoreCase("cultivation")){return uuidCultivation;\r
}else if (key.equalsIgnoreCase("history")){return uuidHistory;\r
}else if (key.equalsIgnoreCase("phylogeny")){return uuidPhylogeny;\r
}else if (key.equalsIgnoreCase("teeth")){return uuidTeeth;\r
\r
\r
+ //guianas\r
+ }else if (key.equalsIgnoreCase("extraxylary sclerenchyma")){return uuidExtraxylarySclerenchyma;\r
+ \r
+ \r
// }else if (key.equalsIgnoreCase("Inflorescence")){return uuidInflorescence;\r
\r
\r
*/\r
@Override\r
public MarkerType getMarkerTypeByKey(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
// }else if (key.equalsIgnoreCase("distribution")){return MarkerType.;\r
// }else if (key.equalsIgnoreCase("habitatecology")){return Feature.ECOLOGY();\r
}else{\r
\r
@Override\r
public UUID getMarkerTypeUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("INCOMPLETELY KNOWN SPECIES")){return uuidIncompleteTaxon;\r
}else if (key.equalsIgnoreCase("INSUFICIENTLY KNOWN")){return uuidIncompleteTaxon;\r
}else if (key.equalsIgnoreCase("INSUFFICIENTLY KNOWN")){return uuidIncompleteTaxon;\r
\r
@Override\r
public NamedAreaLevel getNamedAreaLevelByKey(String key )throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("country")){return NamedAreaLevel.COUNTRY();\r
}else if (key.equalsIgnoreCase("province")){return NamedAreaLevel.PROVINCE();\r
}else if (key.equalsIgnoreCase("town")){return NamedAreaLevel.TOWN();\r
*/\r
@Override\r
public UUID getNamedAreaLevelUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("region")){return uuidRegion;\r
}else if (key.equalsIgnoreCase("continental region")){return uuidContinentalRegion;\r
}else if (key.equalsIgnoreCase("world")){return uuidWorld;\r
*/\r
@Override\r
public NamedArea getNamedAreaByKey(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("Kalimantan")){return TdwgArea.getAreaByTdwgAbbreviation("BOR-KA");\r
}else if (key.equalsIgnoreCase("Borneo")){return TdwgArea.getAreaByTdwgAbbreviation("BOR");\r
}else if (key.equalsIgnoreCase("Peninsular Malaysia")){return TdwgArea.getAreaByTdwgAbbreviation("MLY-PM");\r
*/\r
@Override\r
public UUID getNamedAreaUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("Kalimantan")){return uuidKalimantan;\r
}else if (key.equalsIgnoreCase("Borneo")){return uuidBorneo;\r
}else if (key.equalsIgnoreCase("Moluccas")){return uuidMoluccas;\r
*/\r
@Override\r
public PresenceTerm getPresenceTermByKey(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("endemic")){return PresenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA();\r
}else if (key.equalsIgnoreCase("cultivated")){return PresenceTerm.CULTIVATED();\r
}else{\r
*/\r
@Override\r
public UUID getPresenceTermUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
// }else if (key.equalsIgnoreCase("region")){return uuidRegion;\r
}else{\r
return null;\r
\r
@Override\r
public UUID getLanguageUuid(String key) throws UndefinedTransformerMethodException {\r
- if (CdmUtils.isEmpty(key)){return null;\r
+ if (CdmUtils.isBlank(key)){return null;\r
}else if (key.equalsIgnoreCase("fang")){return uuidLanguageFang;\r
}else if (key.equalsIgnoreCase("owimo")){return uuidLanguageOwimo;\r
}else if (key.equalsIgnoreCase("batanga")){return uuidLanguageBatanga;\r