image imports for AlgaTerra (cont.)
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / algaterra / AlgaTerraCollectionImport.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.cdm.io.algaterra;
11
12 import java.sql.ResultSet;
13 import java.sql.SQLException;
14 import java.util.HashMap;
15 import java.util.HashSet;
16 import java.util.Map;
17 import java.util.Set;
18
19 import org.apache.log4j.Logger;
20 import org.springframework.stereotype.Component;
21
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;
31
32
33 /**
34 * @author a.mueller
35 * @created 01.09.2012
36 */
37 @Component
38 public class AlgaTerraCollectionImport extends BerlinModelImportBase {
39 private static final Logger logger = Logger.getLogger(AlgaTerraCollectionImport.class);
40
41
42 private static int modCount = 5000;
43 private static final String pluralString = "collections";
44 private static final String dbTableName = "Collection"; //??
45
46 public static final String NAMESPACE_COLLECTION = "Collection";
47 public static final String NAMESPACE_SUBCOLLECTION = "Collection (Subcollection)";
48
49
50 public AlgaTerraCollectionImport(){
51 super();
52 }
53
54
55
56 /* (non-Javadoc)
57 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
58 */
59 @Override
60 protected String getIdQuery(BerlinModelImportState state) {
61 String result = " SELECT CollectionId " +
62 " FROM Collection c "
63 + " ORDER BY c.CollectionId ";
64 return result;
65 }
66
67 /* (non-Javadoc)
68 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
69 */
70 @Override
71 protected String getRecordQuery(BerlinModelImportConfigurator config) {
72 String strQuery =
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 "
78 ;
79 return strQuery;
80 }
81
82 /* (non-Javadoc)
83 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
84 */
85 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
86 boolean success = true;
87
88 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
89 Set<Collection> collectionsToSave = new HashSet<Collection>();
90
91 ResultSet rs = partitioner.getResultSet();
92
93 try {
94
95 int i = 0;
96
97 //for each reference
98 while (rs.next()){
99
100 if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
101
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
111
112 try {
113
114 //source ref
115 Reference<?> sourceRef = state.getTransactionalSourceReference();
116
117
118 Collection collection = Collection.NewInstance();
119 collection.setName(name);
120 if (isNotBlank("ihCode")){
121 collection.setCode(ihCode);
122 collection.setCodeStandard("Index Herbariorum");
123 }
124
125 collection.setTownOrLocation(town);
126 collection.addSource(String.valueOf(collectionId), NAMESPACE_COLLECTION, sourceRef, null);
127
128 collectionsToSave.add(collection); //or subcollection ?
129
130 //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);
137 }
138
139 //TODO partOfFk , movedToFk
140
141
142 } catch (Exception e) {
143 logger.warn("Exception in collection: CollectionId " + collectionId + ". " + e.getMessage());
144 // e.printStackTrace();
145 }
146
147 }
148
149 logger.warn(pluralString + " to save: " + collectionsToSave.size());
150 getCollectionService().save(collectionsToSave);
151
152 return success;
153 } catch (SQLException e) {
154 logger.error("SQLException:" + e);
155 return false;
156 }
157 }
158
159
160
161 /* (non-Javadoc)
162 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
163 */
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>>();
167
168 return result;
169
170 }
171
172
173 /* (non-Javadoc)
174 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
175 */
176 @Override
177 protected boolean doCheck(BerlinModelImportState state){
178 IOValidator<BerlinModelImportState> validator = new AlgaTerraCollectionImportValidator();
179 return validator.validate(state);
180 }
181
182 /* (non-Javadoc)
183 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
184 */
185 @Override
186 protected String getTableName() {
187 return dbTableName;
188 }
189
190 /* (non-Javadoc)
191 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
192 */
193 @Override
194 public String getPluralString() {
195 return pluralString;
196 }
197
198 /* (non-Javadoc)
199 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
200 */
201 protected boolean isIgnore(BerlinModelImportState bmState){
202 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
203 return ! ( state.getAlgaTerraConfigurator().isDoSpecimen() || state.getAlgaTerraConfigurator().isDoTypes() );
204 }
205
206 }