updates to the markup import
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 30 Apr 2013 17:07:21 +0000 (17:07 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 30 Apr 2013 17:07:21 +0000 (17:07 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupDocumentImportNoComponent.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupImportBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/markup/MarkupKeyImport.java

index 7f44aa49451fc718b369ef5577d9885ed51467c1..449805c9b811cf48e65a00e0ce5f2cd2785a8134 100644 (file)
@@ -709,30 +709,6 @@ public class MarkupDocumentImportNoComponent extends MarkupImportBase {
                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
@@ -1770,7 +1746,7 @@ public class MarkupDocumentImportNoComponent extends MarkupImportBase {
        }\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
@@ -1828,9 +1804,8 @@ public class MarkupDocumentImportNoComponent extends MarkupImportBase {
         * @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
@@ -1893,7 +1868,8 @@ public class MarkupDocumentImportNoComponent extends MarkupImportBase {
                        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
index 58610f4c0db7277bef90fbe8e461fef9429c71ac..0d60483167ce2c2a42cb71c81124cfdd70584e9b 100644 (file)
@@ -48,6 +48,9 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
 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
@@ -706,6 +709,37 @@ public abstract class MarkupImportBase  {
        \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
index 707a7e67971f87b05e70f0a635bc3040a5886382..53aa22bf333e45214498d1e1b3ce8f14b80ce925 100644 (file)
@@ -261,12 +261,16 @@ public class MarkupKeyImport  extends MarkupImportBase  {
                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
@@ -289,14 +293,18 @@ public class MarkupKeyImport  extends MarkupImportBase  {
                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
@@ -313,7 +321,7 @@ public class MarkupKeyImport  extends MarkupImportBase  {
                        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