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 logger
.warn("Language not found: " + langStr
);
76 String refStr
= getValue(record
, "ReferenciasNombreComun");
77 CommonTaxonName commonName
= CommonTaxonName
.NewInstance(nomComunStr
,
79 desc
.addElement(commonName
);
81 Reference ref
= getReference(state
, refStr
);
83 commonName
.addSource(OriginalSourceType
.PrimaryTaxonomicSource
,
84 null, null, ref
, null);
88 getTaxonService().save(taxon
);
92 private void initTaxa() {
93 if (taxonIdMap
== null){
94 Set
<String
> existingKeys
= MexicoConabioTaxonImport
.taxonIdMap
.keySet();
95 taxonIdMap
= getCommonService().getSourcedObjectsByIdInSourceC(Taxon
.class,
96 existingKeys
, MexicoConabioTaxonImport
.TAXON_NAMESPACE
);
103 @SuppressWarnings("unchecked")
104 private void initLanguageVocabulary(SimpleExcelTaxonImportState
<CONFIG
> state
) {
105 if (languagesVoc
== null){
106 languagesVoc
= this.getVocabularyService().find(MexicoConabioTransformer
.uuidMexicanLanguagesVoc
);
107 if (languagesVoc
== null){
108 createLanguagesVoc(state
);
117 private void createLanguagesVoc(SimpleExcelTaxonImportState
<CONFIG
> state
) {
118 URI termSourceUri
= null;
119 String label
= "Mexican States";
120 String description
= "Mexican languages as used by the CONABIO Rubiaceae database";
121 languagesVoc
= TermVocabulary
.NewInstance(TermType
.Language
, Language
.class,
122 description
, label
, null, termSourceUri
);
123 languagesVoc
.setUuid(MexicoConabioTransformer
.uuidMexicanLanguagesVoc
);
125 addLanguage(state
, "Chontal", MexicoConabioTransformer
.uuidChontal
);
126 addLanguage(state
, "Chinanteco", MexicoConabioTransformer
.uuidChinanteco
);
127 addLanguage(state
, "Chiapaneca", MexicoConabioTransformer
.uuidChiapaneca
);
128 addLanguage(state
, "Huasteco", MexicoConabioTransformer
.uuidHuasteco
);
129 addLanguage(state
, "Español-Maya", MexicoConabioTransformer
.uuidEspanol_Maya
);
130 addLanguage(state
, "Guarijío", MexicoConabioTransformer
.uuidGuarijio
);
131 addLanguage(state
, "Huave", MexicoConabioTransformer
.uuidHuave
);
132 addLanguage(state
, "Español", MexicoConabioTransformer
.uuidEspanol
);
133 addLanguage(state
, "Maya", MexicoConabioTransformer
.uuidMaya
);
134 addLanguage(state
, "Lacandón", MexicoConabioTransformer
.uuidLacandon
);
135 addLanguage(state
, "Inglés", MexicoConabioTransformer
.uuidIngles
);
136 addLanguage(state
, "Itzmal", MexicoConabioTransformer
.uuidItzmal
);
137 addLanguage(state
, "Náhuatl", MexicoConabioTransformer
.uuidNahuatl
);
138 addLanguage(state
, "Tarahumara", MexicoConabioTransformer
.uuidTarahumara
);
139 addLanguage(state
, "Otomí", MexicoConabioTransformer
.uuidOtomi
);
140 addLanguage(state
, "Mixe", MexicoConabioTransformer
.uuidMixe
);
141 addLanguage(state
, "Tseltal", MexicoConabioTransformer
.uuidTseltal
);
142 addLanguage(state
, "Zapoteco", MexicoConabioTransformer
.uuidZapoteco
);
143 addLanguage(state
, "Totonaco", MexicoConabioTransformer
.uuidTotonaco
);
144 addLanguage(state
, "Tarasco", MexicoConabioTransformer
.uuidTarasco
);
146 this.getVocabularyService().save(languagesVoc
);
154 * @param uuidaguascalientes
156 private void addLanguage(SimpleExcelTaxonImportState
<CONFIG
> state
, String label
, UUID uuid
) {
157 String abbrev
= null;
158 Language language
= Language
.NewInstance(
159 label
, label
, abbrev
);
160 language
.setUuid(uuid
);
161 languagesVoc
.addTerm(language
);
162 languagesMap
.put(label
, language
);
170 private Reference
getReference(SimpleExcelTaxonImportState
<CONFIG
> state
, String refStr
) {
171 if (StringUtils
.isNoneBlank(refStr
)){
174 Reference ref
= state
.getReference(refStr
);
176 ref
= ReferenceFactory
.newBook();
177 ref
.setTitleCache(refStr
, true);
178 state
.putReference(refStr
, ref
);
187 private TaxonDescription
getTaxonDescription(Taxon taxon
) {
188 if (!taxon
.getDescriptions().isEmpty()){
189 return taxon
.getDescriptions().iterator().next();
191 TaxonDescription desc
= TaxonDescription
.NewInstance(taxon
);
196 private String
getValueNd(Map
<String
, String
> record
, String string
) {
197 String value
= getValue(record
, string
);
198 if ("ND".equals(value
)){
206 protected boolean isIgnore(SimpleExcelTaxonImportState
<CONFIG
> state
) {
207 return ! state
.getConfig().isDoCommonNames();