2 * Copyright (C) 2016 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 eu
.etaxonomy
.cdm
.common
.URI
;
12 import java
.util
.HashMap
;
15 import java
.util
.UUID
;
17 import org
.apache
.commons
.lang3
.StringUtils
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
21 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
22 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
23 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
24 import eu
.etaxonomy
.cdm
.model
.reference
.OriginalSourceType
;
25 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
26 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
27 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
28 import eu
.etaxonomy
.cdm
.model
.term
.TermType
;
29 import eu
.etaxonomy
.cdm
.model
.term
.TermVocabulary
;
37 public class MexicoConabioCommonNamesImport
<CONFIG
extends MexicoConabioImportConfigurator
>
38 extends SimpleExcelTaxonImport
<CONFIG
>{
40 private static final long serialVersionUID
= 3579868489510261569L;
42 private static final Logger logger
= Logger
.getLogger(MexicoConabioCommonNamesImport
.class);
44 private TermVocabulary
<Language
> languagesVoc
;
45 private Map
<String
, Language
> languagesMap
= new HashMap
<>();
47 private Map
<String
, Taxon
> taxonIdMap
;
51 protected String
getWorksheetName(CONFIG config
) {
52 return "NombresComunes";
56 protected void firstPass(SimpleExcelTaxonImportState
<CONFIG
> state
) {
57 initLanguageVocabulary(state
);
60 String line
= state
.getCurrentLine() + ": ";
61 Map
<String
, String
> record
= state
.getOriginalRecord();
63 String idCat
= getValue(record
, "IdCAT");
64 Taxon taxon
= taxonIdMap
.get(idCat
);
66 logger
.warn(line
+ "Taxon could not be found: " + idCat
);
68 TaxonDescription desc
= getTaxonDescription(taxon
);
69 String nomComunStr
= getValue(record
, "NomComun");
70 String langStr
= getValueNd(record
, "Lengua");
71 Language language
= languagesMap
.get(langStr
);
72 if (language
== null && langStr
!= null){
73 addNewLanguage(state
, langStr
);
75 logger
.warn("Common names for the same taxon using the same common name but differing in source are currently not yet deduplicated. Needs to be fixed for next import");
77 String refStr
= getValue(record
, "ReferenciasNombreComun");
78 CommonTaxonName commonName
= CommonTaxonName
.NewInstance(nomComunStr
,
80 desc
.addElement(commonName
);
82 Reference ref
= getReference(state
, refStr
);
84 commonName
.addSource(OriginalSourceType
.PrimaryTaxonomicSource
,
85 null, null, ref
, null);
89 getTaxonService().save(taxon
);
93 private Language
addNewLanguage(SimpleExcelTaxonImportState
<CONFIG
> state
, String langStr
) {
94 UUID uuid
= getNewLanguageUuid(langStr
);
96 Language newLanguage
= addLanguage(state
, langStr
, uuid
);
97 getTermService().saveOrUpdate(newLanguage
);
98 logger
.warn("New language added: " + langStr
+ "("+ uuid
+ ")");
101 logger
.warn("Language not recognized: " + langStr
);
106 private UUID
getNewLanguageUuid(String langStr
) {
107 if (langStr
.equals("Mixteco")){return MexicoConabioTransformer
.uuidMixteco
;}
108 else if (langStr
.equals("Náhuatl-Español")){return MexicoConabioTransformer
.uuidNahuatlEspanol
;}
109 else if (langStr
.equals("Español-Náhuatl")){return MexicoConabioTransformer
.uuidEspanolNahuatl
;}
110 else if (langStr
.equals("Tzotzil")){return MexicoConabioTransformer
.uuidTzotzil
;}
111 else if (langStr
.equals("Tetzal")){return MexicoConabioTransformer
.uuidTetzal
;}
112 else if (langStr
.equals("Tzeltal")){return MexicoConabioTransformer
.uuidTzeltal
;}
113 else if (langStr
.equals("Mazateco")){return MexicoConabioTransformer
.uuidMazateco
;}
114 else if (langStr
.equals("Tepehua")){return MexicoConabioTransformer
.uuidTepehua
;}
116 else if (langStr
.equals("Cuicateco")){return MexicoConabioTransformer
.uuidCuicateco
;}
117 else if (langStr
.equals("Zoque")){return MexicoConabioTransformer
.uuidZoque
;}
118 else if (langStr
.equals("Tepehuano")){return MexicoConabioTransformer
.uuidTepehuano
;}
119 else if (langStr
.equals("Popoloca")){return MexicoConabioTransformer
.uuidPopoloca
;}
120 else if (langStr
.equals("Tojolabal")){return MexicoConabioTransformer
.uuidTojolabal
;}
122 else if (langStr
.equals("Mayo")){return MexicoConabioTransformer
.uuidMayo
;}
123 else if (langStr
.equals("Huichol")){return MexicoConabioTransformer
.uuidHuichol
;}
124 else if (langStr
.equals("Cora")){return MexicoConabioTransformer
.uuidCora
;}
125 else if (langStr
.equals("Seri")){return MexicoConabioTransformer
.uuidSeri
;}
133 private void initTaxa() {
134 if (taxonIdMap
== null){
135 Set
<String
> existingKeys
= MexicoConabioTaxonImport
.taxonIdMap
.keySet();
136 taxonIdMap
= getCommonService().getSourcedObjectsByIdInSourceC(Taxon
.class,
137 existingKeys
, MexicoConabioTaxonImport
.TAXON_NAMESPACE
);
144 @SuppressWarnings("unchecked")
145 private void initLanguageVocabulary(SimpleExcelTaxonImportState
<CONFIG
> state
) {
146 if (languagesVoc
== null){
147 languagesVoc
= this.getVocabularyService().find(MexicoConabioTransformer
.uuidMexicanLanguagesVoc
);
148 if (languagesVoc
== null){
149 createLanguagesVoc(state
);
156 private void fillLanguageMap() {
157 for (Language language
: languagesVoc
.getTerms()){
158 String label
= language
.getLabel();
159 languagesMap
.put(label
, language
);
163 private void createLanguagesVoc(SimpleExcelTaxonImportState
<CONFIG
> state
) {
164 URI termSourceUri
= null;
165 String label
= "Mexican States";
166 String description
= "Mexican languages as used by the CONABIO Rubiaceae database";
167 languagesVoc
= TermVocabulary
.NewInstance(TermType
.Language
, Language
.class,
168 description
, label
, null, termSourceUri
);
169 languagesVoc
.setUuid(MexicoConabioTransformer
.uuidMexicanLanguagesVoc
);
171 addLanguage(state
, "Chontal", MexicoConabioTransformer
.uuidChontal
);
172 addLanguage(state
, "Chinanteco", MexicoConabioTransformer
.uuidChinanteco
);
173 addLanguage(state
, "Chiapaneca", MexicoConabioTransformer
.uuidChiapaneca
);
174 addLanguage(state
, "Huasteco", MexicoConabioTransformer
.uuidHuasteco
);
175 addLanguage(state
, "Español-Maya", MexicoConabioTransformer
.uuidEspanol_Maya
);
176 addLanguage(state
, "Guarijío", MexicoConabioTransformer
.uuidGuarijio
);
177 addLanguage(state
, "Huave", MexicoConabioTransformer
.uuidHuave
);
178 addLanguage(state
, "Español", MexicoConabioTransformer
.uuidEspanol
);
179 addLanguage(state
, "Maya", MexicoConabioTransformer
.uuidMaya
);
180 addLanguage(state
, "Lacandón", MexicoConabioTransformer
.uuidLacandon
);
181 addLanguage(state
, "Inglés", MexicoConabioTransformer
.uuidIngles
);
182 addLanguage(state
, "Itzmal", MexicoConabioTransformer
.uuidItzmal
);
183 addLanguage(state
, "Náhuatl", MexicoConabioTransformer
.uuidNahuatl
);
184 addLanguage(state
, "Tarahumara", MexicoConabioTransformer
.uuidTarahumara
);
185 addLanguage(state
, "Otomí", MexicoConabioTransformer
.uuidOtomi
);
186 addLanguage(state
, "Mixe", MexicoConabioTransformer
.uuidMixe
);
187 addLanguage(state
, "Tseltal", MexicoConabioTransformer
.uuidTseltal
);
188 addLanguage(state
, "Zapoteco", MexicoConabioTransformer
.uuidZapoteco
);
189 addLanguage(state
, "Totonaco", MexicoConabioTransformer
.uuidTotonaco
);
190 addLanguage(state
, "Tarasco", MexicoConabioTransformer
.uuidTarasco
);
192 this.getVocabularyService().save(languagesVoc
);
197 private Language
addLanguage(SimpleExcelTaxonImportState
<CONFIG
> state
, String label
, UUID uuid
) {
198 String abbrev
= null;
199 Language language
= Language
.NewInstance(
200 label
, label
, abbrev
);
201 language
.setUuid(uuid
);
202 languagesVoc
.addTerm(language
);
203 languagesMap
.put(label
, language
);
207 private Reference
getReference(SimpleExcelTaxonImportState
<CONFIG
> state
, String refStr
) {
208 if (StringUtils
.isBlank(refStr
)){
211 Reference ref
= state
.getReference(refStr
);
213 ref
= ReferenceFactory
.newBook();
214 ref
.setTitleCache(refStr
, true);
215 state
.putReference(refStr
, ref
);
224 private TaxonDescription
getTaxonDescription(Taxon taxon
) {
225 if (!taxon
.getDescriptions().isEmpty()){
226 return taxon
.getDescriptions().iterator().next();
228 TaxonDescription desc
= TaxonDescription
.NewInstance(taxon
);
233 private String
getValueNd(Map
<String
, String
> record
, String string
) {
234 String value
= getValue(record
, string
);
235 if ("ND".equals(value
)){
243 protected boolean isIgnore(SimpleExcelTaxonImportState
<CONFIG
> state
) {
244 return ! state
.getConfig().isDoCommonNames();