b7b104841af3e1794e4a5894c2cdd67e1e896816
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / test / function / TestDatabase.java
1 /* just for testing */
2 /**
3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.cdm.test.function;
12
13 import static org.junit.Assert.assertNotNull;
14
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import junit.framework.Assert;
21
22 import org.apache.log4j.Logger;
23 import org.hibernate.mapping.Column;
24 import org.junit.Test;
25 import org.springframework.core.io.ClassPathResource;
26 import org.springframework.core.io.Resource;
27
28 import eu.etaxonomy.cdm.api.application.CdmApplicationController;
29 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
30 import eu.etaxonomy.cdm.common.AccountStore;
31 import eu.etaxonomy.cdm.common.CdmUtils;
32 import eu.etaxonomy.cdm.database.CdmDataSource;
33 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
34 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
35 import eu.etaxonomy.cdm.database.DatabaseTypeEnum;
36 import eu.etaxonomy.cdm.database.DbSchemaValidation;
37 import eu.etaxonomy.cdm.database.ICdmDataSource;
38 import eu.etaxonomy.cdm.model.agent.AgentBase;
39 import eu.etaxonomy.cdm.model.agent.Contact;
40 import eu.etaxonomy.cdm.model.agent.Person;
41 import eu.etaxonomy.cdm.model.common.Annotation;
42 import eu.etaxonomy.cdm.model.common.AnnotationType;
43 import eu.etaxonomy.cdm.model.common.Language;
44 import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;
45 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
46 import eu.etaxonomy.cdm.model.description.DescriptionBase;
47 import eu.etaxonomy.cdm.model.description.Feature;
48 import eu.etaxonomy.cdm.model.description.TaxonDescription;
49 import eu.etaxonomy.cdm.model.description.TextData;
50 import eu.etaxonomy.cdm.model.name.BotanicalName;
51 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
52 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
53 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
54 import eu.etaxonomy.cdm.model.name.Rank;
55 import eu.etaxonomy.cdm.model.reference.Journal;
56 import eu.etaxonomy.cdm.model.taxon.Taxon;
57 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
58
59
60 public class TestDatabase {
61 private static final Logger logger = Logger.getLogger(TestDatabase.class);
62
63 private void test(){
64 System.out.println("Start TestDatabase");
65 //testNewDatabaseConnection();
66 //testFacts();
67 // testNewDatasourceClass();
68 testHybridRelationships();
69 // testPaddie();
70 System.out.println("\nEnd TestDatabase");
71 }
72
73 public void testNewDatabaseConnection(){
74 try {
75
76 Column coL;
77 boolean omitTermLoading = false;
78 Resource applicationContextResource = new ClassPathResource(CdmApplicationController.DEFAULT_APPLICATION_CONTEXT_RESOURCE);
79 CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewDefaultInstance();
80 CdmApplicationController appCtr = CdmApplicationController.NewInstance(applicationContextResource, dataSource, DbSchemaValidation.CREATE, omitTermLoading);
81 appCtr.NewConversation();
82 appCtr.NewConversation();
83
84 //CdmApplicationController appCtr = CdmApplicationController.NewInstance(DbSchemaValidation.CREATE);
85 appCtr.close();
86 } catch (DataSourceNotFoundException e) {
87 logger.error("datasource error");
88 } catch (TermNotFoundException e) {
89 logger.error("defined terms not found");
90 }
91 }
92
93 public void testNewDatasourceClass(){
94 try {
95 // String server = "192.168.2.10";
96 // String database = "cdm_test_andreasM";
97 // String username = "edit";
98 // String password = CdmUtils.readInputLine("Password: ");
99 DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;
100
101 // ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
102 ICdmDataSource datasource = CdmDataSource.NewH2EmbeddedInstance("CDM", "sa", "", null);
103 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
104
105 Rank genus = Rank.GENUS();
106 BotanicalName botanicalName = BotanicalName.NewInstance(genus);
107 botanicalName.setGenusOrUninomial("GenusName");
108
109 Journal journal = Journal.NewInstance();
110 journal.setTitleCache("Afro+Doc");
111
112 // Taxon taxon = Taxon.NewInstance(botanicalName, journal);
113 // Taxon taxon2 = Taxon.NewInstance(botanicalName2, null);
114 // botanicalName.getTitleCache();
115
116 Taxon taxon1 = Taxon.NewInstance(botanicalName,journal);
117 appCtr.getTaxonService().save(taxon1);
118 BotanicalName homotypName = BotanicalName.NewInstance(Rank.SUBGENUS(), botanicalName.getHomotypicalGroup());
119 homotypName.setGenusOrUninomial("Subgenus");
120 homotypName.setInfraGenericEpithet("homotyp");
121
122 //Synonym synonym = Synonym.NewInstance(homotypName, journal);
123
124 System.out.println("Taxa of " + botanicalName + ": " + botanicalName.getTaxonBases());
125 System.out.println("Synonyms of " + homotypName + ": " + homotypName.getSynonyms());
126
127 HomotypicalGroup homotypicalGroup = taxon1.getHomotypicGroup();
128 System.out.println("HomotypicNames of " + botanicalName + ":" + homotypicalGroup.getTypifiedNames());
129 System.out.println("HomotypicSynonymsByGroup of " + taxon1 + ":" + taxon1.getHomotypicSynonymsByHomotypicGroup());
130 System.out.println("HomotypicSynonymsBySynonymy of " + taxon1 + ":" + taxon1.getHomotypicSynonymsByHomotypicRelationship());
131
132 // appCtr.getTaxonService().saveTaxon(taxon2);
133 // appCtr.getTaxonService().saveTaxon(taxon);
134
135 appCtr.close();
136
137 } catch (DataSourceNotFoundException e) {
138 logger.error("datasource error");
139 } catch (TermNotFoundException e) {
140 logger.error("defined terms not found");
141 }
142 }
143
144
145 public void testFacts(){
146 try {
147 String server = "192.168.2.10";
148 String database = "cdm_test_andreasM";
149 String username = "edit";
150 String password = CdmUtils.readInputLine("Password: ");
151 DbSchemaValidation dbSchemaValidation = DbSchemaValidation.VALIDATE;
152 ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
153 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
154
155 Rank genus = Rank.GENUS();
156 BotanicalName botanicalName = BotanicalName.NewInstance(genus);
157 botanicalName.setGenusOrUninomial("GenusName");
158
159 Journal journal = Journal.NewInstance();
160 journal.setTitleCache("Afro+Doc");
161
162 Taxon taxon = Taxon.NewInstance(botanicalName,journal);
163 appCtr.getTaxonService().save(taxon);
164
165 TaxonDescription taxonDescription = TaxonDescription.NewInstance();
166 taxon.addDescription(taxonDescription);
167
168 //textData
169 TextData textData = TextData.NewInstance();
170 textData.putText("XXX", Language.DEFAULT());
171 taxonDescription.addElement(textData);
172
173 //commonNames
174 String commonNameString;
175 if (taxon.getName() != null){
176 commonNameString = "Common " + taxon.getName().getTitleCache();
177 }else{
178 commonNameString = "Common (null)";
179 }
180 CommonTaxonName commonName = CommonTaxonName.NewInstance(commonNameString, Language.DEFAULT());
181 taxonDescription.addElement(commonName);
182
183 //save
184 appCtr.getTaxonService().save(taxon);
185
186
187 appCtr.close();
188
189 } catch (DataSourceNotFoundException e) {
190 logger.error("datasource error");
191 } catch (TermNotFoundException e) {
192 logger.error("defined terms not found");
193 }
194 }
195
196
197 public void testHybridRelationships(){
198 try {
199 // String database = "cdm";
200 // String username = "sa";
201
202 String server = "192.168.2.10";
203 String database = "cdm_test_andreasM";
204 String username = "edit";
205 String password = CdmUtils.readInputLine("Password: ");
206 DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;
207 ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
208 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
209
210 Rank genus = Rank.GENUS();
211 BotanicalName parentName = BotanicalName.NewInstance(genus);
212 parentName.setGenusOrUninomial("parent");
213
214 BotanicalName childName = BotanicalName.NewInstance(genus);
215 childName.setGenusOrUninomial("child");
216 parentName.addHybridChild(childName, HybridRelationshipType.FIRST_PARENT(), null);
217
218 //save
219 appCtr.getNameService().save(parentName);
220
221
222 appCtr.close();
223
224 } catch (DataSourceNotFoundException e) {
225 logger.error("datasource error");
226 } catch (TermNotFoundException e) {
227 logger.error("defined terms not found");
228 }
229 }
230
231 public void testPaddie(){
232
233
234 try {
235 String server = "PADDIE";
236 String database = "edit_test";
237 String username = "andreas";
238 String password = CdmUtils.readInputLine("Password: ");
239 DbSchemaValidation validation = DbSchemaValidation.VALIDATE;
240 ICdmDataSource datasource = CdmDataSource.NewSqlServer2005Instance(server, database, -1, username, password, null);
241 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, validation);
242
243 Rank genus = Rank.GENUS();
244 BotanicalName botanicalName = BotanicalName.NewInstance(genus);
245 botanicalName.setGenusOrUninomial("GenusName");
246
247 Journal journal = Journal.NewInstance();
248 journal.setTitle("JournalTitel");
249
250 // Taxon taxon = Taxon.NewInstance(botanicalName, journal);
251 // Taxon taxon2 = Taxon.NewInstance(botanicalName2, null);
252 // botanicalName.getTitleCache();
253 Rank.SPECIES();
254 appCtr.getNameService().save(botanicalName);
255
256 // appCtr.getTaxonService().saveTaxon(taxon2);
257 // appCtr.getTaxonService().saveTaxon(taxon);
258
259 appCtr.close();
260 } catch (DataSourceNotFoundException e) {
261 logger.error("datasource error");
262 } catch (TermNotFoundException e) {
263 logger.error("defined terms not found");
264 }
265 }
266
267
268 public void testContact(){
269 try {
270 // String server = "192.168.2.10";
271 // String database = "cdm_test_andreasM";
272 // String username = "edit";
273 // String password = CdmUtils.readInputLine("Password: ");
274 DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;
275
276 // ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
277 //ICdmDataSource datasource = CdmDataSource.NewH2EmbeddedInstance("CDM", "sa", "");
278 ICdmDataSource datasource = cdm_test_anahit2();
279 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
280 AgentBase person = Person.NewTitledInstance("TestPerson");
281 Contact contact1 = new Contact();
282 Set<String> set = new HashSet<String>();
283 set.add("email1");
284 set.add("c@d.org");
285 // contact1.setEmail(set);
286 // person.setContact(contact1);
287 appCtr.getAgentService().save(person);
288 appCtr.close();
289 System.out.println("End");
290 } catch (DataSourceNotFoundException e) {
291 logger.error("datasource error");
292 } catch (TermNotFoundException e) {
293 logger.error("defined terms not found");
294 }
295 }
296
297
298 public void testNewVersion(){
299 try {
300 System.out.println("Start");
301 DbSchemaValidation dbSchemaValidation = DbSchemaValidation.CREATE;
302
303 // ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
304 ICdmDataSource datasource = CdmDataSource.NewH2EmbeddedInstance("CDM", "sa", "", null);
305 CdmApplicationController appCtr = CdmApplicationController.NewInstance(datasource, dbSchemaValidation);
306 BotanicalName botName = BotanicalName.NewInstance(Rank.SPECIES());
307 botName.setGenusOrUninomial("Genus");
308 botName.setSpecificEpithet("species");
309 appCtr.getNameService().save(botName);
310 List<?> names = appCtr.getNameService().findNamesByTitle("Genus species");
311
312 names.size();
313 // AgentBase person = Person.NewTitledInstance("TestPerson");
314 // Contact contact1 = new Contact();
315 // Set<String> set = new HashSet<String>();
316 // set.add("email1");
317 // set.add("c@d.org");
318 //// contact1.setEmail(set);
319 // person.setContact(contact1);
320 // appCtr.getAgentService().save(person);
321 appCtr.close();
322 System.out.println("End");
323 } catch (DataSourceNotFoundException e) {
324 logger.error("datasource error");
325 } catch (TermNotFoundException e) {
326 logger.error("defined terms not found");
327 }
328 }
329
330 public void testDataSourceWithNomenclaturalCode(){
331 String dataSourceName = "test";
332 NomenclaturalCode code = NomenclaturalCode.ICZN;
333 // ICdmDataSource dataSource = CdmDataSource.NewH2EmbeddedInstance("test", "sa", "", code);
334 String password = CdmUtils.readInputLine("Password: ");
335 ICdmDataSource dataSource = CdmDataSource.NewMySqlInstance("192.168.2.10", "cdm_test_niels2", 3306, "edit", password, code);
336 CdmPersistentDataSource.save(dataSourceName, dataSource);
337
338 try {
339 CdmPersistentDataSource loadedDataSource = CdmPersistentDataSource.NewInstance(dataSourceName);
340 // CdmApplicationController.NewInstance(loadedDataSource, DbSchemaValidation.CREATE);
341
342 NomenclaturalCode loadedCode = loadedDataSource.getNomenclaturalCode();
343 Assert.assertEquals(code, loadedCode);
344
345 CdmPersistentDataSource.delete(loadedDataSource);
346
347 } catch (DataSourceNotFoundException e) {
348 // TODO Auto-generated catch block
349 e.printStackTrace();
350 }
351
352
353 }
354
355 public void testLoadedAnnotationGetAnnotatedObjectCall(){
356 String password = CdmUtils.readInputLine("Password: ");
357 ICdmDataSource dataSource = CdmDataSource.NewMySqlInstance("192.168.2.10", "cdm_test_niels2", 3306, "edit", password, NomenclaturalCode.ICBN);
358 try {
359 CdmApplicationController appCtr = CdmApplicationController.NewInstance(dataSource, DbSchemaValidation.UPDATE);
360
361 ConversationHolder conversation = appCtr.NewConversation();
362
363 // make the taxon and description elements
364 Taxon taxon = Taxon.NewInstance(null, null);
365
366 TaxonDescription taxonDescription = TaxonDescription.NewInstance(taxon);
367
368 UUID taxonDescriptionUuid = taxonDescription.getUuid();
369
370 Feature featureAnatomy = Feature.ANATOMY();
371
372 TextData textData = TextData.NewInstance();
373 textData.addAnnotation(Annotation.NewInstance(null, null));
374
375 assertNotNull(textData.getAnnotations().iterator().next().getAnnotatedObj());
376
377 textData.setFeature(featureAnatomy);
378
379 taxonDescription.addElement(textData);
380
381 appCtr.getTaxonService().save(taxon);
382
383 conversation.commit(false);
384 // end of creation phase
385
386
387 // load the new taxon in a new conversation to assure that it was loaded into a new session
388 // if you are willing to blame it on conversations, please rewrite into two methods
389 // the result will be the same
390 ConversationHolder newConversation = appCtr.NewConversation();
391 DescriptionBase loadedDescription = appCtr.getDescriptionService().load(taxonDescriptionUuid);
392
393 TextData descriptionElement = (TextData) loadedDescription.getElements().iterator().next();
394
395 Annotation annotation = descriptionElement.getAnnotations().iterator().next();
396
397 // this should not be null
398 assertNotNull(annotation.getAnnotatedObj());
399
400
401 } catch (DataSourceNotFoundException e) {
402 // TODO Auto-generated catch block
403 e.printStackTrace();
404 } catch (TermNotFoundException e) {
405 // TODO Auto-generated catch block
406 e.printStackTrace();
407 }
408
409 }
410
411
412 public static ICdmDataSource cdm_test_anahit2(){
413 DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;
414 String cdmServer = "192.168.2.10";
415 String cdmDB = "cdm_test_anahit2";
416 String cdmUserName = "edit";
417 return makeDestination(cdmServer, cdmDB, -1, cdmUserName, null);
418 }
419
420 /**
421 * initializes source
422 * @return true, if connection establisehd
423 */
424 private static ICdmDataSource makeDestination(String cdmServer, String cdmDB, int port, String cdmUserName, String pwd ){
425 //establish connection
426 pwd = AccountStore.readOrStorePassword(cdmServer, cdmDB, cdmUserName, pwd);
427 //TODO not MySQL
428 ICdmDataSource destination = CdmDataSource.NewMySqlInstance(cdmServer, cdmDB, port, cdmUserName, pwd, null);
429 return destination;
430
431 }
432
433 /**
434 * @param args
435 */
436 public static void main(String[] args) {
437 TestDatabase sc = new TestDatabase();
438 // sc.testNewDatabaseConnection();
439 // sc.testDataSourceWithNomenclaturalCode();
440 sc.testLoadedAnnotationGetAnnotatedObjectCall();
441 }
442
443 }