Project

General

Profile

Download (13.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.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.description.Feature;
36
import eu.etaxonomy.cdm.model.description.PolytomousKey;
37
import eu.etaxonomy.cdm.model.location.NamedArea;
38
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
39
import eu.etaxonomy.cdm.model.location.NamedAreaType;
40
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
41
import eu.etaxonomy.cdm.model.reference.Reference;
42
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
43
import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
44
import eu.etaxonomy.cdm.model.term.TermNode;
45
import eu.etaxonomy.cdm.model.term.TermTree;
46
import eu.etaxonomy.cdm.model.term.TermType;
47

    
48
/**
49
 * @author a.mueller
50
 * @since 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
			TermTree<Feature> 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().updateCaches(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 TermTree<Feature> makeFeatureNode(ITermService service){
289
		CentralAfricaEricaceaeTransformer transformer = new CentralAfricaEricaceaeTransformer();
290

    
291
		TermTree<Feature> result = TermTree.NewFeatureInstance(featureTreeUuid);
292
		result.setTitleCache("Central Africa Ericaceae Feature Tree", true);
293
		TermNode<Feature> root = result.getRoot();
294

    
295
		TermNode<Feature> newNode = root.addChild(Feature.DESCRIPTION());
296

    
297
		addFeatureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
298

    
299
		addFeatureNodesByStringList(generellDescriptionsList, root, transformer, service);
300

    
301
		newNode = root.addChild(Feature.DISTRIBUTION());
302

    
303
		newNode = root.addChild(Feature.ECOLOGY());
304
		addFeatureNodesByStringList(habitatEcologyList, root, transformer, service);
305

    
306
		newNode = root.addChild(Feature.USES());
307

    
308
		addFeatureNodesByStringList(chomosomesList, root, transformer, service);
309

    
310
		newNode = root.addChild(Feature.COMMON_NAME());
311

    
312
		newNode = root.addChild(Feature.CITATION());
313

    
314
		return result;
315
	}
316

    
317
	private static String [] chomosomesList = new String[]{
318
		"Chromosomes",
319
	};
320

    
321

    
322
	private static String [] habitatEcologyList = new String[]{
323
		"Habitat",
324
		"Habitat & Ecology"
325
	};
326

    
327

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

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

    
425
		"figure",
426
		"fig",
427
		"figs",
428

    
429

    
430

    
431

    
432
	};
433

    
434
	public void addFeatureNodesByStringList(String[] featureStringList, TermNode<Feature> root, IInputTransformer transformer, ITermService termService){
435
		try {
436
			for (String featureString : featureStringList){
437
			UUID featureUuid;
438
			featureUuid = transformer.getFeatureUuid(featureString);
439
			Feature feature = (Feature)termService.find(featureUuid);
440
			if (feature != null){
441
				TermNode<Feature> child = root.addChild(feature);
442
			}
443
		}
444
		} catch (UndefinedTransformerMethodException e) {
445
			logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
446
		}
447
	}
448

    
449

    
450

    
451
	/**
452
	 * @param args
453
	 */
454
	public static void main(String[] args) {
455
		CentralAfricaEricaceaeActivator me = new CentralAfricaEricaceaeActivator();
456
		me.doImport(cdmDestination);
457
	}
458

    
459
}
(4-4/15)