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
.berlinModel
.in
.BerlinModelTaxonImport
;
26 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
27 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
28 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
30 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
35 * Import for AlgaTerra images from table
40 public class AlgaTerraPictureImport
extends AlgaTerraImageImportBase
{
41 private static final Logger logger
= Logger
.getLogger(AlgaTerraPictureImport
.class);
44 private static int modCount
= 5000;
45 private static final String pluralString
= "pictures";
46 private static final String dbTableName
= "Picture"; //??
48 public AlgaTerraPictureImport(){
49 super(dbTableName
, pluralString
);
54 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
57 protected String
getIdQuery(BerlinModelImportState state
) {
58 String result
= " SELECT p.PictureId "
59 + " FROM Picture p INNER JOIN Fact f ON p.PictureId = f.ExtensionFk LEFT OUTER JOIN PTaxon pt ON f.PTNameFk = pt.PTNameFk AND f.PTRefFk = pt.PTRefFk "
60 + " WHERE f.FactCategoryFk = 205 "
61 + " ORDER BY p.PictureId ";
66 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
69 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
72 " SELECT p.*, f.*, pt.RIdentifier, p.PicturePhrase as FigurePhrase, p.PictureFile as fileName, p.PicturePath as filePath " +
73 " FROM Picture p INNER JOIN Fact f ON p.PictureId = f.ExtensionFk LEFT OUTER JOIN PTaxon pt ON f.PTNameFk = pt.PTNameFk AND f.PTRefFk = pt.PTRefFk "
74 + " WHERE f.FactCategoryFk = 205 AND ( p.PictureID IN (" + ID_LIST_TOKEN
+ ") )"
75 + " ORDER BY p.PictureId, f.factId, pt.RIdentifier ";
81 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
83 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState bmState
) {
84 boolean success
= true;
86 AlgaTerraImportState state
= (AlgaTerraImportState
)bmState
;
88 // Set<SpecimenOrObservationBase> specimenToSave = new HashSet<SpecimenOrObservationBase>();
89 Set
<TaxonBase
> taxaToSave
= new HashSet
<TaxonBase
>();
91 // Map<String, DerivedUnitBase> ecoFactMap = (Map<String, DerivedUnitBase>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE);
92 Map
<String
, TaxonBase
> taxonMap
= (Map
<String
, TaxonBase
>) partitioner
.getObjectMap(BerlinModelTaxonImport
.NAMESPACE
);
94 ResultSet rs
= partitioner
.getResultSet();
103 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
105 int pictureId
= rs
.getInt("PictureID");
106 int taxonId
= rs
.getInt("RIdentifier");
107 int factId
= rs
.getInt("FactId");
110 //TODO etc. Created, Notes, Copyright, TermsOfUse etc.
114 TaxonBase
<?
> taxonBase
= taxonMap
.get(String
.valueOf(taxonId
));
115 if (taxonBase
== null){
116 logger
.warn("Could not find taxon (" + taxonId
+") for picture fact " + factId
);
117 }else if (! taxonBase
.isInstanceOf(Taxon
.class)){
118 logger
.warn("Taxon is not of class Taxon but " + taxonBase
.getClass() + ". RIdentifier: " + taxonId
+ " PictureId: " + pictureId
+ ", FactId: "+ factId
);
121 Taxon taxon
= CdmBase
.deproxy(taxonBase
, Taxon
.class);
123 Media media
= handleSingleImage(rs
, taxon
, state
, partitioner
);
125 handlePictureSpecificFields(rs
, media
, state
);
127 taxaToSave
.add(taxon
);
131 } catch (Exception e
) {
132 logger
.warn("Exception in " + getTableName() + ": PictureId " + pictureId
+ ". " + e
.getMessage());
138 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
140 logger
.warn(pluralString
+ " to save: " + taxaToSave
.size());
141 // getOccurrenceService().save(taxaToSave);
142 getTaxonService().save(taxaToSave
);
145 } catch (SQLException e
) {
146 logger
.error("SQLException:" + e
);
153 private void handlePictureSpecificFields(ResultSet rs
, Media media
, AlgaTerraImportState state
) throws SQLException
{
160 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
162 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
166 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
169 Set
<String
> taxonIdSet
= new HashSet
<String
>();
172 handleForeignKey(rs
, taxonIdSet
, "RIdentifier");
176 nameSpace
= BerlinModelTaxonImport
.NAMESPACE
;
177 cdmClass
= TaxonBase
.class;
179 Map
<String
, TaxonBase
> taxonMap
= (Map
<String
,TaxonBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
180 result
.put(nameSpace
, taxonMap
);
183 } catch (SQLException e
) {
184 throw new RuntimeException(e
);
193 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
196 protected boolean doCheck(BerlinModelImportState state
){
197 IOValidator
<BerlinModelImportState
> validator
= new AlgaTerraTypeImportValidator();
198 return validator
.validate(state
);
202 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
204 protected boolean isIgnore(BerlinModelImportState bmState
){
205 AlgaTerraImportConfigurator config
= ((AlgaTerraImportState
) bmState
).getAlgaTerraConfigurator();
206 // return ! ( config.isDoTypes() && config.isDoImages()) ;