some bugfixes for collection import
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 25 Sep 2012 22:51:31 +0000 (22:51 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 25 Sep 2012 22:51:31 +0000 (22:51 +0000)
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraCollectionImport.java

index ae91a177a2f8e87d4376e4a5eba6c76da8eee206..aa8ef5e0ed1a2ae2b422f652f4d4e56be8d2977e 100644 (file)
@@ -27,6 +27,8 @@ import eu.etaxonomy.cdm.io.common.IOValidator;
 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.occurrence.Collection;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 \r
 \r
@@ -60,7 +62,7 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
        protected String getIdQuery(BerlinModelImportState state) {\r
                String result = " SELECT CollectionId " + \r
                                " FROM Collection c "\r
-                               + " ORDER BY c.CollectionId ";\r
+                               + " ORDER BY partOfFk, c.CollectionId ";\r
                return result;\r
        }\r
 \r
@@ -70,11 +72,11 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
        @Override\r
        protected String getRecordQuery(BerlinModelImportConfigurator config) {\r
                        String strQuery =   \r
-            " SELECT CollectionId, Name, Town, IHCode, Subcollection, TDWGGazetteerFk, Address, CultCollFlag, " +\r
+            " SELECT CollectionId, Name, Town, IHCode, Subcollection, partOfFk, TDWGGazetteerFk, Address, CultCollFlag, " +\r
                        " Created_When, Updated_When, Created_Who, Updated_Who, Notes " +\r
             " FROM Collection c " + \r
             " WHERE c.CollectionId IN (" + ID_LIST_TOKEN + ") "  \r
-            + " ORDER BY c.CollectionId "\r
+            + " ORDER BY partOfFk, c.CollectionId "\r
             ;\r
                return strQuery;\r
        }\r
@@ -87,6 +89,10 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
                \r
                AlgaTerraImportState state = (AlgaTerraImportState)bmState;\r
                Set<Collection> collectionsToSave = new HashSet<Collection>();\r
+\r
+               \r
+               Map<String, Collection> collectionMap = (Map<String, Collection>) partitioner.getObjectMap(NAMESPACE_COLLECTION);\r
+               \r
                \r
                ResultSet rs = partitioner.getResultSet();\r
 \r
@@ -104,9 +110,12 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
                        String town = rs.getString("Town");\r
                        String ihCode = rs.getString("IHCode");\r
                        String subCollectionStr = rs.getString("Subcollection");\r
-                       Integer tdwgArea = nullSafeInt(rs, "TDWGGazetteerFk");  //somehow redundant with town\r
-                       String address = rs.getString("Address");           //only available for BGBM\r
-                       Boolean cultCollFlag = rs.getBoolean("CultCollFlag");  //?? not really needed according to Henning\r
+                       Integer partOfFk = nullSafeInt(rs, "PartOfFk");\r
+                       \r
+//                     Integer tdwgArea = nullSafeInt(rs, "TDWGGazetteerFk");  //somehow redundant with town\r
+//                     String address = rs.getString("Address");           //only available for BGBM\r
+//                     Boolean cultCollFlag = rs.getBoolean("CultCollFlag");  //?? not really needed according to Henning\r
+                       \r
                        //TODO createdUpdates, NOtes            \r
       \r
                        try {\r
@@ -115,28 +124,27 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
                                        Reference<?> sourceRef = state.getTransactionalSourceReference();\r
                                \r
                                        \r
-                                       Collection collection = Collection.NewInstance();\r
-                                       collection.setName(name);\r
-                                       if (isNotBlank("ihCode")){\r
-                                               collection.setCode(ihCode);\r
-                                               collection.setCodeStandard("Index Herbariorum");\r
+                                       //collection\r
+                                       Collection collection;\r
+                                       if (partOfFk == null){\r
+                                               collection = makeCollection(collectionsToSave,\r
+                                                               collectionId, name, town, ihCode, sourceRef, NAMESPACE_COLLECTION, collectionMap);\r
+                                       }else{\r
+                                               collection = collectionMap.get(String.valueOf(partOfFk));\r
+                                               if (collection == null){\r
+                                                       logger.warn("PartOf collection not found");\r
+                                               }\r
                                        }\r
                                        \r
-                                       collection.setTownOrLocation(town);\r
-                                       collection.addSource(String.valueOf(collectionId), NAMESPACE_COLLECTION, sourceRef, null);\r
-                                       \r
-                                       collectionsToSave.add(collection);  //or subcollection ? \r
 \r
                                        //subcollection\r
                                        if (isNotBlank(subCollectionStr)){\r
-                                               Collection subCollection = Collection.NewInstance();\r
-                                               subCollection.setName(subCollectionStr);\r
+                                               Collection subCollection = makeCollection(collectionsToSave, collectionId, subCollectionStr, town, ihCode, sourceRef, NAMESPACE_SUBCOLLECTION, collectionMap);\r
                                                subCollection.setSuperCollection(collection);\r
-                                               collectionsToSave.add(subCollection);  //or subcollection ? \r
-                                               collection.addSource(String.valueOf(collectionId), NAMESPACE_SUBCOLLECTION, sourceRef, null);   \r
                                        }\r
                                        \r
-                                       //TODO partOfFk , movedToFk\r
+                                       \r
+                                       //TODO movedToFk (extension ??)\r
                                        \r
 \r
                                } catch (Exception e) {\r
@@ -158,13 +166,62 @@ public class AlgaTerraCollectionImport  extends BerlinModelImportBase {
 \r
 \r
 \r
+       /**\r
+        * @param collectionsToSave\r
+        * @param collectionId\r
+        * @param name\r
+        * @param town\r
+        * @param ihCode\r
+        * @param sourceRef\r
+        * @param collectionMap \r
+        * @return\r
+        */\r
+       private Collection makeCollection(Set<Collection> collectionsToSave, int collectionId, \r
+                       String name, String town, String ihCode, Reference<?> sourceRef, String namespace, Map<String, Collection> collectionMap) {\r
+               Collection collection = Collection.NewInstance();\r
+               collection.setName(name);\r
+               if (isNotBlank(ihCode)){\r
+                       collection.setCode(ihCode);\r
+                       collection.setCodeStandard("Index Herbariorum");\r
+               }\r
+               \r
+               collection.setTownOrLocation(town);\r
+               collection.addSource(String.valueOf(collectionId), namespace, sourceRef, null);\r
+               \r
+               collectionMap.put(String.valueOf(collectionId), collection);\r
+               collectionsToSave.add(collection);  //or subcollection ? \r
+               return collection;\r
+       }\r
+\r
+\r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)\r
         */\r
        public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {\r
-               //no related objects are needed\r
+               String nameSpace;\r
+               Class cdmClass;\r
+               Set<String> idSet;\r
                Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();\r
 \r
+               try{\r
+                       Set<String> collectionIdSet = new HashSet<String>();\r
+                       \r
+                       while (rs.next()){\r
+                               handleForeignKey(rs, collectionIdSet, "partOfFk");\r
+                       }\r
+                       \r
+                       //type specimen map\r
+                       nameSpace = NAMESPACE_COLLECTION;\r
+                       cdmClass = Collection.class;\r
+                       idSet = collectionIdSet;\r
+                       Map<String, Collection> collectionMap = (Map<String, Collection>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+                       result.put(nameSpace, collectionMap);\r
+\r
+                       \r
+               } catch (SQLException e) {\r
+                       throw new RuntimeException(e);\r
+               }\r
                return result;\r
                \r
        }\r