e9de685695f1f42d44c0c073ae6188f0485952b3
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / mexico / MexicoEfloraRegionImport.java
1 /**
2 * Copyright (C) 2007 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 java.sql.ResultSet;
12 import java.util.HashMap;
13 import java.util.Map;
14 import java.util.UUID;
15
16 import org.apache.log4j.Logger;
17 import org.springframework.stereotype.Component;
18
19 import eu.etaxonomy.cdm.common.URI;
20 import eu.etaxonomy.cdm.ext.geo.GeoServiceArea;
21 import eu.etaxonomy.cdm.ext.geo.GeoServiceAreaAnnotatedMapping;
22 import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
23 import eu.etaxonomy.cdm.model.common.CdmBase;
24 import eu.etaxonomy.cdm.model.common.Language;
25 import eu.etaxonomy.cdm.model.location.NamedArea;
26 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
27 import eu.etaxonomy.cdm.model.location.NamedAreaType;
28 import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
29 import eu.etaxonomy.cdm.model.term.Representation;
30 import eu.etaxonomy.cdm.model.term.TermType;
31
32 /**
33 * @author a.mueller
34 * @since 08.02.2022
35 */
36 @Component
37 public class MexicoEfloraRegionImport extends MexicoEfloraImportBase {
38
39 private static final long serialVersionUID = -361321245993093847L;
40 private static final Logger logger = Logger.getLogger(MexicoEfloraRegionImport.class);
41
42 protected static final String NAMESPACE = "Region";
43
44 private static final String pluralString = "regions";
45 private static final String dbTableName = "cv2_Controlled_vocabulary_for_Mexican_States";
46
47 public MexicoEfloraRegionImport(){
48 super(dbTableName, pluralString);
49 }
50
51 @Override
52 protected String getIdQuery(MexicoEfloraImportState state) {
53 String sql = " SELECT IdRegion "
54 + " FROM " + dbTableName
55 + " ORDER BY IdRegion ";
56 return sql;
57 }
58
59 @Override
60 protected String getRecordQuery(MexicoEfloraImportConfigurator config) {
61 String sqlSelect = " SELECT * ";
62 String sqlFrom = " FROM " + dbTableName;
63 String sqlWhere = " WHERE ( IdRegion IN (" + ID_LIST_TOKEN + ") )";
64
65 String strRecordQuery =sqlSelect + " " + sqlFrom + " " + sqlWhere ;
66 return strRecordQuery;
67 }
68
69 @Override
70 public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, MexicoEfloraImportState state) {
71 initAreaVocabulary(state);
72
73 // String label = "Mexican regions";
74 // OrderedTermVocabulary<NamedArea> voc = OrderedTermVocabulary.NewOrderedInstance(TermType.NamedArea, NamedArea.class, label, label, null, null);
75 // getVocabularyService().save(voc);
76 //
77 boolean success = true ;
78
79 // Set<NamedArea> areasToSave = new HashSet<>();
80
81 ResultSet rs = partitioner.getResultSet();
82 try{
83 while (rs.next()){
84 int idRegion = rs.getInt("IdRegion");
85 String nombreRegion = rs.getString("NombreRegion");
86 String clave = rs.getString("ClaveRegion");
87 String abbrev = rs.getString("Abreviado");
88
89 NamedArea area = state.getAreaMap().get(idRegion);
90 if (area == null) {
91 logger.warn("Area not found: " + idRegion + " " + nombreRegion);
92 }else if (!area.getLabel().toLowerCase().equals(nombreRegion.toLowerCase())) {
93 logger.warn("Area does not match: " + idRegion + " " + nombreRegion + " " + area.getLabel());
94 }else {
95 area.getRepresentations().iterator().next().setAbbreviatedLabel(abbrev);
96 }
97
98
99 try {
100 // NamedArea area = NamedArea.NewInstance(nombreRegion, nombreRegion, abbrev, Language.SPANISH_CASTILIAN());
101 // area.setIdInVocabulary(clave);
102 // voc.addTerm(area);
103 // state.getAreaMap().put(idRegion, area);
104 // state.getAreaLabelMap().put(nombreRegion, area);
105
106 partitioner.startDoSave();
107 // areasToSave.add(area);
108 } catch (Exception e) {
109 logger.warn("An exception (" +e.getMessage()+") occurred when trying to create region for id " + idRegion + ".");
110 success = false;
111 }
112 }
113 } catch (Exception e) {
114 logger.error("SQLException:" + e);
115 return false;
116 }
117
118 // getTermService().save(areasToSave);
119 return success;
120 }
121
122 private OrderedTermVocabulary<NamedArea> stateAreasVoc;
123
124 @SuppressWarnings("unchecked")
125 private void initAreaVocabulary(MexicoEfloraImportState state) {
126 if (stateAreasVoc == null){
127 stateAreasVoc = (OrderedTermVocabulary<NamedArea>)this.getVocabularyService().find(MexicoConabioTransformer.uuidMexicanStatesVoc);
128 if (stateAreasVoc == null){
129 createStateAreasVoc(state);
130 }
131 }
132 }
133
134 private NamedArea mexico;
135 private int idInSource = 4;
136 private void createStateAreasVoc(MexicoEfloraImportState state) {
137 //voc
138 URI termSourceUri = null;
139 String label = "Mexican States";
140 String description = "Mexican States as used by the CONABIO database";
141 stateAreasVoc = OrderedTermVocabulary.NewOrderedInstance(TermType.NamedArea, NamedArea.class,
142 description, label, null, termSourceUri);
143 stateAreasVoc.setUuid(MexicoConabioTransformer.uuidMexicanStatesVoc);
144 Representation rep = Representation.NewInstance("Estados Méxicanos", "Estados Méxicanos", null, Language.SPANISH_CASTILIAN());
145 stateAreasVoc.addRepresentation(rep);
146
147 //mexico country
148 String mexicoLabel = "México (Country)";
149 mexico = NamedArea.NewInstance(
150 mexicoLabel, mexicoLabel, null);
151 mexico.setUuid(MexicoConabioTransformer.uuidMexicoCountry);
152 stateAreasVoc.addTerm(mexico);
153 mexico.setIdInVocabulary("2");
154 state.getAreaMap().put(2, mexico);
155 addMapping(mexico, "mex_adm0", "iso", "MEX");
156
157 addArea(state, "Aguascalientes", MexicoConabioTransformer.uuidAguascalientes);
158 addArea(state, "Baja California", MexicoConabioTransformer.uuidBaja_california);
159 addArea(state, "Baja California Sur", MexicoConabioTransformer.uuidBaja_california_sur);
160 addArea(state, "Campeche", MexicoConabioTransformer.uuidCampeche);
161 addArea(state, "Coahuila de Zaragoza", MexicoConabioTransformer.uuidCoahuila_de_zaragoza, "Coahuila");
162 addArea(state, "Colima", MexicoConabioTransformer.uuidColima);
163 addArea(state, "Chiapas", MexicoConabioTransformer.uuidChiapas);
164 addArea(state, "Chihuahua", MexicoConabioTransformer.uuidChihuahua);
165 addArea(state, "Distrito Federal", MexicoConabioTransformer.uuidDistrito_federal);
166 addArea(state, "Durango", MexicoConabioTransformer.uuidDurango);
167 addArea(state, "Guanajuato", MexicoConabioTransformer.uuidGuanajuato);
168 addArea(state, "Guerrero", MexicoConabioTransformer.uuidGuerrero);
169 addArea(state, "Hidalgo", MexicoConabioTransformer.uuidHidalgo);
170 addArea(state, "Jalisco", MexicoConabioTransformer.uuidJalisco);
171 //id_1
172 addArea(state, "México", MexicoConabioTransformer.uuidMexico, null, 15);
173 //id_1
174 addArea(state, "Michoacán de Ocampo", MexicoConabioTransformer.uuidMichoacan_de_ocampo, "Michoacán", 16);
175 addArea(state, "Morelos", MexicoConabioTransformer.uuidMorelos);
176 addArea(state, "Nayarit", MexicoConabioTransformer.uuidNayarit);
177 //gibt beim mapping vielleicht Probleme wg. des Accents
178 //id_1
179 addArea(state, "Nuevo León", MexicoConabioTransformer.uuidNuevo_leon, "Nuevo León", 19);
180 addArea(state, "Oaxaca", MexicoConabioTransformer.uuidOaxaca);
181 addArea(state, "Puebla", MexicoConabioTransformer.uuidPuebla);
182 //id_1
183 addArea(state, "Querétaro de Arteaga", MexicoConabioTransformer.uuidQueretaro_de_arteaga, "Querétaro", 22);
184 addArea(state, "Quintana Roo", MexicoConabioTransformer.uuidQuintana_roo);
185 //id_1
186 addArea(state, "San Luis Potosí", MexicoConabioTransformer.uuidSan_luis_potosi,null ,24);
187 addArea(state, "Sinaloa", MexicoConabioTransformer.uuidSinaloa);
188 addArea(state, "Sonora", MexicoConabioTransformer.uuidSonora);
189 addArea(state, "Tabasco", MexicoConabioTransformer.uuidTabasco);
190 addArea(state, "Tamaulipas", MexicoConabioTransformer.uuidTamaulipas);
191 addArea(state, "Tlaxcala", MexicoConabioTransformer.uuidTlaxcala);
192 addArea(state, "Veracruz de Ignacio de la Llave", MexicoConabioTransformer.uuidVeracruz_de_ignacio_de_la_llave, "Veracruz");
193 //??
194 addArea(state, "Yucatán", MexicoConabioTransformer.uuidYucatan, null, 31);
195 addArea(state, "Zacatecas", MexicoConabioTransformer.uuidZacatecas);
196
197 this.getVocabularyService().save(stateAreasVoc);
198
199 return;
200 }
201
202
203 private void addArea(MexicoEfloraImportState state, String areaLabel, UUID uuid) {
204 addArea(state, areaLabel, uuid, areaLabel); //short cut if label and mapping label are equal
205 }
206
207 private void addArea(MexicoEfloraImportState state, String areaLabel, UUID uuid, String mappingLabel) {
208 addArea(state, areaLabel, uuid, mappingLabel, null); //short cut if label and mapping label are equal
209 }
210
211 private void addArea(MexicoEfloraImportState state, String areaLabel, UUID uuid,
212 String mappingLabel, Integer id1) {
213
214 String abbrev = null;
215 NamedArea newArea = NamedArea.NewInstance(
216 areaLabel, areaLabel, abbrev, Language.SPANISH_CASTILIAN());
217 newArea.setUuid(uuid);
218 newArea.setPartOf(mexico);
219 newArea.setLevel(NamedAreaLevel.STATE());
220 newArea.setType(NamedAreaType.ADMINISTRATION_AREA());
221 stateAreasVoc.addTerm(newArea);
222 if (id1 != null){
223 addMapping(newArea, "mex_adm1", "id_1", String.valueOf(id1));
224 }else if (mappingLabel != null){
225 addMapping(newArea, "mex_adm1", "name_1", mappingLabel);
226 }
227 //for Eflora:
228 newArea.setIdInVocabulary(String.valueOf(idInSource));
229 state.getAreaMap().put(idInSource++, newArea);
230 state.getAreaLabelMap().put(areaLabel.toLowerCase(), newArea);
231 }
232
233 private void addMapping(NamedArea area, String mapping_layer, String mapping_field, String abbrev) {
234 GeoServiceAreaAnnotatedMapping mapping = (GeoServiceAreaAnnotatedMapping)this.getBean("geoServiceAreaAnnotatedMapping");
235 GeoServiceArea geoServiceArea = new GeoServiceArea();
236 geoServiceArea.add(mapping_layer, mapping_field, abbrev);
237 mapping.set(area, geoServiceArea);
238 }
239
240
241 //not needed
242 @Override
243 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, MexicoEfloraImportState state) {
244
245 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
246 return result;
247 }
248
249 @Override
250 protected String getTableName() {
251 return dbTableName;
252 }
253
254 @Override
255 public String getPluralString() {
256 return pluralString;
257 }
258
259 @Override
260 protected boolean doCheck(MexicoEfloraImportState state){
261 return true;
262 }
263
264 @Override
265 protected boolean isIgnore(MexicoEfloraImportState state){
266 return ! state.getConfig().isDoTaxa();
267 }
268 }