37d6b845ec3c0291003f091727d6d20ad05b25c6
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / mexico / MexicoConabioCommonNamesImport.java
1 /**
2 * Copyright (C) 2016 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.io.mexico;
10
11 import eu.etaxonomy.cdm.common.URI;
12 import java.util.HashMap;
13 import java.util.Map;
14 import java.util.Set;
15 import java.util.UUID;
16
17 import org.apache.commons.lang3.StringUtils;
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20
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;
30
31 /**
32 * @author a.mueller
33 * @since 16.06.2016
34 *
35 */
36 @Component
37 public class MexicoConabioCommonNamesImport<CONFIG extends MexicoConabioImportConfigurator>
38 extends SimpleExcelTaxonImport<CONFIG>{
39
40 private static final long serialVersionUID = 3579868489510261569L;
41
42 private static final Logger logger = Logger.getLogger(MexicoConabioCommonNamesImport.class);
43
44 private TermVocabulary<Language> languagesVoc;
45 private Map<String, Language> languagesMap = new HashMap<>();
46
47 private Map<String, Taxon> taxonIdMap;
48
49
50 @Override
51 protected String getWorksheetName(CONFIG config) {
52 return "NombresComunes";
53 }
54
55 @Override
56 protected void firstPass(SimpleExcelTaxonImportState<CONFIG> state) {
57 initLanguageVocabulary(state);
58 initTaxa();
59
60 String line = state.getCurrentLine() + ": ";
61 Map<String, String> record = state.getOriginalRecord();
62
63 String idCat = getValue(record, "IdCAT");
64 Taxon taxon = taxonIdMap.get(idCat);
65 if (taxon == null){
66 logger.warn(line + "Taxon could not be found: " + idCat);
67 }else{
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);
74 }
75
76 String refStr = getValue(record, "ReferenciasNombreComun");
77 CommonTaxonName commonName = CommonTaxonName.NewInstance(nomComunStr,
78 language, null);
79 desc.addElement(commonName);
80
81 Reference ref = getReference(state, refStr);
82 if (ref != null){
83 commonName.addSource(OriginalSourceType.PrimaryTaxonomicSource,
84 null, null, ref, null);
85 }
86
87
88 getTaxonService().save(taxon);
89 }
90 }
91
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);
97 }
98 }
99
100 /**
101 * @param state
102 */
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);
109 }
110 }
111 }
112
113 /**
114 * @param state
115 * @return
116 */
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);
124
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);
145
146 this.getVocabularyService().save(languagesVoc);
147
148 return;
149 }
150
151 /**
152 * @param state
153 * @param string
154 * @param uuidaguascalientes
155 */
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);
163 }
164
165 /**
166 * @param state
167 * @param refStr
168 * @return
169 */
170 private Reference getReference(SimpleExcelTaxonImportState<CONFIG> state, String refStr) {
171 if (StringUtils.isNoneBlank(refStr)){
172 return null;
173 }
174 Reference ref = state.getReference(refStr);
175 if (ref == null){
176 ref = ReferenceFactory.newBook();
177 ref.setTitleCache(refStr, true);
178 state.putReference(refStr, ref);
179 }
180 return ref;
181 }
182
183 /**
184 * @param taxon
185 * @return
186 */
187 private TaxonDescription getTaxonDescription(Taxon taxon) {
188 if (!taxon.getDescriptions().isEmpty()){
189 return taxon.getDescriptions().iterator().next();
190 }else{
191 TaxonDescription desc = TaxonDescription.NewInstance(taxon);
192 return desc;
193 }
194 }
195
196 private String getValueNd(Map<String, String> record, String string) {
197 String value = getValue(record, string);
198 if ("ND".equals(value)){
199 return null;
200 }else{
201 return value;
202 }
203 }
204
205 @Override
206 protected boolean isIgnore(SimpleExcelTaxonImportState<CONFIG> state) {
207 return ! state.getConfig().isDoCommonNames();
208 }
209
210 }