Project

General

Profile

Download (11.8 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.berlinModelImport;
11

    
12
import java.util.UUID;
13

    
14
import org.apache.log4j.Logger;
15

    
16
import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
17
import eu.etaxonomy.cdm.api.service.ITermService;
18
import eu.etaxonomy.cdm.app.common.CdmDestinations;
19
import eu.etaxonomy.cdm.database.DbSchemaValidation;
20
import eu.etaxonomy.cdm.database.ICdmDataSource;
21
import eu.etaxonomy.cdm.io.algaterra.AlgaTerraImportConfigurator;
22
import eu.etaxonomy.cdm.io.algaterra.AlgaTerraImportTransformer;
23
import eu.etaxonomy.cdm.io.algaterra.AlgaTerraSpecimenImportBase;
24
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
25
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
26
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
27
import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
28
import eu.etaxonomy.cdm.io.common.IImportConfigurator.EDITOR;
29
import eu.etaxonomy.cdm.io.common.Source;
30
import eu.etaxonomy.cdm.model.description.Feature;
31
import eu.etaxonomy.cdm.model.description.FeatureNode;
32
import eu.etaxonomy.cdm.model.description.FeatureTree;
33
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
34

    
35

    
36
/**
37
 * TODO add the following to a wiki page:
38
 * HINT: If you are about to import into a mysql data base running under windows and if you wish to dump and restore the resulting data bas under another operation systen 
39
 * you must set the mysql system variable lower_case_table_names = 0 in order to create data base with table compatible names.
40
 * 
41
 * 
42
 * @author a.mueller
43
 *
44
 */
45
public class AlgaTerraActivator {
46
	private static final Logger logger = Logger.getLogger(AlgaTerraActivator.class);
47

    
48
	//database validation status (create, update, validate ...)
49
	static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
50
	static final Source berlinModelSource = BerlinModelSources.AlgaTerra();
51
	static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
52
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
53

    
54
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_algaterra_preview();
55
	
56
	
57
	static final UUID treeUuid = UUID.fromString("1f617402-78dc-4bf1-ac77-d260600a8879");
58
	static final int sourceSecId = 7331;
59
	static final UUID sourceRefUuid = UUID.fromString("7e1a2500-93a5-40c2-ba34-0213d7822379");
60
	
61
	static final UUID featureTreeUuid = UUID.fromString("a970168a-36fd-4c7c-931e-87214a965c14");
62
	static final Object[] featureKeyList = new Integer[]{7,201,202,203,204,205,206,207}; 
63
	static final UUID specimenFeatureTreeUuid = UUID.fromString("ba86246e-d4d0-419f-832e-86d70b1e4bd7");
64
	
65
	
66
	//check - import
67
	static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
68

    
69
	private boolean ignoreNull = true;
70
	
71
	private boolean includeFlatClassifications = true;
72
	private boolean includeAllNonMisappliedRelatedClassifications = true;
73
	
74
	private EDITOR editor = EDITOR.EDITOR_AS_EDITOR;
75

    
76
	//NomeclaturalCode
77
	static final NomenclaturalCode nomenclaturalCode = NomenclaturalCode.ICBN;
78
	
79
	static String factFilter = " factCategoryFk NOT IN (7, 202, 1000 ) ";
80
	
81
	
82
// ****************** ALL *****************************************
83
	
84
//	//authors
85
//	static final boolean doAuthors = true;
86
//	//references
87
//	static final DO_REFERENCES doReferences =  DO_REFERENCES.ALL;
88
//	//names
89
//	static final boolean doTaxonNames = true;
90
//	static final boolean doRelNames = true;
91
//	static final boolean doNameStatus = true;
92
//	static final boolean doTypes = true;  
93
//	
94
//	//taxa
95
//	static final boolean doTaxa = true;
96
//	static final boolean doRelTaxa = true;
97
//	static final boolean doFacts = true;
98
//	
99
//	//alga terra specific
100
//	static final boolean ecoFacts = true;
101
//	static final boolean doFactEcology = true;
102
//	static final boolean doImages = true;
103

    
104
// ************************ NONE **************************************** //
105
	
106
	//authors
107
	static final boolean doAuthors = false;
108
	//references
109
	static final DO_REFERENCES doReferences =  DO_REFERENCES.ALL;
110
	//names
111
	static final boolean doTaxonNames = false;
112
	static final boolean doRelNames = false;
113
	static final boolean doNameStatus = false;
114
	static final boolean doTypes = false;
115
	static final boolean doNameFacts = false;
116
	
117
	//taxa
118
	static final boolean doTaxa = true;
119
	static final boolean doRelTaxa = false;
120
	static final boolean doFacts = true;
121
	
122
  //alga terra specific
123
	static final boolean ecoFacts = true;
124
	static final boolean doFactEcology = false;
125
	static final boolean doImages = true;
126
	
127
	
128
	public void invoke(String[] args){
129
		System.out.println("Start import from BerlinModel("+ berlinModelSource.getDatabase() + ") ...");
130
		logger.debug("Start");
131
		//make BerlinModel Source
132
		Source source = berlinModelSource;
133
		ICdmDataSource destination = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
134
		
135
		AlgaTerraImportConfigurator config = AlgaTerraImportConfigurator.NewInstance(source,  destination);
136
		
137
		config.setClassificationUuid(treeUuid);
138
		config.setSourceSecId(sourceSecId);
139
		config.setNomenclaturalCode(nomenclaturalCode);
140

    
141
		config.setDoAuthors(doAuthors);
142
		config.setDoReferences(doReferences);
143
		config.setDoTaxonNames(doTaxonNames);
144
		config.setDoRelNames(doRelNames);
145
		config.setDoNameStatus(doNameStatus);
146
		config.setDoTypes(doTypes);
147
		
148
		config.setDoTaxa(doTaxa);
149
		config.setDoRelTaxa(doRelTaxa);
150
		config.setDoFacts(doFacts);
151
		config.setDoEcoFacts(ecoFacts);
152
		config.setDoImages(doImages);
153
		config.setDoFactEcology(doFactEcology);
154
		
155
		config.setSourceRefUuid(sourceRefUuid);
156
		config.setIgnoreNull(ignoreNull);
157
		
158
		config.setIncludeFlatClassifications(includeFlatClassifications);
159
		config.setIncludeAllNonMisappliedRelatedClassifications(includeAllNonMisappliedRelatedClassifications);
160
		config.setFactFilter(factFilter);
161
		
162
		config.setDbSchemaValidation(hbm2dll);
163

    
164
		config.setCheck(check);
165
		config.setEditor(editor);
166
		
167
		// invoke import
168
		CdmDefaultImport<BerlinModelImportConfigurator> bmImport = new CdmDefaultImport<BerlinModelImportConfigurator>();
169
		bmImport.invoke(config);
170

    
171
		if (doFacts && (config.getCheck().equals(CHECK.CHECK_AND_IMPORT)  || config.getCheck().equals(CHECK.IMPORT_WITHOUT_CHECK) )   ){
172
			ICdmApplicationConfiguration app = bmImport.getCdmAppController();
173
			
174
			//make feature tree
175
			makeTaxonFeatureTree(config, app);
176

    
177
			//make specimen feature tree
178
			//TODO more specimen specific
179
			makeSpecimenFeatureTree(config, app);
180

    
181
		}
182
		
183
		
184
		System.out.println("End import from BerlinModel ("+ source.getDatabase() + ")...");
185
	}
186

    
187

    
188
	/**
189
	 * @param config
190
	 * @param app
191
	 */
192
	private void makeTaxonFeatureTree(AlgaTerraImportConfigurator config, ICdmApplicationConfiguration app) {
193
		FeatureTree tree = TreeCreator.flatTree(featureTreeUuid, config.getFeatureMap(), featureKeyList);
194
		tree.setTitleCache("AlgaTerra Taxon Feature Tree", true);
195
		
196
		FeatureNode node = FeatureNode.NewInstance(Feature.HABITAT());
197
		tree.getRoot().addChild(node);
198
		
199
		node = FeatureNode.NewInstance(Feature.OBSERVATION());
200
		tree.getRoot().addChild(node);
201
		
202
		node = FeatureNode.NewInstance(Feature.SPECIMEN());
203
		tree.getRoot().addChild(node);
204
		
205
		node = FeatureNode.NewInstance(Feature.INDIVIDUALS_ASSOCIATION());
206
		tree.getRoot().addChild(node);
207
		
208
		//needed ??
209
		FeatureNode distributionNode = FeatureNode.NewInstance(Feature.DISTRIBUTION());
210
		tree.getRoot().addChild(distributionNode, 2);
211
		
212
		//needed ??
213
		FeatureNode imageNode = FeatureNode.NewInstance(Feature.IMAGE());
214
		tree.getRoot().addChild(imageNode);
215
		
216
		app.getFeatureTreeService().saveOrUpdate(tree);
217
	}
218

    
219

    
220
	/**
221
	 * @param config
222
	 * @param app
223
	 * @param tree
224
	 */
225
	private void makeSpecimenFeatureTree(AlgaTerraImportConfigurator config, ICdmApplicationConfiguration app) {
226
		ITermService termService = app.getTermService();
227
		FeatureTree specimenTree = FeatureTree.NewInstance(specimenFeatureTreeUuid);
228
//		FeatureTree specimenTree = TreeCreator.flatTree(specimenFeatureTreeUuid, config.getFeatureMap(), featureKeyList);
229
		specimenTree.setTitleCache("AlgaTerra Specimen Feature Tree", true);
230
		FeatureNode root = specimenTree.getRoot();
231
		
232
		
233
		FeatureNode imageNode = FeatureNode.NewInstance(Feature.IMAGE());
234
		root.addChild(imageNode);
235
		
236
		addFeatureNodeByUuid(root, termService, AlgaTerraSpecimenImportBase.uuidFeatureAlgaTerraClimate);
237
		FeatureNode node = FeatureNode.NewInstance(Feature.HABITAT());
238
		root.addChild(node);
239
		addFeatureNodeByUuid(root, termService, AlgaTerraSpecimenImportBase.uuidFeatureHabitatExplanation);
240
		addFeatureNodeByUuid(root, termService, AlgaTerraSpecimenImportBase.uuidFeatureAlgaTerraLifeForm);
241
		
242
		addFeatureNodeByUuid(root, termService, AlgaTerraSpecimenImportBase.uuidFeatureAdditionalData);
243
		addFeatureNodeByUuid(root, termService, AlgaTerraSpecimenImportBase.uuidFeatureSpecimenCommunity);
244
		
245
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeaturePH);
246
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureConductivity);
247
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureWaterTemperature);
248
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureSilica);
249
		FeatureNode nitrogenNode = makeNitrogenNode(root, termService);
250
		addFeatureNodeByUuid(nitrogenNode, termService, AlgaTerraImportTransformer.uuidFeatureNitrate);
251
		addFeatureNodeByUuid(nitrogenNode, termService, AlgaTerraImportTransformer.uuidFeatureNitrite);
252
		addFeatureNodeByUuid(nitrogenNode, termService, AlgaTerraImportTransformer.uuidFeatureAmmonium);
253
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeaturePhosphate);
254
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureOrthoPhosphate);
255
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureNPRation);
256
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureDIN);
257
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureSRP);
258
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureOxygenSaturation);
259
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureCl);
260
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureSecchiDepth);
261
		addFeatureNodeByUuid(root, termService, AlgaTerraImportTransformer.uuidFeatureCommunity);
262
		app.getFeatureTreeService().saveOrUpdate(specimenTree);
263
	}
264
	
265
	private FeatureNode makeNitrogenNode(FeatureNode root, ITermService termService) {
266
		Feature nFeature = Feature.NewInstance("Supra feature for all Nitrogen related subfeatures", "Nitrogen", "N");
267
		termService.save(nFeature);
268
		FeatureNode nNode = FeatureNode.NewInstance(nFeature);
269
		root.addChild(nNode);
270
		return nNode;
271
	}
272

    
273

    
274
//	private FeatureNode addFeataureNodesByUuidList(UUID[] featureUuidList, FeatureNode root, ITermService termService){
275
//		FeatureNode lastChild = null;
276
//		for (UUID featureUuid : featureUuidList){
277
//			addFeatureNodeByUuid(root, termService, featureUuid);
278
//		}
279
//
280
//		return lastChild;
281
//	}
282

    
283

    
284
	/**
285
	 * @param root
286
	 * @param termService
287
	 * @param featureUuid
288
	 */
289
	private void addFeatureNodeByUuid(FeatureNode root, ITermService termService, UUID featureUuid) {
290
		Feature feature = (Feature)termService.find(featureUuid);
291
		if (feature != null){
292
			FeatureNode child = FeatureNode.NewInstance(feature);
293
			root.addChild(child);	
294
		}
295
	}
296
	
297
	
298
	/**
299
	 * @param args
300
	 */
301
	public static void main(String[] args) {
302
		AlgaTerraActivator activator = new AlgaTerraActivator();
303
		activator.invoke(args);
304
	}
305

    
306
}
(1-1/11)