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