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
.commons
.lang
.StringUtils
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.stereotype
.Component
;
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
;
55 public class AlgaTerraTypeImagesImport
extends AlgaTerraImageImportBase
{
56 private static final Logger logger
= Logger
.getLogger(AlgaTerraTypeImagesImport
.class);
59 private static int modCount
= 5000;
60 private static final String pluralString
= "type images";
61 private static final String dbTableName
= "SpecimenFigure"; //??
63 public AlgaTerraTypeImagesImport(){
69 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
72 protected String
getIdQuery(BerlinModelImportState state
) {
73 String result
= " SELECT SpecimenFigureId "
74 + " FROM SpecimenFigure "
75 + " WHERE TypeSpecimenFk is NOT NULL "
76 + " ORDER BY TypeSpecimenFk ";
81 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
84 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
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 ";
96 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
98 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState bmState
) {
99 boolean success
= true;
101 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
103 Set
<SpecimenOrObservationBase
> unitsToSave
= new HashSet
<SpecimenOrObservationBase
>();
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
);
109 ResultSet rs
= partitioner
.getResultSet();
118 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
120 int figureId
= rs
.getInt("SpecimenFigureId");
121 int typeSpecimenFk
= rs
.getInt("typeSpecimenFk");
124 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
129 Reference
<?
> sourceRef
= state
.getTransactionalSourceReference();
131 DerivedUnitBase derivedUnit
= typeSpecimenMap
.get(String
.valueOf(typeSpecimenFk
));
133 if (derivedUnit
== null){
134 logger
.warn("Could not find type specimen (" + typeSpecimenFk
+") for specimen figure " + figureId
);
138 Media media
= handleSingleImage(rs
, derivedUnit
, state
, partitioner
);
140 handleTypeImageSpecificFields(rs
, media
, state
);
142 unitsToSave
.add(derivedUnit
);
146 } catch (Exception e
) {
147 logger
.warn("Exception in " + getTableName() + ": SpecimenFigureId " + figureId
+ ". " + e
.getMessage());
153 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
155 logger
.warn(pluralString
+ " to save: " + unitsToSave
.size());
156 getOccurrenceService().saveOrUpdate(unitsToSave
);
159 } catch (SQLException e
) {
160 logger
.error("SQLException:" + e
);
167 private void handleTypeImageSpecificFields(ResultSet rs
, Media media
, AlgaTerraImportState state
) throws SQLException
{
174 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
176 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
180 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
183 Set
<String
> typeSpecimenIdSet
= new HashSet
<String
>();
186 handleForeignKey(rs
, typeSpecimenIdSet
, "TypeSpecimenFk");
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
);
197 } catch (SQLException e
) {
198 throw new RuntimeException(e
);
207 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
210 protected boolean doCheck(BerlinModelImportState state
){
211 IOValidator
<BerlinModelImportState
> validator
= new AlgaTerraTypeImportValidator();
212 return validator
.validate(state
);
216 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
219 protected String
getTableName() {
224 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
227 public String
getPluralString() {
232 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
234 protected boolean isIgnore(BerlinModelImportState bmState
){
235 AlgaTerraImportConfigurator config
= ((AlgaTerraImportState
) bmState
).getAlgaTerraConfigurator();
236 // return ! ( config.isDoTypes() && config.isDoImages()) ;