adapt app-import to v5.45
[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 package eu.etaxonomy.cdm.app.eflora;
10
11 import java.util.List;
12 import java.util.UUID;
13
14 import org.apache.logging.log4j.LogManager;
15 import org.apache.logging.log4j.Logger;
16 import org.springframework.transaction.TransactionStatus;
17
18 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
19 import eu.etaxonomy.cdm.api.application.ICdmApplication;
20 import eu.etaxonomy.cdm.api.application.ICdmRepository;
21 import eu.etaxonomy.cdm.api.service.ITermService;
22 import eu.etaxonomy.cdm.common.URI;
23 import eu.etaxonomy.cdm.database.DbSchemaValidation;
24 import eu.etaxonomy.cdm.database.ICdmDataSource;
25 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
26 import eu.etaxonomy.cdm.io.common.CdmImportBase.TermMatchMode;
27 import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
28 import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
29 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
30 import eu.etaxonomy.cdm.io.eflora.EfloraImportConfigurator;
31 import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeImportConfigurator;
32 import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeTransformer;
33 import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
34 import eu.etaxonomy.cdm.model.agent.Team;
35 import eu.etaxonomy.cdm.model.common.Language;
36 import eu.etaxonomy.cdm.model.description.Feature;
37 import eu.etaxonomy.cdm.model.description.PolytomousKey;
38 import eu.etaxonomy.cdm.model.location.NamedArea;
39 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
40 import eu.etaxonomy.cdm.model.location.NamedAreaType;
41 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
42 import eu.etaxonomy.cdm.model.reference.Reference;
43 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
44 import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
45 import eu.etaxonomy.cdm.model.term.TermNode;
46 import eu.etaxonomy.cdm.model.term.TermTree;
47 import eu.etaxonomy.cdm.model.term.TermType;
48
49 /**
50 * @author a.mueller
51 * @since 20.06.2008
52 */
53 public class CentralAfricaEricaceaeActivator {
54
55 private static Logger logger = LogManager.getLogger();
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.vittaria_specimen_pesiimport3();
62
63
64 static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_local();
65
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_campanulaceae_production();
72
73 //feature tree uuid
74 public static final UUID featureTreeUuid = UUID.fromString("051d35ee-22f1-42d8-be07-9e9bfec5bcf7");
75
76 public static UUID defaultLanguageUuid = Language.uuidFrench;
77
78 //classification
79 static final UUID classificationUuid = UUID.fromString("10e5efcc-6e13-4abc-ad42-e0b46e50cbe7");
80
81 NomenclaturalCode nc = NomenclaturalCode.ICNAFP;
82
83 //check - import
84 static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
85
86 static boolean doPrintKeys = false;
87
88 //taxa
89 private final boolean includeEricaceae = false;
90 static final boolean doTaxa = false;
91 static final boolean doDeduplicate = false;
92
93
94 private final boolean doNewNamedAreas = false;
95 private final boolean doFeatureTree = false;
96
97 private final boolean doSpecimen = true;
98 private final 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 config.setNomenclaturalCode(nc);
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 TermTree<Feature> tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
138 myImport.getCdmAppController().getTermTreeService().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 ICdmRepository app = myImport.getCdmAppController();
155 if (app == null){
156 app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
157 }
158 app.getAgentService().updateCaches(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 ICdmApplication app = myImport.getCdmAppController();
176 SpecimenCdmExcelImportConfigurator specimenConfig= SpecimenCdmExcelImportConfigurator.NewInstance(specimenSource, cdmDestination);
177 specimenConfig.setCdmAppController(app);
178 specimenConfig.setAreaMatchMode(specimenAreaMatchMode);
179 specimenConfig.setNomenclaturalCode(nc);
180
181 config.setDbSchemaValidation(DbSchemaValidation.VALIDATE);
182 specimenConfig.setSourceReference(getSourceReference(specimenConfig.getSourceReferenceTitle()));
183
184 CdmDefaultImport<SpecimenCdmExcelImportConfigurator> specimenImport = new CdmDefaultImport<SpecimenCdmExcelImportConfigurator>();
185 specimenImport.setCdmAppController(app);
186 specimenImport.invoke(specimenConfig);
187 }
188 return;
189 }
190
191 private void newNamedAreas(CdmDefaultImport<EfloraImportConfigurator> myImport) {
192
193 ICdmApplication app = myImport.getCdmAppController();
194 if (app == null){
195 app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
196 }
197 TransactionStatus tx = app.startTransaction();
198
199 OrderedTermVocabulary<NamedArea> areaVoc = OrderedTermVocabulary.NewOrderedInstance(TermType.NamedArea, NamedArea.class, "Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions", null);
200 app.getVocabularyService().save(areaVoc);
201
202 NamedAreaLevel level = NamedAreaLevel.NewInstance("Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions");
203 ITermService termService = app.getTermService();
204
205 termService.save(level);
206
207 NamedArea area = NamedArea.NewInstance("C\u00F4tier", "C\u00F4tier", "I");
208 area.setLevel(level);
209 area.setType(NamedAreaType.NATURAL_AREA());
210 areaVoc.addTerm(area);
211 termService.save(area);
212
213
214 area = NamedArea.NewInstance("Mayumbe", "Mayumbe", "II");
215 area.setLevel(level);
216 area.setType(NamedAreaType.NATURAL_AREA());
217 areaVoc.addTerm(area);
218 termService.save(area);
219
220 area = NamedArea.NewInstance("Bas-Congo", "Bas-Congo", "III");
221 area.setLevel(level);
222 area.setType(NamedAreaType.NATURAL_AREA());
223 areaVoc.addTerm(area);
224 termService.save(area);
225
226 area = NamedArea.NewInstance("Kasai", "Kasai", "IV");
227 area.setLevel(level);
228 area.setType(NamedAreaType.NATURAL_AREA());
229 areaVoc.addTerm(area);
230 termService.save(area);
231
232 area = NamedArea.NewInstance("Bas-Katanga", "Bas-Katanga", "V");
233 area.setLevel(level);
234 area.setType(NamedAreaType.NATURAL_AREA());
235 areaVoc.addTerm(area);
236 termService.save(area);
237
238 area = NamedArea.NewInstance("Forestier Central", "Forestier Central", "VI");
239 area.setLevel(level);
240 area.setType(NamedAreaType.NATURAL_AREA());
241 areaVoc.addTerm(area);
242 termService.save(area);
243
244 area = NamedArea.NewInstance("Ubangi-Uele", "Ubangi-Uele", "VII");
245 area.setLevel(level);
246 area.setType(NamedAreaType.NATURAL_AREA());
247 areaVoc.addTerm(area);
248 termService.save(area);
249
250 area = NamedArea.NewInstance("Lac Albert", "Lac Albert", "VIII");
251 area.setLevel(level);
252 area.setType(NamedAreaType.NATURAL_AREA());
253 areaVoc.addTerm(area);
254 termService.save(area);
255
256 area = NamedArea.NewInstance("Lacs \u00C9douard et Kivu", "Lacs \u00C9douard et Kivu", "IX");
257 area.setLevel(level);
258 area.setType(NamedAreaType.NATURAL_AREA());
259 areaVoc.addTerm(area);
260 termService.save(area);
261
262 area = NamedArea.NewInstance("Rwanda-Burundi", "Rwanda-Burundi", "X");
263 area.setLevel(level);
264 area.setType(NamedAreaType.NATURAL_AREA());
265 areaVoc.addTerm(area);
266 termService.save(area);
267
268 area = NamedArea.NewInstance("Haut-Katanga", "Haut-Katanga", "XI");
269 area.setLevel(level);
270 area.setType(NamedAreaType.NATURAL_AREA());
271 areaVoc.addTerm(area);
272 termService.save(area);
273
274 app.getVocabularyService().save(areaVoc);
275
276 app.commitTransaction(tx);
277
278 }
279
280 private Reference getSourceReference(String string) {
281 Reference result = ReferenceFactory.newGeneric();
282 result.setTitleCache(string, true);
283 return result;
284 }
285
286 private TermTree<Feature> makeFeatureNode(ITermService service){
287 CentralAfricaEricaceaeTransformer transformer = new CentralAfricaEricaceaeTransformer();
288
289 TermTree<Feature> result = TermTree.NewFeatureInstance(featureTreeUuid);
290 result.setTitleCache("Central Africa Ericaceae Feature Tree", true);
291 TermNode<Feature> root = result.getRoot();
292
293 TermNode<Feature> newNode = root.addChild(Feature.DESCRIPTION());
294
295 addFeatureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
296
297 addFeatureNodesByStringList(generellDescriptionsList, root, transformer, service);
298
299 newNode = root.addChild(Feature.DISTRIBUTION());
300
301 newNode = root.addChild(Feature.ECOLOGY());
302 addFeatureNodesByStringList(habitatEcologyList, root, transformer, service);
303
304 newNode = root.addChild(Feature.USES());
305
306 addFeatureNodesByStringList(chomosomesList, root, transformer, service);
307
308 newNode = root.addChild(Feature.COMMON_NAME());
309
310 newNode = root.addChild(Feature.CITATION());
311
312 return result;
313 }
314
315 private static String [] chomosomesList = new String[]{
316 "Chromosomes",
317 };
318
319
320 private static String [] habitatEcologyList = new String[]{
321 "Habitat",
322 "Habitat & Ecology"
323 };
324
325
326 private static String [] generellDescriptionsList = new String[]{
327 "Fossils",
328 "Morphology and anatomy",
329 "Morphology",
330 "Vegetative morphology and anatomy",
331 "Flower morphology",
332 "Palynology",
333 "Pollination",
334 "Pollen morphology",
335 "Life cycle",
336 "Fruits and embryology",
337 "Dispersal",
338 "Wood anatomy",
339 "Leaf anatomy",
340 "Chromosome numbers",
341 "Phytochemistry and Chemotaxonomy",
342 "Phytochemistry",
343 "Taxonomy",
344 };
345
346 private static String [] descriptionFeatureList = new String[]{
347 "lifeform",
348 "Bark",
349 "Indumentum",
350 "endophytic body",
351 "flowering buds",
352 "Branchlets",
353 "Branches",
354 "Branch",
355 "Flowering branchlets",
356 "Trees",
357 "Twigs",
358 "stem",
359 "Stems",
360 "stem leaves",
361 "Leaves",
362 "flower-bearing stems",
363 "Petiole",
364 "Petiolules",
365 "Leaflets",
366 "Thyrsus",
367 "Thyrses",
368 "Inflorescences",
369 "Inflorescence",
370 "Young inflorescences",
371 "Bracts",
372 "Pedicels",
373 "flowering buds",
374 "scales",
375 "Buds",
376 "Flowers",
377 "Flower",
378 "Flowering",
379 "Stigma",
380 "perianth",
381 "Sepals",
382 "Sepal",
383 "Outer Sepals",
384 "Axillary",
385 "cymes",
386 "Calyx",
387 "Petal",
388 "Petals",
389 "perigone tube",
390 "Disc",
391 "corolla",
392 "Stamens",
393 "Staminodes",
394 "Ovary",
395 "Anthers",
396 "anther",
397 "Pistil",
398 "Pistillode",
399 "Ovules",
400 "androecium",
401 "gynoecium",
402 "Filaments",
403 "Style",
404 "annulus",
405 "female flowers",
406 "Male flowers",
407 "Female",
408 "Infructescences", //order not consistent (sometimes before "Flowers")
409 "Fruit",
410 "Fruits",
411 "fruiting axes",
412 "drupes",
413 "Arillode",
414 "seed",
415 "Seeds",
416 "Seedling",
417 "flower tube",
418 "nutlets",
419 "pollen",
420 "secondary xylem",
421 "chromosome number",
422
423 "figure",
424 "fig",
425 "figs",
426
427
428
429
430 };
431
432 public void addFeatureNodesByStringList(String[] featureStringList, TermNode<Feature> root, IInputTransformer transformer, ITermService termService){
433 try {
434 for (String featureString : featureStringList){
435 UUID featureUuid;
436 featureUuid = transformer.getFeatureUuid(featureString);
437 Feature feature = (Feature)termService.find(featureUuid);
438 if (feature != null){
439 TermNode<Feature> child = root.addChild(feature);
440 }
441 }
442 } catch (UndefinedTransformerMethodException e) {
443 logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
444 }
445 }
446
447
448
449 /**
450 * @param args
451 */
452 public static void main(String[] args) {
453 CentralAfricaEricaceaeActivator me = new CentralAfricaEricaceaeActivator();
454 me.doImport(cdmDestination);
455 }
456
457 }