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