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
.redlist
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
18 import java
.util
.UUID
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.stereotype
.Component
;
23 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
24 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
25 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.DbImportMapping
;
26 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.IMappingImport
;
27 import eu
.etaxonomy
.cdm
.io
.redlist
.validation
.RoteListeDbTaxonImportValidator
;
28 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
29 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
30 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
32 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
33 import eu
.etaxonomy
.cdm
.strategy
.parser
.NonViralNameParserImpl
;
37 * TODO do we still need this class?
42 public class RoteListeDbTaxonImport
extends RoteListeDbImportBase
<TaxonBase
> implements IMappingImport
<TaxonBase
, RoteListeDbImportState
>{
43 @SuppressWarnings("unused")
44 private static final Logger logger
= Logger
.getLogger(RoteListeDbTaxonImport
.class);
46 private NonViralNameParserImpl parser
= NonViralNameParserImpl
.NewInstance();
48 private Map
<UUID
, Taxon
> higherTaxonMap
;
50 private Integer TREE_ID
= null;
52 private DbImportMapping mapping
;
54 private int modCount
= 10000;
55 private static final String pluralString
= "taxa";
56 private static final String dbTableName
= "checklist";
57 private static final Class cdmTargetClass
= TaxonBase
.class;
58 private static final String strOrderBy
= " ORDER BY family, genus, species ";
60 public RoteListeDbTaxonImport(){
61 super(pluralString
, dbTableName
, cdmTargetClass
);
66 protected String
getIdQuery() {
67 String strQuery
= " SELECT pk FROM " + dbTableName
+
73 protected DbImportMapping
getMapping() {
75 mapping
= new DbImportMapping();
77 // mapping.addMapper(DbImportObjectCreationMapper.NewInstance(this, "pk", TAXON_NAMESPACE)); //id + tu_status
79 // UUID uuidKew = RoteListeDbTransformer.uuidAcceptedKew;
80 // mapping.addMapper(DbImportMarkerMapper.NewInstance("accepted kew", uuidKew, "Accepted Kew", "Accepted Kew", "Kew", null));
88 protected String
getRecordQuery(RoteListeDbImportConfigurator config
) {
89 String strSelect
= " SELECT * ";
90 String strFrom
= " FROM checklist";
91 String strWhere
= " WHERE ( pk IN (" + ID_LIST_TOKEN
+ ") )";
92 String strRecordQuery
= strSelect
+ strFrom
+ strWhere
+ strOrderBy
;
93 return strRecordQuery
;
98 public boolean doPartition(ResultSetPartitioner partitioner
, RoteListeDbImportState state
) {
99 boolean success
= super.doPartition(partitioner
, state
);
100 // higherTaxonMap = new HashMap<UUID, Taxon>();
101 // state.setGenevaReference(null);
107 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
, RoteListeDbImportState state
) {
111 Set
<String
> referenceIdSet
= new HashSet
<String
>();
113 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
117 handleForeignKey(rs
, referenceIdSet
, "source");
121 // nameSpace = REFERENCE_NAMESPACE;
122 // cdmClass = Reference.class;
123 // idSet = referenceIdSet;
124 // Map<String, Reference> referenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, referenceIdSet, nameSpace);
125 // result.put(REFERENCE_NAMESPACE, referenceMap);
127 } catch (SQLException e
) {
128 throw new RuntimeException(e
);
135 public TaxonBase
createObject(ResultSet rs
, RoteListeDbImportState state
) throws SQLException
{
136 BotanicalName speciesName
= BotanicalName
.NewInstance(Rank
.SPECIES());
138 // Reference sec = state.getConfig().getSourceReference();
139 // getReferenceService().saveOrUpdate(sec);
141 // String familyString = rs.getString("family");
142 // String genusString = rs.getString("genus");
143 // String speciesString = rs.getString("species");
144 // String authorityString = rs.getString("authority");
146 // if (logger.isDebugEnabled()){
147 // System.out.println(familyString + " " + genusString + " " + speciesString);
150 // Taxon speciesTaxon = Taxon.NewInstance(speciesName, sec);;
151 // speciesName.setGenusOrUninomial(genusString);
152 // speciesName.setSpecificEpithet(speciesString);
153 // parser.handleAuthors(speciesName, CdmUtils.concat(" ", new String[] {"", genusString, speciesString, authorityString}), authorityString);
156 // Taxon familyTaxon = null;
157 // if (StringUtils.isNotBlank(familyString)){
158 // familyTaxon = getHigherTaxon(state, familyString, null);
159 // if (familyTaxon == null){
160 // BotanicalName familyName = BotanicalName.NewInstance(Rank.FAMILY());
161 // familyName.setGenusOrUninomial(familyString);
162 // familyTaxon = Taxon.NewInstance(familyName, sec);
163 // saveHigherTaxon(state, familyTaxon, familyString, null);
165 // getTaxonService().saveOrUpdate(familyTaxon);
170 // Taxon genusTaxon = getHigherTaxon(state, familyString, genusString);
171 // if (genusTaxon == null){
172 // BotanicalName genusName = BotanicalName.NewInstance(Rank.GENUS());
173 // genusName.setGenusOrUninomial(genusString);
174 // genusTaxon = Taxon.NewInstance(genusName, sec);
175 // saveHigherTaxon(state, genusTaxon, familyString, genusString);
176 // if (familyTaxon != null){
177 // makeTaxonomicallyIncluded(state, TREE_ID, genusTaxon, familyTaxon, null, null);
180 // makeTaxonomicallyIncluded(state, TREE_ID, speciesTaxon, genusTaxon, null, null);
181 // getTaxonService().saveOrUpdate(genusTaxon);
183 // String sourceString = rs.getString("source");
184 // String sourceId = rs.getString("source_id");
186 // Reference sourceRef = state.getRelatedObject(REFERENCE_NAMESPACE, sourceString, Reference.class);
187 // speciesTaxon.addSource(sourceId, REFERENCE_NAMESPACE, sourceRef, null);
191 // handleDistribution(rs, speciesTaxon);
193 // return speciesTaxon;
200 protected boolean doCheck(RoteListeDbImportState state
){
201 IOValidator
<RoteListeDbImportState
> validator
= new RoteListeDbTaxonImportValidator();
202 return validator
.validate(state
);
207 protected boolean isIgnore(RoteListeDbImportState state
){
208 return ! state
.getConfig().isDoTaxa();