newest development for specimen import
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 24 May 2011 14:23:51 +0000 (14:23 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 24 May 2011 14:23:51 +0000 (14:23 +0000)
.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmImportBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExtensionTypeExcelImport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImportConfigurator.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenCdmExcelImportState.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/SpecimenRow.java
cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.java
cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest-input.xls
cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest.testResultSet-result.xml

index 89b1a1e34f0207dcbf3e25419813a79bb98848eb..b519139869bcc663174a7efd8591db6b3b29d11a 100644 (file)
@@ -336,6 +336,7 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206DataHolde
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206Import.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportConfigurator.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportState.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206Import.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportConfigurator.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/abcd206/in/Abcd206ImportState.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExtensionTypeExcelImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevelExcelImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevellRow.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/PersonParserFormatEnum.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevelExcelImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/NamedAreaLevellRow.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/PersonParserFormatEnum.java -text
index 34447694361e9f2a94c6ceb8aaa93c31b58f7111..ebb151abd7babb534935dea86083e0b76941e3b0 100644 (file)
@@ -68,6 +68,7 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
 \r
        public static final UUID uuidUserDefinedNamedAreaLevelVocabulary = UUID.fromString("255144da-8d95-457e-a327-9752a8f85e5a");\r
        public static final UUID uuidUserDefinedNamedAreaVocabulary = UUID.fromString("b2238399-a3af-4f6d-b7eb-ff5d0899bf1b");\r
 \r
        public static final UUID uuidUserDefinedNamedAreaLevelVocabulary = UUID.fromString("255144da-8d95-457e-a327-9752a8f85e5a");\r
        public static final UUID uuidUserDefinedNamedAreaVocabulary = UUID.fromString("b2238399-a3af-4f6d-b7eb-ff5d0899bf1b");\r
+       public static final UUID uuidUserDefinedExtensionTypeVocabulary = UUID.fromString("e28c1394-1be8-4847-8b81-ab44eb6d5bc8");\r
        \r
        \r
        protected Classification makeTree(STATE state, Reference reference){\r
        \r
        \r
        protected Classification makeTree(STATE state, Reference reference){\r
@@ -122,6 +123,9 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
        \r
        \r
        protected ExtensionType getExtensionType(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
        \r
        \r
        protected ExtensionType getExtensionType(STATE state, UUID uuid, String label, String text, String labelAbbrev){\r
+               return getExtensionType(state, uuid, label, text, labelAbbrev, null);\r
+       }\r
+       protected ExtensionType getExtensionType(STATE state, UUID uuid, String label, String text, String labelAbbrev, TermVocabulary voc){\r
                if (uuid == null){\r
                        uuid = UUID.randomUUID();\r
                }\r
                if (uuid == null){\r
                        uuid = UUID.randomUUID();\r
                }\r
@@ -131,8 +135,10 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
                        if (extensionType == null){\r
                                extensionType = ExtensionType.NewInstance(text, label, labelAbbrev);\r
                                extensionType.setUuid(uuid);\r
                        if (extensionType == null){\r
                                extensionType = ExtensionType.NewInstance(text, label, labelAbbrev);\r
                                extensionType.setUuid(uuid);\r
-                               UUID uuidExtensionTypeVoc = UUID.fromString("117cc307-5bd4-4b10-9b2f-2e14051b3b20");\r
-                               TermVocabulary voc = getVocabularyService().find(uuidExtensionTypeVoc);\r
+                               if (voc == null){\r
+                                       boolean isOrdered = false;\r
+                                       voc = getVocabulary(uuidUserDefinedExtensionTypeVocabulary, "User defined vocabulary for extension types", "User Defined Extension Types", null, null, isOrdered);\r
+                               }\r
                                voc.addTerm(extensionType);\r
                                getTermService().save(extensionType);\r
                        }\r
                                voc.addTerm(extensionType);\r
                                getTermService().save(extensionType);\r
                        }\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExtensionTypeExcelImport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/excel/in/ExtensionTypeExcelImport.java
new file mode 100644 (file)
index 0000000..35c83e0
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy 
+* http://www.e-taxonomy.eu
+* 
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.cdm.io.specimen.excel.in;
+
+import java.util.HashMap;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.io.common.ICdmIO;
+import eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
+
+/**
+ * @author p.kelbert
+ * @created 29.10.2008
+ * @version 1.0
+ */
+@Component
+public class ExtensionTypeExcelImport  extends ExcelImporterBase<SpecimenCdmExcelImportState>  implements ICdmIO<SpecimenCdmExcelImportState> {
+       private static final Logger logger = Logger.getLogger(ExtensionTypeExcelImport.class);
+
+       private static final String WORKSHEET_NAME = "ExtensionTypes";
+
+       private static final String UUID_COLUMN = "UUID";
+       private static final String LABEL_COLUMN = "Label";
+       private static final String ABBREVIATION_COLUMN = "Abbreviation";
+       private static final String DESCRIPTION_COLUMN = "Description";
+       private static final String POSTFIX_COLUMN = "Postfix";
+       
+       
+       public ExtensionTypeExcelImport() {
+               super();
+       }
+       
+       @Override
+       protected boolean analyzeRecord(HashMap<String, String> record, SpecimenCdmExcelImportState state) {
+               boolean success = true;
+       Set<String> keys = record.keySet();
+       
+       NamedAreaLevellRow row = new NamedAreaLevellRow();
+       state.setNamedAreaLabelRow(row);
+       
+       for (String originalKey: keys) {
+               Integer index = 0;
+               String indexedKey = CdmUtils.removeDuplicateWhitespace(originalKey.trim()).toString();
+               String[] split = indexedKey.split("_");
+               String key = split[0];
+               if (split.length > 1){
+                       String indexString = split[split.length - 1];
+                       try {
+                               index = Integer.valueOf(indexString);
+                               } catch (NumberFormatException e) {
+                                       String message = "Index must be integer";
+                                       logger.error(message);
+                                       continue;
+                               }
+               }
+               
+               String value = (String) record.get(indexedKey);
+               if (! StringUtils.isBlank(value)) {
+                       if (logger.isDebugEnabled()) { logger.debug(key + ": " + value); }
+                       value = CdmUtils.removeDuplicateWhitespace(value.trim()).toString();
+               }else{
+                       continue;
+               }
+               
+               if (key.equalsIgnoreCase(UUID_COLUMN)) {
+                       row.setUuid(UUID.fromString(value)); //VALIDATE UUID
+                       } else if(key.equalsIgnoreCase(LABEL_COLUMN)) {
+                               row.setLabel(value);
+                       } else if(key.equalsIgnoreCase(ABBREVIATION_COLUMN)) {
+                               row.setAbbreviation(value);
+                       } else if(key.equalsIgnoreCase(DESCRIPTION_COLUMN)) {
+                               row.setDescription(value);
+                       } else if(key.equalsIgnoreCase(POSTFIX_COLUMN)) {
+                               row.setPostfix(value);
+                       }else {
+                               success = false;
+                               logger.error("Unexpected column header " + key);
+                       }
+       }
+       return success;
+       }
+
+
+       @Override
+       protected boolean firstPass(SpecimenCdmExcelImportState state) {
+               NamedAreaLevellRow row = state.getNamedAreaLabelRow();
+               
+               //level
+               UUID uuid = row.getUuid();
+               String label = row.getAbbreviation();
+               String text = row.getDescription();
+               String labelAbbrev = row.getAbbreviation();
+               
+               ExtensionType term = getExtensionType(state, uuid, label, text, labelAbbrev);
+               
+               if (StringUtils.isNotBlank(row.getPostfix())){
+                       state.putPostfixExtensionType(row.getPostfix(), term);
+               }
+               
+               //save
+               getTermService().save(term);
+               return true;
+       }
+
+
+
+       @Override
+       protected boolean secondPass(SpecimenCdmExcelImportState state) {
+               //no second path defined yet
+               return true;
+       }
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
+        */
+       @Override
+       protected boolean doCheck(SpecimenCdmExcelImportState state) {
+               logger.warn("Validation not yet implemented for " + this.getClass().getSimpleName());
+               return true;
+       }
+
+       protected String getWorksheetName() {
+               return WORKSHEET_NAME;
+       }
+       
+       @Override
+       protected boolean needsNomenclaturalCode() {
+               return false;
+       }
+
+
+       @Override
+       protected boolean isIgnore(SpecimenCdmExcelImportState state) {
+               return !state.getConfig().isDoExtensionTypes();
+       }
+
+
+}
index 834623ca850a781a925348c248284687a6a60b5d..c9911ffbd960b840e612141ce30e03d319b11a64 100644 (file)
@@ -29,13 +29,15 @@ import eu.etaxonomy.cdm.io.common.ICdmIO;
 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
 import eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase;
 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenRow.DeterminationLight;
 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
 import eu.etaxonomy.cdm.io.excel.common.ExcelImporterBase;
 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenRow.DeterminationLight;
-import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenRow.LeveledArea;
+import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenRow.PostfixTerm;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.AnnotationType;
 import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.AnnotationType;
+import eu.etaxonomy.cdm.model.common.Extension;
+import eu.etaxonomy.cdm.model.common.ExtensionType;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
@@ -120,6 +122,9 @@ public class SpecimenCdmExcelImport  extends ExcelImporterBase<SpecimenCdmExcelI
        private static final String DETERMINED_BY_COLUMN = "DeterminationBy";
        private static final String DETERMINED_WHEN_COLUMN = "DeterminationWhen";
        private static final String DETERMINATION_NOTES_COLUMN = "DeterminationNote";
        private static final String DETERMINED_BY_COLUMN = "DeterminationBy";
        private static final String DETERMINED_WHEN_COLUMN = "DeterminationWhen";
        private static final String DETERMINATION_NOTES_COLUMN = "DeterminationNote";
+       private static final String EXTENSION_COLUMN = "Ext(ension)?";
+       
+       
 
        public SpecimenCdmExcelImport() {
                super();
 
        public SpecimenCdmExcelImport() {
                super();
@@ -249,6 +254,14 @@ public class SpecimenCdmExcelImport  extends ExcelImporterBase<SpecimenCdmExcelI
                                row.putSourceReference(index, getOrMakeReference(state, value));        
                        } else if(key.equalsIgnoreCase(ID_IN_SOURCE_COLUMN)) {
                                row.putIdInSource(index, value);                
                                row.putSourceReference(index, getOrMakeReference(state, value));        
                        } else if(key.equalsIgnoreCase(ID_IN_SOURCE_COLUMN)) {
                                row.putIdInSource(index, value);                
+                       } else if(key.matches(EXTENSION_COLUMN)) {
+                               if (postfix != null){
+                                       row.addExtensionTypes(postfix, value);          
+                               }else{
+                                       logger.warn("Extension without postfix not yet implemented");
+                               }
+                       
+                       
                        }else {
                                success = false;
                                logger.error("Unexpected column header " + key);
                        }else {
                                success = false;
                                logger.error("Unexpected column header " + key);
@@ -298,6 +311,7 @@ public class SpecimenCdmExcelImport  extends ExcelImporterBase<SpecimenCdmExcelI
 //                     facade.innerDerivedUnit().addSpecimenTypeDesignation(designation);
                }
                handleDeterminations(state, row, facade);
 //                     facade.innerDerivedUnit().addSpecimenTypeDesignation(designation);
                }
                handleDeterminations(state, row, facade);
+               handleExtensions(facade,row, state);
                
                
                //save
                
                
                //save
@@ -305,17 +319,32 @@ public class SpecimenCdmExcelImport  extends ExcelImporterBase<SpecimenCdmExcelI
                return true;
        }
 
                return true;
        }
 
+       private void handleExtensions(DerivedUnitFacade facade, SpecimenRow row, SpecimenCdmExcelImportState state) {
+               List<PostfixTerm> extensionTypes = row.getExtensionTypes();
+               
+               for (PostfixTerm exType : extensionTypes){
+                       ExtensionType extensionType = state.getPostfixExtensionType(exType.postfix);
+                       
+                       Extension extension = Extension.NewInstance();
+                       extension.setType(extensionType);
+                       extension.setValue(exType.term);
+                       facade.innerDerivedUnit().addExtension(extension);
+               }
+               
+       }
+
+
        private void handleAreas(DerivedUnitFacade facade, SpecimenRow row, SpecimenCdmExcelImportState state) {
        private void handleAreas(DerivedUnitFacade facade, SpecimenRow row, SpecimenCdmExcelImportState state) {
-               List<LeveledArea> areas = row.getLeveledAreas();
+               List<PostfixTerm> areas = row.getLeveledAreas();
                
                
-               for (LeveledArea lArea : areas){
+               for (PostfixTerm lArea : areas){
                        String description = null;
                        String abbrev = null;
                        NamedAreaType type = null;
                        String description = null;
                        String abbrev = null;
                        NamedAreaType type = null;
-                       String key = lArea.areaLevel + "_" + lArea.area;
+                       String key = lArea.postfix + "_" + lArea.term;
                        UUID areaUuid = state.getArea(key);
                        UUID areaUuid = state.getArea(key);
-                       NamedAreaLevel level = state.getPostfixLevel(lArea.areaLevel);
-                       NamedArea area = getNamedArea(state, areaUuid, lArea.area, description, abbrev, type, level);
+                       NamedAreaLevel level = state.getPostfixLevel(lArea.postfix);
+                       NamedArea area = getNamedArea(state, areaUuid, lArea.term, description, abbrev, type, level);
                        facade.addCollectingArea(area);
                        if (areaUuid == null){
                                state.putArea(key, area.getUuid());
                        facade.addCollectingArea(area);
                        if (areaUuid == null){
                                state.putArea(key, area.getUuid());
index cdd2018065395792c2f757704662f15bfa05d204..761d55ea534b1c5f9828a859b7e63af4627cf467 100644 (file)
@@ -18,7 +18,6 @@ import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;\r
 import eu.etaxonomy.cdm.io.excel.common.ExcelImportConfiguratorBase;\r
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;\r
 import eu.etaxonomy.cdm.io.excel.common.ExcelImportConfiguratorBase;\r
-import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 \r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 \r
@@ -39,6 +38,8 @@ public class SpecimenCdmExcelImportConfigurator extends ExcelImportConfiguratorB
        //new\r
        private boolean doSpecimen = true;\r
        private boolean doAreaLevels = true;\r
        //new\r
        private boolean doSpecimen = true;\r
        private boolean doAreaLevels = true;\r
+       private boolean doExtensionTypes = true;\r
+       \r
        \r
        private boolean useCountry;  //if isocountry and country is available, use country instead of isocountry \r
        private PersonParserFormatEnum personParserFormat = PersonParserFormatEnum.POSTFIX;  //\r
        \r
        private boolean useCountry;  //if isocountry and country is available, use country instead of isocountry \r
        private PersonParserFormatEnum personParserFormat = PersonParserFormatEnum.POSTFIX;  //\r
@@ -55,7 +56,8 @@ public class SpecimenCdmExcelImportConfigurator extends ExcelImportConfiguratorB
        protected void makeIoClassList(){\r
                ioClassList = new Class[]{\r
                        NamedAreaLevelExcelImport.class,\r
        protected void makeIoClassList(){\r
                ioClassList = new Class[]{\r
                        NamedAreaLevelExcelImport.class,\r
-                       SpecimenCdmExcelImport.class\r
+                       SpecimenCdmExcelImport.class,\r
+                       ExtensionTypeExcelImport.class\r
                };\r
        }\r
        \r
                };\r
        }\r
        \r
@@ -203,6 +205,14 @@ public class SpecimenCdmExcelImportConfigurator extends ExcelImportConfiguratorB
                return preferNameCache;\r
        }\r
 \r
                return preferNameCache;\r
        }\r
 \r
+       public void setDoExtensionTypes(boolean doExtensionTypes) {\r
+               this.doExtensionTypes = doExtensionTypes;\r
+       }\r
+\r
+       public boolean isDoExtensionTypes() {\r
+               return doExtensionTypes;\r
+       }\r
+\r
        \r
        \r
        \r
        \r
        \r
        \r
index ea145e8f82243a23054e5c3e458cb57cb199fa44..5f238dcddf72cf1728d106888b741768327e184e 100644 (file)
@@ -19,7 +19,7 @@ import org.apache.log4j.Logger;
 import eu.etaxonomy.cdm.io.excel.common.ExcelImportState;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.io.excel.common.ExcelImportState;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
 import eu.etaxonomy.cdm.model.agent.Team;\r
-import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.common.ExtensionType;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.occurrence.Collection;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.occurrence.Collection;\r
@@ -46,6 +46,8 @@ public class SpecimenCdmExcelImportState extends ExcelImportState<SpecimenCdmExc
        \r
        \r
        private Map<String, NamedAreaLevel> postfixLevels = new HashMap<String, NamedAreaLevel>();\r
        \r
        \r
        private Map<String, NamedAreaLevel> postfixLevels = new HashMap<String, NamedAreaLevel>();\r
+       private Map<String, ExtensionType> postfixExtensionTypes = new HashMap<String, ExtensionType>();\r
+       \r
        \r
        \r
        public SpecimenCdmExcelImportState(SpecimenCdmExcelImportConfigurator config) {\r
        \r
        \r
        public SpecimenCdmExcelImportState(SpecimenCdmExcelImportConfigurator config) {\r
@@ -116,6 +118,15 @@ public class SpecimenCdmExcelImportState extends ExcelImportState<SpecimenCdmExc
                return this.postfixLevels.put(postfix, level);\r
                \r
        }\r
                return this.postfixLevels.put(postfix, level);\r
                \r
        }\r
+       \r
+       public ExtensionType getPostfixExtensionType(String postfix){\r
+               return this.postfixExtensionTypes.get(postfix);\r
+       }\r
+       \r
+       public ExtensionType putPostfixExtensionType(String postfix, ExtensionType type) {\r
+               return this.postfixExtensionTypes.put(postfix, type);\r
+               \r
+       }\r
 \r
        public UUID putArea(String key, UUID areaUuid) {\r
                return this.areas.put(key, areaUuid);\r
 \r
        public UUID putArea(String key, UUID areaUuid) {\r
                return this.areas.put(key, areaUuid);\r
index 9408ce6990e75e38e96830333a861bc179448ca9..71eeb6c120d89efec1dcb10ebd756f531a5e3294 100644 (file)
@@ -11,23 +11,15 @@ package eu.etaxonomy.cdm.io.specimen.excel.in;
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
 \r
 import java.util.ArrayList;\r
 import java.util.List;\r
-import java.util.Map;\r
 import java.util.TreeMap;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
 import java.util.TreeMap;\r
 import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
-import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenRow.LeveledArea;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
-import eu.etaxonomy.cdm.model.location.NamedArea;\r
-import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\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.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 \r
 /**\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 \r
 /**\r
@@ -71,16 +63,17 @@ public class SpecimenRow {
        private TreeMap<Integer, String> collectors = new TreeMap<Integer, String>();\r
        private TreeMap<Integer, SpecimenTypeDesignation> types = new TreeMap<Integer, SpecimenTypeDesignation>();\r
        private TreeMap<Integer, DeterminationLight> determinations = new TreeMap<Integer, DeterminationLight>();\r
        private TreeMap<Integer, String> collectors = new TreeMap<Integer, String>();\r
        private TreeMap<Integer, SpecimenTypeDesignation> types = new TreeMap<Integer, SpecimenTypeDesignation>();\r
        private TreeMap<Integer, DeterminationLight> determinations = new TreeMap<Integer, DeterminationLight>();\r
-       private List<LeveledArea> levels  = new ArrayList<LeveledArea>(); \r
+       private List<PostfixTerm> levels  = new ArrayList<PostfixTerm>(); \r
+       private List<PostfixTerm> extensionTypes  = new ArrayList<PostfixTerm>(); \r
        \r
 \r
        \r
        public SpecimenRow() {\r
        }\r
        \r
        \r
 \r
        \r
        public SpecimenRow() {\r
        }\r
        \r
-       protected class LeveledArea{\r
-               String area;\r
-               String areaLevel;\r
+       protected class PostfixTerm{\r
+               String term;\r
+               String postfix;\r
        }\r
        \r
 \r
        }\r
        \r
 \r
@@ -551,15 +544,27 @@ public class SpecimenRow {
 \r
 \r
        public void addLeveledArea(String levelPostfix, String value) {\r
 \r
 \r
        public void addLeveledArea(String levelPostfix, String value) {\r
-               LeveledArea area = new LeveledArea();\r
-               area.area = value;\r
-               area.areaLevel = levelPostfix;\r
+               PostfixTerm area = new PostfixTerm();\r
+               area.term = value;\r
+               area.postfix = levelPostfix;\r
                this.levels.add(area);\r
        }\r
        \r
                this.levels.add(area);\r
        }\r
        \r
-       public List<LeveledArea> getLeveledAreas(){\r
+       public List<PostfixTerm> getLeveledAreas(){\r
                return levels;\r
        }\r
                return levels;\r
        }\r
+       \r
+\r
+       public void addExtensionTypes(String levelPostfix, String value) {\r
+               PostfixTerm term = new PostfixTerm();\r
+               term.term = value;\r
+               term.postfix = levelPostfix;\r
+               this.extensionTypes.add(term);\r
+       }\r
+       \r
+       public List<PostfixTerm> getExtensionTypes(){\r
+               return extensionTypes;\r
+       }\r
 \r
        \r
 }\r
 \r
        \r
 }\r
index 86922a0088f38a13fc548c726f50b76b383084fd..886b44815eb6ede4c4de4b3a508d3a9718848d5d 100644 (file)
@@ -103,7 +103,7 @@ public class ExcelSpecimenImportExampleTest extends CdmTransactionalIntegrationT
                        FileOutputStream myOut = new FileOutputStream(file);\r
                        System.out.println(file.getAbsolutePath());\r
                        printDataSet(myOut, new String[]{"AgentBase","Collection","DerivationEvent","DeterminationEvent","DescriptionElementBase",\r
                        FileOutputStream myOut = new FileOutputStream(file);\r
                        System.out.println(file.getAbsolutePath());\r
                        printDataSet(myOut, new String[]{"AgentBase","Collection","DerivationEvent","DeterminationEvent","DescriptionElementBase",\r
-                                       "DescriptionBase","GatheringEvent","LanguageString","OriginalSourceBase",\r
+                                       "DescriptionBase","Extension","GatheringEvent","LanguageString","OriginalSourceBase",\r
                                        "Reference","TaxonBase","TaxonNameBase","TypeDesignationBase",\r
                                        "TypeDesignationBase_taxonnamebase","SpecimenOrObservationBase","DefinedTermBase","TermVocabulary","Representation"});\r
 //                     printDataSet(myOut);\r
                                        "Reference","TaxonBase","TaxonNameBase","TypeDesignationBase",\r
                                        "TypeDesignationBase_taxonnamebase","SpecimenOrObservationBase","DefinedTermBase","TermVocabulary","Representation"});\r
 //                     printDataSet(myOut);\r
index 4e64020f50c2d83968737335b512b594e0871d03..73a017be59ec75b80df7fab1ab47ec8e0e9535e5 100644 (file)
Binary files a/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest-input.xls and b/cdmlib-io/src/test/resources/eu/etaxonomy/cdm/io/specimen/excel/in/ExcelSpecimenImportExampleTest-input.xls differ
index ddf9093fc2f8ea1e70037c524bdd5a82672a1bcf..70dbc4f747a269df13ac3ae4e4ad3fb87b2fedb6 100644 (file)
@@ -20,6 +20,9 @@
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="16" INDESCRIPTION_ID="14"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="17" INDESCRIPTION_ID="14"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="IndividualsAssociation" ID="18" FEATURE_ID="965" INDESCRIPTION_ID="15" ASSOCIATEDSPECIMENOROBSERVATION_ID="14"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="16" INDESCRIPTION_ID="14"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="17" INDESCRIPTION_ID="14"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="IndividualsAssociation" ID="18" FEATURE_ID="965" INDESCRIPTION_ID="15" ASSOCIATEDSPECIMENOROBSERVATION_ID="14"/>\r
+  <EXTENSION ID="10" EXTENDEDOBJ_TYPE="eu.etaxonomy.cdm.model.occurrence.Specimen" EXTENDEDOBJ_ID="10" VALUE="Label name: Vaccinium stanleyi Schweinf. ::"/>\r
+  <EXTENSION ID="11" EXTENDEDOBJ_TYPE="eu.etaxonomy.cdm.model.occurrence.Observation" EXTENDEDOBJ_ID="12" VALUE="Label name: Philippia johnstonii engl. :: Det. as: Erica mannii (Hook.f.) Beentje by Geerinck D. (BR) in: Nov 2007. (Verification # 57888):: Det. as: Erica johnstonii (Schweinf. ex Engl.) Dorr by : Geerinck D. (BR) in Aug 2007. (Verification #"/>\r
+  <EXTENSION ID="12" EXTENDEDOBJ_TYPE="eu.etaxonomy.cdm.model.occurrence.Specimen" EXTENDEDOBJ_ID="14" VALUE="Label name: Erica arborea ::"/>\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="06-Mrz-1959" EXACTLOCATION_REFERENCESYSTEM_ID="2084" COUNTRY_ID="705"/>\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="07-Apr-1980 - 06-Mai-1980" EXACTLOCATION_REFERENCESYSTEM_ID="2085" COUNTRY_ID="675"/>\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="10.01.1874" EXACTLOCATION_REFERENCESYSTEM_ID="2086" />\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="06-Mrz-1959" EXACTLOCATION_REFERENCESYSTEM_ID="2084" COUNTRY_ID="705"/>\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="07-Apr-1980 - 06-Mai-1980" EXACTLOCATION_REFERENCESYSTEM_ID="2085" COUNTRY_ID="675"/>\r
   <GATHERINGEVENT TIMEPERIOD_FREETEXT="10.01.1874" EXACTLOCATION_REFERENCESYSTEM_ID="2086" />\r
@@ -57,8 +60,8 @@
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2103" PROTECTEDTITLECACHE="false" TITLECACHE="Test" ORDERINDEX="5" VOCABULARY_ID="48" LEVEL_ID="2094"/>\r
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2104" PROTECTEDTITLECACHE="false" TITLECACHE="II" ORDERINDEX="6" VOCABULARY_ID="48" LEVEL_ID="2098"/>\r
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2105" PROTECTEDTITLECACHE="false" TITLECACHE="Any country" ORDERINDEX="7" VOCABULARY_ID="48" LEVEL_ID="931" TYPE_ID="929"/>\r
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2103" PROTECTEDTITLECACHE="false" TITLECACHE="Test" ORDERINDEX="5" VOCABULARY_ID="48" LEVEL_ID="2094"/>\r
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2104" PROTECTEDTITLECACHE="false" TITLECACHE="II" ORDERINDEX="6" VOCABULARY_ID="48" LEVEL_ID="2098"/>\r
   <DEFINEDTERMBASE DTYPE="NamedArea" ID="2105" PROTECTEDTITLECACHE="false" TITLECACHE="Any country" ORDERINDEX="7" VOCABULARY_ID="48" LEVEL_ID="931" TYPE_ID="929"/>\r
+  <DEFINEDTERMBASE DTYPE="ExtensionType" ID="2106" PROTECTEDTITLECACHE="false" TITLECACHE="DH" VOCABULARY_ID="49"/>\r
   <TERMVOCABULARY DTYPE="OrderedTermVocabulary" ID="47" UUID="255144da-8d95-457e-a327-9752a8f85e5a" PROTECTEDTITLECACHE="false" TITLECACHE="User Defined Named Area Levels"/>\r
   <TERMVOCABULARY DTYPE="OrderedTermVocabulary" ID="48" UUID="b2238399-a3af-4f6d-b7eb-ff5d0899bf1b" PROTECTEDTITLECACHE="false" TITLECACHE="User Defined Named Areas"/>\r
   <TERMVOCABULARY DTYPE="OrderedTermVocabulary" ID="47" UUID="255144da-8d95-457e-a327-9752a8f85e5a" PROTECTEDTITLECACHE="false" TITLECACHE="User Defined Named Area Levels"/>\r
   <TERMVOCABULARY DTYPE="OrderedTermVocabulary" ID="48" UUID="b2238399-a3af-4f6d-b7eb-ff5d0899bf1b" PROTECTEDTITLECACHE="false" TITLECACHE="User Defined Named Areas"/>\r
-   \r
-  \r
+  <TERMVOCABULARY DTYPE="TermVocabulary" ID="49" UUID="e28c1394-1be8-4847-8b81-ab44eb6d5bc8" PROTECTEDTITLECACHE="false" TITLECACHE="User Defined Extension Types"/>\r
 </dataset>\r
 </dataset>\r