Latest updates to Specimen Excel import
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / excel / common / ExcelTaxonOrSpecimenImportBase.java
index 09b7a964b013a7174ddb40ccfc19ea7f0f0f1557..3fdf40fcdf9df044b4da5c48ef1870bc50cf870b 100644 (file)
@@ -38,19 +38,22 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
 \r
 \r
        protected static final String CDM_UUID_COLUMN = "(?i)(CdmUuid)";\r
-\r
+       protected static final String IGNORE_COLUMN = "(?i)(Ignore|Not)";\r
+       \r
        \r
        protected static final String RANK_COLUMN = "(?i)(Rank)";\r
        protected static final String FULL_NAME_COLUMN = "(?i)(FullName)";\r
+       protected static final String TAXON_UUID_COLUMN = "(?i)(taxonUuid)";\r
        protected static final String FAMILY_COLUMN = "(?i)(Family)";\r
        protected static final String GENUS_COLUMN = "(?i)(Genus)";\r
        protected static final String SPECIFIC_EPITHET_COLUMN = "(?i)(SpecificEpi(thet)?)";\r
        protected static final String INFRASPECIFIC_EPITHET_COLUMN = "(?i)(InfraSpecificEpi(thet)?)";\r
+       \r
+       protected static final String LANGUAGE = "(?i)(Language)";\r
 \r
        @Override\r
-       protected boolean analyzeRecord(HashMap<String, String> record, STATE state) {\r
-               boolean success = true;\r
-       Set<String> keys = record.keySet();\r
+       protected void analyzeRecord(HashMap<String, String> record, STATE state) {\r
+               Set<String> keys = record.keySet();\r
        \r
        ROW row = createDataHolderRow();\r
        state.setCurrentRow(row);\r
@@ -61,12 +64,12 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
                        continue;\r
                }\r
                if (isBaseColumn(keyValue)){\r
-                       success &= handleBaseColumn(keyValue, row);\r
+                       handleBaseColumn(keyValue, row);\r
                }else{\r
-                       success &= analyzeSingleValue(keyValue, state);\r
+                       analyzeSingleValue(keyValue, state);\r
                }\r
        }\r
-       return success;\r
+       return;\r
        }\r
        \r
        protected abstract ROW createDataHolderRow();\r
@@ -77,7 +80,7 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
         * @param state \r
         * @return\r
         */\r
-       protected abstract boolean analyzeSingleValue(KeyValue keyValue, STATE state);\r
+       protected abstract void analyzeSingleValue(KeyValue keyValue, STATE state);\r
 \r
        /**\r
         *      DataHolder class for all key and value information for a cell.\r
@@ -111,6 +114,7 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
                Author("RefAuthor"),\r
                Title("RefTitle"),\r
                Year("RefYear"),\r
+               RefExtension("RefExt(ension)?"),\r
                Language("Lang") //strictly not a reference, so some refactoring/renaming is needed\r
                ;\r
                \r
@@ -169,7 +173,7 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
                        keyValue.index = 0;\r
                }\r
                //source\r
-               if (split.length > current){\r
+               if (split.length > current && ! isIgnore(keyValue.key)){\r
                        //refType\r
                        if (isRefType(split[current])){\r
                                String refTypeStr = split[current++];\r
@@ -202,7 +206,7 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
                        }\r
                        \r
                }\r
-               if (split.length > current){\r
+               if (split.length > current  && ! isIgnore(keyValue.key)){\r
                        String message = "Key has unexpected part at position %d of key. %s (and following parts) can not be handled";\r
                        message = String.format(message, current, split[current]);\r
                        fireWarningEvent(message, state, 10);\r
@@ -223,6 +227,10 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
        }\r
 \r
        \r
+       private boolean isIgnore(String key) {\r
+               return key.matches(IGNORE_COLUMN);\r
+       }\r
+\r
        private boolean isRefType(String string) {\r
                return SourceType.isKeyName(string);\r
        }\r
@@ -241,6 +249,9 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
                String key = keyValue.key;\r
                if (key.matches(CDM_UUID_COLUMN)){\r
                        return true;\r
+               } else if(isIgnore(keyValue.key)) {\r
+                       logger.debug("Ignored column" + keyValue.originalKey);\r
+                       return true;\r
                }\r
                return false;\r
        }\r
@@ -258,6 +269,7 @@ public abstract class ExcelTaxonOrSpecimenImportBase<STATE extends ExcelImportSt
        protected boolean analyzeFeatures(STATE state, KeyValue keyValue) {\r
                String key = keyValue.key;\r
                Pager<DefinedTermBase> features = getTermService().findByTitle(Feature.class, key, null, null, null, null, null, null);\r
+       \r
                if (features.getCount() > 1){\r
                        String message = "More than one feature found matching key " + key;\r
                        fireWarningEvent(message, state, 4);\r