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