return taxon;\r
}\r
\r
- /**\r
- * @param state\r
- * @param rank\r
- * @return\r
- */\r
- private NonViralName<?> createNameByCode(MarkupImportState state, Rank rank) {\r
- NonViralName<?> name;\r
- NomenclaturalCode nc = makeNomenclaturalCode(state);\r
- name = (NonViralName<?>) nc.getNewTaxonNameInstance(rank);\r
- return name;\r
- }\r
-\r
- /**\r
- * @param state\r
- * @return\r
- */\r
- private NomenclaturalCode makeNomenclaturalCode(MarkupImportState state) {\r
- NomenclaturalCode nc = state.getConfig().getNomenclaturalCode();\r
- if (nc == null) {\r
- nc = NomenclaturalCode.ICBN; // default;\r
- }\r
- return nc;\r
- }\r
-\r
private String handleTaxonTitle(MarkupImportState state, XMLEventReader reader, XMLEvent parentEvent) throws XMLStreamException {\r
//attributes\r
String text = "";\r
}\r
\r
private void fillName(MarkupImportState state, Map<String, String> nameMap,\r
- NonViralName name, XMLEvent event) {\r
+ NonViralName<?> name, XMLEvent event) {\r
\r
// Ranks: family, subfamily, tribus, genus, subgenus, section,\r
// subsection, species, subspecies, variety, subvariety, forma\r
* @param event\r
* @param infrankStr\r
*/\r
- private void makeRankDecision(MarkupImportState state,\r
- Map<String, String> nameMap, NonViralName<?> name, XMLEvent event,\r
- String infrankStr) {\r
+ private void makeRankDecision(MarkupImportState state, Map<String, String> nameMap, \r
+ NonViralName<?> name, XMLEvent event, String infrankStr) {\r
// TODO ranks\r
for (String key : nameMap.keySet()) {\r
Rank rank = makeRank(state, key, false);\r
return value;\r
}else{\r
String result = "";\r
- result += value.substring(0,1).toUpperCase();\r
+ value = value.trim();\r
+ result += value.trim().substring(0,1).toUpperCase();\r
if (value.length()>1){\r
result += value.substring(1).toLowerCase();\r
}\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
import eu.etaxonomy.cdm.model.location.NamedAreaType;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.reference.Reference;\r
import eu.etaxonomy.cdm.model.taxon.Classification;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
\r
// *************************************** Concrete methods **********************************************/\r
\r
+\r
+ /**\r
+ * Creates a {@link NonViralName} object depending on the defined {@link NomenclaturalCode}\r
+ * and the given parameters.\r
+ * @param state\r
+ * @param rank\r
+ * @return\r
+ */\r
+ protected NonViralName<?> createNameByCode(MarkupImportState state, Rank rank) {\r
+ NonViralName<?> name;\r
+ NomenclaturalCode nc = makeNomenclaturalCode(state);\r
+ name = (NonViralName<?>) nc.getNewTaxonNameInstance(rank);\r
+ return name;\r
+ }\r
+ \r
+\r
+ /**\r
+ * Returns the {@link NomenclaturalCode} for this import. Default is {@link NomenclaturalCode#ICBN} if\r
+ * no code is defined.\r
+ * @param state\r
+ * @return\r
+ */\r
+ protected NomenclaturalCode makeNomenclaturalCode(MarkupImportState state) {\r
+ NomenclaturalCode nc = state.getConfig().getNomenclaturalCode();\r
+ if (nc == null) {\r
+ nc = NomenclaturalCode.ICBN; // default;\r
+ }\r
+ return nc;\r
+ }\r
+\r
+ \r
\r
/**\r
* Reads character data. Any element other than character data or the ending\r
String taxonKeyStr = makeTaxonKey(taxonCData, state.getCurrentTaxon(), parentEvent.getLocation());\r
taxonNotExists = taxonNotExists || (isBlank(num) && state.isOnlyNumberedTaxaExist());\r
if (taxonNotExists){\r
- Taxon taxon = Taxon.NewInstance(BotanicalName.NewInstance(Rank.UNKNOWN_RANK()), null);\r
+ NonViralName<?> name = createNameByCode(state, Rank.UNKNOWN_RANK());\r
+ Taxon taxon = Taxon.NewInstance(name, null);\r
taxon.getName().setTitleCache(taxonKeyStr, true);\r
node.setTaxon(taxon);\r
}else{\r
UnmatchedLeadsKey unmatched = UnmatchedLeadsKey.NewInstance(num, taxonKeyStr);\r
state.getUnmatchedLeads().addKey(unmatched, node);\r
+// String message = "The following key leads are unmatched: %s";\r
+// message = String.format(message, state.getUnmatchedLeads().toString());\r
+// fireWarningEvent(message, parentEvent, 6);\r
}\r
return;\r
}\r
NonViralName<?> name = CdmBase.deproxy(taxon.getName(), NonViralName.class);\r
String strGenusName = name.getGenusOrUninomial();\r
\r
- String bracketPattern = ".*\\([^\\(\\)]*\\).*";\r
- if (strGoto.matches(bracketPattern)){\r
- fireWarningEvent("toTaxon has bracket", makeLocationStr(location), 4);\r
+ final String bracketPattern = "\\([^\\(\\)]*\\)";\r
+ final String bracketPatternSomewhere = String.format(".*%s.*", bracketPattern);\r
+ if (strGoto.matches(bracketPatternSomewhere)){\r
+ fireWarningEvent("toTaxon has bracket: " + strGoto, makeLocationStr(location), 4);\r
strGoto = strGoto.replaceAll(bracketPattern, ""); //replace all brackets\r
}\r
strGoto = strGoto.replaceAll("\\s+", " "); //replace multiple whitespaces by exactly one whitespace\r
\r
- strGoto = strGoto.trim(); \r
+ strGoto = strGoto.trim();\r
+ strGoto = strGoto.replaceAll("\\s+\\.", "\\."); // " ." may be created by bracket replacement\r
+ strGoto = strGoto.replaceAll("\\.\\.", "\\."); //replace\r
+ \r
String[] split = strGoto.split("\\s");\r
//handle single epithets and markers\r
for (int i = 0; i<split.length; i++){\r
result = (result + " " + split[i]).trim();\r
}\r
//remove trailing "."\r
- if (result.endsWith(".")){\r
+ while (result.endsWith(".")){\r
result = result.substring(0, result.length()-1).trim();\r
}\r
return result;\r