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