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.
10 package eu
.etaxonomy
.cdm
.io
.algaterra
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
19 import org
.apache
.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
.DerivedUnitBase
;
30 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldObservation
;
31 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
40 public class AlgaTerraSiteImagesImport
extends AlgaTerraImageImportBase
{
41 private static final Logger logger
= Logger
.getLogger(AlgaTerraSiteImagesImport
.class);
44 private static int modCount
= 5000;
45 private static final String pluralString
= "site images";
46 private static final String dbTableName
= "SiteImages"; //??
48 public AlgaTerraSiteImagesImport(){
54 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
57 protected String
getIdQuery(BerlinModelImportState state
) {
58 String result
= " SELECT SiteId "
60 + " ORDER BY EcoFactFk ";
65 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
68 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
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 ";
80 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
82 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState bmState
) {
83 boolean success
= true;
85 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
87 Set
<SpecimenOrObservationBase
> unitsToSave
= new HashSet
<SpecimenOrObservationBase
>();
89 Map
<String
, FieldObservation
> ecoFactFieldObservationMap
= (Map
<String
, FieldObservation
>) partitioner
.getObjectMap(AlgaTerraSpecimenImportBase
.ECO_FACT_FIELD_OBSERVATION_NAMESPACE
);
91 ResultSet rs
= partitioner
.getResultSet();
100 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
102 int figureId
= rs
.getInt("VoucherImageID");
103 int ecoFactFk
= rs
.getInt("EcoFactFk");
106 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
110 //TODO use deduplicated ecofact
111 FieldObservation fieldObservation
= ecoFactFieldObservationMap
.get(ecoFactFk
);
113 if (fieldObservation
== null){
114 logger
.warn("Could not find eco fact field observation (" + ecoFactFk
+") for site image " + figureId
);
120 Media media
= handleSingleImage(rs
, fieldObservation
, state
, partitioner
);
122 handleTypeImageSpecificFields(rs
, media
, state
);
124 unitsToSave
.add(fieldObservation
);
127 } catch (Exception e
) {
128 logger
.warn("Exception in " + getTableName() + ": SiteId " + figureId
+ ". " + e
.getMessage());
134 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
136 logger
.warn(pluralString
+ " to save: " + unitsToSave
.size());
137 getOccurrenceService().save(unitsToSave
);
140 } catch (SQLException e
) {
141 logger
.error("SQLException:" + e
);
148 private void handleTypeImageSpecificFields(ResultSet rs
, Media media
, AlgaTerraImportState state
) throws SQLException
{
155 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
157 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
161 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
164 Set
<String
> ecoFactIdSet
= new HashSet
<String
>();
167 handleForeignKey(rs
, ecoFactIdSet
, "EcoFactFk");
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
);
178 } catch (SQLException e
) {
179 throw new RuntimeException(e
);
188 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
191 protected boolean doCheck(BerlinModelImportState state
){
192 IOValidator
<BerlinModelImportState
> validator
= new AlgaTerraTypeImportValidator();
193 return validator
.validate(state
);
197 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
200 protected String
getTableName() {
205 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
208 public String
getPluralString() {
213 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
215 protected boolean isIgnore(BerlinModelImportState bmState
){
216 AlgaTerraImportConfigurator config
= ((AlgaTerraImportState
) bmState
).getAlgaTerraConfigurator();
217 // return ! ( config.isDoTypes() && config.isDoImages()) ;