Project

General

Profile

Download (15 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.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
}
(4-4/13)