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
.mexico
;
11 import java
.sql
.ResultSet
;
12 import java
.sql
.SQLException
;
13 import java
.util
.HashMap
;
14 import java
.util
.HashSet
;
15 import java
.util
.List
;
18 import java
.util
.UUID
;
20 import org
.apache
.log4j
.Logger
;
21 import org
.springframework
.stereotype
.Component
;
23 import eu
.etaxonomy
.cdm
.common
.URI
;
24 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
25 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
26 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
27 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
28 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
29 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
32 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
33 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
34 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
41 public class MexicoEfloraCommonNameImport
extends MexicoEfloraImportBase
{
43 private static final long serialVersionUID
= 8616047381536678637L;
44 private static final Logger logger
= Logger
.getLogger(MexicoEfloraCommonNameImport
.class);
46 protected static final String NAMESPACE
= "CommonNames";
48 private static final String pluralString
= "common names";
49 private static final String dbTableName
= "Eflora_NombresComunes4CDM";
51 private Map
<String
,Language
> languageMap
= new HashMap
<>();
53 public MexicoEfloraCommonNameImport(){
54 super(dbTableName
, pluralString
);
58 protected String
getIdQuery(MexicoEfloraImportState state
) {
59 String sql
= " SELECT IdCombinado "
60 + " FROM " + dbTableName
61 + " ORDER BY IdCat, IdCombinado ";
66 protected String
getRecordQuery(MexicoEfloraImportConfigurator config
) {
67 String sqlSelect
= " SELECT cn.*, t.uuid taxonUuid ";
68 String sqlFrom
= " FROM " + dbTableName
+ " cn "
69 + " LEFT JOIN " + MexicoEfloraTaxonImport
.dbTableName
+ " t ON cn.IdCAT = t.IdCAT ";
70 String sqlWhere
= " WHERE ( IdCombinado IN (" + ID_LIST_TOKEN
+ ") )";
72 String strRecordQuery
=sqlSelect
+ " " + sqlFrom
+ " " + sqlWhere
;
73 return strRecordQuery
;
77 protected void doInvoke(MexicoEfloraImportState state
) {
78 createLanguageMap(state
);
79 super.doInvoke(state
);
82 private void createLanguageMap(MexicoEfloraImportState state
) {
83 TermVocabulary
<Language
> voc
= createLanguagesVoc(state
);
85 String sql
= "SELECT * FROM cv4_Controlled_vocabulary_for_languages ";
86 ResultSet rs
= state
.getConfig().getSource().getResultSet(sql
);
89 String lang
= rs
.getString("Lengua");
90 Language language
= Language
.NewInstance(lang
, lang
, null, Language
.SPANISH_CASTILIAN());
91 voc
.addTerm(language
);
92 getTermService().save(language
); //not sure if necessary
93 languageMap
.put(lang
, language
);
95 } catch (SQLException e
) {
100 private TermVocabulary
<Language
> createLanguagesVoc(MexicoEfloraImportState state
) {
101 URI termSourceUri
= null;
102 String label
= "Mexican Languages";
103 String description
= "Mexican languages as used by the CONABIO database";
104 TermVocabulary
<Language
> languagesVoc
= TermVocabulary
.NewInstance(TermType
.Language
, Language
.class,
105 description
, label
, null, termSourceUri
);
106 languagesVoc
.setUuid(MexicoConabioTransformer
.uuidMexicanLanguagesVoc
);
107 this.getVocabularyService().save(languagesVoc
);
113 public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner
, MexicoEfloraImportState state
) {
115 boolean success
= true ;
117 @SuppressWarnings("rawtypes")
118 Set
<TaxonBase
> taxaToSave
= new HashSet
<>();
120 @SuppressWarnings("unchecked")
121 Map
<String
, TaxonBase
<?
>> taxonMap
= partitioner
.getObjectMap(MexicoEfloraTaxonImport
.NAMESPACE
);
123 ResultSet rs
= partitioner
.getResultSet();
127 // if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("PTaxa handled: " + (i-1));}
129 //create TaxonName element
130 String idCombi
= rs
.getString("IdCombinado");
131 // String idNomComun = rs.getString("IdNomComun");
132 String taxonUuid
= rs
.getString("taxonUuid");
134 String nomComunStr
= rs
.getString("NomComun");
135 String lenguaStr
= rs
.getString("Lengua");
136 //TODO handle country in
137 // String paisStr = rs.getString("Pais");
138 // String estadoStr = rs.getString("Estado");
139 int idRegion
= rs
.getInt("IdRegion");
142 TaxonBase
<?
> taxonBase
= taxonMap
.get(taxonUuid
);
144 if (taxonBase
.isInstanceOf(Taxon
.class)) {
145 taxon
= CdmBase
.deproxy(taxonBase
, Taxon
.class);
147 logger
.warn(idCombi
+ ": Taxon is not accepted: " + taxonUuid
);
151 Language language
= getLanguage(state
, lenguaStr
);
152 NamedArea area
= getArea(state
, idRegion
);
153 CommonTaxonName commonName
= CommonTaxonName
.NewInstance(nomComunStr
,
156 Reference ref
= null;
157 TaxonDescription description
= this.getTaxonDescription(taxon
, ref
,
159 description
.addElement(commonName
);
161 state
.getCommonNameMap().put(idCombi
, commonName
);
163 partitioner
.startDoSave();
164 taxaToSave
.add(taxonBase
);
165 } catch (Exception e
) {
166 logger
.warn("An exception (" +e
.getMessage()+") occurred when trying to create common name for id " + idCombi
+ ".");
170 } catch (Exception e
) {
171 logger
.error("SQLException:" + e
);
175 getTaxonService().save(taxaToSave
);
179 private NamedArea
getArea(MexicoEfloraImportState state
, Integer idRegion
) {
180 NamedArea area
= state
.getAreaMap().get(idRegion
);
181 if (idRegion
!= null && area
== null) {
182 logger
.warn("Area not found: " + idRegion
);
187 private Language
getLanguage(MexicoEfloraImportState state
, String lenguaStr
) {
188 Language language
= languageMap
.get(lenguaStr
);
189 if (isNotBlank(lenguaStr
) && language
== null) {
190 logger
.warn("Language not found: " + lenguaStr
);
196 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
, MexicoEfloraImportState state
) {
200 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<>();
203 Set
<UUID
> taxonIdSet
= new HashSet
<>();
204 Set
<String
> referenceIdSet
= new HashSet
<>();
206 handleForeignUuidKey(rs
, taxonIdSet
, "taxonUuid");
207 // handleForeignKey(rs, referenceIdSet, "PTRefFk");
211 nameSpace
= MexicoEfloraTaxonImport
.NAMESPACE
;
212 @SuppressWarnings("rawtypes")
213 Map
<String
, TaxonBase
> taxonMap
= new HashMap
<>();
214 @SuppressWarnings("rawtypes")
215 List
<TaxonBase
> taxa
= getTaxonService().find(taxonIdSet
);
216 taxa
.stream().forEach(t
->taxonMap
.put(t
.getUuid().toString(), t
));
217 result
.put(nameSpace
, taxonMap
);
220 nameSpace
= MexicoEfloraRefArticlesImport
.NAMESPACE
;
221 idSet
= referenceIdSet
;
222 Map
<String
, Reference
> referenceMap
= getCommonService().getSourcedObjectsByIdInSourceC(Reference
.class, idSet
, nameSpace
);
223 result
.put(nameSpace
, referenceMap
);
225 } catch (SQLException e
) {
226 throw new RuntimeException(e
);
232 protected String
getTableName() {
237 public String
getPluralString() {
242 protected boolean doCheck(MexicoEfloraImportState state
){
247 protected boolean isIgnore(MexicoEfloraImportState state
){
248 return ! state
.getConfig().isDoTaxa();