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
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
@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
\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
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
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
\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