Project

General

Profile

Download (13.7 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2008 EDIT
3
* European Distributed Institute of Taxonomy 
4
* http://www.e-taxonomy.eu
5
*/
6

    
7
package eu.etaxonomy.cdm.app.util;
8

    
9
import java.util.ArrayList;
10
import java.util.GregorianCalendar;
11
import java.util.List;
12

    
13
import jxl.write.DateTime;
14

    
15
import org.apache.log4j.Logger;
16
import org.springframework.transaction.TransactionStatus;
17

    
18
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
19
import eu.etaxonomy.cdm.common.AccountStore;
20
import eu.etaxonomy.cdm.database.CdmDataSource;
21
import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
22
import eu.etaxonomy.cdm.database.DbSchemaValidation;
23
import eu.etaxonomy.cdm.database.ICdmDataSource;
24
import eu.etaxonomy.cdm.io.jaxb.DataSet;
25
import eu.etaxonomy.cdm.model.agent.AgentBase;
26
import eu.etaxonomy.cdm.model.agent.Institution;
27
import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;
28
import eu.etaxonomy.cdm.model.agent.Person;
29
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
30
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
31
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
32
import eu.etaxonomy.cdm.model.common.Language;
33
import eu.etaxonomy.cdm.model.common.TimePeriod;
34
import eu.etaxonomy.cdm.model.common.VersionableEntity;
35
import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;
36
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
37
import eu.etaxonomy.cdm.model.description.Feature;
38
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
39
import eu.etaxonomy.cdm.model.description.QuantitativeData;
40
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
41
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
42
import eu.etaxonomy.cdm.model.description.TaxonDescription;
43
import eu.etaxonomy.cdm.model.description.TaxonInteraction;
44
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
45
import eu.etaxonomy.cdm.model.location.NamedArea;
46
import eu.etaxonomy.cdm.model.location.NamedAreaType;
47
import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;
48
import eu.etaxonomy.cdm.model.name.BotanicalName;
49
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
50
import eu.etaxonomy.cdm.model.name.Rank;
51
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
52
import eu.etaxonomy.cdm.model.occurrence.Specimen;
53
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
54
import eu.etaxonomy.cdm.model.reference.IBook;
55
import eu.etaxonomy.cdm.model.reference.IDatabase;
56
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
57
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
58
import eu.etaxonomy.cdm.model.taxon.Synonym;
59
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
60
import eu.etaxonomy.cdm.model.taxon.Taxon;
61
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
62
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
63
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;
64

    
65
/**
66
 * @author a.babadshanjan
67
 * @created 28.10.2008
68
 */
69
public class TestDatabase {
70

    
71
	private static final String server = "192.168.2.10";
72
	private static final String username = "edit";
73

    
74
	private static final Logger logger = Logger.getLogger(TestDatabase.class);
75

    
76
	public static ICdmDataSource CDM_DB(String dbname) {
77
		
78
		logger.info("Setting DB " + dbname);
79
		String password = AccountStore.readOrStorePassword(dbname, server, username, null);
80
		ICdmDataSource datasource = CdmDataSource.NewMySqlInstance(server, dbname, username, password, NomenclaturalCode.ICBN);
81
		return datasource;
82
	}
83
	
84
    public static CdmApplicationController 
85
    initDb(ICdmDataSource db, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading) {
86
    	
87
		logger.info("Initializing database '" + db.getName() + "'");
88
		
89
		CdmApplicationController appCtrInit = null;
90
		try {
91
			appCtrInit = CdmApplicationController.NewInstance(db, dbSchemaValidation, omitTermLoading);
92
		} catch (DataSourceNotFoundException e) {
93
			logger.error("Could not connect to database");
94
		}catch (TermNotFoundException e) {
95
			logger.error("Terms not found in database. " +
96
			"This error should not happen if preloaded terms are not expected for this application.");
97
		}
98
		return appCtrInit;
99
    }
100
    
101
	public static void loadTestData(String dbname, CdmApplicationController appCtr) {
102
    	
103
		logger.info("Loading test data into " + dbname);
104
		
105
		TransactionStatus txStatus = appCtr.startTransaction();
106
		DataSet dataSet = buildDataSet();
107
		
108
		appCtr.getTermService().save(dataSet.getTerms());
109
		appCtr.getTaxonService().save(dataSet.getTaxonBases());
110

    
111
		appCtr.commitTransaction(txStatus);
112
		appCtr.close();
113
    }
114
    
115
	/**
116
	 * This method constructs a small sample taxonomic tree to test JAXB marshaling.
117
	 * The sample tree contains four taxa. The root taxon has two children taxa, and
118
	 * there is one "free" taxon without a parent and children.
119
	 */
120
	private static DataSet buildDataSet() {
121

    
122
		List<AgentBase> agents = new ArrayList<AgentBase>();
123
	    List<VersionableEntity> agentData = new ArrayList<VersionableEntity>();
124
	    //List<Agent> agentData = new ArrayList<Agent>();
125
	    
126
	    //List<TermBase> terms = new ArrayList<TermBase>();
127
	    List<DefinedTermBase> terms = new ArrayList<DefinedTermBase>();
128
	    List<ReferenceBase> references = new ArrayList<ReferenceBase>();
129
	    List<TaxonNameBase> taxonomicNames = new ArrayList<TaxonNameBase>();
130
	    List<TaxonBase> taxonBases = new ArrayList<TaxonBase>();
131
	    
132
	    List<Feature> features = new ArrayList<Feature>();
133
	    
134
	    Feature feature1 = Feature.BIOLOGY_ECOLOGY();
135
	    
136
	    TaxonNameDescription taxNameDescription = TaxonNameDescription.NewInstance();
137
	    taxNameDescription.addFeature(feature1);
138
	    QuantitativeData element = QuantitativeData.NewInstance();
139
	    StatisticalMeasurementValue statisticalValue = StatisticalMeasurementValue.NewInstance();
140
	    statisticalValue.setType(StatisticalMeasure.MAX());
141
	    statisticalValue.setValue((float) 2.1);
142
	    element.addStatisticalValue(statisticalValue);
143
	    taxNameDescription.addElement(element);
144
	    
145
	    SpecimenOrObservationBase specimen = Specimen.NewInstance();
146
	    
147
	    specimen.setIndividualCount(12);
148
	    
149
	    
150
	    Feature featureIndAss = Feature.INDIVIDUALS_ASSOCIATION();
151
	    TaxonNameDescription newTaxNameDesc = TaxonNameDescription.NewInstance();
152
	    newTaxNameDesc.addFeature(featureIndAss);
153
	    IndividualsAssociation indAss = IndividualsAssociation.NewInstance();
154
	    indAss.setAssociatedSpecimenOrObservation(specimen);
155
	    
156
	    newTaxNameDesc.addElement(indAss);
157
	    
158
	    
159
	    
160
	    
161
//	    List<Synonym> synonyms = new ArrayList<Synonym>();
162
	    List<AnnotatableEntity> homotypicalGroups;
163

    
164
		ReferenceBase citRef, sec;
165
		BotanicalName name1, name2, name21, nameRoot1, nameFree, synName11, synName12, synName2, synNameFree;
166
		BotanicalName nameRoot2, nameR2_1, nameR2_2;
167
		Taxon child1, child2, child21, root1T, root2T, freeT;
168
		Taxon childR2_1, childR2_2;
169
		TaxonNode child1Node, child2Node, child21Node, root1TNode, root2TNode, freeTNode;
170
		TaxonNode childR2_1Node, childR2_2Node;
171
		TaxonomicTree taxTree, taxTree2;
172
		Synonym syn11, syn12, syn2, synFree;
173
		Rank rankSpecies, rankSubspecies, rankGenus;
174

    
175
		// agents 
176
		// - persons, institutions 
177

    
178
		Person linne = new Person("Carl", "Linne", "L.");
179
		linne.setTitleCache("Linne & Karl", true);
180
		GregorianCalendar birth = new GregorianCalendar(1707, 4, 23);
181
		GregorianCalendar death = new GregorianCalendar(1778, 0, 10);
182
		TimePeriod period = TimePeriod.NewInstance(birth, death);
183
		linne.setLifespan(period);
184

    
185
//		Keyword keyword = Keyword.NewInstance("plantarum", "lat", "");
186
//		linne.addKeyword(keyword);
187

    
188
		Institution institute = Institution.NewInstance();
189

    
190
		agents.add(linne);
191
		agents.add(institute);
192

    
193
		// agent data
194
		// - contacts, addresses, memberships
195

    
196
		//Contact contact1 = new Contact();
197
		//contact1.setEmail("someone@somewhere.org");
198
		InstitutionalMembership membership 
199
		= new InstitutionalMembership(institute, linne, period, "Biodiversity", "Head");
200
		//agentData.add(contact1);
201

    
202
		agentData.add(membership);
203

    
204
		// terms
205
		// - ranks, keywords
206

    
207
		rankSpecies = Rank.SPECIES();
208
		rankSubspecies = Rank.SUBSPECIES();
209
		rankGenus = Rank.GENUS();
210
		
211
//		terms.add(keyword);
212
		
213
        // taxonomic names
214
		
215
		nameRoot1 = BotanicalName.NewInstance(rankGenus,"Calendula",null,null,null,linne,null,"p.100", null);
216
		nameRoot1.addDescription(taxNameDescription);
217
		nameRoot1.addDescription(newTaxNameDesc);
218
		name1 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"arvensis",null,linne,null,"p.1", null);
219
		synName11 = BotanicalName.NewInstance(rankSpecies,"Caltha",null,"arvensis",null,linne,null,"p.11", null);
220
		synName12 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"sancta",null,linne,null,"p.12", null);
221
		
222
		name2 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"lanzae",null,linne,null,"p.2", null);
223
		synName2 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"echinata",null,linne,null,"p.2", null);
224
		
225
		name21 = BotanicalName.NewInstance(rankSubspecies,"Calendula",null,"lanzea","something",linne,null,"p.1", null);
226
		//name211 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"lanzea",null,linne,null,"p.1", null);
227
		//name212 = BotanicalName.NewInstance(rankSpecies,"Calendula",null,"lanzea",null,linne,null,"p.1", null);
228
		
229
		nameRoot2 = 
230
			BotanicalName.NewInstance(rankGenus,"Sonchus",null,null,null,linne,null,"p.200", null);
231
		nameR2_1 = BotanicalName.NewInstance(rankSpecies,"Sonchus",null,"child1",null,linne,null,"p.1", null);
232
		nameR2_2 = BotanicalName.NewInstance(rankSpecies,"Sonchus",null,"child2",null,linne,null,"p.2", null);
233
		
234
		nameFree = BotanicalName.NewInstance(rankSpecies,"Cichorium",null,"intybus",null,linne,null,"p.200", null);
235
		synNameFree = BotanicalName.NewInstance(rankSpecies,"Cichorium",null,"balearicum",null,linne,null,"p.2", null);
236

    
237
		taxonomicNames.add(nameRoot1);
238
		taxonomicNames.add(name1);
239
		taxonomicNames.add(synName11);
240
		taxonomicNames.add(synName12);
241
		taxonomicNames.add(name2);
242
		taxonomicNames.add(name21);
243
		taxonomicNames.add(synName2);
244
		taxonomicNames.add(nameFree);
245
		taxonomicNames.add(synNameFree);
246
		taxonomicNames.add(nameRoot2);
247
		
248
        // references
249
		ReferenceFactory refFactory = ReferenceFactory.newInstance();
250
		sec = refFactory.newBook();
251
		sec.setAuthorTeam(linne);
252
		sec.setTitleCache("Plant Specification & Taxonomy", true);
253
		references.add(sec);
254
		
255
		citRef = refFactory.newDatabase();
256
		citRef.setAuthorTeam(linne);
257
		citRef.setTitleCache("BioCASE", true);
258
		references.add(citRef);
259

    
260
		// taxa
261
		
262
		root1T = Taxon.NewInstance(nameRoot1, sec);
263
		root2T = Taxon.NewInstance(nameRoot2, sec);
264
		freeT = Taxon.NewInstance(nameFree, sec);
265
		child1 = Taxon.NewInstance(name1, sec);
266
		child2 = Taxon.NewInstance(name2, sec);
267
		child21 = Taxon.NewInstance(name21, sec);
268
		childR2_1 = Taxon.NewInstance(nameR2_1, sec);
269
		childR2_2 = Taxon.NewInstance(nameR2_2, sec);
270
		
271
		//TaxonInteractions
272
		
273
		TaxonInteraction descBase = TaxonInteraction.NewInstance();
274
		descBase.setTaxon2(root1T);
275
		Feature hostplant = Feature.HOSTPLANT();
276
		
277
		descBase.setFeature(hostplant);
278
		TaxonDescription taxDesc = TaxonDescription.NewInstance();
279
		taxDesc.addElement(descBase);
280
		root2T.addDescription(taxDesc);
281
		
282
		//locations
283
		
284
		taxDesc = TaxonDescription.NewInstance();
285
		Feature locationFeature = Feature.DISTRIBUTION();
286

    
287
		
288
		//locationFeature.
289
		WaterbodyOrCountry area = WaterbodyOrCountry.NewInstance("", "locationTest", null);
290
		area.setType(NamedAreaType.NATURAL_AREA());
291
		
292
		//WaterbodyOrCountry woC= WaterbodyOrCountry.NewInstance();
293
		area.addWaterbodyOrCountry(WaterbodyOrCountry.AFGHANISTAN());
294
		taxDesc.addGeoScope(area);
295
		taxDesc.addFeature(locationFeature);
296
		root1T.addDescription(taxDesc);
297
		
298
		
299
		// synonyms
300
		
301
		synFree = Synonym.NewInstance(synNameFree, sec);
302
		syn11 = Synonym.NewInstance(synName11, sec);
303
		syn12 = Synonym.NewInstance(synName12, sec);
304
		syn2 = Synonym.NewInstance(synName2, sec);
305
		
306
		child1.addSynonym(syn11, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());
307
		child1.addSynonym(syn12, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());
308
		child2.addSynonym(syn2, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());
309
		freeT.addSynonym(synFree, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());
310

    
311
		taxonBases.add(synFree);
312
		taxonBases.add(syn11);
313
		taxonBases.add(syn12);
314
		taxonBases.add(syn2);
315
		
316
		// taxonomic children
317
		
318
		//TODO: Adapt to taxonomic tree
319
		taxTree = TaxonomicTree.NewInstance("TestTree");
320
		
321
		root1TNode = taxTree.addRoot(root1T, null, sec);
322
		child1Node = root1TNode.addChild(child1);
323
		child2Node = root1TNode.addChild(child2);
324
		child21Node = child2Node.addChild(child21);
325
		
326
		taxTree2 = TaxonomicTree.NewInstance("TestTree2");
327
		
328
		root2TNode = taxTree2.addRoot(root2T, null, sec);
329
		root2TNode.addChild(child1, sec, "p.1010", syn11);
330
		root2TNode.addChild(child2);
331
		
332
		/*
333
		root1T.addTaxonomicChild(child1, sec, "p.1010");
334
		root1T.addTaxonomicChild(child2, sec, "p.1020");
335
		child2.addTaxonomicChild(child21, sec, "p.2000");
336
				
337
		root2T.addTaxonomicChild(child1, sec, "p.1010");
338
		root2T.addTaxonomicChild(child2, sec, "p.1020");
339
		*/
340
		//
341
		
342
		
343
		taxonBases.add(root1T);
344
		taxonBases.add(root2T);
345
		taxonBases.add(freeT);
346
		taxonBases.add(child1);
347
		taxonBases.add(child2);
348
		taxonBases.add(child21);
349
		taxonBases.add(childR2_1);
350
		taxonBases.add(childR2_2);
351
		
352
		DataSet dataSet = new DataSet();
353
	
354
		logger.warn("WARNING: TestDatabase has been commented in parts. Mainly, must be adapted to taxonomic tree.");
355
		
356
		dataSet.setTerms(terms);
357
		dataSet.setAgents(agents);
358
//		dataSet.setAgentData(agentData); //TODO
359
		dataSet.setReferences(references);
360
		dataSet.setTaxonomicNames(taxonomicNames);
361
		dataSet.setTaxonBases(taxonBases);
362
		
363
		
364
		return dataSet;
365

    
366
	}
367
}
(1-1/2)