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
.globis
;
12 import java
.net
.MalformedURLException
;
14 import java
.sql
.ResultSet
;
15 import java
.sql
.SQLException
;
16 import java
.util
.HashMap
;
17 import java
.util
.HashSet
;
21 import org
.apache
.commons
.lang
.StringUtils
;
22 import org
.apache
.log4j
.Logger
;
23 import org
.springframework
.stereotype
.Component
;
25 import eu
.etaxonomy
.cdm
.common
.media
.ImageInfo
;
26 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
27 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
28 import eu
.etaxonomy
.cdm
.io
.globis
.validation
.GlobisCurrentSpeciesImportValidator
;
29 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
30 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
31 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
32 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
33 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
34 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
35 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
36 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
37 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
38 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
39 import eu
.etaxonomy
.cdm
.strategy
.parser
.INonViralNameParser
;
40 import eu
.etaxonomy
.cdm
.strategy
.parser
.NonViralNameParserImpl
;
49 public class GlobisImageImport
extends GlobisImportBase
<Taxon
> {
50 private static final Logger logger
= Logger
.getLogger(GlobisImageImport
.class);
52 private int modCount
= 10000;
53 private static final String pluralString
= "images";
54 private static final String dbTableName
= "Einzelbilder";
55 private static final Class cdmTargetClass
= Media
58 private static final String IMAGE_NAMESPACE
= "Einzelbilder";
60 public GlobisImageImport(){
61 super(pluralString
, dbTableName
, cdmTargetClass
);
68 * @see eu.etaxonomy.cdm.io.globis.GlobisImportBase#getIdQuery()
71 protected String
getIdQuery() {
72 String strRecordQuery
=
74 " FROM " + dbTableName
;
75 return strRecordQuery
;
82 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
85 protected String
getRecordQuery(GlobisImportConfigurator config
) {
86 String strRecordQuery
=
87 " SELECT i.*, NULL as Created_When, NULL as Created_Who," +
88 " NULL as Updated_who, NULL as Updated_When, NULL as Notes " +
89 " FROM " + getTableName() + " i " +
90 " WHERE ( i.BildId IN (" + ID_LIST_TOKEN
+ ") )";
91 return strRecordQuery
;
97 * @see eu.etaxonomy.cdm.io.globis.GlobisImportBase#doPartition(eu.etaxonomy.cdm.io.common.ResultSetPartitioner, eu.etaxonomy.cdm.io.globis.GlobisImportState)
100 public boolean doPartition(ResultSetPartitioner partitioner
, GlobisImportState state
) {
101 boolean success
= true;
103 Set
<Media
> objectsToSave
= new HashSet
<Media
>();
105 // Map<String, Taxon> taxonMap = (Map<String, Taxon>) partitioner.getObjectMap(TAXON_NAMESPACE);
106 // Map<String, DerivedUnit> ecoFactDerivedUnitMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(ECO_FACT_DERIVED_UNIT_NAMESPACE);
108 ResultSet rs
= partitioner
.getResultSet();
117 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(pluralString
+ " handled: " + (i
-1));}
119 Integer bildID
= rs
.getInt("BildID");
121 Integer spectaxID
= nullSafeInt(rs
, "spectaxID");
123 //ignore: [file lab2], same as Dateiname04 but less data
130 Reference
<?
> sourceRef
= state
.getTransactionalSourceReference();
133 String pathShort
= rs
.getString("Dateipfad_kurz");
134 String fileOS
= rs
.getString("file OS");
135 pathShort
.replace(fileOS
, "");
136 //TODO move to config
137 String newPath
= "http://globis-images.insects-online.de/images/";
138 String path
= pathShort
.replace("image:Webversionen", newPath
);
142 Media media1
= makeMedia(state
, rs
, "file OS", "Legende 1", path
);
143 Media media2
= makeMedia(state
, rs
, "Dateiname02", "Legende 2", path
);
144 Media media3
= makeMedia(state
, rs
, "Dateiname03", "Legende 3", path
);
145 Media media4
= makeMedia(state
, rs
, "Dateiname04", "Legende 4", path
);
149 this.doIdCreatedUpdatedNotes(state
, media1
, rs
, bildID
, IMAGE_NAMESPACE
);
151 save(objectsToSave
, media1
);
155 } catch (Exception e
) {
156 logger
.warn("Exception in Einzelbilder: bildID " + bildID
+ ". " + e
.getMessage());
157 // e.printStackTrace();
162 // logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
164 logger
.warn(pluralString
+ " to save: " + objectsToSave
.size());
165 getMediaService().save(objectsToSave
);
168 } catch (SQLException e
) {
169 logger
.error("SQLException:" + e
);
174 private void save(Set
<Media
> objectsToSave
, Media media
) {
176 objectsToSave
.add(media
);
183 private Media
makeMedia(GlobisImportState state
, ResultSet rs
, String fileNameAttr
, String legendAttr
, String path
) throws SQLException
{
185 String fileName
= rs
.getString(fileNameAttr
);
186 String legend
= rs
.getString(legendAttr
);
188 URI uri
= URI
.create(path
+fileName
);
190 // Media media = ImageInfo.NewInstanceWithMetaData(uri, null);
193 media
= this.getImageMedia(uri
.toString(), true, false);
194 media
.putTitle(Language
.ENGLISH(), legend
);
195 } catch (MalformedURLException e
) {
205 private Taxon
getTaxon(GlobisImportState state
, ResultSet rs
, String subGenus
, Rank rank
, String author
, Map
<String
, Taxon
> taxonMap
) {
206 String key
= subGenus
+ "@" + "subGenusAuthor" + "@" + rank
.getTitleCache();
207 Taxon taxon
= taxonMap
.get(key
);
209 ZoologicalName name
= ZoologicalName
.NewInstance(rank
);
210 taxon
= Taxon
.NewInstance(name
, state
.getTransactionalSourceReference());
211 handleAuthorAndYear(author
, name
);
212 getTaxonService().save(taxon
);
223 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
225 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
226 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
227 return result
; //not needed
231 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
234 protected boolean doCheck(GlobisImportState state
){
235 IOValidator
<GlobisImportState
> validator
= new GlobisCurrentSpeciesImportValidator();
236 return validator
.validate(state
);
241 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
243 protected boolean isIgnore(GlobisImportState state
){
244 return ! state
.getConfig().isDoImages();