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