2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.io
.algaterra
;
11 import java
.sql
.ResultSet
;
12 import java
.sql
.SQLException
;
13 import java
.util
.HashMap
;
14 import java
.util
.HashSet
;
18 import org
.apache
.logging
.log4j
.LogManager
;
19 import org
.apache
.logging
.log4j
.Logger
;
20 import org
.springframework
.stereotype
.Component
;
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
;
38 public class AlgaTerraVoucherImagesImport
extends AlgaTerraImageImportBase
{
40 private static final long serialVersionUID
= -1702110625354900442L;
41 private static final Logger logger
= LogManager
.getLogger();
43 private static int modCount
= 5000;
44 private static final String pluralString
= "voucher images";
45 private static final String dbTableName
= "VoucherImages"; //??
47 public AlgaTerraVoucherImagesImport(){
48 super(dbTableName
, pluralString
);
52 protected String
getIdQuery(BerlinModelImportState state
) {
53 String result
= " SELECT VoucherImageID "
54 + " FROM VoucherImages "
55 + " ORDER BY EcoFactFk ";
60 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
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 ";
72 public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner
, BerlinModelImportState bmState
) {
73 boolean success
= true;
75 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
77 @SuppressWarnings("rawtypes")
78 Set
<SpecimenOrObservationBase
> unitsToSave
= new HashSet
<>();
80 @SuppressWarnings("unchecked")
81 Map
<String
, DerivedUnit
> ecoFactMap
= partitioner
.getObjectMap(AlgaTerraSpecimenImportBase
.ECO_FACT_DERIVED_UNIT_NAMESPACE
);
83 ResultSet rs
= partitioner
.getResultSet();
92 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
94 int figureId
= rs
.getInt("VoucherImageID");
95 int ecoFactFk
= rs
.getInt("EcoFactFk");
98 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
102 DerivedUnit derivedUnit
= ecoFactMap
.get(String
.valueOf(ecoFactFk
));
104 if (derivedUnit
== null){
105 logger
.warn("Could not find eco fact specimen (" + ecoFactFk
+") for voucher image " + figureId
);
109 Media media
= handleSingleImage(rs
, derivedUnit
, state
, partitioner
, PathType
.Voucher
);
111 handleVoucherImageSpecificFields(rs
, media
, state
);
113 if (derivedUnit
!= null){
114 unitsToSave
.add(derivedUnit
);
116 logger
.warn("DerivedUnit is null");
119 } catch (Exception e
) {
120 logger
.warn("Exception in " + getTableName() + ": VoucherImageId " + figureId
+ ". " + e
.getMessage());
126 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
128 logger
.warn(pluralString
+ " to save: " + unitsToSave
.size());
129 getOccurrenceService().saveOrUpdate(unitsToSave
);
132 } catch (SQLException e
) {
133 logger
.error("SQLException:" + e
);
140 private void handleVoucherImageSpecificFields(ResultSet rs
, Media media
, AlgaTerraImportState state
) throws SQLException
{
146 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
, BerlinModelImportState state
) {
150 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<>();
153 Set
<String
> ecoFactIdSet
= new HashSet
<>();
156 handleForeignKey(rs
, ecoFactIdSet
, "EcoFactFk");
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
);
166 } catch (SQLException e
) {
167 throw new RuntimeException(e
);
173 protected boolean doCheck(BerlinModelImportState state
){
174 IOValidator
<BerlinModelImportState
> validator
= new AlgaTerraTypeImportValidator();
175 return validator
.validate(state
);
179 protected boolean isIgnore(BerlinModelImportState bmState
){
180 AlgaTerraImportConfigurator config
= ((AlgaTerraImportState
) bmState
).getAlgaTerraConfigurator();
181 return ! ( config
.isDoEcoFacts() && config
.isDoImages()) ;