Project

General

Profile

Download (14.9 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.description.Feature;
40
import eu.etaxonomy.cdm.model.description.FeatureNode;
41
import eu.etaxonomy.cdm.model.description.FeatureTree;
42
import eu.etaxonomy.cdm.model.description.PolytomousKey;
43
import eu.etaxonomy.cdm.model.location.NamedArea;
44
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
45
import eu.etaxonomy.cdm.model.location.NamedAreaType;
46
import eu.etaxonomy.cdm.model.reference.Reference;
47
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
48

    
49
/**
50
 * @author a.mueller
51
 * @created 20.06.2008
52
 * @version 1.0
53
 */
54
public class CentralAfricaEricaceaeActivator {
55
	private static final Logger logger = Logger.getLogger(CentralAfricaEricaceaeActivator.class);
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.ericacea_specimen_local();
62

    
63
	
64
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_andreasM3();
65
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_preview();
66
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_production();
67
	static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
68
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_local_postgres_CdmTest();
69
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
70
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_jaxb();
71
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_edit_cichorieae_preview();
72
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_campanulaceae_production();
73
	
74
	//feature tree uuid
75
	public static final UUID featureTreeUuid = UUID.fromString("051d35ee-22f1-42d8-be07-9e9bfec5bcf7");
76
	
77
	public static UUID defaultLanguageUuid = Language.uuidFrench;
78
	
79
	//classification
80
	static final UUID classificationUuid = UUID.fromString("10e5efcc-6e13-4abc-ad42-e0b46e50cbe7");
81
	
82
	//check - import
83
	static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
84
	
85
	static boolean doPrintKeys = false;
86
	
87
	//taxa
88
	private boolean includeEricaceae = true;
89
	static final boolean doTaxa = true;
90
	static final boolean doDeduplicate = false;
91

    
92
	
93
	private boolean doNewNamedAreas = false;
94
	private boolean doFeatureTree = false;
95
	
96
	private boolean doSpecimen = false;
97
	private TermMatchMode specimenAreaMatchMode = TermMatchMode.UUID_ABBREVLABEL;
98

    
99
	
100
	private void doImport(ICdmDataSource cdmDestination){
101
		
102
		CdmUpdater su = CdmUpdater.NewInstance();
103
		IProgressMonitor monitor = DefaultProgressMonitor.NewInstance();
104
//		
105
//		try {
106
//			su.updateToCurrentVersion(cdmDestination, monitor);
107
//		} catch (Exception e) {
108
//			e.printStackTrace();
109
//		}
110
//		if (true){
111
//			return;
112
//		}
113
		
114
		//make Source
115
		CentralAfricaEricaceaeImportConfigurator config= CentralAfricaEricaceaeImportConfigurator.NewInstance(source, cdmDestination);
116
		config.setClassificationUuid(classificationUuid);
117
		config.setDoTaxa(doTaxa);
118
		config.setCheck(check);
119
		config.setDefaultLanguageUuid(defaultLanguageUuid);
120
		config.setDoPrintKeys(doPrintKeys);
121
		config.setDbSchemaValidation(hbm2dll);
122
		
123
		CdmDefaultImport<EfloraImportConfigurator> myImport = new CdmDefaultImport<EfloraImportConfigurator>();
124

    
125
		
126
		//Ericaceae
127
		if (includeEricaceae){
128
			System.out.println("Start import from ("+ source.toString() + ") ...");
129
			config.setSourceReference(getSourceReference(config.getSourceReferenceTitle()));
130
			myImport.invoke(config);
131
			System.out.println("End import from ("+ source.toString() + ")...");
132
		}
133
		
134
		if (doFeatureTree){
135
			FeatureTree tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
136
			myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
137
		}
138
		
139
		//check keys
140
		if (doPrintKeys){
141
			TransactionStatus tx = myImport.getCdmAppController().startTransaction();
142
			List<PolytomousKey> keys = myImport.getCdmAppController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null);
143
			for(PolytomousKey key : keys){
144
				key.print(System.out);
145
				System.out.println();
146
			}
147
			myImport.getCdmAppController().commitTransaction(tx);
148
		}
149
		
150
		//deduplicate
151
		if (doDeduplicate){
152
			ICdmApplicationConfiguration app = myImport.getCdmAppController();
153
			if (app == null){
154
				app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
155
			}
156
			app.getAgentService().updateTitleCache(Team.class, null, null, null);
157
			return;
158
//			int count = app.getAgentService().deduplicate(Person.class, null, null);
159
//			
160
//			logger.warn("Deduplicated " + count + " persons.");
161
////			count = app.getAgentService().deduplicate(Team.class, null, null);
162
////			logger.warn("Deduplicated " + count + " teams.");
163
//			count = app.getReferenceService().deduplicate(Reference.class, null, null);
164
//			logger.warn("Deduplicated " + count + " references.");
165
		}
166
		
167
		if(doNewNamedAreas){
168
			newNamedAreas(myImport);
169
		}
170

    
171
		if (doSpecimen){
172
			logger.warn("Start specimen import");
173
			ICdmApplicationConfiguration app = myImport.getCdmAppController();
174
			SpecimenCdmExcelImportConfigurator specimenConfig= SpecimenCdmExcelImportConfigurator.NewInstance(specimenSource, cdmDestination);
175
			specimenConfig.setCdmAppController((CdmApplicationController)app);
176
			specimenConfig.setAreaMatchMode(specimenAreaMatchMode);
177
			
178
			config.setDbSchemaValidation(DbSchemaValidation.VALIDATE);
179
			specimenConfig.setSourceReference(getSourceReference(specimenConfig.getSourceReferenceTitle()));
180
			
181
			CdmDefaultImport<SpecimenCdmExcelImportConfigurator> specimenImport = new CdmDefaultImport<SpecimenCdmExcelImportConfigurator>();
182
			specimenImport.setCdmAppController(app);
183
			specimenImport.invoke(specimenConfig);
184
			
185
			
186
		}
187
		return;
188
	
189

    
190
		
191
	}
192

    
193
	private void newNamedAreas(CdmDefaultImport<EfloraImportConfigurator> myImport) {
194
		ICdmApplicationConfiguration app = myImport.getCdmAppController();
195
		if (app == null){
196
			app = CdmApplicationController.NewInstance(cdmDestination, hbm2dll, false);
197
		}
198
		TransactionStatus tx = app.startTransaction();
199
		
200
		OrderedTermVocabulary<NamedArea> voc = OrderedTermVocabulary.NewInstance("Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions", null);
201
		app.getVocabularyService().save(voc);
202
		
203
		NamedAreaLevel level = NamedAreaLevel.NewInstance("Phytogeographic Regions of Central Africa", "Phytogeographic Regions of Central Africa", "FdAC regions");
204
		ITermService termService = app.getTermService();
205
		
206
		termService.save(level);
207
		
208
		NamedArea area = NamedArea.NewInstance("C?tier", "C?tier", "I");
209
		area.setLevel(level);
210
		area.setType(NamedAreaType.NATURAL_AREA());
211
		voc.addTerm(area);
212
		termService.save(area);
213
		
214

    
215
		area = NamedArea.NewInstance("Mayumbe", "Mayumbe", "II");
216
		area.setLevel(level);
217
		area.setType(NamedAreaType.NATURAL_AREA());
218
		voc.addTerm(area);
219
		termService.save(area);
220

    
221
		area = NamedArea.NewInstance("Bas-Congo", "Bas-Congo", "III");
222
		area.setLevel(level);
223
		area.setType(NamedAreaType.NATURAL_AREA());
224
		voc.addTerm(area);
225
		termService.save(area);
226

    
227
		area = NamedArea.NewInstance("Kasai", "Kasai", "IV");
228
		area.setLevel(level);
229
		area.setType(NamedAreaType.NATURAL_AREA());
230
		voc.addTerm(area);
231
		termService.save(area);
232

    
233
		area = NamedArea.NewInstance("Bas-Katanga", "Bas-Katanga", "V");
234
		area.setLevel(level);
235
		area.setType(NamedAreaType.NATURAL_AREA());
236
		voc.addTerm(area);
237
		termService.save(area);
238

    
239
		area = NamedArea.NewInstance("Forestier Central", "Forestier Central", "VI");
240
		area.setLevel(level);
241
		area.setType(NamedAreaType.NATURAL_AREA());
242
		voc.addTerm(area);
243
		termService.save(area);
244

    
245
		area = NamedArea.NewInstance("Ubangi-Uele", "Ubangi-Uele", "VII");
246
		area.setLevel(level);
247
		area.setType(NamedAreaType.NATURAL_AREA());
248
		voc.addTerm(area);
249
		termService.save(area);
250

    
251
		area = NamedArea.NewInstance("Lac Albert", "Lac Albert", "VIII");
252
		area.setLevel(level);
253
		area.setType(NamedAreaType.NATURAL_AREA());
254
		voc.addTerm(area);
255
		termService.save(area);
256

    
257
		area = NamedArea.NewInstance("Lacs ?douard et Kivu", "Lacs ?douard et Kivu", "IX");
258
		area.setLevel(level);
259
		area.setType(NamedAreaType.NATURAL_AREA());
260
		voc.addTerm(area);
261
		termService.save(area);
262

    
263
		area = NamedArea.NewInstance("Rwanda-Burundi", "Rwanda-Burundi", "X");
264
		area.setLevel(level);
265
		area.setType(NamedAreaType.NATURAL_AREA());
266
		voc.addTerm(area);
267
		termService.save(area);
268

    
269
		area = NamedArea.NewInstance("Haut-Katanga", "Haut-Katanga", "XI");
270
		area.setLevel(level);
271
		area.setType(NamedAreaType.NATURAL_AREA());
272
		voc.addTerm(area);
273
		termService.save(area);
274
		
275
		app.getVocabularyService().save(voc);
276
		
277
		app.commitTransaction(tx);
278

    
279
	}
280

    
281
	private Reference getSourceReference(String string) {
282
		Reference result = ReferenceFactory.newGeneric();
283
		result.setTitleCache(string);
284
		return result;
285
	}
286

    
287
	private FeatureTree makeFeatureNode(ITermService service){
288
		CentralAfricaEricaceaeTransformer transformer = new CentralAfricaEricaceaeTransformer();
289
		
290
		FeatureTree result = FeatureTree.NewInstance(featureTreeUuid);
291
		result.setTitleCache("Central Africa Ericaceae Feature Tree");
292
		FeatureNode root = result.getRoot();
293
		FeatureNode newNode;
294
		
295
		newNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
296
		root.addChild(newNode);
297
		
298
		addFeataureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
299

    
300
		addFeataureNodesByStringList(generellDescriptionsList, 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.COMMON_NAME());
316
		root.addChild(newNode);
317
		
318
		newNode = FeatureNode.NewInstance(Feature.CITATION());
319
		root.addChild(newNode);
320
		
321
		return result;
322
	}
323
	
324
	private static String [] chomosomesList = new String[]{
325
		"Chromosomes", 
326
	};
327

    
328
	
329
	private static String [] habitatEcologyList = new String[]{
330
		"Habitat",
331
		"Habitat & Ecology"
332
	};
333
	
334
	
335
	private static String [] generellDescriptionsList = new String[]{
336
		"Fossils",
337
		"Morphology and anatomy",
338
		"Morphology", 
339
		"Vegetative morphology and anatomy",
340
		"Flower morphology",
341
		"Palynology",  
342
		"Pollination",  
343
		"Pollen morphology",
344
		"Life cycle",
345
		"Fruits and embryology",
346
		"Dispersal",
347
		"Wood anatomy",  
348
		"Leaf anatomy",  
349
		"Chromosome numbers", 
350
		"Phytochemistry and Chemotaxonomy",
351
		"Phytochemistry",
352
		"Taxonomy",	
353
	};
354

    
355
	private static String [] descriptionFeatureList = new String[]{
356
		"lifeform", 
357
		"Bark",  
358
		"Indumentum",  
359
		"endophytic body",  
360
		"flowering buds",  
361
		"Branchlets",  
362
		"Branches",  
363
		"Branch",  
364
		"Flowering branchlets",
365
		"Trees",  
366
		"Twigs",  
367
		"stem",  
368
		"Stems",  
369
		"stem leaves", 
370
		"Leaves",
371
		"flower-bearing stems",  
372
		"Petiole",  
373
		"Petiolules",  
374
		"Leaflets", 
375
		"Thyrsus",  
376
		"Thyrses",  
377
		"Inflorescences",  
378
		"Inflorescence",
379
		"Young inflorescences", 
380
		"Bracts",  
381
		"Pedicels",  
382
		"flowering buds",  
383
		"scales",  
384
		"Buds",  
385
		"Flowers",  
386
		"Flower",  
387
		"Flowering",
388
		"Stigma",  
389
		"perianth",  
390
		"Sepals",  
391
		"Sepal",  
392
		"Outer Sepals",  
393
		"Axillary",  
394
		"cymes",  
395
		"Calyx",  
396
		"Petal",  
397
		"Petals",  
398
		"perigone tube",
399
		"Disc",  
400
		"corolla",  
401
		"Stamens",  
402
		"Staminodes",  
403
		"Ovary",  
404
		"Anthers",
405
		"anther",  
406
		"Pistil",  
407
		"Pistillode",  
408
		"Ovules",  
409
		"androecium",  
410
		"gynoecium",  
411
		"Filaments",  		
412
		"Style",  
413
		"annulus",  
414
		"female flowers",  
415
		"Male flowers",  
416
		"Female",  
417
		"Infructescences",    //order not consistent (sometimes before "Flowers")  
418
		"Fruit",  
419
		"Fruits",  
420
		"fruiting axes",  
421
		"drupes",  
422
		"Arillode",  
423
		"seed",  
424
		"Seeds",  
425
		"Seedling",  
426
		"flower tube", 
427
		"nutlets",  
428
		"pollen",  
429
		"secondary xylem",  
430
		"chromosome number",  
431
	
432
		"figure",  
433
		"fig",  
434
		"figs",  
435

    
436

    
437

    
438
		
439
	};
440
	
441
	public void addFeataureNodesByStringList(String[] featureStringList, FeatureNode root, IInputTransformer transformer, ITermService termService){
442
		try {
443
			for (String featureString : featureStringList){
444
			UUID featureUuid;
445
			featureUuid = transformer.getFeatureUuid(featureString);
446
			Feature feature = (Feature)termService.find(featureUuid);
447
			if (feature != null){
448
				FeatureNode child = FeatureNode.NewInstance(feature);
449
				root.addChild(child);	
450
			}
451
		}
452
		} catch (UndefinedTransformerMethodException e) {
453
			logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
454
		}
455
	}
456
	
457

    
458

    
459
	/**
460
	 * @param args
461
	 */
462
	public static void main(String[] args) {
463
		CentralAfricaEricaceaeActivator me = new CentralAfricaEricaceaeActivator();
464
		me.doImport(cdmDestination);
465
	}
466
	
467
}
(4-4/11)