Project

General

Profile

Download (9.76 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.service.ITermService;
20
import eu.etaxonomy.cdm.app.common.CdmDestinations;
21
import eu.etaxonomy.cdm.database.DbSchemaValidation;
22
import eu.etaxonomy.cdm.database.ICdmDataSource;
23
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
24
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
25
import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
26
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
27
import eu.etaxonomy.cdm.io.eflora.EfloraImportConfigurator;
28
import eu.etaxonomy.cdm.io.eflora.floraMalesiana.FloraMalesianaTransformer;
29
import eu.etaxonomy.cdm.model.description.Feature;
30
import eu.etaxonomy.cdm.model.description.FeatureNode;
31
import eu.etaxonomy.cdm.model.description.FeatureTree;
32
import eu.etaxonomy.cdm.model.description.PolytomousKey;
33
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
34
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
35

    
36
/**
37
 * @author a.mueller
38
 * @created 20.06.2008
39
 * @version 1.0
40
 */
41
public class FloraMalesianaActivator {
42
	private static final Logger logger = Logger.getLogger(FloraMalesianaActivator.class);
43
	
44
	//database validation status (create, update, validate ...)
45
	static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
46
	static final URI fmSource1 = EfloraSources.fm_sapindaceae_local();
47
	static final URI fmSource2 = EfloraSources.fm_sapindaceae2_local();
48
	static final URI fmSource13_1 = EfloraSources.fm_13_1_local();
49
	static final URI fmSource13_2 = EfloraSources.fm_13_2_local();
50
	
51
	
52
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_andreasM3();
53
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_malesiana_preview();
54
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_flora_malesiana_production();
55
	static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
56

    
57
	//feature tree uuid
58
	public static final UUID featureTreeUuid = UUID.fromString("168df0c6-6429-484c-b26f-ded1f7e44bd9");
59
	
60
	//classification
61
	static final UUID classificationUuid = UUID.fromString("ca4e4bcb-a1d1-4124-a358-a3d3c41dd450");
62
	
63
	//check - import
64
	static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
65
	
66
	static boolean doPrintKeys = false;
67
	
68
	//taxa
69
	static final boolean doTaxa = true;
70

    
71
	private boolean includeSapindaceae1 = true;
72
	private boolean includeSapindaceae2 = true;
73
	private boolean includeVol13_1 = false;
74
	private boolean includeVol13_2 = false;
75

    
76
	
77
	private void doImport(ICdmDataSource cdmDestination){
78
		
79
		//make Source
80
		URI source = fmSource1;
81
		EfloraImportConfigurator floraMalesianaConfig= EfloraImportConfigurator.NewInstance(source, cdmDestination);
82
		floraMalesianaConfig.setTaxonomicTreeUuid(classificationUuid);
83
		floraMalesianaConfig.setDoTaxa(doTaxa);
84
		floraMalesianaConfig.setCheck(check);
85
		floraMalesianaConfig.setDoPrintKeys(doPrintKeys);
86
		floraMalesianaConfig.setDbSchemaValidation(hbm2dll);
87
		
88
		CdmDefaultImport<EfloraImportConfigurator> myImport = new CdmDefaultImport<EfloraImportConfigurator>();
89

    
90
		
91
		//Sapindaceae1
92
		if (includeSapindaceae1){
93
			System.out.println("Start import from ("+ fmSource1.toString() + ") ...");
94
			floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Sapindaceae I"));
95
			myImport.invoke(floraMalesianaConfig);
96
			System.out.println("End import from ("+ fmSource1.toString() + ")...");
97
		}
98
		
99
		//Sapindaceae2
100
		if (includeSapindaceae2){
101
			System.out.println("\nStart import from ("+ fmSource2.toString() + ") ...");
102
			source = fmSource2;
103
			floraMalesianaConfig.setSource(source);
104
			floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Sapindaceae II"));
105
			myImport.invoke(floraMalesianaConfig);
106
			System.out.println("End import from ("+ fmSource2.toString() + ")...");
107
		}
108
		
109
		floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Vol. 13"));
110
		//Vol13_1
111
		if (includeVol13_1){
112
			System.out.println("\nStart import from ("+ fmSource13_1.toString() + ") ...");
113
			source = fmSource13_1;
114
			floraMalesianaConfig.setSource(source);
115
			myImport.invoke(floraMalesianaConfig);
116
			System.out.println("End import from ("+ fmSource13_1.toString() + ")...");
117
		}
118

    
119
		//Vol13_2
120
		if (includeVol13_2){
121
			System.out.println("\nStart import from ("+ fmSource13_2.toString() + ") ...");
122
			source = fmSource13_2;
123
			floraMalesianaConfig.setSource(source);
124
			myImport.invoke(floraMalesianaConfig);
125
			System.out.println("End import from ("+ fmSource13_2.toString() + ")...");
126
		}
127
		
128
		FeatureTree tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
129
		myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
130
		
131
		//check keys
132
		if (doPrintKeys){
133
			TransactionStatus tx = myImport.getCdmAppController().startTransaction();
134
			List<FeatureTree> keys = myImport.getCdmAppController().getFeatureTreeService().list(PolytomousKey.class, null, null, null, null);
135
			for(FeatureTree key : keys){
136
				((PolytomousKey)key).print(System.out);
137
				System.out.println();
138
			}
139
			myImport.getCdmAppController().commitTransaction(tx);
140
		}
141
		
142
	}
143
	
144
	private ReferenceBase getSourceReference(String string) {
145
		ReferenceBase result = ReferenceFactory.newGeneric();
146
		result.setTitleCache(string);
147
		return result;
148
	}
149

    
150
	private FeatureTree makeFeatureNode(ITermService service){
151
		FloraMalesianaTransformer transformer = new FloraMalesianaTransformer();
152
		
153
		FeatureTree result = FeatureTree.NewInstance(featureTreeUuid);
154
		result.setTitleCache("Flora Malesiana Presentation Feature Tree");
155
		FeatureNode root = result.getRoot();
156
		FeatureNode newNode;
157
		
158
		newNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
159
		root.addChild(newNode);
160
		
161
		addFeataureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
162

    
163
		addFeataureNodesByStringList(generellDescriptionsList, root, transformer, service);
164

    
165
		
166
		newNode = FeatureNode.NewInstance(Feature.DISTRIBUTION());
167
		root.addChild(newNode);
168

    
169
		newNode = FeatureNode.NewInstance(Feature.ECOLOGY());
170
		root.addChild(newNode);
171
		addFeataureNodesByStringList(habitatEcologyList, root, transformer, service);
172
		
173
		newNode = FeatureNode.NewInstance(Feature.USES());
174
		root.addChild(newNode);
175
		
176
		addFeataureNodesByStringList(chomosomesList, root, transformer, service);
177

    
178
		newNode = FeatureNode.NewInstance(Feature.CITATION());
179
		root.addChild(newNode);
180
		
181
		return result;
182
	}
183
	
184
	private static String [] chomosomesList = new String[]{
185
		"Chromosomes", 
186
	};
187

    
188
	
189
	private static String [] habitatEcologyList = new String[]{
190
		"Habitat",
191
		"Habitat & Ecology"
192
	};
193
	
194
	
195
	private static String [] generellDescriptionsList = new String[]{
196
		"Fossils",
197
		"Morphology and anatomy",
198
		"Morphology", 
199
		"Vegetative morphology and anatomy",
200
		"Flower morphology",
201
		"Palynology",  
202
		"Pollination",  
203
		"Pollen morphology",
204
		"Life cycle",
205
		"Fruits and embryology",
206
		"Dispersal",
207
		"Wood anatomy",  
208
		"Leaf anatomy",  
209
		"Chromosome numbers", 
210
		"Phytochemistry and Chemotaxonomy",
211
		"Phytochemistry",
212
		"Taxonomy",	
213
	};
214

    
215
	private static String [] descriptionFeatureList = new String[]{
216
		"lifeform", 
217
		"Bark",  
218
		"Indumentum",  
219
		"endophytic body",  
220
		"flowering buds",  
221
		"Branchlets",  
222
		"Branches",  
223
		"Branch",  
224
		"Flowering branchlets",
225
		"Trees",  
226
		"Twigs",  
227
		"stem",  
228
		"Stems",  
229
		"stem leaves", 
230
		"Leaves",
231
		"flower-bearing stems",  
232
		"Petiole",  
233
		"Petiolules",  
234
		"Leaflets", 
235
		"Thyrsus",  
236
		"Thyrses",  
237
		"Inflorescences",  
238
		"Inflorescence",
239
		"Young inflorescences", 
240
		"Bracts",  
241
		"Pedicels",  
242
		"flowering buds",  
243
		"scales",  
244
		"Buds",  
245
		"Flowers",  
246
		"Flower",  
247
		"Flowering",
248
		"Stigma",  
249
		"perianth",  
250
		"Sepals",  
251
		"Sepal",  
252
		"Outer Sepals",  
253
		"Axillary",  
254
		"cymes",  
255
		"Calyx",  
256
		"Petal",  
257
		"Petals",  
258
		"perigone tube",
259
		"Disc",  
260
		"corolla",  
261
		"Stamens",  
262
		"Staminodes",  
263
		"Ovary",  
264
		"Anthers",
265
		"anther",  
266
		"Pistil",  
267
		"Pistillode",  
268
		"Ovules",  
269
		"androecium",  
270
		"gynoecium",  
271
		"Filaments",  		
272
		"Style",  
273
		"annulus",  
274
		"female flowers",  
275
		"Male flowers",  
276
		"Female",  
277
		"Infructescences",    //order not consistent (sometimes before "Flowers")  
278
		"Fruit",  
279
		"Fruits",  
280
		"fruiting axes",  
281
		"drupes",  
282
		"Arillode",  
283
		"seed",  
284
		"Seeds",  
285
		"Seedling",  
286
		"flower tube", 
287
		"nutlets",  
288
		"pollen",  
289
		"secondary xylem",  
290
		"chromosome number",  
291
	
292
		"figure",  
293
		"fig",  
294
		"figs",  
295

    
296

    
297

    
298
		
299
	};
300
	
301
	public void addFeataureNodesByStringList(String[] featureStringList, FeatureNode root, IInputTransformer transformer, ITermService termService){
302
		try {
303
			for (String featureString : featureStringList){
304
			UUID featureUuid;
305
			featureUuid = transformer.getFeatureUuid(featureString);
306
			Feature feature = (Feature)termService.find(featureUuid);
307
			if (feature != null){
308
				FeatureNode child = FeatureNode.NewInstance(feature);
309
				root.addChild(child);	
310
			}
311
		}
312
		} catch (UndefinedTransformerMethodException e) {
313
			logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
314
		}
315
	}
316
	
317

    
318

    
319
	/**
320
	 * @param args
321
	 */
322
	public static void main(String[] args) {
323
		FloraMalesianaActivator me = new FloraMalesianaActivator();
324
		me.doImport(cdmDestination);
325
	}
326
	
327
}
(5-5/5)