3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.cdm
.test
.function
;
13 import static org
.junit
.Assert
.assertNotNull
;
15 import java
.util
.HashSet
;
16 import java
.util
.List
;
18 import java
.util
.UUID
;
20 import junit
.framework
.Assert
;
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
;
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
;
60 public class TestDatabase
{
61 private static final Logger logger
= Logger
.getLogger(TestDatabase
.class);
64 System
.out
.println("Start TestDatabase");
65 //testNewDatabaseConnection();
67 // testNewDatasourceClass();
68 testHybridRelationships();
70 System
.out
.println("\nEnd TestDatabase");
73 public void testNewDatabaseConnection(){
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();
84 //CdmApplicationController appCtr = CdmApplicationController.NewInstance(DbSchemaValidation.CREATE);
86 } catch (DataSourceNotFoundException e
) {
87 logger
.error("datasource error");
88 } catch (TermNotFoundException e
) {
89 logger
.error("defined terms not found");
93 public void testNewDatasourceClass(){
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
;
101 // ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, database, username, password);
102 ICdmDataSource datasource
= CdmDataSource
.NewH2EmbeddedInstance("CDM", "sa", "", null);
103 CdmApplicationController appCtr
= CdmApplicationController
.NewInstance(datasource
, dbSchemaValidation
);
105 Rank genus
= Rank
.GENUS();
106 BotanicalName botanicalName
= BotanicalName
.NewInstance(genus
);
107 botanicalName
.setGenusOrUninomial("GenusName");
109 Journal journal
= Journal
.NewInstance();
110 journal
.setTitleCache("Afro+Doc");
112 // Taxon taxon = Taxon.NewInstance(botanicalName, journal);
113 // Taxon taxon2 = Taxon.NewInstance(botanicalName2, null);
114 // botanicalName.getTitleCache();
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");
122 //Synonym synonym = Synonym.NewInstance(homotypName, journal);
124 System
.out
.println("Taxa of " + botanicalName
+ ": " + botanicalName
.getTaxonBases());
125 System
.out
.println("Synonyms of " + homotypName
+ ": " + homotypName
.getSynonyms());
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());
132 // appCtr.getTaxonService().saveTaxon(taxon2);
133 // appCtr.getTaxonService().saveTaxon(taxon);
137 } catch (DataSourceNotFoundException e
) {
138 logger
.error("datasource error");
139 } catch (TermNotFoundException e
) {
140 logger
.error("defined terms not found");
145 public void testFacts(){
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
);
155 Rank genus
= Rank
.GENUS();
156 BotanicalName botanicalName
= BotanicalName
.NewInstance(genus
);
157 botanicalName
.setGenusOrUninomial("GenusName");
159 Journal journal
= Journal
.NewInstance();
160 journal
.setTitleCache("Afro+Doc");
162 Taxon taxon
= Taxon
.NewInstance(botanicalName
,journal
);
163 appCtr
.getTaxonService().save(taxon
);
165 TaxonDescription taxonDescription
= TaxonDescription
.NewInstance();
166 taxon
.addDescription(taxonDescription
);
169 TextData textData
= TextData
.NewInstance();
170 textData
.putText("XXX", Language
.DEFAULT());
171 taxonDescription
.addElement(textData
);
174 String commonNameString
;
175 if (taxon
.getName() != null){
176 commonNameString
= "Common " + taxon
.getName().getTitleCache();
178 commonNameString
= "Common (null)";
180 CommonTaxonName commonName
= CommonTaxonName
.NewInstance(commonNameString
, Language
.DEFAULT());
181 taxonDescription
.addElement(commonName
);
184 appCtr
.getTaxonService().save(taxon
);
189 } catch (DataSourceNotFoundException e
) {
190 logger
.error("datasource error");
191 } catch (TermNotFoundException e
) {
192 logger
.error("defined terms not found");
197 public void testHybridRelationships(){
199 // String database = "cdm";
200 // String username = "sa";
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
);
210 Rank genus
= Rank
.GENUS();
211 BotanicalName parentName
= BotanicalName
.NewInstance(genus
);
212 parentName
.setGenusOrUninomial("parent");
214 BotanicalName childName
= BotanicalName
.NewInstance(genus
);
215 childName
.setGenusOrUninomial("child");
216 parentName
.addHybridChild(childName
, HybridRelationshipType
.FIRST_PARENT(), null);
219 appCtr
.getNameService().save(parentName
);
224 } catch (DataSourceNotFoundException e
) {
225 logger
.error("datasource error");
226 } catch (TermNotFoundException e
) {
227 logger
.error("defined terms not found");
231 public void testPaddie(){
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
);
243 Rank genus
= Rank
.GENUS();
244 BotanicalName botanicalName
= BotanicalName
.NewInstance(genus
);
245 botanicalName
.setGenusOrUninomial("GenusName");
247 Journal journal
= Journal
.NewInstance();
248 journal
.setTitle("JournalTitel");
250 // Taxon taxon = Taxon.NewInstance(botanicalName, journal);
251 // Taxon taxon2 = Taxon.NewInstance(botanicalName2, null);
252 // botanicalName.getTitleCache();
254 appCtr
.getNameService().save(botanicalName
);
256 // appCtr.getTaxonService().saveTaxon(taxon2);
257 // appCtr.getTaxonService().saveTaxon(taxon);
260 } catch (DataSourceNotFoundException e
) {
261 logger
.error("datasource error");
262 } catch (TermNotFoundException e
) {
263 logger
.error("defined terms not found");
268 public void testContact(){
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
;
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
>();
285 // contact1.setEmail(set);
286 // person.setContact(contact1);
287 appCtr
.getAgentService().save(person
);
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");
298 public void testNewVersion(){
300 System
.out
.println("Start");
301 DbSchemaValidation dbSchemaValidation
= DbSchemaValidation
.CREATE
;
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");
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);
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");
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
);
339 CdmPersistentDataSource loadedDataSource
= CdmPersistentDataSource
.NewInstance(dataSourceName
);
340 // CdmApplicationController.NewInstance(loadedDataSource, DbSchemaValidation.CREATE);
342 NomenclaturalCode loadedCode
= loadedDataSource
.getNomenclaturalCode();
343 Assert
.assertEquals(code
, loadedCode
);
345 CdmPersistentDataSource
.delete(loadedDataSource
);
347 } catch (DataSourceNotFoundException e
) {
348 // TODO Auto-generated catch block
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
);
359 CdmApplicationController appCtr
= CdmApplicationController
.NewInstance(dataSource
, DbSchemaValidation
.UPDATE
);
361 ConversationHolder conversation
= appCtr
.NewConversation();
363 // make the taxon and description elements
364 Taxon taxon
= Taxon
.NewInstance(null, null);
366 TaxonDescription taxonDescription
= TaxonDescription
.NewInstance(taxon
);
368 UUID taxonDescriptionUuid
= taxonDescription
.getUuid();
370 Feature featureAnatomy
= Feature
.ANATOMY();
372 TextData textData
= TextData
.NewInstance();
373 textData
.addAnnotation(Annotation
.NewInstance(null, null));
375 assertNotNull(textData
.getAnnotations().iterator().next().getAnnotatedObj());
377 textData
.setFeature(featureAnatomy
);
379 taxonDescription
.addElement(textData
);
381 appCtr
.getTaxonService().save(taxon
);
383 conversation
.commit(false);
384 // end of creation phase
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
);
393 TextData descriptionElement
= (TextData
) loadedDescription
.getElements().iterator().next();
395 Annotation annotation
= descriptionElement
.getAnnotations().iterator().next();
397 // this should not be null
398 assertNotNull(annotation
.getAnnotatedObj());
401 } catch (DataSourceNotFoundException e
) {
402 // TODO Auto-generated catch block
404 } catch (TermNotFoundException e
) {
405 // TODO Auto-generated catch block
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);
422 * @return true, if connection establisehd
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
);
428 ICdmDataSource destination
= CdmDataSource
.NewMySqlInstance(cdmServer
, cdmDB
, port
, cdmUserName
, pwd
, null);
436 public static void main(String
[] args
) {
437 TestDatabase sc
= new TestDatabase();
438 // sc.testNewDatabaseConnection();
439 // sc.testDataSourceWithNomenclaturalCode();
440 sc
.testLoadedAnnotationGetAnnotatedObjectCall();