Project

General

Profile

Download (14.1 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.ICdmRepository;
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.CdmImportBase.TermMatchMode;
26
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
27
import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
28
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
29
import eu.etaxonomy.cdm.io.eflora.EfloraImportConfigurator;
30
import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeImportConfigurator;
31
import eu.etaxonomy.cdm.io.eflora.centralAfrica.ericaceae.CentralAfricaEricaceaeTransformer;
32
import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator;
33
import eu.etaxonomy.cdm.model.agent.Team;
34
import eu.etaxonomy.cdm.model.common.Language;
35
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
36
import eu.etaxonomy.cdm.model.common.TermType;
37
import eu.etaxonomy.cdm.model.description.Feature;
38
import eu.etaxonomy.cdm.model.description.FeatureNode;
39
import eu.etaxonomy.cdm.model.description.FeatureTree;
40
import eu.etaxonomy.cdm.model.description.PolytomousKey;
41
import eu.etaxonomy.cdm.model.location.NamedArea;
42
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
43
import eu.etaxonomy.cdm.model.location.NamedAreaType;
44
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
45
import eu.etaxonomy.cdm.model.reference.Reference;
46
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
47

    
48
/**
49
 * @author a.mueller
50
 * @created 20.06.2008
51
 * @version 1.0
52
 */
53
public class CentralAfricaEricaceaeActivator {
54
	private static final Logger logger = Logger.getLogger(CentralAfricaEricaceaeActivator.class);
55

    
56
	//database validation status (create, update, validate ...)
57
	static DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;
58
	static final URI source = EfloraSources.ericacea_local();
59

    
60
	static final URI specimenSource = EfloraSources.vittaria_specimen_pesiimport3();
61

    
62

    
63
	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_central_africa_local();
64

    
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_campanulaceae_production();
71

    
72
	//feature tree uuid
73
	public static final UUID featureTreeUuid = UUID.fromString("051d35ee-22f1-42d8-be07-9e9bfec5bcf7");
74

    
75
	public static UUID defaultLanguageUuid = Language.uuidFrench;
76

    
77
	//classification
78
	static final UUID classificationUuid = UUID.fromString("10e5efcc-6e13-4abc-ad42-e0b46e50cbe7");
79

    
80
	NomenclaturalCode nc = NomenclaturalCode.ICNAFP;
81

    
82
	//check - import
83
	static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
84

    
85
	static boolean doPrintKeys = false;
86

    
87
	//taxa
88
	private final boolean includeEricaceae = false;
89
	static final boolean doTaxa = false;
90
	static final boolean doDeduplicate = false;
91

    
92

    
93
	private final boolean doNewNamedAreas = false;
94
	private final boolean doFeatureTree = false;
95

    
96
	private final boolean doSpecimen = true;
97
	private final 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
		config.setNomenclaturalCode(nc);
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
			ICdmRepository 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
			ICdmRepository app = myImport.getCdmAppController();
175
			SpecimenCdmExcelImportConfigurator specimenConfig= SpecimenCdmExcelImportConfigurator.NewInstance(specimenSource, cdmDestination);
176
			specimenConfig.setCdmAppController(app);
177
			specimenConfig.setAreaMatchMode(specimenAreaMatchMode);
178
			specimenConfig.setNomenclaturalCode(nc);
179

    
180
			config.setDbSchemaValidation(DbSchemaValidation.VALIDATE);
181
			specimenConfig.setSourceReference(getSourceReference(specimenConfig.getSourceReferenceTitle()));
182

    
183
			CdmDefaultImport<SpecimenCdmExcelImportConfigurator> specimenImport = new CdmDefaultImport<SpecimenCdmExcelImportConfigurator>();
184
			specimenImport.setCdmAppController(app);
185
			specimenImport.invoke(specimenConfig);
186

    
187
		}
188
		return;
189

    
190

    
191

    
192
	}
193

    
194
	private void newNamedAreas(CdmDefaultImport<EfloraImportConfigurator> myImport) {
195
		ICdmRepository 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, true);
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", true);
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/15)