Latest AlgaTerra Import developments
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / algaterra / AlgaTerraVoucherImagesImport.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.SpecimenOrObservationBase;
31
32
33 /**
34 * @author a.mueller
35 * @created 20.03.2008
36 * @version 1.0
37 */
38 @Component
39 public class AlgaTerraVoucherImagesImport extends AlgaTerraImageImportBase {
40 private static final Logger logger = Logger.getLogger(AlgaTerraVoucherImagesImport.class);
41
42
43 private static int modCount = 5000;
44 private static final String pluralString = "voucher images";
45 private static final String dbTableName = "VoucherImages"; //??
46
47 public AlgaTerraVoucherImagesImport(){
48 super(dbTableName, pluralString);
49 }
50
51
52 /* (non-Javadoc)
53 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
54 */
55 @Override
56 protected String getIdQuery(BerlinModelImportState state) {
57 String result = " SELECT VoucherImageID "
58 + " FROM VoucherImages "
59 + " ORDER BY EcoFactFk ";
60 return result;
61 }
62
63 /* (non-Javadoc)
64 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
65 */
66 @Override
67 protected String getRecordQuery(BerlinModelImportConfigurator config) {
68 String strQuery =
69
70 " SELECT vi.*, vi.Comment as FigurePhrase, vi.PictureFile as fileName " +
71 " FROM VoucherImages vi "
72 + " WHERE (vi.VoucherImageID IN (" + ID_LIST_TOKEN + ") )"
73 + " ORDER BY EcoFactFk ";
74 ;
75 return strQuery;
76 }
77
78 /* (non-Javadoc)
79 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
80 */
81 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
82 boolean success = true;
83
84 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
85
86 Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
87
88 Map<String, DerivedUnitBase> ecoFactMap = (Map<String, DerivedUnitBase>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE);
89
90 ResultSet rs = partitioner.getResultSet();
91
92 try {
93
94 int i = 0;
95
96 //for each reference
97 while (rs.next()){
98
99 if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
100
101 int figureId = rs.getInt("VoucherImageID");
102 int ecoFactFk = rs.getInt("EcoFactFk");
103
104
105 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
106
107 try {
108
109 DerivedUnitBase<?> derivedUnit = ecoFactMap.get(String.valueOf(ecoFactFk));
110
111 if (derivedUnit == null){
112 logger.warn("Could not find eco fact specimen (" + ecoFactFk +") for voucher image " + figureId);
113 }else{
114 logger.warn("DerivedUnit for ecoFact-derived unit is null");
115 }
116
117 //field observation
118 Media media = handleSingleImage(rs, derivedUnit, state, partitioner);
119
120 handleVoucherImageSpecificFields(rs, media, state);
121
122 if (derivedUnit != null){
123 unitsToSave.add(derivedUnit);
124 }else{
125 logger.warn("DerivedUnit is null");
126 }
127
128 } catch (Exception e) {
129 logger.warn("Exception in " + getTableName() + ": VoucherImageId " + figureId + ". " + e.getMessage());
130 e.printStackTrace();
131 }
132
133 }
134
135 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
136
137 logger.warn(pluralString + " to save: " + unitsToSave.size());
138 getOccurrenceService().saveOrUpdate(unitsToSave);
139
140 return success;
141 } catch (SQLException e) {
142 logger.error("SQLException:" + e);
143 return false;
144 }
145 }
146
147
148
149 private void handleVoucherImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
150 //TODO
151
152 }
153
154
155 /* (non-Javadoc)
156 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
157 */
158 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
159 String nameSpace;
160 Class cdmClass;
161 Set<String> idSet;
162 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
163
164 try{
165 Set<String> ecoFactIdSet = new HashSet<String>();
166
167 while (rs.next()){
168 handleForeignKey(rs, ecoFactIdSet, "EcoFactFk");
169 }
170
171 //type specimen map
172 nameSpace = AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE;
173 cdmClass = DerivedUnitBase.class;
174 idSet = ecoFactIdSet;
175 Map<String, DerivedUnitBase> specimenMap = (Map<String,DerivedUnitBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
176 result.put(nameSpace, specimenMap);
177
178
179 } catch (SQLException e) {
180 throw new RuntimeException(e);
181 }
182 return result;
183 }
184
185 /* (non-Javadoc)
186 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
187 */
188 @Override
189 protected boolean doCheck(BerlinModelImportState state){
190 IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
191 return validator.validate(state);
192 }
193
194 /* (non-Javadoc)
195 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
196 */
197 protected boolean isIgnore(BerlinModelImportState bmState){
198 AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
199 return ! ( config.isDoEcoFacts() && config.isDoImages()) ;
200 }
201
202 }