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
.berlinModel
.in
;
11 import java
.sql
.ResultSet
;
12 import java
.sql
.SQLException
;
13 import java
.util
.HashMap
;
14 import java
.util
.HashSet
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
21 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelWebMarkerImportValidator
;
22 import eu
.etaxonomy
.cdm
.io
.common
.ICdmIO
;
23 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
24 import eu
.etaxonomy
.cdm
.io
.common
.MapWrapper
;
25 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
26 import eu
.etaxonomy
.cdm
.model
.common
.AnnotatableEntity
;
27 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
29 import eu
.etaxonomy
.cdm
.model
.common
.Marker
;
30 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
32 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
41 public class BerlinModelWebMarkerImport
extends BerlinModelImportBase
{
42 private static final Logger logger
= Logger
.getLogger(BerlinModelWebMarkerImport
.class);
44 private static int modCount
= 2000;
45 private static final String dbTableName
= "webMarker";
46 private static final String pluralString
= "markers";
48 public BerlinModelWebMarkerImport(){
49 super(dbTableName
, pluralString
);
54 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
57 protected String
getIdQuery(BerlinModelImportState state
) {
58 String result
= " SELECT markerId FROM " + getTableName();
59 if (state
.getConfig().getWebMarkerFilter() != null){
60 result
+= " WHERE " + state
.getConfig().getWebMarkerFilter();
66 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
69 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
72 " FROM webMarker INNER JOIN webTableName ON webMarker.TableNameFk = webTableName.TableNameId " +
73 " WHERE (markerId IN ("+ ID_LIST_TOKEN
+ ") )";
79 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
81 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
82 boolean success
= true ;
84 MapWrapper
<Taxon
> taxonMap
= (MapWrapper
<Taxon
>)state
.getStore(ICdmIO
.TAXON_STORE
);
85 Set
<TaxonBase
> taxaToBeSaved
= new HashSet
<TaxonBase
>();
87 Map
<String
, DefinedTermBase
> definedTermMap
= state
.getDbCdmDefinedTermMap();
88 ResultSet rs
= partitioner
.getResultSet();
95 if ((i
++ % modCount
) == 0 && i
!= 1 ){ logger
.info(""+pluralString
+" handled: " + (i
-1));}
97 int markerId
= rs
.getInt("MarkerId");
98 int markerCategoryFk
= rs
.getInt("MarkerCategoryFk");
99 int rIdentifierFk
= rs
.getInt("RIdentifierFk");
100 String tableName
= rs
.getString("TableName");
101 Boolean activeFlag
= rs
.getBoolean("ActiveFlag");
103 AnnotatableEntity annotatableEntity
;
104 if ("PTaxon".equals(tableName
)){
105 TaxonBase
<?
> taxon
= taxonMap
.get(String
.valueOf(rIdentifierFk
));
107 annotatableEntity
= taxon
;
108 taxaToBeSaved
.add(taxon
);
109 addMarker(annotatableEntity
, activeFlag
, markerCategoryFk
, definedTermMap
);
111 logger
.warn("TaxonBase (RIdentifier " + rIdentifierFk
+ ") could not be found for marker " + markerId
);
114 logger
.warn("Marker for table " + tableName
+ " not yet implemented.");
119 }catch(Exception ex
){
120 logger
.error(ex
.getMessage());
121 ex
.printStackTrace();
124 } //while rs.hasNext()
125 } catch (SQLException e
) {
126 logger
.error("SQLException:" + e
);
130 logger
.info("save " + i
+ " "+pluralString
+ " ...");
131 getTaxonService().saveOrUpdate(taxaToBeSaved
);
137 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
139 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
143 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
146 Set
<String
> taxonIdSet
= new HashSet
<String
>();
148 int tableNameId
= rs
.getInt("TableNameFk");
149 if (tableNameId
!= 500){
151 logger
.warn("A marker is not related to table PTaxon. This case is not handled yet!");
153 handleForeignKey(rs
, taxonIdSet
, "RIdentifierFk");
158 nameSpace
= BerlinModelTaxonImport
.NAMESPACE
;
159 cdmClass
= TaxonBase
.class;
161 Map
<String
, TaxonBase
> taxonMap
= (Map
<String
, TaxonBase
>)getCommonService().getSourcedObjectsByIdInSource(cdmClass
, idSet
, nameSpace
);
162 result
.put(nameSpace
, taxonMap
);
164 } catch (SQLException e
) {
165 throw new RuntimeException(e
);
171 private boolean addMarker(AnnotatableEntity annotatableEntity
, boolean activeFlag
, int markerCategoryFk
, Map
<String
, DefinedTermBase
> map
){
172 MarkerType markerType
= (MarkerType
)map
.get("webMarkerCategory_" + markerCategoryFk
);
173 if (markerType
== null){
174 logger
.warn("MarkerType not found: " + markerCategoryFk
);
176 Marker marker
= Marker
.NewInstance(markerType
, activeFlag
);
177 annotatableEntity
.addMarker(marker
);
184 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
187 protected boolean doCheck(BerlinModelImportState state
){
188 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelWebMarkerImportValidator();
189 return validator
.validate(state
);
194 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
196 protected boolean isIgnore(BerlinModelImportState state
){
197 return ! state
.getConfig().isDoMarker();