(no commit message)
[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.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 }