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.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);
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");
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
}
(4-4/13)