minor
[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 package eu.etaxonomy.cdm.io.algaterra;
10
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.HashMap;
14 import java.util.HashSet;
15 import java.util.Map;
16 import java.util.Set;
17
18 import org.apache.logging.log4j.LogManager;
19 import org.apache.logging.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.DerivedUnit;
30 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
31
32
33 /**
34 * @author a.mueller
35 * @since 20.03.2008
36 */
37 @Component
38 public class AlgaTerraVoucherImagesImport extends AlgaTerraImageImportBase {
39
40 private static final long serialVersionUID = -1702110625354900442L;
41 private static final Logger logger = LogManager.getLogger();
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 @Override
52 protected String getIdQuery(BerlinModelImportState state) {
53 String result = " SELECT VoucherImageID "
54 + " FROM VoucherImages "
55 + " ORDER BY EcoFactFk ";
56 return result;
57 }
58
59 @Override
60 protected String getRecordQuery(BerlinModelImportConfigurator config) {
61 String strQuery =
62
63 " SELECT vi.*, vi.Comment as FigurePhrase, vi.PictureFile as fileName, vi.PictuePath as filePath " +
64 " FROM VoucherImages vi "
65 + " WHERE (vi.VoucherImageID IN (" + ID_LIST_TOKEN + ") )"
66 + " ORDER BY EcoFactFk ";
67
68 return strQuery;
69 }
70
71 @Override
72 public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
73 boolean success = true;
74
75 AlgaTerraImportState state = (AlgaTerraImportState)bmState;
76
77 @SuppressWarnings("rawtypes")
78 Set<SpecimenOrObservationBase> unitsToSave = new HashSet<>();
79
80 @SuppressWarnings("unchecked")
81 Map<String, DerivedUnit> ecoFactMap = partitioner.getObjectMap(AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE);
82
83 ResultSet rs = partitioner.getResultSet();
84
85 try {
86
87 int i = 0;
88
89 //for each reference
90 while (rs.next()){
91
92 if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
93
94 int figureId = rs.getInt("VoucherImageID");
95 int ecoFactFk = rs.getInt("EcoFactFk");
96
97
98 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
99
100 try {
101
102 DerivedUnit derivedUnit = ecoFactMap.get(String.valueOf(ecoFactFk));
103
104 if (derivedUnit == null){
105 logger.warn("Could not find eco fact specimen (" + ecoFactFk +") for voucher image " + figureId);
106 }
107
108 //field observation
109 Media media = handleSingleImage(rs, derivedUnit, state, partitioner, PathType.Voucher);
110
111 handleVoucherImageSpecificFields(rs, media, state);
112
113 if (derivedUnit != null){
114 unitsToSave.add(derivedUnit);
115 }else{
116 logger.warn("DerivedUnit is null");
117 }
118
119 } catch (Exception e) {
120 logger.warn("Exception in " + getTableName() + ": VoucherImageId " + figureId + ". " + e.getMessage());
121 e.printStackTrace();
122 }
123
124 }
125
126 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
127
128 logger.warn(pluralString + " to save: " + unitsToSave.size());
129 getOccurrenceService().saveOrUpdate(unitsToSave);
130
131 return success;
132 } catch (SQLException e) {
133 logger.error("SQLException:" + e);
134 return false;
135 }
136 }
137
138
139
140 private void handleVoucherImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
141 //TODO
142
143 }
144
145 @Override
146 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
147
148 String nameSpace;
149 Set<String> idSet;
150 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
151
152 try{
153 Set<String> ecoFactIdSet = new HashSet<>();
154
155 while (rs.next()){
156 handleForeignKey(rs, ecoFactIdSet, "EcoFactFk");
157 }
158
159 //type specimen map
160 nameSpace = AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE;
161 idSet = ecoFactIdSet;
162 Map<String, DerivedUnit> specimenMap = getCommonService().getSourcedObjectsByIdInSourceC(DerivedUnit.class, idSet, nameSpace);
163 result.put(nameSpace, specimenMap);
164
165
166 } catch (SQLException e) {
167 throw new RuntimeException(e);
168 }
169 return result;
170 }
171
172 @Override
173 protected boolean doCheck(BerlinModelImportState state){
174 IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
175 return validator.validate(state);
176 }
177
178 @Override
179 protected boolean isIgnore(BerlinModelImportState bmState){
180 AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
181 return ! ( config.isDoEcoFacts() && config.isDoImages()) ;
182 }
183 }