minor
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / app / vibrant / IopiActivator.java
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 package eu.etaxonomy.cdm.app.vibrant;
10
11 import java.lang.reflect.Method;
12 import java.sql.ResultSet;
13 import java.util.UUID;
14
15 import org.apache.logging.log4j.LogManager;
16 import org.apache.logging.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.ExtensionType;
30 import eu.etaxonomy.cdm.model.name.INonViralName;
31 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
32 import eu.etaxonomy.cdm.model.name.Rank;
33 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
34
35 /**
36 * TODO add the following to a wiki page:
37 * 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
38 * you must set the mysql system variable lower_case_table_names = 0 in order to create data base with table compatible names.
39 *
40 * @author a.mueller
41 */
42 public class IopiActivator {
43
44 private static final Logger logger = LogManager.getLogger();
45
46 //database validation status (create, update, validate ...)
47 static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
48 static final Source berlinModelSource = BerlinModelSources.iopi();
49
50 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
51 static final ICdmDataSource cdmDestination = cdm_test_local_iopi();
52
53 static final boolean useSingleClassification = true;
54 static final Integer sourceSecId = 1892; //7000000;
55 static final UUID classificationUuid = null; //UUID.fromString("aa3fbaeb-f5dc-4e75-8d60-c8f93beb7ba6");
56
57 static final UUID sourceRefUuid = UUID.fromString("df68c748-3c64-4b96-9a47-db51fb9d387e");
58
59 // set to zero for unlimited nameFacts
60 static final int maximumNumberOfNameFacts = 0;
61
62 static final int partitionSize = 1500;
63
64 //check - import
65 static final CHECK check = CHECK.CHECK_AND_IMPORT;
66
67 //editor - import
68 static final EDITOR editor = EDITOR.EDITOR_AS_EDITOR;
69
70 //NomenclaturalCode
71 static final NomenclaturalCode nomenclaturalCode = NomenclaturalCode.ICNAFP;
72
73 //ignore null
74 static final boolean ignoreNull = true;
75
76 static boolean useClassification = true;
77
78
79 //filter
80 static String taxonTable = "v_cdm_exp_taxaAll";
81 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;
82 static String relPTaxonIdQuery = " SELECT r.RelPTaxonId " +
83 " FROM RelPTaxon AS r INNER JOIN v_cdm_exp_taxaDirect AS a ON r.PTNameFk2 = a.PTNameFk AND r.PTRefFk2 = a.PTRefFk ";
84 static String nameIdTable = " v_cdm_exp_namesAll ";
85 static String referenceIdTable = " v_cdm_exp_refAll ";
86 static String factFilter = " factId IN ( SELECT factId FROM v_cdm_exp_factsAll )";
87 static String authorTeamFilter = null; // " authorTeamId IN (SELECT authorTeamId FROM v_cdm_exp_authorTeamsAll) ";
88 static String authorFilter = null; // " authorId IN (SELECT authorId FROM v_cdm_exp_authorsAll) ";
89 //not used
90 static String occurrenceFilter = " occurrenceId IN ( SELECT occurrenceId FROM v_cdm_exp_occurrenceAll )";
91 static String occurrenceSourceFilter = " occurrenceFk IN ( SELECT occurrenceId FROM v_cdm_exp_occurrenceAll )";
92 static String commonNameFilter = " commonNameId IN ( SELECT commonNameId FROM v_cdm_exp_commonNamesAll )";
93
94
95
96 // **************** ALL *********************
97
98 //authors
99 static final boolean doAuthors = true;
100 //references
101 static final DO_REFERENCES doReferences = DO_REFERENCES.ALL;
102 //names
103 static final boolean doTaxonNames = true;
104 static final boolean doRelNames = true;
105 static final boolean doNameStatus = true;
106
107 //taxa
108 static final boolean doTaxa = true;
109 static final boolean doRelTaxa = true;
110 static final boolean doFacts = true;
111
112 //etc.
113
114
115 // **************** SELECTED *********************
116
117 // static final boolean doUser = true;
118 // //authors
119 // static final boolean doAuthors = false;
120 // //references
121 // static final DO_REFERENCES doReferences = DO_REFERENCES.NONE;
122 // //names
123 // static final boolean doTaxonNames = false;
124 // static final boolean doRelNames = false;
125 // static final boolean doNameStatus = false;
126 // static final boolean doTypes = false;
127 // static final boolean doNameFacts = false;
128 //
129 // //taxa
130 // static final boolean doTaxa = false;
131 // static final boolean doRelTaxa = false;
132 // static final boolean doFacts = false;
133 //
134 // //etc.
135 // static final boolean doMarker = false;
136
137
138 //******** ALWAYS IGNORE *****************************
139
140 static final boolean doUser = false;
141 static final boolean doOccurences = false;
142 static final boolean doCommonNames = false;
143 static final boolean doTypes = false;
144 static final boolean doNameFacts = false;
145 static final boolean doMarker = false;
146
147
148 public void importIopi (Source source, ICdmDataSource destination, DbSchemaValidation hbm2dll){
149 System.out.println("Start import from BerlinModel("+ berlinModelSource.getDatabase() + ") to " + cdmDestination.getDatabase() + " ...");
150 //make BerlinModel Source
151
152 BerlinModelImportConfigurator config = BerlinModelImportConfigurator.NewInstance(source, destination);
153
154 config.setClassificationUuid(classificationUuid);
155 config.setSourceSecId(sourceSecId);
156
157 config.setNomenclaturalCode(nomenclaturalCode);
158
159 try {
160 Method makeUrlMethod = this.getClass().getDeclaredMethod("makeUrlForTaxon", TaxonBase.class, ResultSet.class);
161 config.setMakeUrlForTaxon(makeUrlMethod);
162 } catch (Exception e) {
163 e.printStackTrace();
164 return;
165 }
166
167 config.setIgnoreNull(ignoreNull);
168 config.setDoAuthors(doAuthors);
169 config.setDoReferences(doReferences);
170 config.setDoTaxonNames(doTaxonNames);
171 config.setDoRelNames(doRelNames);
172 config.setDoNameStatus(doNameStatus);
173 config.setDoTypes(doTypes);
174 config.setDoNameFacts(doNameFacts);
175 config.setUseClassification(useClassification);
176 config.setSourceRefUuid(sourceRefUuid);
177
178 config.setDoTaxa(doTaxa);
179 config.setDoRelTaxa(doRelTaxa);
180 config.setDoFacts(doFacts);
181 config.setDoOccurrence(doOccurences);
182 config.setDoCommonNames(doCommonNames);
183
184 config.setDoMarker(doMarker);
185 config.setDoUser(doUser);
186 config.setEditor(editor);
187 config.setDbSchemaValidation(hbm2dll);
188
189 // maximum number of name facts to import
190 config.setMaximumNumberOfNameFacts(maximumNumberOfNameFacts);
191
192 config.setUseSingleClassification(useSingleClassification);
193
194 config.setCheck(check);
195 config.setEditor(editor);
196 config.setRecordsPerTransaction(partitionSize);
197
198 // filter
199 config.setTaxonTable(taxonTable);
200 config.setClassificationQuery(classificationQuery);
201 config.setRelTaxaIdQuery(relPTaxonIdQuery);
202 config.setNameIdTable(nameIdTable);
203 config.setReferenceIdTable(referenceIdTable);
204 config.setAuthorTeamFilter(authorTeamFilter);
205 config.setAuthorFilter(authorFilter);
206 config.setFactFilter(factFilter);
207 config.setCommonNameFilter(commonNameFilter);
208 config.setOccurrenceFilter(occurrenceFilter);
209 config.setOccurrenceSourceFilter(occurrenceSourceFilter);
210 config.setUseSingleClassification(useSingleClassification);
211
212
213
214 // invoke import
215 CdmDefaultImport<BerlinModelImportConfigurator> bmImport = new CdmDefaultImport<BerlinModelImportConfigurator>();
216 bmImport.invoke(config);
217
218 System.out.println("End import from BerlinModel ("+ source.getDatabase() + ")...");
219
220 }
221
222 /**
223 * @param args
224 */
225 public static void main(String[] args) {
226 IopiActivator importActivator = new IopiActivator();
227 Source source = berlinModelSource;
228 ICdmDataSource cdmRepository = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
229
230 importActivator.importIopi(source, cdmRepository, hbm2dll);
231
232 }
233
234 public static ICdmDataSource cdm_test_local_iopi(){
235 DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;
236 String cdmServer = "127.0.0.1";
237 String cdmDB = "iopi";
238 String cdmUserName = "root";
239 return CdmDestinations.makeDestination(dbType, cdmServer, cdmDB, -1, cdmUserName, null);
240 }
241
242
243 //for FAUNA Europaea (http://rbg-web2.rbge.org.uk/FE/fe.html)
244 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";
245 public static Method makeUrlForTaxon(TaxonBase<?> taxon, ResultSet rs){
246 Method result = null;
247 ExtensionType urlExtensionType = ExtensionType.URL();
248
249 String family = "";
250 String genus = "";
251 String species = "";
252 String taxonName = "";
253 String rankStr = "";
254
255 INonViralName name = taxon.getName();
256 Rank rank = name.getRank();
257 rankStr = transformFeRanks(rank);
258
259
260 if (rank.equals(Rank.FAMILY())){
261 family = name.getGenusOrUninomial();
262 taxonName = name.getGenusOrUninomial();
263 }else if (rank.isSupraGeneric()){
264 taxonName = name.getGenusOrUninomial();
265 }else if (rank.isGenus()){
266 genus = name.getGenusOrUninomial();
267 rankStr = "genus";
268 }else if (rank.isInfraGeneric()){
269 genus = name.getGenusOrUninomial();
270 taxonName = name.getInfraGenericEpithet();
271 }else if (rank.isSpecies()){
272 genus = name.getGenusOrUninomial();
273 species = name.getSpecificEpithet();
274 rankStr = "species";
275 }else if (rank.isInfraSpecific()){
276 genus = name.getGenusOrUninomial();
277 species = name.getSpecificEpithet();
278 taxonName = name.getInfraSpecificEpithet();
279 }
280
281
282 String url = String.format(URLbase ,family, genus, species, taxonName, rankStr);
283 taxon.addExtension(url, urlExtensionType);
284
285 return result;
286 }
287
288 private static String transformFeRanks(Rank rank){
289 if (rank.equals(Rank.SPECIESAGGREGATE())){ return "agg.";
290 }else if (rank.equals(Rank.CLASS())){ return "Class";
291 }else if (rank.equals(Rank.DIVISION())){ return "Division";
292 }else if (rank.equals(Rank.FAMILY())){ return "family";
293 }else if (rank.equals(Rank.FORM())){ return "forma";
294 }else if (rank.equals(Rank.GENUS())){ return "genus";
295 }else if (rank.equals(Rank.GREX_INFRASPEC())){ return "grex";
296 }else if (rank.equals(Rank.SPECIESGROUP())){ return "group";
297 }else if (rank.equals(Rank.ORDER())){ return "Order";
298 // }else if (rank.equals(Rank.PROL())){ return "proles";
299 //-- }else if (rank.equals(Rank.RACE())){ return "race";
300 }else if (rank.equals(Rank.SECTION_BOTANY())){ return "Sect.";
301 }else if (rank.equals(Rank.SERIES())){ return "Ser.";
302 }else if (rank.equals(Rank.SPECIES())){ return "species";
303 }else if (rank.equals(Rank.SUBCLASS())){ return "Subclass";
304 }else if (rank.equals(Rank.SUBDIVISION())){ return "Subdivision";
305 }else if (rank.equals(Rank.SUBFORM())){ return "Subf.";
306 }else if (rank.equals(Rank.SUBGENUS())){ return "Subgen.";
307 }else if (rank.equals(Rank.SUBORDER())){ return "Suborder";
308 }else if (rank.equals(Rank.SUBSECTION_BOTANY())){ return "Subsect.";
309 }else if (rank.equals(Rank.SUBSERIES())){ return "Subser.";
310 }else if (rank.equals(Rank.SUBSPECIES())){ return "subsp";
311 }else if (rank.equals(Rank.SUBVARIETY())){ return "subvar.";
312 }else if (rank.equals(Rank.SUPERORDER())){ return "Superorder";
313 }else if (rank.equals(Rank.TRIBE())){ return "Tribe";
314 }else if (rank.equals(Rank.VARIETY())){ return "var.";
315 }else{
316 logger.debug("Rank not found: " + rank.getTitleCache());
317 return "";
318 }
319 }
320
321
322 }