some more unicodes in eflora
[cdmlib-apps.git] / cdm-eflora / src / main / java / eu / etaxonomy / cdm / app / eflora / CentralAfricaEricaceaeActivator.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
10 package eu.etaxonomy.cdm.app.eflora;
11
12 import java.net.URI;
13 import java.util.List;
14 import java.util.UUID;
15
16 import org.apache.log4j.Logger;
17 import org.springframework.transaction.TransactionStatus;
18
19 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
20 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
21 import eu.etaxonomy.cdm.api.service.ITermService;
22 import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;
23 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
24 import eu.etaxonomy.cdm.database.DbSchemaValidation;
25 import eu.etaxonomy.cdm.database.ICdmDataSource;
26 import eu.etaxonomy.cdm.database.update.CdmUpdater;
27 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
28 import eu.etaxonomy.cdm.io.common.CdmImportBase.TermMatchMode;
29 import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
30 import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
31 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
32 import eu.etaxonomy.cdm.io.eflora.EfloraImportConfigurator;
33 import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeImportConfigurator;
34 import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeTransformer;
35 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
36 import eu.etaxonomy.cdm.model.agent.Team;
37 import eu.etaxonomy.cdm.model.common.Language;
38 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
39 import eu.etaxonomy.cdm.model.description.Feature;
40 import eu.etaxonomy.cdm.model.description.FeatureNode;
41 import eu.etaxonomy.cdm.model.description.FeatureTree;
42 import eu.etaxonomy.cdm.model.description.PolytomousKey;
43 import eu.etaxonomy.cdm.model.location.NamedArea;
44 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
45 import eu.etaxonomy.cdm.model.location.NamedAreaType;
46 import eu.etaxonomy.cdm.model.reference.Reference;
47 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
48
49 /**
50 * @author a.mueller
51 * @created 20.06.2008
52 * @version 1.0
53 */
54 public class CentralAfricaEricaceaeActivator {
55 private static final Logger logger = Logger.getLogger(CentralAfricaEricaceaeActivator.class);
56
57 //database validation status (create, update, validate ...)
58 static DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;
59 static final URI source = EfloraSources.ericacea_local();
60
61 static final URI specimenSource = EfloraSources.ericacea_specimen_local();
62
63
64 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_andreasM3();
65 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_preview();
66 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_production();
67 static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
68 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_local_postgres_CdmTest();
69 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
70 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_jaxb();
71 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_edit_cichorieae_preview();
72 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_campanulaceae_production();
73
74 //feature tree uuid
75 public static final UUID featureTreeUuid = UUID.fromString("051d35ee-22f1-42d8-be07-9e9bfec5bcf7");
76
77 public static UUID defaultLanguageUuid = Language.uuidFrench;
78
79 //classification
80 static final UUID classificationUuid = UUID.fromString("10e5efcc-6e13-4abc-ad42-e0b46e50cbe7");
81
82 //check - import
83 static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
84
85 static boolean doPrintKeys = false;
86
87 //taxa
88 private boolean includeEricaceae = true;
89 static final boolean doTaxa = true;
90 static final boolean doDeduplicate = false;
91
92
93 private boolean doNewNamedAreas = false;
94 private boolean doFeatureTree = false;
95
96 private boolean doSpecimen = false;
97 private TermMatchMode specimenAreaMatchMode = TermMatchMode.UUID_ABBREVLABEL;
98
99
100 private void doImport(ICdmDataSource cdmDestination){
101
102 CdmUpdater su = CdmUpdater.NewInstance();
103 IProgressMonitor monitor = DefaultProgressMonitor.NewInstance();
104 //
105 // try {
106 // su.updateToCurrentVersion(cdmDestination, monitor);
107 // } catch (Exception e) {
108 // e.printStackTrace();
109 // }
110 // if (true){
111 // return;
112 // }
113
114 //make Source
115 CentralAfricaEricaceaeImportConfigurator config= CentralAfricaEricaceaeImportConfigurator.NewInstance(source, cdmDestination);
116 config.setClassificationUuid(classificationUuid);
117 config.setDoTaxa(doTaxa);
118 config.setCheck(check);
119 config.setDefaultLanguageUuid(defaultLanguageUuid);
120 config.setDoPrintKeys(doPrintKeys);
121 config.setDbSchemaValidation(hbm2dll);
122
123 CdmDefaultImport<EfloraImportConfigurator> myImport = new CdmDefaultImport<EfloraImportConfigurator>();
124
125
126 //Ericaceae
127 if (includeEricaceae){
128 System.out.println("Start import from ("+ source.toString() + ") ...");
129 config.setSourceReference(getSourceReference(config.getSourceReferenceTitle()));
130 myImport.invoke(config);
131 System.out.println("End import from ("+ source.toString() + ")...");
132 }
133
134 if (doFeatureTree){
135 FeatureTree tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
136 myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
137 }
138
139 //check keys
140 if (doPrintKeys){
141 TransactionStatus tx = myImport.getCdmAppController().startTransaction();
142 List<PolytomousKey> keys = myImport.getCdmAppController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null);
143 for(PolytomousKey key : keys){
144 key.print(System.out);
145 System.out.println();
146 }
147 myImport.getCdmAppController().commitTransaction(tx);
148 }
149
150 //deduplicate
151 if (doDeduplicate){
152 ICdmApplicationConfiguration app = myImport.getCdmAppController();
153 if (app == null){
154 app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
155 }
156 app.getAgentService().updateTitleCache(Team.class, null, null, null);
157 return;
158 // int count = app.getAgentService().deduplicate(Person.class, null, null);
159 //
160 // logger.warn("Deduplicated " + count + " persons.");
161 //// count = app.getAgentService().deduplicate(Team.class, null, null);
162 //// logger.warn("Deduplicated " + count + " teams.");
163 // count = app.getReferenceService().deduplicate(Reference.class, null, null);
164 // logger.warn("Deduplicated " + count + " references.");
165 }
166
167 if(doNewNamedAreas){
168 newNamedAreas(myImport);
169 }
170
171 if (doSpecimen){
172 logger.warn("Start specimen import");
173 ICdmApplicationConfiguration app = myImport.getCdmAppController();
174 SpecimenCdmExcelImportConfigurator specimenConfig= SpecimenCdmExcelImportConfigurator.NewInstance(specimenSource, cdmDestination);
175 specimenConfig.setCdmAppController((CdmApplicationController)app);
176 specimenConfig.setAreaMatchMode(specimenAreaMatchMode);
177
178 config.setDbSchemaValidation(DbSchemaValidation.VALIDATE);
179 specimenConfig.setSourceReference(getSourceReference(specimenConfig.getSourceReferenceTitle()));
180
181 CdmDefaultImport<SpecimenCdmExcelImportConfigurator> specimenImport = new CdmDefaultImport<SpecimenCdmExcelImportConfigurator>();
182 specimenImport.setCdmAppController(app);
183 specimenImport.invoke(specimenConfig);
184
185
186 }
187 return;
188
189
190
191 }
192
193 private void newNamedAreas(CdmDefaultImport<EfloraImportConfigurator> myImport) {
194 ICdmApplicationConfiguration app = myImport.getCdmAppController();
195 if (app == null){
196 app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
197 }
198 TransactionStatus tx = app.startTransaction();
199
200 OrderedTermVocabulary<NamedArea> voc = OrderedTermVocabulary.NewInstance("Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions", null);
201 app.getVocabularyService().save(voc);
202
203 NamedAreaLevel level = NamedAreaLevel.NewInstance("Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions");
204 ITermService termService = app.getTermService();
205
206 termService.save(level);
207
208 NamedArea area = NamedArea.NewInstance("C\u00F4tier", "C\u00F4tier", "I");
209 area.setLevel(level);
210 area.setType(NamedAreaType.NATURAL_AREA());
211 voc.addTerm(area);
212 termService.save(area);
213
214
215 area = NamedArea.NewInstance("Mayumbe", "Mayumbe", "II");
216 area.setLevel(level);
217 area.setType(NamedAreaType.NATURAL_AREA());
218 voc.addTerm(area);
219 termService.save(area);
220
221 area = NamedArea.NewInstance("Bas-Congo", "Bas-Congo", "III");
222 area.setLevel(level);
223 area.setType(NamedAreaType.NATURAL_AREA());
224 voc.addTerm(area);
225 termService.save(area);
226
227 area = NamedArea.NewInstance("Kasai", "Kasai", "IV");
228 area.setLevel(level);
229 area.setType(NamedAreaType.NATURAL_AREA());
230 voc.addTerm(area);
231 termService.save(area);
232
233 area = NamedArea.NewInstance("Bas-Katanga", "Bas-Katanga", "V");
234 area.setLevel(level);
235 area.setType(NamedAreaType.NATURAL_AREA());
236 voc.addTerm(area);
237 termService.save(area);
238
239 area = NamedArea.NewInstance("Forestier Central", "Forestier Central", "VI");
240 area.setLevel(level);
241 area.setType(NamedAreaType.NATURAL_AREA());
242 voc.addTerm(area);
243 termService.save(area);
244
245 area = NamedArea.NewInstance("Ubangi-Uele", "Ubangi-Uele", "VII");
246 area.setLevel(level);
247 area.setType(NamedAreaType.NATURAL_AREA());
248 voc.addTerm(area);
249 termService.save(area);
250
251 area = NamedArea.NewInstance("Lac Albert", "Lac Albert", "VIII");
252 area.setLevel(level);
253 area.setType(NamedAreaType.NATURAL_AREA());
254 voc.addTerm(area);
255 termService.save(area);
256
257 area = NamedArea.NewInstance("Lacs \u00C9douard et Kivu", "Lacs \u00C9douard et Kivu", "IX");
258 area.setLevel(level);
259 area.setType(NamedAreaType.NATURAL_AREA());
260 voc.addTerm(area);
261 termService.save(area);
262
263 area = NamedArea.NewInstance("Rwanda-Burundi", "Rwanda-Burundi", "X");
264 area.setLevel(level);
265 area.setType(NamedAreaType.NATURAL_AREA());
266 voc.addTerm(area);
267 termService.save(area);
268
269 area = NamedArea.NewInstance("Haut-Katanga", "Haut-Katanga", "XI");
270 area.setLevel(level);
271 area.setType(NamedAreaType.NATURAL_AREA());
272 voc.addTerm(area);
273 termService.save(area);
274
275 app.getVocabularyService().save(voc);
276
277 app.commitTransaction(tx);
278
279 }
280
281 private Reference getSourceReference(String string) {
282 Reference result = ReferenceFactory.newGeneric();
283 result.setTitleCache(string);
284 return result;
285 }
286
287 private FeatureTree makeFeatureNode(ITermService service){
288 CentralAfricaEricaceaeTransformer transformer = new CentralAfricaEricaceaeTransformer();
289
290 FeatureTree result = FeatureTree.NewInstance(featureTreeUuid);
291 result.setTitleCache("Central Africa Ericaceae Feature Tree");
292 FeatureNode root = result.getRoot();
293 FeatureNode newNode;
294
295 newNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
296 root.addChild(newNode);
297
298 addFeataureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
299
300 addFeataureNodesByStringList(generellDescriptionsList, root, transformer, service);
301
302
303 newNode = FeatureNode.NewInstance(Feature.DISTRIBUTION());
304 root.addChild(newNode);
305
306 newNode = FeatureNode.NewInstance(Feature.ECOLOGY());
307 root.addChild(newNode);
308 addFeataureNodesByStringList(habitatEcologyList, root, transformer, service);
309
310 newNode = FeatureNode.NewInstance(Feature.USES());
311 root.addChild(newNode);
312
313 addFeataureNodesByStringList(chomosomesList, root, transformer, service);
314
315 newNode = FeatureNode.NewInstance(Feature.COMMON_NAME());
316 root.addChild(newNode);
317
318 newNode = FeatureNode.NewInstance(Feature.CITATION());
319 root.addChild(newNode);
320
321 return result;
322 }
323
324 private static String [] chomosomesList = new String[]{
325 "Chromosomes",
326 };
327
328
329 private static String [] habitatEcologyList = new String[]{
330 "Habitat",
331 "Habitat & Ecology"
332 };
333
334
335 private static String [] generellDescriptionsList = new String[]{
336 "Fossils",
337 "Morphology and anatomy",
338 "Morphology",
339 "Vegetative morphology and anatomy",
340 "Flower morphology",
341 "Palynology",
342 "Pollination",
343 "Pollen morphology",
344 "Life cycle",
345 "Fruits and embryology",
346 "Dispersal",
347 "Wood anatomy",
348 "Leaf anatomy",
349 "Chromosome numbers",
350 "Phytochemistry and Chemotaxonomy",
351 "Phytochemistry",
352 "Taxonomy",
353 };
354
355 private static String [] descriptionFeatureList = new String[]{
356 "lifeform",
357 "Bark",
358 "Indumentum",
359 "endophytic body",
360 "flowering buds",
361 "Branchlets",
362 "Branches",
363 "Branch",
364 "Flowering branchlets",
365 "Trees",
366 "Twigs",
367 "stem",
368 "Stems",
369 "stem leaves",
370 "Leaves",
371 "flower-bearing stems",
372 "Petiole",
373 "Petiolules",
374 "Leaflets",
375 "Thyrsus",
376 "Thyrses",
377 "Inflorescences",
378 "Inflorescence",
379 "Young inflorescences",
380 "Bracts",
381 "Pedicels",
382 "flowering buds",
383 "scales",
384 "Buds",
385 "Flowers",
386 "Flower",
387 "Flowering",
388 "Stigma",
389 "perianth",
390 "Sepals",
391 "Sepal",
392 "Outer Sepals",
393 "Axillary",
394 "cymes",
395 "Calyx",
396 "Petal",
397 "Petals",
398 "perigone tube",
399 "Disc",
400 "corolla",
401 "Stamens",
402 "Staminodes",
403 "Ovary",
404 "Anthers",
405 "anther",
406 "Pistil",
407 "Pistillode",
408 "Ovules",
409 "androecium",
410 "gynoecium",
411 "Filaments",
412 "Style",
413 "annulus",
414 "female flowers",
415 "Male flowers",
416 "Female",
417 "Infructescences", //order not consistent (sometimes before "Flowers")
418 "Fruit",
419 "Fruits",
420 "fruiting axes",
421 "drupes",
422 "Arillode",
423 "seed",
424 "Seeds",
425 "Seedling",
426 "flower tube",
427 "nutlets",
428 "pollen",
429 "secondary xylem",
430 "chromosome number",
431
432 "figure",
433 "fig",
434 "figs",
435
436
437
438
439 };
440
441 public void addFeataureNodesByStringList(String[] featureStringList, FeatureNode root, IInputTransformer transformer, ITermService termService){
442 try {
443 for (String featureString : featureStringList){
444 UUID featureUuid;
445 featureUuid = transformer.getFeatureUuid(featureString);
446 Feature feature = (Feature)termService.find(featureUuid);
447 if (feature != null){
448 FeatureNode child = FeatureNode.NewInstance(feature);
449 root.addChild(child);
450 }
451 }
452 } catch (UndefinedTransformerMethodException e) {
453 logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
454 }
455 }
456
457
458
459 /**
460 * @param args
461 */
462 public static void main(String[] args) {
463 CentralAfricaEricaceaeActivator me = new CentralAfricaEricaceaeActivator();
464 me.doImport(cdmDestination);
465 }
466
467 }