add stateData to imports
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 6 Sep 2012 13:30:34 +0000 (13:30 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 6 Sep 2012 13:30:34 +0000 (13:30 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmImportBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ImportStateBase.java

index 72e4d2616d767338c5c0465506767809f3449a8a..bc3bf5c5592f82378ecbd734fd5e9c4fd9c9b13a 100644 (file)
@@ -50,6 +50,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.description.State;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TextData;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
@@ -85,6 +86,7 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
        public static final UUID uuidUserDefinedExtensionTypeVocabulary = UUID.fromString("e28c1394-1be8-4847-8b81-ab44eb6d5bc8");\r
        public static final UUID uuidUserDefinedReferenceSystemVocabulary = UUID.fromString("467591a3-10b4-4bf1-9239-f06ece33e90a");\r
        public static final UUID uuidUserDefinedFeatureVocabulary = UUID.fromString("fe5fccb3-a2f2-4b97-b199-6e2743cf1627");\r
+       public static final UUID uuidUserDefinedStateVocabulary = UUID.fromString("f7cddb49-8392-4db1-8640-65b48a0e6d13");\r
        public static final UUID uuidUserDefinedTaxonRelationshipTypeVocabulary = UUID.fromString("31a324dc-408d-4877-891f-098db21744c6");\r
        public static final UUID uuidUserDefinedAnnotationTypeVocabulary = UUID.fromString("cd9ecdd2-9cae-4890-9032-ad83293ae883");\r
        public static final UUID uuidUserDefinedMarkerTypeVocabulary = UUID.fromString("5f02a261-fd7d-4fce-bbe4-21472de8cd51");\r
@@ -437,6 +439,53 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
                return namedAreaLevel;\r
        }\r
        \r
+       /**\r
+        * Returns a {@link State} if it exists. <code>null</code> otherwise.\r
+        * @param state\r
+        * @param uuid\r
+        * @return {@link State}\r
+        */\r
+       protected State getStateTerm(STATE state, UUID uuid){\r
+               return getStateTerm(state, uuid, null, null, null, null);\r
+       }\r
+\r
+       \r
+       /**\r
+        * Returns a {@link State} for a given uuid by first checking if the uuid has already been used in this import, if not\r
+        * checking if the state exists in the database, if not creating it anew (with vocabulary etc.).\r
+        * If label, text and labelAbbrev are all <code>null</code> no state is created.\r
+        * @param importState\r
+        * @param uuid\r
+        * @param label\r
+        * @param text\r
+        * @param labelAbbrev\r
+        * @param voc\r
+        * @return\r
+        */\r
+       protected State getStateTerm(STATE importState, UUID uuid, String label, String text, String labelAbbrev, OrderedTermVocabulary<State> voc) {\r
+               if (uuid == null){\r
+                       return null;\r
+               }\r
+               State stateTerm = importState.getStateTerm(uuid);\r
+               if (stateTerm == null){\r
+                       stateTerm = CdmBase.deproxy(getTermService().find(uuid), State.class);\r
+                       if (stateTerm == null && ! hasNoLabel(label, text, labelAbbrev)){\r
+                               stateTerm = State.NewInstance(text, label, labelAbbrev);\r
+                               stateTerm.setUuid(uuid);\r
+                               if (voc == null){\r
+                                       boolean isOrdered = true;\r
+                                       TermVocabulary<State> orderedVoc = getVocabulary(uuidUserDefinedFeatureVocabulary, "User defined vocabulary for states used by Categorical Data", "User Defined States", null, null, isOrdered, stateTerm);\r
+                                       voc = CdmBase.deproxy(orderedVoc, OrderedTermVocabulary.class);\r
+                               }\r
+                               voc.addTerm(stateTerm);\r
+                               getTermService().save(stateTerm);\r
+                       }else{\r
+                               logger.warn("No label provided for new state with uuid " + uuid);\r
+                       }\r
+                       importState.putStateTerm(stateTerm);\r
+               }\r
+               return stateTerm;\r
+       }\r
        \r
        /**\r
         * Returns a feature if it exists, null otherwise.\r
@@ -460,15 +509,15 @@ public abstract class CdmImportBase<CONFIG extends IImportConfigurator, STATE ex
         * @param labelAbbrev\r
         * @return\r
         */\r
-       protected Feature getFeature(STATE state, UUID uuid, String label, String text, String labelAbbrev, TermVocabulary<Feature> voc){\r
+       protected Feature getFeature(STATE state, UUID uuid, String label, String description, String labelAbbrev, TermVocabulary<Feature> voc){\r
                if (uuid == null){\r
                        return null;\r
                }\r
                Feature feature = state.getFeature(uuid);\r
                if (feature == null){\r
                        feature = (Feature)getTermService().find(uuid);\r
-                       if (feature == null && ! hasNoLabel(label, text, labelAbbrev)){\r
-                               feature = Feature.NewInstance(text, label, labelAbbrev);\r
+                       if (feature == null && ! hasNoLabel(label, description, labelAbbrev)){\r
+                               feature = Feature.NewInstance(description, label, labelAbbrev);\r
                                feature.setUuid(uuid);\r
                                feature.setSupportsTextData(true);\r
 //                             UUID uuidFeatureVoc = UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"); \r
index d91c867dee267b6a50d8d02c2161e1e5522cd19c..816a4f8677a1ca61c671718021b45bb5dfa0e259 100644 (file)
@@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.model.common.MarkerType;
 import eu.etaxonomy.cdm.model.common.User;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.description.State;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
 import eu.etaxonomy.cdm.model.location.ReferenceSystem;\r
@@ -67,6 +68,8 @@ public abstract class ImportStateBase<CONFIG extends ImportConfiguratorBase, IO
        private Map<UUID, NamedArea> namedAreaMap = new HashMap<UUID, NamedArea>();\r
        private Map<UUID, NamedAreaLevel> namedAreaLevelMap = new HashMap<UUID, NamedAreaLevel>();\r
        private Map<UUID, Feature> featureMap = new HashMap<UUID, Feature>();\r
+       private Map<UUID, State> stateTermMap = new HashMap<UUID, State>();\r
+       \r
        private Map<UUID, PresenceTerm> presenceTermMap = new HashMap<UUID, PresenceTerm>();;\r
        private Map<UUID, Language> languageMap = new HashMap<UUID, Language>();\r
        private Map<UUID, TaxonRelationshipType> taxonRelationshipTypeMap = new HashMap<UUID, TaxonRelationshipType>();\r
@@ -237,7 +240,13 @@ public abstract class ImportStateBase<CONFIG extends ImportConfiguratorBase, IO
                rankMap.put(rank.getUuid(), rank);\r
        }\r
 \r
-\r
+       public State getStateTerm(UUID uuid){\r
+               return stateTermMap.get(uuid);\r
+       }\r
+       \r
+       public void putStateTerm(State stateTerm){\r
+               stateTermMap.put(stateTerm.getUuid(), stateTerm);\r
+       }\r
        \r
        public Feature getFeature(UUID uuid){\r
                return featureMap.get(uuid);\r