Project

General

Profile

Download (15.7 KB) Statistics
| Branch: | Revision:
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.HashSet;
14
import java.util.List;
15
import java.util.Set;
16
import java.util.UUID;
17

    
18
import org.apache.log4j.Logger;
19
import org.springframework.transaction.TransactionStatus;
20

    
21
import eu.etaxonomy.cdm.api.service.ITermService;
22
import eu.etaxonomy.cdm.database.DbSchemaValidation;
23
import eu.etaxonomy.cdm.database.ICdmDataSource;
24
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
25
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
26
import eu.etaxonomy.cdm.io.common.events.IIoObserver;
27
import eu.etaxonomy.cdm.io.common.events.LoggingIoObserver;
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.floraMalesiana.FloraMalesianaTransformer;
31
import eu.etaxonomy.cdm.io.markup.MarkupImportConfigurator;
32
import eu.etaxonomy.cdm.model.description.Feature;
33
import eu.etaxonomy.cdm.model.description.FeatureNode;
34
import eu.etaxonomy.cdm.model.description.FeatureTree;
35
import eu.etaxonomy.cdm.model.description.PolytomousKey;
36
import eu.etaxonomy.cdm.model.reference.Reference;
37
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
38

    
39
/**
40
 * @author a.mueller
41
 * @created 20.06.2008
42
 */
43
public class FloraMalesianaActivator extends EfloraActivatorBase {
44
	private static final Logger logger = Logger.getLogger(FloraMalesianaActivator.class);
45

    
46
	//database validation status (create, update, validate ...)
47
	static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
48

    
49
	static final URI fmSource08_1 = EfloraSources.fm_08_1();
50
	static final URI fmSource08_2 = EfloraSources.fm_08_2();
51
	static final URI fmSource08_3 = EfloraSources.fm_08_3();
52

    
53
	static final URI fmSource10_1 = EfloraSources.fm_10_1();
54
	static final URI fmSource10_2 = EfloraSources.fm_10_2();
55
	static final URI fmSource10_3 = EfloraSources.fm_10_3();
56
	static final URI fmSource10_4 = EfloraSources.fm_10_4();
57

    
58

    
59
	static final URI fmSource11_1 = EfloraSources.fm_11_1();
60
	static final URI fmSource11_2 = EfloraSources.fm_11_2();
61
	static final URI fmSource11_3 = EfloraSources.fm_11_3();
62
	static final URI fmSource12_1 = EfloraSources.fm_12_1();
63
	static final URI fmSource12_2 = EfloraSources.fm_12_2();
64
	static final URI fmSource13 = EfloraSources.fm_13();
65
	static final URI fmSource14 = EfloraSources.fm_14();
66
	static final URI fmSource15 = EfloraSources.fm_15();
67
	static final URI fmSource16 = EfloraSources.fm_16();
68
	static final URI fmSource17_1 = EfloraSources.fm_17_1();
69
	static final URI fmSource17_2 = EfloraSources.fm_17_2();
70
	static final URI fmSource18 = EfloraSources.fm_18();
71
	static final URI fmSource19 = EfloraSources.fm_19();
72
	static final URI fmSource20 = EfloraSources.fm_20();
73
	static final URI fmSource21 = EfloraSources.fm_21();
74

    
75
	static final URI fmSource_Ser2_02 = EfloraSources.fm_ser2_2();
76
	static final URI fmSource_Ser2_03 = EfloraSources.fm_ser2_3();
77
	static final URI fmSource_Ser2_04 = EfloraSources.fm_ser2_4();
78

    
79
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_malesiana_preview();
80
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_malesiana_production();
81
	static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
82
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
83
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_test();
84

    
85
	private final boolean includeBase = false;
86
	private final boolean includeVol08_1 = includeBase;
87
	private final boolean includeVol08_2 =includeBase;
88
	private final boolean includeVol08_3 = includeBase;
89
	private final boolean includeVol10_1 = includeBase;
90
	private final boolean includeVol10_2 = includeBase;
91
	private final boolean includeVol10_3 = includeBase;
92
	private final boolean includeVol10_4 = includeBase;
93
	private final boolean includeVol11_1 = includeBase;
94
	private final boolean includeVol11_2 = includeBase;
95
	private final boolean includeVol11_3 = includeBase;
96
	private final boolean includeVol12_1 = includeBase;
97
	private final boolean includeVol12_2 = includeBase;
98
	private final boolean includeVol13 = includeBase;
99
	private final boolean includeVol14 = includeBase;
100
	private final boolean includeVol15 = includeBase;
101
	private final boolean includeVol16 = includeBase;
102
	private final boolean includeVol17_1 = includeBase;
103
	private final boolean includeVol17_2 = includeBase;
104
	private final boolean includeVol18 = includeBase;
105
	private final boolean includeVol19 = includeBase;
106
	private final boolean includeVol20 = includeBase;
107
	private final boolean includeVol21 = includeBase;
108
	private final boolean includeVol2_2 = includeBase;
109
	private final boolean includeVol2_3 = includeBase;
110
	private final boolean includeVol2_4 = ! includeBase;
111

    
112
	private final boolean h2ForCheck = false;
113

    
114
	static final boolean reuseState = true;  //when running multiple imports
115

    
116
	//feature tree uuid
117
	public static final UUID featureTreeUuid = UUID.fromString("168df0c6-6429-484c-b26f-ded1f7e44bd9");
118
	private static final String featureTreeTitle = "Flora Malesiana Presentation Feature Tree";
119

    
120
	//classification
121
	static final UUID classificationUuid = UUID.fromString("ca4e4bcb-a1d1-4124-a358-a3d3c41dd450");
122
	static final String classificationTitle = "Flora Malesiana";
123

    
124
	//check - import
125
	static CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
126

    
127
	static boolean doPrintKeys = false;
128

    
129
	//taxa
130
	static final boolean doTaxa = true;
131

    
132

    
133
	private final boolean replaceStandardKeyTitles = false;
134

    
135
	private final IIoObserver observer = new LoggingIoObserver();
136
	private final Set<IIoObserver> observerList = new HashSet<IIoObserver>();
137

    
138

    
139
	private void doImport(ICdmDataSource cdmDestination){
140
		observerList.add(observer);
141
		if (h2ForCheck && cdmDestination.getDatabaseType().equals(CdmDestinations.localH2().getDatabaseType())){
142
			check = CHECK.CHECK_ONLY;
143
		}
144

    
145
		//make Source
146
//		URI source = fmSource13_small;
147
		URI source = null;
148

    
149
		MarkupImportConfigurator markupConfig= MarkupImportConfigurator.NewInstance(source, cdmDestination);
150
		markupConfig.setClassificationUuid(classificationUuid);
151
		markupConfig.setClassificationName(classificationTitle);
152
		markupConfig.setDoTaxa(doTaxa);
153
		markupConfig.setCheck(check);
154
		markupConfig.setDoPrintKeys(doPrintKeys);
155
		markupConfig.setDbSchemaValidation(hbm2dll);
156
		markupConfig.setObservers(observerList);
157
		markupConfig.setReplaceStandardKeyTitles(replaceStandardKeyTitles);
158
		markupConfig.setReuseExistingState(reuseState);
159

    
160
		markupConfig.setSourceReference(getSourceReference("Flora Malesiana - Vol. 13"));
161

    
162
		CdmDefaultImport<MarkupImportConfigurator> myImport = new CdmDefaultImport<MarkupImportConfigurator>();
163

    
164

    
165
		//Vol08_1
166
		doSource(includeVol08_1, fmSource08_1, "Flora Malesiana - vol. 08, pt.1", markupConfig, myImport);
167

    
168
		//Vol08_2
169
		doSource(includeVol08_2, fmSource08_2, "Flora Malesiana - vol. 08, pt.2", markupConfig, myImport);
170

    
171
		//Vol08_3
172
		doSource(includeVol08_3, fmSource08_3, "Flora Malesiana - vol. 08, pt.3", markupConfig, myImport);
173

    
174
		//Vol10_1
175
		doSource(includeVol10_1, fmSource10_1, "Flora Malesiana - vol. 10, pt.1", markupConfig, myImport);
176

    
177
		//Vol10_2
178
		doSource(includeVol10_2, fmSource10_2, "Flora Malesiana - vol. 10, pt.2", markupConfig, myImport);
179

    
180
		//Vol10_3
181
		doSource(includeVol10_3, fmSource10_3, "Flora Malesiana - vol. 10, pt.3", markupConfig, myImport);
182

    
183
		//Vol10_4
184
		doSource(includeVol10_4, fmSource10_4, "Flora Malesiana - vol. 10, pt.4", markupConfig, myImport);
185

    
186
		//Vol11_1
187
		doSource(includeVol11_1, fmSource11_1, "Flora Malesiana - vol. 11, pt.1", markupConfig, myImport);
188

    
189
		//Vol11_2
190
		doSource(includeVol11_2, fmSource11_2, "Flora Malesiana - vol. 11, pt.2", markupConfig, myImport);
191

    
192
		//Vol11_3
193
		doSource(includeVol11_3, fmSource11_3, "Flora Malesiana - vol. 11, pt.3", markupConfig, myImport);
194

    
195

    
196
		//Vol12_1
197
		doSource(includeVol12_1, fmSource12_1, "Flora Malesiana - vol. 12, pt.1", markupConfig, myImport);
198

    
199
		//Vol12_2
200
		doSource(includeVol12_2, fmSource12_2, "Flora Malesiana - vol. 12, pt.2", markupConfig, myImport);
201

    
202
		//Vol13_large
203
		doSource(includeVol13, fmSource13, "Flora Malesiana - vol. 13", markupConfig, myImport);
204

    
205
		//Vol14
206
		doSource(includeVol14, fmSource14, "Flora Malesiana - vol. 14", markupConfig, myImport);
207

    
208
		//Vol15
209
		doSource(includeVol15, fmSource15, "Flora Malesiana - vol. 15", markupConfig, myImport);
210

    
211
		//Vol16
212
		doSource(includeVol16, fmSource16, "Flora Malesiana - vol. 16", markupConfig, myImport);
213

    
214
		//Vol17, part1
215
		doSource(includeVol17_1, fmSource17_1, "Flora Malesiana - vol. 17, part I", markupConfig, myImport);
216

    
217
		//Vol17, part2
218
		doSource(includeVol17_2, fmSource17_2, "Flora Malesiana - vol. 17, part II", markupConfig, myImport);
219

    
220
		//Vol18
221
		doSource(includeVol18, fmSource18, "Flora Malesiana - vol. 18", markupConfig, myImport);
222

    
223
		//Vol19
224
		doSource(includeVol19, fmSource19, "Flora Malesiana - vol. 19", markupConfig, myImport);
225

    
226
		//Vol20
227
		doSource(includeVol20, fmSource20, "Flora Malesiana - vol. 20", markupConfig, myImport);
228

    
229
		//Vol21
230
		doSource(includeVol21, fmSource21, "Flora Malesiana - vol. 21", markupConfig, myImport);
231

    
232
		//Vol_2_2
233
		doSource(includeVol2_2, fmSource_Ser2_02, "Flora Malesiana - Ser.2, vol. 2", markupConfig, myImport);
234

    
235
		//Vol_2_3
236
		doSource(includeVol2_3, fmSource_Ser2_03, "Flora Malesiana - Ser.2, vol. 3", markupConfig, myImport);
237

    
238
		//Vol_2_3
239
		doSource(includeVol2_4, fmSource_Ser2_04, "Flora Malesiana - Ser.2, vol. 4", markupConfig, myImport);
240

    
241

    
242
		makeAutomatedFeatureTree(myImport.getCdmAppController(), markupConfig.getState(),
243
				featureTreeUuid, featureTreeTitle);
244

    
245
//		makeGeoService();
246

    
247
		FeatureTree tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
248
		myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
249

    
250
		//check keys
251
		if (doPrintKeys){
252
			TransactionStatus tx = myImport.getCdmAppController().startTransaction();
253
			List<PolytomousKey> keys = myImport.getCdmAppController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null);
254
			for(PolytomousKey key : keys){
255
				key.print(System.out);
256
				System.out.println();
257
			}
258
			myImport.getCdmAppController().commitTransaction(tx);
259
		}
260

    
261
	}
262

    
263
	private void doSource(boolean doInclude, URI source, String sourceTitle, MarkupImportConfigurator markupConfig,
264
			CdmDefaultImport<MarkupImportConfigurator> myImport) {
265
		if (doInclude){
266
			System.out.println("\nStart import from ("+ source.toString() + ") ...");
267
			markupConfig.setSource(source);
268
			markupConfig.setSourceReference(getSourceReference(sourceTitle));
269
			myImport.invoke(markupConfig);
270
			System.out.println("End import from ("+ source.toString() + ")...");
271
		}
272
	}
273

    
274
	private Reference<?> getSourceReference(String string) {
275
		Reference<?> result = ReferenceFactory.newGeneric();
276
		result.setTitleCache(string, true);
277
		return result;
278
	}
279

    
280
	private FeatureTree makeFeatureNode(ITermService service){
281
		FloraMalesianaTransformer transformer = new FloraMalesianaTransformer();
282

    
283
		FeatureTree result = FeatureTree.NewInstance(UUID.randomUUID());
284
		result.setTitleCache("Flora Malesiana Presentation Feature Tree - Old", true);
285
		FeatureNode root = result.getRoot();
286
		FeatureNode newNode;
287

    
288
		newNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
289
		root.addChild(newNode);
290

    
291
		addFeataureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
292

    
293
		addFeataureNodesByStringList(generellDescriptionsUpToAnatomyList, root, transformer, service);
294
		newNode = FeatureNode.NewInstance(Feature.ANATOMY());
295
		addFeataureNodesByStringList(anatomySubfeatureList, newNode, transformer, service);
296

    
297
		newNode = addFeataureNodesByStringList(generellDescriptionsFromAnatomyToPhytoChemoList, root, transformer, service);
298
		addFeataureNodesByStringList(phytoChemoSubFeaturesList, newNode, transformer, service);
299

    
300
		newNode = addFeataureNodesByStringList(generellDescriptionsFromPhytoChemoList, 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.CITATION());
316
		root.addChild(newNode);
317

    
318
		return result;
319
	}
320

    
321
	private static String [] chomosomesList = new String[]{
322
		"Chromosomes",
323
	};
324

    
325

    
326
	private static String [] habitatEcologyList = new String[]{
327
		"Habitat",
328
		"Habitat & Ecology"
329
	};
330

    
331

    
332
	private static String [] generellDescriptionsUpToAnatomyList = new String[]{
333
		"Fossils",
334
		"Morphology and anatomy",
335
		"Morphology",
336
		"Vegetative morphology and anatomy",
337
	};
338

    
339

    
340
	private static String [] anatomySubfeatureList = new String[]{
341
		"Leaf anatomy",
342
		"Wood anatomy"
343
	};
344

    
345
	private static String [] generellDescriptionsFromAnatomyToPhytoChemoList = new String[]{
346
		"Flower morphology",
347
		"Palynology",
348
		"Pollination",
349
		"Pollen morphology",
350
		"embryology",
351
		"cytology",
352
		"Life cycle",
353
		"Fruits and embryology",
354
		"Dispersal",
355
		"Chromosome numbers",
356
		"Phytochemistry and Chemotaxonomy",
357
	};
358

    
359

    
360
	private static String [] phytoChemoSubFeaturesList = new String[]{
361
		"Alkaloids",
362
		"Iridoid glucosides",
363
		"Leaf phenolics",
364
		"Storage products of seeds",
365
		"Aluminium",
366
		"Chemotaxonomy",
367
	};
368

    
369

    
370
	private static String [] generellDescriptionsFromPhytoChemoList = new String[]{
371
		"Phytochemistry",
372
		"Taxonomy",
373
		"history",
374
		"cultivation",
375
		"Notes"
376
	};
377

    
378

    
379
	private static String [] descriptionFeatureList = new String[]{
380
		"lifeform",
381
		"Bark",
382
		//new
383
		"wood",
384
		"Indumentum",
385
		"endophytic body",
386
		"flowering buds",
387
		"Branchlets",
388
		"Branches",
389
		"Branch",
390
		"Flowering branchlets",
391
		"Trees",
392
		"Twigs",
393
		"stem",
394
		"Stems",
395
		"stem leaves",
396
		"Leaves",
397
		"flower-bearing stems",
398
		"Petiole",
399
		"Petiolules",
400
		"Leaflets",
401
		"Thyrsus",
402
		"Thyrses",
403
		"Inflorescences",
404
		"Inflorescence",
405
		"Young inflorescences",
406
		"Male inflorescences",
407
		"Female inflorescences",
408
		"Bracts",
409
		"Pedicels",
410
		"flowering buds",
411
		"scales",
412
		"Buds",
413
		"Flowers",
414
		"Flower",
415
		"Flowering",
416
		"Stigma",
417
		"perianth",
418
		"Sepals",
419
		"Sepal",
420
		"Outer Sepals",
421
		"Axillary",
422
		"cymes",
423
		"Calyx",
424
		"Petal",
425
		"Petals",
426
		"perigone",
427
		"perigone lobes",
428
		"perigone tube",
429
		"Disc",
430
		"corolla",
431
		"Stamens",
432
		"Staminodes",
433
		"Ovary",
434
		"Anthers",
435
		"anther",
436
		"Pistil",
437
		"Pistillode",
438
		"Ovules",
439
		"androecium",
440
		"gynoecium",
441
		"Filaments",
442
		"Style",
443
		"annulus",
444
		"female flowers",
445
		"Male flowers",
446
		"Female",
447
		"Infructescences",    //order not consistent (sometimes before "Flowers")
448
		"Fruit",
449
		"Fruits",
450
		"fruiting axes",
451
		"drupes",
452
		"Arillode",
453
		"seed",
454
		"Seeds",
455
		"Seedling",
456
		"flower tube",
457
		"nutlets",
458
		"pollen",
459
		"secondary xylem",
460
		"chromosome number",
461

    
462
		"figure",
463
		"fig",
464
		"figs",
465

    
466

    
467

    
468
	};
469

    
470
	public FeatureNode addFeataureNodesByStringList(String[] featureStringList, FeatureNode root, IInputTransformer transformer, ITermService termService){
471
		FeatureNode lastChild = null;
472
		try {
473
			for (String featureString : featureStringList){
474
				UUID featureUuid;
475
				featureUuid = transformer.getFeatureUuid(featureString);
476
				Feature feature = (Feature)termService.find(featureUuid);
477
				if (feature != null){
478
					FeatureNode child = FeatureNode.NewInstance(feature);
479
					root.addChild(child);
480
				}
481
			}
482

    
483
		} catch (UndefinedTransformerMethodException e) {
484
			logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
485
		}
486
		return lastChild;
487
	}
488

    
489

    
490

    
491
	/**
492
	 * @param args
493
	 */
494
	public static void main(String[] args) {
495
		FloraMalesianaActivator me = new FloraMalesianaActivator();
496
		me.doImport(cdmDestination);
497
	}
498

    
499
}
(10-10/13)