2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.io
.algaterra
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.springframework
.stereotype
.Component
;
22 import eu
.etaxonomy
.cdm
.io
.algaterra
.validation
.AlgaTerraCollectionImportValidator
;
23 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.BerlinModelImportBase
;
24 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.BerlinModelImportConfigurator
;
25 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.BerlinModelImportState
;
26 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
27 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
28 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
38 public class AlgaTerraCollectionImport
extends BerlinModelImportBase
{
39 private static final Logger logger
= Logger
.getLogger(AlgaTerraCollectionImport
.class);
42 private static int modCount
= 5000;
43 private static final String pluralString
= "collections";
44 private static final String dbTableName
= "Collection"; //??
46 public static final String NAMESPACE_COLLECTION
= "Collection";
47 public static final String NAMESPACE_SUBCOLLECTION
= "Collection (Subcollection)";
50 public AlgaTerraCollectionImport(){
57 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
60 protected String
getIdQuery(BerlinModelImportState state
) {
61 String result
= " SELECT CollectionId " +
63 + " ORDER BY c.CollectionId ";
68 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
71 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
73 " SELECT CollectionId, Name, Town, IHCode, Subcollection, TDWGGazetteerFk, Address, CultCollFlag, " +
74 " Created_When, Updated_When, Created_Who, Updated_Who, Notes " +
75 " FROM Collection c " +
76 " WHERE c.CollectionId IN (" + ID_LIST_TOKEN
+ ") "
77 + " ORDER BY c.CollectionId "
83 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
85 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState bmState
) {
86 boolean success
= true;
88 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
89 Set
<Collection
> collectionsToSave
= new HashSet
<Collection
>();
91 ResultSet rs
= partitioner
.getResultSet();
100 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
102 int collectionId
= rs
.getInt("CollectionId");
103 String name
= rs
.getString("Name");
104 String town
= rs
.getString("Town");
105 String ihCode
= rs
.getString("IHCode");
106 String subCollectionStr
= rs
.getString("Subcollection");
107 Integer tdwgArea
= nullSafeInt(rs
, "TDWGGazetteerFk"); //somehow redundant with town
108 String address
= rs
.getString("Address"); //only available for BGBM
109 Boolean cultCollFlag
= rs
.getBoolean("CultCollFlag"); //?? not really needed according to Henning
110 //TODO createdUpdates, NOtes
115 Reference
<?
> sourceRef
= state
.getTransactionalSourceReference();
118 Collection collection
= Collection
.NewInstance();
119 collection
.setName(name
);
120 if (isNotBlank("ihCode")){
121 collection
.setCode(ihCode
);
122 collection
.setCodeStandard("Index Herbariorum");
125 collection
.setTownOrLocation(town
);
126 collection
.addSource(String
.valueOf(collectionId
), NAMESPACE_COLLECTION
, sourceRef
, null);
128 collectionsToSave
.add(collection
); //or subcollection ?
131 if (isNotBlank(subCollectionStr
)){
132 Collection subCollection
= Collection
.NewInstance();
133 subCollection
.setName(subCollectionStr
);
134 subCollection
.setSuperCollection(collection
);
135 collectionsToSave
.add(subCollection
); //or subcollection ?
136 collection
.addSource(String
.valueOf(collectionId
), NAMESPACE_SUBCOLLECTION
, sourceRef
, null);
139 //TODO partOfFk , movedToFk
142 } catch (Exception e
) {
143 logger
.warn("Exception in collection: CollectionId " + collectionId
+ ". " + e
.getMessage());
144 // e.printStackTrace();
149 logger
.warn(pluralString
+ " to save: " + collectionsToSave
.size());
150 getCollectionService().save(collectionsToSave
);
153 } catch (SQLException e
) {
154 logger
.error("SQLException:" + e
);
162 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
164 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
165 //no related objects are needed
166 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
174 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
177 protected boolean doCheck(BerlinModelImportState state
){
178 IOValidator
<BerlinModelImportState
> validator
= new AlgaTerraCollectionImportValidator();
179 return validator
.validate(state
);
183 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
186 protected String
getTableName() {
191 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
194 public String
getPluralString() {
199 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
201 protected boolean isIgnore(BerlinModelImportState bmState
){
202 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
203 return ! ( state
.getAlgaTerraConfigurator().isDoSpecimen() || state
.getAlgaTerraConfigurator().isDoTypes() );