image imports for AlgaTerra (cont.)
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / algaterra / AlgaTerraSiteImagesImport.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.AlgaTerraTypeImportValidator;
23 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
24 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
25 import eu.etaxonomy.cdm.io.common.IOValidator;
26 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
27 import eu.etaxonomy.cdm.model.common.CdmBase;
28 import eu.etaxonomy.cdm.model.media.Media;
29 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
30 import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
31 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32
33
34 /**
35 * @author a.mueller
36 * @created 20.03.2008
37 * @version 1.0
38 */
39 @Component
40 public class AlgaTerraSiteImagesImport extends AlgaTerraImageImportBase {
41 private static final Logger logger = Logger.getLogger(AlgaTerraSiteImagesImport.class);
42
43
44 private static int modCount = 5000;
45 private static final String pluralString = "site images";
46 private static final String dbTableName = "SiteImages"; //??
47
48 public AlgaTerraSiteImagesImport(){
49 super();
50 }
51
52
53 /* (non-Javadoc)
54 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
55 */
56 @Override
57 protected String getIdQuery(BerlinModelImportState state) {
58 String result = " SELECT SiteId "
59 + " FROM SiteImages "
60 + " ORDER BY EcoFactFk ";
61 return result;
62 }
63
64 /* (non-Javadoc)
65 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
66 */
67 @Override
68 protected String getRecordQuery(BerlinModelImportConfigurator config) {
69 String strQuery =
70
71 " SELECT si.*, si.Comment as FigurePhrase, si.Picture as fileName " +
72 " FROM SiteImages si "
73 + " WHERE (si.SiteID IN (" + ID_LIST_TOKEN + ") )"
74 + " ORDER BY EcoFactFk ";
75 ;
76 return strQuery;
77 }
78
79 /* (non-Javadoc)
80 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
81 */
82 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
83 boolean success = true;
84
85 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
86
87 Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
88
89 Map<String, FieldObservation> ecoFactFieldObservationMap = (Map<String, FieldObservation>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
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 figureId = rs.getInt("VoucherImageID");
103 int ecoFactFk = rs.getInt("EcoFactFk");
104
105
106 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
107
108 try {
109
110 //TODO use deduplicated ecofact
111 FieldObservation fieldObservation = ecoFactFieldObservationMap.get(ecoFactFk);
112
113 if (fieldObservation == null){
114 logger.warn("Could not find eco fact field observation (" + ecoFactFk +") for site image " + figureId);
115 }else{
116
117 }
118
119 //field observation
120 Media media = handleSingleImage(rs, fieldObservation, state, partitioner);
121
122 handleTypeImageSpecificFields(rs, media, state);
123
124 unitsToSave.add(fieldObservation);
125
126
127 } catch (Exception e) {
128 logger.warn("Exception in " + getTableName() + ": SiteId " + figureId + ". " + e.getMessage());
129 e.printStackTrace();
130 }
131
132 }
133
134 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
135
136 logger.warn(pluralString + " to save: " + unitsToSave.size());
137 getOccurrenceService().save(unitsToSave);
138
139 return success;
140 } catch (SQLException e) {
141 logger.error("SQLException:" + e);
142 return false;
143 }
144 }
145
146
147
148 private void handleTypeImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
149 //TODO
150
151 }
152
153
154 /* (non-Javadoc)
155 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
156 */
157 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
158 String nameSpace;
159 Class cdmClass;
160 Set<String> idSet;
161 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
162
163 try{
164 Set<String> ecoFactIdSet = new HashSet<String>();
165
166 while (rs.next()){
167 handleForeignKey(rs, ecoFactIdSet, "EcoFactFk");
168 }
169
170 //type specimen map
171 nameSpace = AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE;
172 cdmClass = DerivedUnitBase.class;
173 idSet = ecoFactIdSet;
174 Map<String, DerivedUnitBase> typeSpecimenMap = (Map<String,DerivedUnitBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
175 result.put(nameSpace, typeSpecimenMap);
176
177
178 } catch (SQLException e) {
179 throw new RuntimeException(e);
180 }
181 return result;
182 }
183
184
185
186
187 /* (non-Javadoc)
188 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
189 */
190 @Override
191 protected boolean doCheck(BerlinModelImportState state){
192 IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
193 return validator.validate(state);
194 }
195
196 /* (non-Javadoc)
197 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
198 */
199 @Override
200 protected String getTableName() {
201 return dbTableName;
202 }
203
204 /* (non-Javadoc)
205 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
206 */
207 @Override
208 public String getPluralString() {
209 return pluralString;
210 }
211
212 /* (non-Javadoc)
213 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
214 */
215 protected boolean isIgnore(BerlinModelImportState bmState){
216 AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
217 // return ! ( config.isDoTypes() && config.isDoImages()) ;
218 return false;
219 }
220
221 }