Project

General

Profile

Download (12.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.vibrant;
11

    
12
import java.lang.reflect.Method;
13
import java.sql.ResultSet;
14
import java.util.UUID;
15

    
16
import org.apache.log4j.Logger;
17

    
18
import eu.etaxonomy.cdm.app.berlinModelImport.BerlinModelSources;
19
import eu.etaxonomy.cdm.app.common.CdmDestinations;
20
import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
21
import eu.etaxonomy.cdm.database.DbSchemaValidation;
22
import eu.etaxonomy.cdm.database.ICdmDataSource;
23
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
24
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
25
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
26
import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
27
import eu.etaxonomy.cdm.io.common.IImportConfigurator.EDITOR;
28
import eu.etaxonomy.cdm.io.common.Source;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.common.ExtensionType;
31
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
32
import eu.etaxonomy.cdm.model.name.NonViralName;
33
import eu.etaxonomy.cdm.model.name.Rank;
34
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
35

    
36

    
37
/**
38
 * TODO add the following to a wiki page:
39
 * 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 
40
 * you must set the mysql system variable lower_case_table_names = 0 in order to create data base with table compatible names.
41
 * 
42
 * 
43
 * @author a.mueller
44
 *
45
 */
46
public class IopiActivator {
47
	private static final Logger logger = Logger.getLogger(IopiActivator.class);
48

    
49
	//database validation status (create, update, validate ...)
50
	static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
51
	static final Source berlinModelSource = BerlinModelSources.iopi();
52
	
53
//	static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
54
	static final ICdmDataSource cdmDestination = cdm_test_local_iopi();
55
	
56
	static final boolean useSingleClassification = true;
57
	static final Integer sourceSecId = 1892; //7000000; 
58
	static final UUID classificationUuid = null; //UUID.fromString("aa3fbaeb-f5dc-4e75-8d60-c8f93beb7ba6");
59
	
60
	static final UUID sourceRefUuid = UUID.fromString("df68c748-3c64-4b96-9a47-db51fb9d387e");
61
	
62
	// set to zero for unlimited nameFacts
63
	static final int maximumNumberOfNameFacts = 0;
64
	
65
	static final int partitionSize = 1500;
66
	
67
	//check - import
68
	static final CHECK check = CHECK.CHECK_AND_IMPORT;
69

    
70
	//editor - import
71
	static final EDITOR editor = EDITOR.EDITOR_AS_EDITOR;
72
	
73
	//NomenclaturalCode
74
	static final NomenclaturalCode nomenclaturalCode = NomenclaturalCode.ICNAFP;
75

    
76
	//ignore null
77
	static final boolean ignoreNull = true;
78
	
79
	static boolean useClassification = true;
80
	
81
	
82
	//filter
83
	static String taxonTable = "v_cdm_exp_taxaAll";
84
	static String classificationQuery = " SELECT DISTINCT t.PTRefFk, r.RefCache FROM PTaxon t INNER JOIN Reference r ON t.PTRefFk = r.RefId WHERE t.PTRefFk = " + sourceSecId; 
85
	static String relPTaxonIdQuery = " SELECT r.RelPTaxonId " + 
86
					" FROM RelPTaxon AS r INNER JOIN v_cdm_exp_taxaDirect AS a ON r.PTNameFk2 = a.PTNameFk AND r.PTRefFk2 = a.PTRefFk ";
87
	static String nameIdTable = " v_cdm_exp_namesAll ";
88
	static String referenceIdTable = " v_cdm_exp_refAll ";
89
	static String factFilter = " factId IN ( SELECT factId FROM v_cdm_exp_factsAll )";
90
	static String authorTeamFilter = null; // " authorTeamId IN (SELECT authorTeamId FROM v_cdm_exp_authorTeamsAll) ";
91
	static String authorFilter = null;  // " authorId IN (SELECT authorId FROM v_cdm_exp_authorsAll) "; 
92
	//not used
93
	static String occurrenceFilter = " occurrenceId IN ( SELECT occurrenceId FROM v_cdm_exp_occurrenceAll )";
94
	static String occurrenceSourceFilter = " occurrenceFk IN ( SELECT occurrenceId FROM v_cdm_exp_occurrenceAll )"; 
95
	static String commonNameFilter = " commonNameId IN ( SELECT commonNameId FROM v_cdm_exp_commonNamesAll )";
96

    
97
	
98
	
99
// **************** ALL *********************	
100

    
101
	//authors
102
	static final boolean doAuthors = true;
103
	//references
104
	static final DO_REFERENCES doReferences =  DO_REFERENCES.ALL;
105
	//names
106
	static final boolean doTaxonNames = true;
107
	static final boolean doRelNames = true;
108
	static final boolean doNameStatus = true;
109
	
110
	//taxa
111
	static final boolean doTaxa = true;
112
	static final boolean doRelTaxa = true;
113
	static final boolean doFacts = true;
114

    
115
	//etc.
116

    
117
	
118
// **************** SELECTED *********************
119

    
120
//	static final boolean doUser = true;
121
//	//authors
122
//	static final boolean doAuthors = false;
123
//	//references
124
//	static final DO_REFERENCES doReferences =  DO_REFERENCES.NONE;
125
//	//names
126
//	static final boolean doTaxonNames = false;
127
//	static final boolean doRelNames = false;
128
//	static final boolean doNameStatus = false;
129
//	static final boolean doTypes = false;
130
//	static final boolean doNameFacts = false;
131
//	
132
//	//taxa 
133
//	static final boolean doTaxa = false;
134
//	static final boolean doRelTaxa = false;
135
//	static final boolean doFacts = false;
136
//	
137
//	//etc.
138
//	static final boolean doMarker = false;
139

    
140
	
141
//******** ALWAYS IGNORE *****************************
142
	
143
	static final boolean doUser = false;
144
	static final boolean doOccurences = false;
145
	static final boolean doCommonNames = false;
146
	static final boolean doTypes = false;  
147
	static final boolean doNameFacts = false;
148
	static final boolean doMarker = false;
149

    
150
	
151
	public void importIopi (Source source, ICdmDataSource destination, DbSchemaValidation hbm2dll){
152
		System.out.println("Start import from BerlinModel("+ berlinModelSource.getDatabase() + ") to " + cdmDestination.getDatabase() + " ...");
153
		//make BerlinModel Source
154
				
155
		BerlinModelImportConfigurator config = BerlinModelImportConfigurator.NewInstance(source,  destination);
156
		
157
		config.setClassificationUuid(classificationUuid);
158
		config.setSourceSecId(sourceSecId);
159
		
160
		config.setNomenclaturalCode(nomenclaturalCode);
161

    
162
		try {
163
			Method makeUrlMethod = this.getClass().getDeclaredMethod("makeUrlForTaxon", TaxonBase.class, ResultSet.class);
164
			config.setMakeUrlForTaxon(makeUrlMethod);
165
		} catch (Exception e) {
166
			e.printStackTrace();
167
			return;
168
		}
169
		
170
		config.setIgnoreNull(ignoreNull);
171
		config.setDoAuthors(doAuthors);
172
		config.setDoReferences(doReferences);
173
		config.setDoTaxonNames(doTaxonNames);
174
		config.setDoRelNames(doRelNames);
175
		config.setDoNameStatus(doNameStatus);
176
		config.setDoTypes(doTypes);
177
		config.setDoNameFacts(doNameFacts);
178
		config.setUseClassification(useClassification);
179
		config.setSourceRefUuid(sourceRefUuid);
180
		
181
		config.setDoTaxa(doTaxa);
182
		config.setDoRelTaxa(doRelTaxa);
183
		config.setDoFacts(doFacts);
184
		config.setDoOccurrence(doOccurences);
185
		config.setDoCommonNames(doCommonNames);
186
		
187
		config.setDoMarker(doMarker);
188
		config.setDoUser(doUser);
189
		config.setEditor(editor);
190
		config.setDbSchemaValidation(hbm2dll);
191
		
192
		// maximum number of name facts to import
193
		config.setMaximumNumberOfNameFacts(maximumNumberOfNameFacts);
194

    
195
		config.setUseSingleClassification(useSingleClassification);
196
		
197
		config.setCheck(check);
198
		config.setEditor(editor);
199
		config.setRecordsPerTransaction(partitionSize);
200
		
201
//		filter
202
		config.setTaxonTable(taxonTable);
203
		config.setClassificationQuery(classificationQuery);
204
		config.setRelTaxaIdQuery(relPTaxonIdQuery);
205
		config.setNameIdTable(nameIdTable);
206
		config.setReferenceIdTable(referenceIdTable);
207
		config.setAuthorTeamFilter(authorTeamFilter);
208
		config.setAuthorFilter(authorFilter);
209
		config.setFactFilter(factFilter);
210
		config.setCommonNameFilter(commonNameFilter);
211
		config.setOccurrenceFilter(occurrenceFilter);
212
		config.setOccurrenceSourceFilter(occurrenceSourceFilter);
213
		config.setUseSingleClassification(useSingleClassification);
214
	
215

    
216
		
217
		// invoke import
218
		CdmDefaultImport<BerlinModelImportConfigurator> bmImport = new CdmDefaultImport<BerlinModelImportConfigurator>();
219
		bmImport.invoke(config);
220
		
221
		System.out.println("End import from BerlinModel ("+ source.getDatabase() + ")...");
222
		
223
	}
224
	
225
	/**
226
	 * @param args
227
	 */
228
	public static void main(String[] args) {
229
		IopiActivator importActivator = new IopiActivator();
230
		Source source = berlinModelSource;
231
		ICdmDataSource cdmRepository = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
232
		
233
		importActivator.importIopi(source, cdmRepository, hbm2dll);
234

    
235
	}
236
	
237
	public static ICdmDataSource cdm_test_local_iopi(){
238
		DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;
239
		String cdmServer = "127.0.0.1";
240
		String cdmDB = "iopi"; 
241
		String cdmUserName = "root";
242
		return CdmDestinations.makeDestination(dbType, cdmServer, cdmDB, -1, cdmUserName, null);
243
	}
244
	
245
	
246
	//for FAUNA Europaea (http://rbg-web2.rbge.org.uk/FE/fe.html)
247
	private static final String URLbase = "http://rbg-web2.rbge.org.uk/cgi-bin/nph-readbtree.pl/feout?FAMILY_XREF=%s&GENUS_XREF=%s&SPECIES_XREF=%s&TAXON_NAME_XREF=%s&RANK=%s";
248
	public static Method makeUrlForTaxon(TaxonBase<?> taxon, ResultSet rs){
249
		Method result = null;
250
		ExtensionType urlExtensionType = ExtensionType.URL();
251
		
252
		String family = "";
253
		String genus = "";
254
		String species = "";
255
		String taxonName = "";
256
		String rankStr = "";
257
			
258
		NonViralName<?>  name = CdmBase.deproxy(taxon.getName(), NonViralName.class);
259
		Rank rank = name.getRank();
260
		rankStr = transformFeRanks(rank);
261
			
262
		
263
		if (rank.equals(Rank.FAMILY())){
264
			family = name.getGenusOrUninomial();
265
			taxonName = name.getGenusOrUninomial();
266
		}else if (rank.isHigher(Rank.GENUS())){
267
			taxonName = name.getGenusOrUninomial();
268
		}else if (rank.isGenus()){
269
			genus = name.getGenusOrUninomial();
270
			rankStr = "genus";
271
		}else if (rank.isInfraGeneric()){
272
			genus = name.getGenusOrUninomial();
273
			taxonName = name.getInfraGenericEpithet();
274
		}else if (rank.isSpecies()){
275
			genus = name.getGenusOrUninomial();
276
			species = name.getSpecificEpithet();
277
			rankStr = "species";
278
		}else if (rank.isInfraSpecific()){
279
			genus = name.getGenusOrUninomial();
280
			species = name.getSpecificEpithet();
281
			taxonName = name.getInfraSpecificEpithet();
282
		}
283
		
284
		
285
		String url = String.format(URLbase ,family, genus, species, taxonName, rankStr);
286
		taxon.addExtension(url, urlExtensionType);
287
		
288
		return result;
289
	}
290
	
291
	private static String transformFeRanks(Rank rank){
292
		if (rank.equals(Rank.SPECIESAGGREGATE())){ return "agg.";
293
		}else if (rank.equals(Rank.CLASS())){ return "Class";
294
		}else if (rank.equals(Rank.DIVISION())){ return "Division";
295
		}else if (rank.equals(Rank.FAMILY())){ return "family";
296
		}else if (rank.equals(Rank.FORM())){ return "forma";
297
		}else if (rank.equals(Rank.GENUS())){ return "genus";
298
		}else if (rank.equals(Rank.GREX())){ return "grex";
299
		}else if (rank.equals(Rank.SPECIESGROUP())){ return "group";
300
		}else if (rank.equals(Rank.ORDER())){ return "Order";
301
//		}else if (rank.equals(Rank.PROL())){ return "proles";
302
//--		}else if (rank.equals(Rank.RACE())){ return "race";
303
		}else if (rank.equals(Rank.SECTION_BOTANY())){ return "Sect.";
304
		}else if (rank.equals(Rank.SERIES())){ return "Ser.";
305
		}else if (rank.equals(Rank.SPECIES())){ return "species";
306
		}else if (rank.equals(Rank.SUBCLASS())){ return "Subclass";
307
		}else if (rank.equals(Rank.SUBDIVISION())){ return "Subdivision";
308
		}else if (rank.equals(Rank.SUBFORM())){ return "Subf.";
309
		}else if (rank.equals(Rank.SUBGENUS())){ return "Subgen.";
310
		}else if (rank.equals(Rank.SUBORDER())){ return "Suborder";
311
		}else if (rank.equals(Rank.SUBSECTION_BOTANY())){ return "Subsect.";
312
		}else if (rank.equals(Rank.SUBSERIES())){ return "Subser.";
313
		}else if (rank.equals(Rank.SUBSPECIES())){ return "subsp";
314
		}else if (rank.equals(Rank.SUBVARIETY())){ return "subvar.";
315
		}else if (rank.equals(Rank.SUPERORDER())){ return "Superorder";
316
		}else if (rank.equals(Rank.TRIBE())){ return "Tribe";
317
		}else if (rank.equals(Rank.VARIETY())){ return "var.";
318
		}else{
319
			logger.debug("Rank not found: " + rank.getTitleCache());
320
			return "";
321
		}	
322
	}
323
	
324

    
325
}
(3-3/5)