Project

General

Profile

Download (36.7 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 *
3
 */
4
package eu.etaxonomy.cdm.database.data;
5

    
6
import java.net.URI;
7
import java.util.ArrayList;
8
import java.util.List;
9

    
10
import org.hibernate.Session;
11
import org.joda.time.DateTime;
12

    
13
import com.ibm.lsid.MalformedLSIDException;
14

    
15
import eu.etaxonomy.cdm.common.DOI;
16
import eu.etaxonomy.cdm.model.agent.Address;
17
import eu.etaxonomy.cdm.model.agent.Contact;
18
import eu.etaxonomy.cdm.model.agent.Institution;
19
import eu.etaxonomy.cdm.model.agent.Person;
20
import eu.etaxonomy.cdm.model.agent.Team;
21
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
22
import eu.etaxonomy.cdm.model.common.Annotation;
23
import eu.etaxonomy.cdm.model.common.CdmBase;
24
import eu.etaxonomy.cdm.model.common.Credit;
25
import eu.etaxonomy.cdm.model.common.DefinedTerm;
26
import eu.etaxonomy.cdm.model.common.EventBase;
27
import eu.etaxonomy.cdm.model.common.Extension;
28
import eu.etaxonomy.cdm.model.common.ExtensionType;
29
import eu.etaxonomy.cdm.model.common.Group;
30
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
31
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
32
import eu.etaxonomy.cdm.model.common.Identifier;
33
import eu.etaxonomy.cdm.model.common.IntextReference;
34
import eu.etaxonomy.cdm.model.common.LSID;
35
import eu.etaxonomy.cdm.model.common.LSIDAuthority;
36
import eu.etaxonomy.cdm.model.common.Language;
37
import eu.etaxonomy.cdm.model.common.LanguageString;
38
import eu.etaxonomy.cdm.model.common.Marker;
39
import eu.etaxonomy.cdm.model.common.MarkerType;
40
import eu.etaxonomy.cdm.model.common.OriginalSourceType;
41
import eu.etaxonomy.cdm.model.common.Representation;
42
import eu.etaxonomy.cdm.model.common.TermType;
43
import eu.etaxonomy.cdm.model.common.TermVocabulary;
44
import eu.etaxonomy.cdm.model.common.User;
45
import eu.etaxonomy.cdm.model.description.CategoricalData;
46
import eu.etaxonomy.cdm.model.description.CommonTaxonName;
47
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
48
import eu.etaxonomy.cdm.model.description.Distribution;
49
import eu.etaxonomy.cdm.model.description.Feature;
50
import eu.etaxonomy.cdm.model.description.FeatureNode;
51
import eu.etaxonomy.cdm.model.description.FeatureTree;
52
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
53
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
54
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
55
import eu.etaxonomy.cdm.model.description.MediaKey;
56
import eu.etaxonomy.cdm.model.description.MultiAccessKey;
57
import eu.etaxonomy.cdm.model.description.PolytomousKey;
58
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
59
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
60
import eu.etaxonomy.cdm.model.description.QuantitativeData;
61
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
62
import eu.etaxonomy.cdm.model.description.State;
63
import eu.etaxonomy.cdm.model.description.StateData;
64
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
65
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
66
import eu.etaxonomy.cdm.model.description.TaxonDescription;
67
import eu.etaxonomy.cdm.model.description.TaxonInteraction;
68
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
69
import eu.etaxonomy.cdm.model.description.TextData;
70
import eu.etaxonomy.cdm.model.description.TextFormat;
71
import eu.etaxonomy.cdm.model.description.WorkingSet;
72
import eu.etaxonomy.cdm.model.location.Country;
73
import eu.etaxonomy.cdm.model.location.NamedArea;
74
import eu.etaxonomy.cdm.model.location.Point;
75
import eu.etaxonomy.cdm.model.location.ReferenceSystem;
76
import eu.etaxonomy.cdm.model.media.AudioFile;
77
import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
78
import eu.etaxonomy.cdm.model.media.ImageFile;
79
import eu.etaxonomy.cdm.model.media.Media;
80
import eu.etaxonomy.cdm.model.media.MediaRepresentation;
81
import eu.etaxonomy.cdm.model.media.MovieFile;
82
import eu.etaxonomy.cdm.model.media.Rights;
83
import eu.etaxonomy.cdm.model.media.RightsType;
84
import eu.etaxonomy.cdm.model.molecular.Amplification;
85
import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
86
import eu.etaxonomy.cdm.model.molecular.Cloning;
87
import eu.etaxonomy.cdm.model.molecular.DnaQuality;
88
import eu.etaxonomy.cdm.model.molecular.DnaSample;
89
import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
90
import eu.etaxonomy.cdm.model.molecular.Primer;
91
import eu.etaxonomy.cdm.model.molecular.Sequence;
92
import eu.etaxonomy.cdm.model.molecular.SequenceDirection;
93
import eu.etaxonomy.cdm.model.molecular.SequenceString;
94
import eu.etaxonomy.cdm.model.molecular.SingleRead;
95
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
96
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment.Shift;
97
import eu.etaxonomy.cdm.model.name.BacterialName;
98
import eu.etaxonomy.cdm.model.name.BotanicalName;
99
import eu.etaxonomy.cdm.model.name.CultivarPlantName;
100
import eu.etaxonomy.cdm.model.name.HybridRelationship;
101
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
102
import eu.etaxonomy.cdm.model.name.NameRelationship;
103
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
104
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
105
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
106
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
107
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
108
import eu.etaxonomy.cdm.model.name.Rank;
109
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
110
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
111
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
112
import eu.etaxonomy.cdm.model.name.ViralName;
113
import eu.etaxonomy.cdm.model.name.ZoologicalName;
114
import eu.etaxonomy.cdm.model.occurrence.Collection;
115
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
116
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
117
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
118
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
119
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
120
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
121
import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
122
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
123
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
124
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
125
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
126
import eu.etaxonomy.cdm.model.reference.Reference;
127
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
128
import eu.etaxonomy.cdm.model.taxon.Classification;
129
import eu.etaxonomy.cdm.model.taxon.Synonym;
130
import eu.etaxonomy.cdm.model.taxon.SynonymType;
131
import eu.etaxonomy.cdm.model.taxon.Taxon;
132
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
133
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
134
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
135
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
136

    
137
/**
138
 * This class tries to create a database that has
139
 * at least one record in each table.
140
 * It is meant to test update scripts as well as imports
141
 * and exports.
142
 *
143
 * ATTENTION: As the content of the created database may change
144
 * over time due to model changes and other requirements test using
145
 * this class should be written in a way that they do rather
146
 * depend on general parameter than concrete data values.
147
 *
148
 * @author a.mueller
149
 * @created 3013-12-02
150
 *
151
 *
152
 */
153
public class FullCoverageDataGenerator {
154

    
155

    
156
	public void fillWithData(Session session){
157
		List<CdmBase> cdmBases = new ArrayList<CdmBase>();
158

    
159
		createAgents(cdmBases);
160

    
161
		createDescriptions(cdmBases);
162

    
163
		createMedia(cdmBases);
164

    
165
		createMolecular(cdmBases);
166

    
167
		createTaxonName(cdmBases);
168

    
169
		createOccurrence(cdmBases);
170

    
171
		createReference(cdmBases);
172

    
173
		createTaxon(cdmBases);
174

    
175
		createSupplemental(cdmBases);
176

    
177
		for (CdmBase cdmBase: cdmBases){
178
			session.save(cdmBase);
179
		}
180
	}
181

    
182

    
183
	private void createSupplemental(List<CdmBase> cdmBases)  {
184

    
185
		Reference ref = ReferenceFactory.newBook();
186

    
187
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
188
		ref.addAnnotation(annotation);
189
		handleAnnotatableEntity(annotation);
190

    
191
		Credit credit = Credit.NewInstance(Person.NewInstance(), "refCredit", "rc", Language.DEFAULT());
192
		ref.addCredit(credit);
193
		handleAnnotatableEntity(credit);
194

    
195
		Rights rights = Rights.NewInstance("My rights", Language.GERMAN());
196
		ref.addRights(rights);
197
		handleAnnotatableEntity(rights);
198

    
199
		//Others
200
		try {
201
			LSIDAuthority lsidAuthority = new LSIDAuthority("My authority");
202
			lsidAuthority.addNamespace("lsidNamespace", TaxonNameBase.class);
203
			cdmBases.add(lsidAuthority);
204
		} catch (MalformedLSIDException e) {
205
			e.printStackTrace();
206
		}
207

    
208
		User user = User.NewInstance("myUser", "12345");
209
		Group group = Group.NewInstance("MyGroup");
210
		group.addMember(user);
211

    
212
		cdmBases.add(user);
213
		cdmBases.add(group);
214

    
215

    
216
		cdmBases.add(ref);
217

    
218
	}
219

    
220

    
221
	/**
222
	 * @param cdmBases
223
	 */
224
	private void createAgents(List<CdmBase> cdmBases) {
225
		//Person
226
		Person person = Person.NewTitledInstance("Person Title");
227
		person.setFirstname("first name");
228
		person.setLastname("last name");
229
		person.setLifespan(TimePeriodParser.parseString("1905-1995"));
230
		person.setPrefix("prefix");
231
		person.setSuffix("suffix");
232

    
233
		handleIdentifiableEntity(person);
234

    
235
		//Contact
236
		Contact contact = Contact.NewInstance();
237
		person.setContact(contact);
238
		Point locality = Point.NewInstance(45.12, -38.69, ReferenceSystem.WGS84(), 22);
239
		contact.addEmailAddress("a@b.de");
240
		contact.addFaxNumber("f:010-123456");
241
		contact.addPhoneNumber("p:090-987654");
242
		contact.addUrl(URI.create("http://www.abc.de"));
243

    
244
		//Address
245
		Address address = Address.NewInstance(Country.GERMANY(), "locality", "pobox", "12345", "region", "street", locality);
246
		contact.addAddress(address);
247

    
248
		//Team
249
		Team team = Team.NewTitledInstance("Team title", "Team abbrev title");
250
		team.addTeamMember(person);
251
		handleIdentifiableEntity(team);
252

    
253

    
254
		//Institution
255
		Institution institution = Institution.NewInstance();
256
		institution.setCode("institution code");
257
		institution.setName("institution name");
258
		handleIdentifiableEntity(institution);
259

    
260

    
261
		//TODO vocabulary
262
//		voc = "29ad808b-3126-4274-be81-4561e7afc76f"
263
		DefinedTerm instType = DefinedTerm.NewInstitutionTypeInstance("Description forthis instition type", "institution type", "inst. t.");
264
		cdmBases.add(instType);
265
		institution.addType(instType);
266
		person.addInstitutionalMembership(institution, TimePeriodParser.parseString("1955-1956"), "department", "role");
267

    
268
		Institution subInstitution = Institution.NewInstance();
269
		subInstitution.setCode("sub institution code");
270
		subInstitution.setName("sub institution name");
271
		subInstitution.setIsPartOf(institution);
272

    
273
		cdmBases.add(person);
274
		cdmBases.add(team);
275
		cdmBases.add(institution);
276
	}
277

    
278

    
279
	private void createDescriptions(List<CdmBase> cdmBases) {
280

    
281
		TermVocabulary<?> voc = TermVocabulary.NewInstance(TermType.AnnotationType, "my termVoc desc",
282
				"myTerm voc", "mtv", URI.create("http://www.abc.de"));
283
		handleIdentifiableEntity(voc);
284
		cdmBases.add(voc);
285

    
286
		Representation rep = voc.getRepresentations().iterator().next();
287
		handleAnnotatableEntity(rep);
288
//		Representation engRep = Language.ENGLISH().getRepresentations().iterator().next();
289
//		handleAnnotatableEntity(engRep);
290
//		cdmBases.add(engRep);  //needed?
291

    
292
		//Categorical data
293
		State state = State.NewInstance("Test state", "state", "st.");
294
		state.addMedia(Media.NewInstance());
295
		cdmBases.add(state);
296
		CategoricalData categoricalData = CategoricalData.NewInstance(state, Feature.CONSERVATION());
297
		StateData stateData = categoricalData.getStateData().get(0);
298
		stateData.addModifier(DefinedTerm.SEX_FEMALE());
299
		handleAnnotatableEntity(categoricalData);
300

    
301

    
302
		State nextState = State.NewInstance();
303
		cdmBases.add(nextState);
304
		StateData stateData2 = StateData.NewInstance(nextState);
305
		stateData2.putModifyingText(Language.ENGLISH(), "State2 modifying text");
306
		categoricalData.addStateData(stateData2);
307
		categoricalData.setOrderRelevant(true);
308

    
309
		//Quantitative data
310
		Feature leaveLength = Feature.NewInstance("Leave length description", "leave length", "l.l.");
311
		cdmBases.add(leaveLength);
312
		leaveLength.setSupportsQuantitativeData(true);
313
		QuantitativeData quantitativeData = QuantitativeData.NewInstance(leaveLength);
314
		MeasurementUnit measurementUnit = MeasurementUnit.NewInstance("Measurement Unit", "munit", null);
315
		cdmBases.add(measurementUnit);
316
		quantitativeData.setUnit(measurementUnit);
317
		StatisticalMeasurementValue statisticalMeasurementValue = quantitativeData.setAverage((float)22.9 , null);
318
		handleAnnotatableEntity(quantitativeData);
319
		handleIdentifiableEntity(measurementUnit);
320
		DefinedTerm valueModifier = DefinedTerm.NewModifierInstance("about", "about", null);
321
		statisticalMeasurementValue.addModifier(valueModifier);
322
		cdmBases.add(valueModifier);
323

    
324
		//Feature
325
		TermVocabulary<DefinedTerm> recommendedModifierEnumeration = TermVocabulary.NewInstance(TermType.Modifier, DefinedTerm.class);
326
		leaveLength.addRecommendedModifierEnumeration(recommendedModifierEnumeration);
327
		cdmBases.add(recommendedModifierEnumeration);
328
		TermVocabulary<State> supportedCategoricalEnumeration = TermVocabulary.NewInstance(TermType.State, State.class);
329
		leaveLength.addSupportedCategoricalEnumeration(supportedCategoricalEnumeration);
330
		cdmBases.add(supportedCategoricalEnumeration);
331
		leaveLength.addRecommendedMeasurementUnit(measurementUnit);
332
		leaveLength.addRecommendedStatisticalMeasure(StatisticalMeasure.AVERAGE());
333

    
334
		CommonTaxonName commonTaxonName = CommonTaxonName.NewInstance("common name", Language.ENGLISH(), Country.UNITEDSTATESOFAMERICA());
335
		handleAnnotatableEntity(commonTaxonName);
336

    
337
		TextData textData = TextData.NewInstance(Feature.DIAGNOSIS());
338
		Language eng = Language.ENGLISH();
339
		textData.putText(eng, "My text data");
340
		LanguageString languageString = textData.getLanguageText(eng);
341

    
342
		Taxon referencedTaxon = getTaxon();
343
		cdmBases.add(referencedTaxon);
344
		languageString.addIntextReference(IntextReference.NewTaxonInstance(referencedTaxon, languageString, 2, 5));
345
		textData.putModifyingText(eng, "nice diagnosis");
346
		handleAnnotatableEntity(textData);
347
		handleAnnotatableEntity(languageString);
348

    
349
		TextFormat format = TextFormat.NewInstance("format", "format", null);
350
		textData.setFormat(format);
351
		cdmBases.add(format);
352
		handleAnnotatableEntity(format);
353

    
354
		DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
355
		IndividualsAssociation indAssoc = IndividualsAssociation.NewInstance(specimen);
356
		indAssoc.putDescription(Language.ENGLISH(), "description for individuals association");
357
		handleAnnotatableEntity(indAssoc);
358

    
359

    
360
		TaxonInteraction taxonInteraction = TaxonInteraction.NewInstance(Feature.HOSTPLANT());
361
		taxonInteraction.putDescription(Language.ENGLISH(), "interaction description");
362
		handleAnnotatableEntity(taxonInteraction);
363

    
364
		NamedArea inCountryArea = NamedArea.NewInstance("My area in a country", "my area", "ma");
365
		inCountryArea.addCountry(Country.TURKEYREPUBLICOF());
366
		cdmBases.add(inCountryArea);
367
		Distribution distribution = Distribution.NewInstance(inCountryArea, PresenceAbsenceTerm.CULTIVATED());
368
		handleAnnotatableEntity(distribution);
369

    
370
		Taxon taxon = getTaxon();
371
		TaxonDescription taxonDescription = TaxonDescription.NewInstance(taxon);
372
		taxonDescription.addElements(categoricalData, quantitativeData,
373
				textData, commonTaxonName, taxonInteraction, indAssoc, distribution);
374

    
375
		DerivedUnit describedSpecimenOrObservation = DerivedUnit.NewInstance(SpecimenOrObservationType.DerivedUnit);
376
		taxonDescription.setDescribedSpecimenOrObservation(describedSpecimenOrObservation);
377

    
378
		taxonDescription.addScope(DefinedTerm.SEX_FEMALE());
379
		taxonDescription.addGeoScope(Country.GERMANY());
380
		handleIdentifiableEntity(taxonDescription);
381

    
382
		cdmBases.add(taxon);
383

    
384
		//DescriptionElmenetBase  + source
385
		textData.addMedia(Media.NewInstance());
386
		textData.addModifier(DefinedTerm.SEX_HERMAPHRODITE());
387
		textData.putModifyingText(Language.ENGLISH(), "no modification");
388
		textData.setTimeperiod(TimePeriodParser.parseString("1970-1980"));
389
		Reference ref = ReferenceFactory.newArticle();
390
		DescriptionElementSource source = textData.addSource(OriginalSourceType.Import, "22", "taxon description table", ref, "detail");
391
		source.setNameUsedInSource(TaxonNameBase.NewBotanicalInstance(Rank.GENUS()));
392
		handleAnnotatableEntity(source);
393

    
394
		taxonDescription.addDescriptionSource(ref);
395

    
396

    
397
		//Specimen description
398
		SpecimenOrObservationBase<?> describedSpecimen = getSpecimen();
399
		SpecimenDescription specDesc = SpecimenDescription.NewInstance(specimen);
400
		cdmBases.add(describedSpecimen);
401
		handleAnnotatableEntity(specDesc);
402

    
403
		//Name description
404
		TaxonNameBase<?,?> name = TaxonNameBase.NewBotanicalInstance(Rank.GENUS());
405
		TaxonNameDescription nameDesc = TaxonNameDescription.NewInstance(name);
406
		cdmBases.add(name);
407
		handleAnnotatableEntity(nameDesc);
408

    
409

    
410
		//Feature Tree
411
		FeatureTree featureTree = FeatureTree.NewInstance();
412
//		featureTree
413
		FeatureNode descriptionFeatureNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
414
		FeatureNode leaveLengthNode = FeatureNode.NewInstance(leaveLength);
415
		featureTree.getRootChildren().add(descriptionFeatureNode);
416
		descriptionFeatureNode.addChild(leaveLengthNode);
417
		handleIdentifiableEntity(featureTree);
418

    
419
		State inapplicableState = State.NewInstance("inapplicableState", "inapplicableState", null);
420
		State applicableState = State.NewInstance("only applicable state", "only applicable state", null);
421
		cdmBases.add(applicableState);
422
		cdmBases.add(inapplicableState);
423
		leaveLengthNode.addInapplicableState(inapplicableState);
424
		leaveLengthNode.addApplicableState(applicableState);
425
		cdmBases.add(featureTree);
426
		cdmBases.add(leaveLengthNode);
427

    
428

    
429
		WorkingSet workingSet = WorkingSet.NewInstance();
430
		workingSet.addDescription(taxonDescription);
431
		workingSet.setLabel("My Workingset");
432
		workingSet.getDescriptiveSystem();
433
		handleAnnotatableEntity(workingSet);
434

    
435

    
436
		//polytomous keys
437
		Taxon coveredTaxon = Taxon.NewInstance(name, null);
438
		PolytomousKey key = PolytomousKey.NewTitledInstance("My Polykey");
439
		handleIdentificationKey(key, taxon, coveredTaxon);
440
		key.setStartNumber(10);
441

    
442

    
443
		PolytomousKeyNode firstChildNode = PolytomousKeyNode.NewInstance("Green", "What is the leave length?", coveredTaxon, leaveLength);
444
		key.getRoot().addChild(firstChildNode);
445
		PolytomousKeyNode secondChildNode = PolytomousKeyNode.NewInstance("234");
446
		firstChildNode.addChild(secondChildNode);
447

    
448
		PolytomousKey subkey = PolytomousKey.NewTitledInstance("Sub-key");
449
		firstChildNode.setSubkey(subkey);
450

    
451
		PolytomousKeyNode subKeyNode = PolytomousKeyNode.NewInstance("sub key couplet");
452
		subkey.getRoot().addChild(subKeyNode);
453
		secondChildNode.setOtherNode(subKeyNode);
454

    
455
		secondChildNode.putModifyingText(Language.GERMAN(), "manchmal");
456

    
457
		cdmBases.add(key);
458
		cdmBases.add(subkey);
459

    
460
		MediaKey mediaKey = MediaKey.NewInstance();
461
		mediaKey.addKeyRepresentation(Representation.NewInstance("Media Key Representation", "media key", null, Language.ENGLISH()));
462
		handleIdentificationKey(mediaKey, taxon, coveredTaxon);
463

    
464
		MultiAccessKey multiAccessKey = MultiAccessKey.NewInstance();
465
		handleIdentificationKey(multiAccessKey, taxon, coveredTaxon);
466

    
467
		cdmBases.add(mediaKey);
468
		cdmBases.add(multiAccessKey);
469

    
470
	}
471

    
472

    
473

    
474
	private void handleIdentificationKey(IIdentificationKey key, Taxon taxon, Taxon coveredTaxon){
475
		key.addCoveredTaxon(coveredTaxon);
476
		key.addGeographicalScope(Country.GERMANY());
477
		key.addScopeRestriction(DefinedTerm.SEX_FEMALE());
478
		key.addTaxonomicScope(taxon);
479
		if (key instanceof IdentifiableEntity<?>){
480
			handleIdentifiableEntity((IdentifiableEntity<?>)key);
481
		}else{
482
			handleAnnotatableEntity((AnnotatableEntity)key);
483
		}
484

    
485

    
486
	}
487

    
488

    
489
	private void createMedia(List<CdmBase> cdmBases){
490
		AudioFile audioFile = AudioFile.NewInstance(URI.create("http://a.b.de"), 22);
491
		ImageFile imageFile = ImageFile.NewInstance(URI.create("http://b.c.de"), 44, 467, 55);
492
		MovieFile movieFile = MovieFile.NewInstance(URI.create("http://b.c.de"), 67);
493
		MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance("mime", "media");
494

    
495
		mediaRepresentation.addRepresentationPart(movieFile);
496
		mediaRepresentation.addRepresentationPart(imageFile);
497
		mediaRepresentation.addRepresentationPart(audioFile);
498
		Media media = Media.NewInstance();
499
		media.addRepresentation(mediaRepresentation);
500

    
501
		media.putTitle(Language.ENGLISH(), "Media title");
502
		media.setMediaCreated(DateTime.now());
503
		media.putDescription(Language.ENGLISH(), "Media description");
504
		handleIdentifiableEntity(media);
505

    
506

    
507
		Person artist = Person.NewTitledInstance("artist");
508
		media.setArtist(artist);
509
		cdmBases.add(media);
510
		cdmBases.add(artist);
511
	}
512

    
513

    
514
	private void createMolecular(List<CdmBase> cdmBases) {
515
		DnaSample dnaSample = DnaSample.NewInstance();
516

    
517
		//Amplification
518
		Amplification amplification = Amplification.NewInstance();
519

    
520
		DefinedTerm dnaMarker = DefinedTerm.NewDnaMarkerInstance("My dna marker", "dna marker", null);
521
		cdmBases.add(dnaMarker);
522
		amplification.setDnaMarker(dnaMarker);
523
		Institution inst = Institution.NewInstance();
524
		amplification.setInstitution(inst);
525
		handleEventBase(amplification);
526
		handleAnnotatableEntity(amplification);
527

    
528
		Primer forwardPrimer = Primer.NewInstance("forward primer");
529
		forwardPrimer.setPublishedIn(getReference());
530
		forwardPrimer.setSequence(SequenceString.NewInstance("my sequence"));
531
		handleAnnotatableEntity(forwardPrimer);
532

    
533
		Primer reversePrimer = Primer.NewInstance("reverse primer");
534
		handleAnnotatableEntity(reversePrimer);
535

    
536
		amplification.setForwardPrimer(forwardPrimer);
537
		amplification.setReversePrimer(reversePrimer);
538

    
539
		DefinedTerm purificationMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "purification method", "purification method", null);
540
		cdmBases.add(purificationMethod);
541
		MaterialOrMethodEvent purification = MaterialOrMethodEvent.NewInstance(purificationMethod, "purification method");
542
		amplification.setPurification(purification);
543
		handleAnnotatableEntity(purification);
544
		handleAnnotatableEntity(purificationMethod);
545

    
546
		amplification.setLadderUsed("ladder");
547
		amplification.setElectrophoresisVoltage(5.5);
548
		amplification.setGelConcentration(2.4);
549
		amplification.setGelRunningTime(3.6);
550

    
551
		//Amplification result
552
		AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample, amplification);
553
		amplificationResult.setSuccessful(true);
554
		amplificationResult.setSuccessText("Very successful");
555
		handleAnnotatableEntity(amplificationResult);
556

    
557
		DefinedTerm cloningMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "cloning method", "cloning method", null);
558
		cdmBases.add(cloningMethod);
559
		Cloning cloning = Cloning.NewInstance(cloningMethod, "My cloning method", "my strain", forwardPrimer, reversePrimer);
560
		amplificationResult.setCloning(cloning);
561
		handleAnnotatableEntity(cloningMethod);
562
		handleAnnotatableEntity(cloning);
563

    
564
		Media gelPhoto = Media.NewInstance();
565
		amplificationResult.setGelPhoto(gelPhoto);
566

    
567
		//SingleRead
568
		SingleRead singleRead = SingleRead.NewInstance();
569
		handleAnnotatableEntity(singleRead);
570
		amplificationResult.addSingleRead(singleRead);
571
		MaterialOrMethodEvent readMethod = MaterialOrMethodEvent.NewInstance(null, "read method");
572
		singleRead.setMaterialOrMethod(readMethod);
573
		handleAnnotatableEntity(readMethod);
574

    
575
		Media pherogram = Media.NewInstance();
576
		singleRead.setPherogram(pherogram);
577

    
578
		singleRead.setPrimer(forwardPrimer);
579
		singleRead.setSequence(SequenceString.NewInstance("ABTC"));
580
		singleRead.setDirection(SequenceDirection.Forward);
581

    
582
		//Sequence
583
		Sequence sequence = Sequence.NewInstance("ADDT");
584
		dnaSample.addSequence(sequence);
585

    
586
//		SequenceString alignedSequence = SequenceString.NewInstance("AGTC");
587
		Shift[] shifts = new Shift[]{new Shift(66,1),new Shift(103,-2)};
588
		SingleReadAlignment.NewInstance(sequence, singleRead, shifts, "AGTC");
589

    
590
		Media contigFile = Media.NewInstance();
591
		sequence.setContigFile(contigFile);
592
		sequence.setIsBarcode(true);
593
		sequence.setDnaMarker(dnaMarker);
594
		sequence.setBarcodeSequencePart(SequenceString.NewInstance("ADTA"));
595
		sequence.setGeneticAccessionNumber("GenNO12345");
596
		sequence.setBoldProcessId("boldId");
597
		sequence.setHaplotype("haplotype");
598
		Reference sequenceCitation = getReference();
599
		sequence.addCitation(sequenceCitation);
600
		handleAnnotatableEntity(sequence);
601

    
602
		//DnaQuality
603
		DnaQuality dnaQuality = DnaQuality.NewInstance();
604
		dnaQuality.setConcentration(2.0);
605
		MeasurementUnit mu = MeasurementUnit.NewInstance("mg/ml", "mg/ml","mg/ml");
606
		cdmBases.add(mu);
607
		dnaQuality.setConcentrationUnit(mu);
608
		dnaQuality.setPurificationMethod("purification method");
609
		dnaQuality.setQualityCheckDate(DateTime.now());
610
		dnaQuality.setQualityTerm(null); //TODO
611
		dnaQuality.setRatioOfAbsorbance260_230(22.0);
612
		dnaQuality.setRatioOfAbsorbance260_280(3.9);
613
		dnaSample.setDnaQuality(dnaQuality);
614

    
615

    
616
		//Phylogenetic Tree
617
		PhylogeneticTree phyloTree = PhylogeneticTree.NewInstance();
618
		phyloTree.addUsedSequences(sequence);
619
		handleIdentifiableEntity(phyloTree);
620

    
621

    
622
		cdmBases.add(dnaSample);
623
		cdmBases.add(phyloTree);
624
	}
625

    
626

    
627
	private void createTaxon(List<CdmBase> cdmBases) {
628
		Reference sec = getReference();
629
		TaxonNameBase<?,?> name = TaxonNameBase.NewBotanicalInstance(Rank.GENUS());
630
		Taxon taxon = Taxon.NewInstance(name, sec);
631
		handleIdentifiableEntity(taxon);
632

    
633
		TaxonNameBase<?,?> synName = TaxonNameBase.NewBotanicalInstance(Rank.GENUS());
634
		Synonym syn = Synonym.NewInstance(synName, sec, "123");
635
		taxon.addSynonym(syn, SynonymType.HETEROTYPIC_SYNONYM_OF());
636
		taxon.setDoubtful(true);
637
		handleIdentifiableEntity(syn);
638

    
639

    
640
		Taxon concept = Taxon.NewInstance(name, getReference());
641
		TaxonRelationship taxRel = taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
642
				sec, "444");
643
		taxon.setTaxonStatusUnknown(true);
644
		handleAnnotatableEntity(taxRel);
645

    
646

    
647
		//Classification
648
		Classification classification = Classification.NewInstance("My classification", sec);
649
		classification.setMicroReference("p. 123");
650
		classification.setTimeperiod(TimePeriodParser.parseString("1.1.2012-4.8.2013"));
651
		classification.addGeoScope(Country.GERMANY());
652
		classification.putDescription(Language.ENGLISH(), "An interesting classification");
653

    
654

    
655
		TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
656
		handleIdentifiableEntity(classification);
657
		handleAnnotatableEntity(node);
658

    
659
		Taxon childTaxon = Taxon.NewInstance(synName, sec);
660
		node.addChildTaxon(childTaxon, sec, "44");
661
	    node.setUnplaced(true);
662
	    node.setExcluded(true);
663

    
664
		cdmBases.add(taxon);
665
		cdmBases.add(concept);
666
		cdmBases.add(childTaxon);
667
		cdmBases.add(classification);
668

    
669

    
670
	}
671

    
672

    
673

    
674

    
675
	private void createReference(List<CdmBase> cdmBases) {
676
		Reference reference = ReferenceFactory.newArticle();
677
		Person author = Person.NewTitledInstance("Author team");
678
		reference.setAuthorship(author);
679
		reference.setTitle("ref title");
680
		reference.setAbbrevTitle("abbrev title");
681
		reference.setDatePublished(TimePeriodParser.parseString("1999"));
682
		reference.setEdition("edition");
683
		reference.setEditor("editor");
684
		Institution institution = Institution.NewInstance();
685
		reference.setInstitution(institution);
686
		reference.setIsbn("1234556");
687
		reference.setIssn("issn");
688
		reference.setDoi(DOI.fromRegistrantCodeAndSuffix("14356", "suffix"));
689
		reference.setReferenceAbstract("referenceAbstract");
690
		reference.setOrganization("organization");
691
		reference.setPages("123-134");
692
		reference.setPlacePublished("place Published");
693
		reference.setPublisher("publisher");
694
		Institution school = Institution.NewInstance();
695
		reference.setSchool(school);
696
//		reference.setSeriesPart("series");
697
		reference.setSeriesPart("seriesPart");
698
		reference.setVolume("vol. 3");
699
		reference.setUri(URI.create("http://rer.abc.de"));
700

    
701
		Reference journal = ReferenceFactory.newJournal();
702
		reference.setInJournal(journal);
703

    
704
		handleIdentifiableEntity(reference);
705

    
706
		cdmBases.add(reference);
707

    
708
	}
709

    
710

    
711

    
712

    
713
	private void createOccurrence(List<CdmBase> cdmBases) {
714
		//Collection
715
		Collection collection = Collection.NewInstance();
716
		Collection subCollection = Collection.NewInstance();
717
		subCollection.setSuperCollection(collection);
718
		handleIdentifiableEntity(collection);
719
		handleIdentifiableEntity(subCollection);
720
		cdmBases.add(subCollection);
721

    
722
		collection.setCode("coll code");
723
		collection.setCodeStandard("codeStandard");
724
		collection.setName("coll name");
725
		collection.setTownOrLocation("townOrLocation");
726
		Institution institution = Institution.NewInstance();
727
		collection.setInstitute(institution);
728

    
729
		//FieldUnit
730
		FieldUnit fieldUnit = FieldUnit.NewInstance();
731
		fieldUnit.setFieldNumber("fieldNumber");
732
		fieldUnit.setFieldNotes("fieldNotes");
733
		Person primaryCollector = Person.NewInstance();
734
		fieldUnit.setPrimaryCollector(primaryCollector);
735
		handleIdentifiableEntity(fieldUnit);
736

    
737
		GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
738
		fieldUnit.setGatheringEvent(gatheringEvent);
739
		gatheringEvent.putLocality(Language.ENGLISH(), "locality");
740
		gatheringEvent.setExactLocation(Point.NewInstance(22.4, -34.2,
741
				ReferenceSystem.WGS84(), 33));
742
		gatheringEvent.setCountry(Country.GERMANY());
743
		gatheringEvent.addCollectingArea(NamedArea.EUROPE());
744
		gatheringEvent.setCollectingMethod("collectingMethod");
745
		gatheringEvent.setAbsoluteElevation(10);
746
		gatheringEvent.setAbsoluteElevationMax(100);
747
		gatheringEvent.setAbsoluteElevationText("elevation text");
748

    
749
		gatheringEvent.setDistanceToGround(10.4);
750
		gatheringEvent.setDistanceToGroundMax(100.3);
751
		gatheringEvent.setDistanceToGroundText("distance to ground text");
752

    
753
		gatheringEvent.setDistanceToWaterSurface(10.4);
754
		gatheringEvent.setDistanceToWaterSurfaceMax(100.3);
755
		gatheringEvent.setDistanceToWaterSurfaceText("distance to water text");
756
		handleAnnotatableEntity(gatheringEvent);
757
		handleEventBase(gatheringEvent);
758

    
759

    
760
		//Derived Unit
761
		MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(SpecimenOrObservationType.StillImage);
762
		mediaSpecimen.setCollection(collection);
763
		mediaSpecimen.setCatalogNumber("catalogNumber");
764
		mediaSpecimen.setAccessionNumber("accessionNumber");
765
//		mediaSpecimen.setCollectorsNumber("collectorsNumber");
766
		mediaSpecimen.setBarcode("barcode");
767
		BotanicalName storedUnder = TaxonNameBase.NewBotanicalInstance(Rank.SPECIES());
768
		storedUnder.setTitleCache("Stored under", true);
769
		mediaSpecimen.setStoredUnder(storedUnder);
770
		mediaSpecimen.setExsiccatum("exsiccatum");
771
		PreservationMethod preservation = PreservationMethod.NewInstance(null, "My preservation");
772
		preservation.setTemperature(22.4);
773
		mediaSpecimen.setPreservation(preservation);
774
		mediaSpecimen.setOriginalLabelInfo("Original Label Info");
775
		handleIdentifiableEntity(mediaSpecimen);
776

    
777
		//DerivationEvent
778
		DerivationEvent event = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
779
		event.addOriginal(fieldUnit);
780
		event.addDerivative(mediaSpecimen);
781
		Institution inst = Institution.NewInstance();
782
		event.setInstitution(inst);
783
		handleAnnotatableEntity(event);
784
		handleEventBase(event);
785

    
786
		//SpecOrObservationBase
787
		fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
788
		DefinedTerm lifeStage = DefinedTerm.NewStageInstance("Live stage", "stage", null);
789
		cdmBases.add(lifeStage);
790
		fieldUnit.setLifeStage(lifeStage);
791
		DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null);
792
		cdmBases.add(kindOfUnit);
793
		fieldUnit.setKindOfUnit(kindOfUnit);
794
		fieldUnit.setIndividualCount(3);
795
		fieldUnit.putDefinition(Language.ENGLISH(), "definition");
796
		fieldUnit.setPublish(true);
797
		handleIdentifiableEntity(fieldUnit);
798

    
799
		//Determination
800
		DeterminationEvent determinationEvent = DeterminationEvent.NewInstance(getTaxon(), mediaSpecimen);
801
		determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
802
		determinationEvent.setPreferredFlag(true);
803
		determinationEvent.addReference(getReference());
804
		handleAnnotatableEntity(determinationEvent);
805
		handleEventBase(determinationEvent);
806

    
807
		cdmBases.add(fieldUnit);
808
		cdmBases.add(mediaSpecimen);
809
		cdmBases.add(collection);
810
	}
811

    
812

    
813
	private void createTaxonName(List<CdmBase> cdmBases) {
814
		BacterialName bacName = TaxonNameBase.NewBacterialInstance(Rank.GENUS());
815
		bacName.setSubGenusAuthorship("sub Genus author");
816
		bacName.setNameApprobation("nameApprobation");
817
		handleIdentifiableEntity(bacName);
818

    
819
		CultivarPlantName botName = CultivarPlantName.NewInstance(Rank.SUBSPECIES());
820
		botName.setAnamorphic(true);
821
		botName.setCultivarName("cultivarName");
822
		botName.setGenusOrUninomial("Genus");
823
		botName.setInfraGenericEpithet("InfraGeneric");
824
		botName.setSpecificEpithet("specificEpithet");
825
		botName.setInfraSpecificEpithet("infraSpecificEpithet");
826
		Person combinationAuthorship = Person.NewInstance();
827
		botName.setCombinationAuthorship(combinationAuthorship);
828
		Person exCombinationAuthorship = Person.NewInstance();
829
		botName.setExCombinationAuthorship(exCombinationAuthorship);
830
		Person basionymAuthorship = Person.NewInstance();
831
		botName.setBasionymAuthorship(basionymAuthorship);
832
		Person exBasionymAuthorship = Person.NewInstance();
833
		botName.setExBasionymAuthorship(exBasionymAuthorship);
834
		handleIdentifiableEntity(botName);
835
		handleAnnotatableEntity(botName.getHomotypicalGroup());
836
		BotanicalName botName2 = TaxonNameBase.NewBotanicalInstance(Rank.SPECIES());
837
		HybridRelationship hybridRel = botName2.addHybridChild(botName, HybridRelationshipType.FIRST_PARENT(), "Rule 1.2.3");
838
		hybridRel.setCitation(ReferenceFactory.newBook());
839
		hybridRel.setCitationMicroReference("p. 123");
840
		handleAnnotatableEntity(hybridRel);
841

    
842
		ZoologicalName zooName = TaxonNameBase.NewZoologicalInstance(Rank.GENUS());
843
		zooName.setBreed("breed");
844
		zooName.setPublicationYear(1922);
845
		zooName.setOriginalPublicationYear(1987);
846
		zooName.setAppendedPhrase("appended phrase");
847
		zooName.addDescription(TaxonNameDescription.NewInstance());
848
		zooName.setNomenclaturalMicroReference("p. 123");
849
		zooName.setNomenclaturalReference(getReference());
850
		NameRelationship rel = zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered");
851
		NomenclaturalStatus status = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222");
852
		zooName.addStatus(status);
853
		handleAnnotatableEntity(rel);
854
		handleAnnotatableEntity(status);
855
		handleIdentifiableEntity(zooName);
856

    
857
		//TypeDesignation
858
		ZoologicalName speciesZooName = TaxonNameBase.NewZoologicalInstance(Rank.SPECIES());
859
		NameTypeDesignation nameDesig = zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
860
				NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
861
		handleAnnotatableEntity(nameDesig);
862
		SpecimenTypeDesignation specimenDesig = speciesZooName.addSpecimenTypeDesignation(getSpecimen(), SpecimenTypeDesignationStatus.HOLOTYPE(),
863
				getReference(), "p,22", "original name", false, true);
864
		handleAnnotatableEntity(specimenDesig);
865

    
866
		ViralName viralName = ViralName.NewViralInstance(Rank.GENUS());
867
		viralName.setAcronym("acronym");
868
		handleIdentifiableEntity(viralName);
869

    
870

    
871
		cdmBases.add(bacName);
872
		cdmBases.add(botName);
873
		cdmBases.add(viralName);
874
		cdmBases.add(zooName);
875
	}
876

    
877
	private void handleEventBase(EventBase event){
878
		event.setTimeperiod(TimePeriodParser.parseString("1.4.1975-2.5.1980"));
879
		event.setActor(Person.NewTitledInstance("EventActor"));
880
		event.setDescription("Some interesing event");
881
	}
882

    
883
	private void handleAnnotatableEntity(AnnotatableEntity entity){
884
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
885
		entity.addAnnotation(annotation);
886
		Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), true);
887
		entity.addMarker(marker);
888
	}
889

    
890
	private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
891
		handleAnnotatableEntity(identifiableEntity);
892

    
893
		//Credits
894
		Person creditor = Person.NewTitledInstance("Creditor");
895
		Credit credit = Credit.NewInstance(creditor, "credit");
896
		identifiableEntity.addCredit(credit);
897

    
898
		//Extension
899
		Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
900

    
901
		//Identifier
902
		Identifier<?> identifier = identifiableEntity.addIdentifier("ident23", DefinedTerm.SEX_FEMALE());
903
		handleAnnotatableEntity(identifier);
904

    
905

    
906
		//Rights
907
		Rights rights = Rights.NewInstance("right", Language.ENGLISH());
908
		rights.setUri(URI.create("http://rights.abc.de"));
909
		rights.setAbbreviatedText("abbrev");
910
		rights.setType(RightsType.COPYRIGHT());
911
		Person owner = Person.NewTitledInstance("Owner");
912
		rights.setAgent(owner);
913
		identifiableEntity.addRights(rights);
914

    
915
		if (identifiableEntity.isInstanceOf(IdentifiableMediaEntity.class)){
916
			Media media = Media.NewInstance(URI.create("http://www.identifiableMedia.de"), 22, "img/jpg", "jpg");
917
			((IdentifiableMediaEntity<?>)identifiableEntity).addMedia(media);
918
		}
919

    
920
		//source
921
		IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
922
				getReference(), "123");
923
		source.setOriginalNameString("original name");
924

    
925
		//LSID
926
		 try {
927
			LSID lsid = new LSID("urn:lsid:a.b.de:namespace:1234");
928
			identifiableEntity.setLsid(lsid);
929
		} catch (MalformedLSIDException e) {
930
			e.printStackTrace();
931
		}
932

    
933

    
934
	}
935

    
936

    
937
	private Reference getReference() {
938
		 Reference result = ReferenceFactory.newGeneric();
939
		 result.setTitle("some generic reference");
940
		 return result;
941
	}
942

    
943

    
944
	private DerivedUnit getSpecimen() {
945
		DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
946
		return derivedUnit;
947
	}
948

    
949

    
950

    
951
	private Taxon getTaxon() {
952
		Reference sec = getReference();
953
		TaxonNameBase<?,?> name = TaxonNameBase.NewBotanicalInstance(Rank.GENUS());
954
		Taxon taxon = Taxon.NewInstance(name, sec);
955
		return taxon;
956

    
957
	}
958
}
    (1-1/1)