change doSpecimen to doEcoFacts
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / algaterra / AlgaTerraTypeImagesImport.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.commons.lang.StringUtils;
20 import org.apache.log4j.Logger;
21 import org.springframework.stereotype.Component;
22
23 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
24 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade.DerivedUnitType;
25 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
26 import eu.etaxonomy.cdm.database.update.TableNameChanger;
27 import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraTypeImportValidator;
28 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
29 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
30 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
31 import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameImport;
32 import eu.etaxonomy.cdm.io.common.IOValidator;
33 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
34 import eu.etaxonomy.cdm.model.common.CdmBase;
35 import eu.etaxonomy.cdm.model.media.Media;
36 import eu.etaxonomy.cdm.model.name.BotanicalName;
37 import eu.etaxonomy.cdm.model.name.Rank;
38 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
39 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
40 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
41 import eu.etaxonomy.cdm.model.occurrence.Collection;
42 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
43 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
44 import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
45 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
46 import eu.etaxonomy.cdm.model.reference.Reference;
47
48
49 /**
50 * @author a.mueller
51 * @created 20.03.2008
52 * @version 1.0
53 */
54 @Component
55 public class AlgaTerraTypeImagesImport extends AlgaTerraImageImportBase {
56 private static final Logger logger = Logger.getLogger(AlgaTerraTypeImagesImport.class);
57
58
59 private static int modCount = 5000;
60 private static final String pluralString = "type images";
61 private static final String dbTableName = "SpecimenFigure"; //??
62
63 public AlgaTerraTypeImagesImport(){
64 super();
65 }
66
67
68 /* (non-Javadoc)
69 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
70 */
71 @Override
72 protected String getIdQuery(BerlinModelImportState state) {
73 String result = " SELECT SpecimenFigureId "
74 + " FROM SpecimenFigure "
75 + " WHERE TypeSpecimenFk is NOT NULL "
76 + " ORDER BY TypeSpecimenFk ";
77 return result;
78 }
79
80 /* (non-Javadoc)
81 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
82 */
83 @Override
84 protected String getRecordQuery(BerlinModelImportConfigurator config) {
85 String strQuery =
86
87 " SELECT sf.*, sf.SpecimenFigurePhrase as FigurePhrase, sf.SpecimenFigure as fileName" +
88 " FROM SpecimenFigure sf "
89 + " WHERE (sf.SpecimenFigureId IN (" + ID_LIST_TOKEN + ") )"
90 + " ORDER BY TypeSpecimenFk ";
91 ;
92 return strQuery;
93 }
94
95 /* (non-Javadoc)
96 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
97 */
98 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
99 boolean success = true;
100
101 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
102
103 Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
104
105 Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE);
106 Map<String, Reference> biblioReference = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);
107
108
109 ResultSet rs = partitioner.getResultSet();
110
111 try {
112
113 int i = 0;
114
115 //for each reference
116 while (rs.next()){
117
118 if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
119
120 int figureId = rs.getInt("SpecimenFigureId");
121 int typeSpecimenFk = rs.getInt("typeSpecimenFk");
122
123
124 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
125
126 try {
127
128 //source ref
129 Reference<?> sourceRef = state.getTransactionalSourceReference();
130
131 DerivedUnitBase derivedUnit = typeSpecimenMap.get(String.valueOf(typeSpecimenFk));
132
133 if (derivedUnit == null){
134 logger.warn("Could not find type specimen (" + typeSpecimenFk +") for specimen figure " + figureId);
135 }else{
136
137 //field observation
138 Media media = handleSingleImage(rs, derivedUnit, state, partitioner);
139
140 handleTypeImageSpecificFields(rs, media, state);
141
142 unitsToSave.add(derivedUnit);
143 }
144
145
146 } catch (Exception e) {
147 logger.warn("Exception in " + getTableName() + ": SpecimenFigureId " + figureId + ". " + e.getMessage());
148 e.printStackTrace();
149 }
150
151 }
152
153 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
154
155 logger.warn(pluralString + " to save: " + unitsToSave.size());
156 getOccurrenceService().saveOrUpdate(unitsToSave);
157
158 return success;
159 } catch (SQLException e) {
160 logger.error("SQLException:" + e);
161 return false;
162 }
163 }
164
165
166
167 private void handleTypeImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
168 //TODO
169
170 }
171
172
173 /* (non-Javadoc)
174 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
175 */
176 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
177 String nameSpace;
178 Class cdmClass;
179 Set<String> idSet;
180 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
181
182 try{
183 Set<String> typeSpecimenIdSet = new HashSet<String>();
184
185 while (rs.next()){
186 handleForeignKey(rs, typeSpecimenIdSet, "TypeSpecimenFk");
187 }
188
189 //type specimen map
190 nameSpace = AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE;
191 cdmClass = SpecimenOrObservationBase.class;
192 idSet = typeSpecimenIdSet;
193 Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
194 result.put(nameSpace, typeSpecimenMap);
195
196
197 } catch (SQLException e) {
198 throw new RuntimeException(e);
199 }
200 return result;
201 }
202
203
204
205
206 /* (non-Javadoc)
207 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
208 */
209 @Override
210 protected boolean doCheck(BerlinModelImportState state){
211 IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
212 return validator.validate(state);
213 }
214
215 /* (non-Javadoc)
216 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
217 */
218 @Override
219 protected String getTableName() {
220 return dbTableName;
221 }
222
223 /* (non-Javadoc)
224 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
225 */
226 @Override
227 public String getPluralString() {
228 return pluralString;
229 }
230
231 /* (non-Javadoc)
232 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
233 */
234 protected boolean isIgnore(BerlinModelImportState bmState){
235 AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
236 // return ! ( config.isDoTypes() && config.isDoImages()) ;
237 return false;
238 }
239
240 }