minor
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / app / eflora / FloraMalesianaActivator.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
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.Reference;
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 // static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();
57
58
59 //feature tree uuid
60 public static final UUID featureTreeUuid = UUID.fromString("168df0c6-6429-484c-b26f-ded1f7e44bd9");
61
62 //classification
63 static final UUID classificationUuid = UUID.fromString("ca4e4bcb-a1d1-4124-a358-a3d3c41dd450");
64
65 //check - import
66 static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
67
68 static boolean doPrintKeys = false;
69
70 //taxa
71 static final boolean doTaxa = true;
72
73 private boolean includeSapindaceae1 = true;
74 private boolean includeSapindaceae2 = true;
75 private boolean includeVol13_1 = false;
76 private boolean includeVol13_2 = false;
77
78
79 private void doImport(ICdmDataSource cdmDestination){
80
81 //make Source
82 URI source = fmSource1;
83 EfloraImportConfigurator floraMalesianaConfig= EfloraImportConfigurator.NewInstance(source, cdmDestination);
84 floraMalesianaConfig.setClassificationUuid(classificationUuid);
85 floraMalesianaConfig.setDoTaxa(doTaxa);
86 floraMalesianaConfig.setCheck(check);
87 floraMalesianaConfig.setDoPrintKeys(doPrintKeys);
88 floraMalesianaConfig.setDbSchemaValidation(hbm2dll);
89
90 CdmDefaultImport<EfloraImportConfigurator> myImport = new CdmDefaultImport<EfloraImportConfigurator>();
91
92
93 //Sapindaceae1
94 if (includeSapindaceae1){
95 System.out.println("Start import from ("+ fmSource1.toString() + ") ...");
96 floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Sapindaceae I"));
97 myImport.invoke(floraMalesianaConfig);
98 System.out.println("End import from ("+ fmSource1.toString() + ")...");
99 }
100
101 //Sapindaceae2
102 if (includeSapindaceae2){
103 System.out.println("\nStart import from ("+ fmSource2.toString() + ") ...");
104 source = fmSource2;
105 floraMalesianaConfig.setSource(source);
106 floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Sapindaceae II"));
107 myImport.invoke(floraMalesianaConfig);
108 System.out.println("End import from ("+ fmSource2.toString() + ")...");
109 }
110
111 floraMalesianaConfig.setSourceReference(getSourceReference("Flora Malesiana - Vol. 13"));
112 //Vol13_1
113 if (includeVol13_1){
114 System.out.println("\nStart import from ("+ fmSource13_1.toString() + ") ...");
115 source = fmSource13_1;
116 floraMalesianaConfig.setSource(source);
117 myImport.invoke(floraMalesianaConfig);
118 System.out.println("End import from ("+ fmSource13_1.toString() + ")...");
119 }
120
121 //Vol13_2
122 if (includeVol13_2){
123 System.out.println("\nStart import from ("+ fmSource13_2.toString() + ") ...");
124 source = fmSource13_2;
125 floraMalesianaConfig.setSource(source);
126 myImport.invoke(floraMalesianaConfig);
127 System.out.println("End import from ("+ fmSource13_2.toString() + ")...");
128 }
129
130 FeatureTree tree = makeFeatureNode(myImport.getCdmAppController().getTermService());
131 myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
132
133 //check keys
134 if (doPrintKeys){
135 TransactionStatus tx = myImport.getCdmAppController().startTransaction();
136 List<PolytomousKey> keys = myImport.getCdmAppController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null);
137 for(PolytomousKey key : keys){
138 key.print(System.out);
139 System.out.println();
140 }
141 myImport.getCdmAppController().commitTransaction(tx);
142 }
143
144 }
145
146 private Reference getSourceReference(String string) {
147 Reference result = ReferenceFactory.newGeneric();
148 result.setTitleCache(string);
149 return result;
150 }
151
152 private FeatureTree makeFeatureNode(ITermService service){
153 FloraMalesianaTransformer transformer = new FloraMalesianaTransformer();
154
155 FeatureTree result = FeatureTree.NewInstance(featureTreeUuid);
156 result.setTitleCache("Flora Malesiana Presentation Feature Tree");
157 FeatureNode root = result.getRoot();
158 FeatureNode newNode;
159
160 newNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
161 root.addChild(newNode);
162
163 addFeataureNodesByStringList(descriptionFeatureList, newNode, transformer, service);
164
165 addFeataureNodesByStringList(generellDescriptionsList, root, transformer, service);
166
167
168 newNode = FeatureNode.NewInstance(Feature.DISTRIBUTION());
169 root.addChild(newNode);
170
171 newNode = FeatureNode.NewInstance(Feature.ECOLOGY());
172 root.addChild(newNode);
173 addFeataureNodesByStringList(habitatEcologyList, root, transformer, service);
174
175 newNode = FeatureNode.NewInstance(Feature.USES());
176 root.addChild(newNode);
177
178 addFeataureNodesByStringList(chomosomesList, root, transformer, service);
179
180 newNode = FeatureNode.NewInstance(Feature.CITATION());
181 root.addChild(newNode);
182
183 return result;
184 }
185
186 private static String [] chomosomesList = new String[]{
187 "Chromosomes",
188 };
189
190
191 private static String [] habitatEcologyList = new String[]{
192 "Habitat",
193 "Habitat & Ecology"
194 };
195
196
197 private static String [] generellDescriptionsList = new String[]{
198 "Fossils",
199 "Morphology and anatomy",
200 "Morphology",
201 "Vegetative morphology and anatomy",
202 "Flower morphology",
203 "Palynology",
204 "Pollination",
205 "Pollen morphology",
206 "Life cycle",
207 "Fruits and embryology",
208 "Dispersal",
209 "Wood anatomy",
210 "Leaf anatomy",
211 "Chromosome numbers",
212 "Phytochemistry and Chemotaxonomy",
213 "Phytochemistry",
214 "Taxonomy",
215 };
216
217 private static String [] descriptionFeatureList = new String[]{
218 "lifeform",
219 "Bark",
220 "Indumentum",
221 "endophytic body",
222 "flowering buds",
223 "Branchlets",
224 "Branches",
225 "Branch",
226 "Flowering branchlets",
227 "Trees",
228 "Twigs",
229 "stem",
230 "Stems",
231 "stem leaves",
232 "Leaves",
233 "flower-bearing stems",
234 "Petiole",
235 "Petiolules",
236 "Leaflets",
237 "Thyrsus",
238 "Thyrses",
239 "Inflorescences",
240 "Inflorescence",
241 "Young inflorescences",
242 "Bracts",
243 "Pedicels",
244 "flowering buds",
245 "scales",
246 "Buds",
247 "Flowers",
248 "Flower",
249 "Flowering",
250 "Stigma",
251 "perianth",
252 "Sepals",
253 "Sepal",
254 "Outer Sepals",
255 "Axillary",
256 "cymes",
257 "Calyx",
258 "Petal",
259 "Petals",
260 "perigone tube",
261 "Disc",
262 "corolla",
263 "Stamens",
264 "Staminodes",
265 "Ovary",
266 "Anthers",
267 "anther",
268 "Pistil",
269 "Pistillode",
270 "Ovules",
271 "androecium",
272 "gynoecium",
273 "Filaments",
274 "Style",
275 "annulus",
276 "female flowers",
277 "Male flowers",
278 "Female",
279 "Infructescences", //order not consistent (sometimes before "Flowers")
280 "Fruit",
281 "Fruits",
282 "fruiting axes",
283 "drupes",
284 "Arillode",
285 "seed",
286 "Seeds",
287 "Seedling",
288 "flower tube",
289 "nutlets",
290 "pollen",
291 "secondary xylem",
292 "chromosome number",
293
294 "figure",
295 "fig",
296 "figs",
297
298
299
300
301 };
302
303 public void addFeataureNodesByStringList(String[] featureStringList, FeatureNode root, IInputTransformer transformer, ITermService termService){
304 try {
305 for (String featureString : featureStringList){
306 UUID featureUuid;
307 featureUuid = transformer.getFeatureUuid(featureString);
308 Feature feature = (Feature)termService.find(featureUuid);
309 if (feature != null){
310 FeatureNode child = FeatureNode.NewInstance(feature);
311 root.addChild(child);
312 }
313 }
314 } catch (UndefinedTransformerMethodException e) {
315 logger.error("getFeatureUuid is not implemented in transformer. Features could not be added");
316 }
317 }
318
319
320
321 /**
322 * @param args
323 */
324 public static void main(String[] args) {
325 FloraMalesianaActivator me = new FloraMalesianaActivator();
326 me.doImport(cdmDestination);
327 }
328
329 }