Project

General

Profile

Download (38 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.DescriptiveDataSet;
49
import eu.etaxonomy.cdm.model.description.Distribution;
50
import eu.etaxonomy.cdm.model.description.Feature;
51
import eu.etaxonomy.cdm.model.description.FeatureNode;
52
import eu.etaxonomy.cdm.model.description.FeatureTree;
53
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
54
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
55
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
56
import eu.etaxonomy.cdm.model.description.MediaKey;
57
import eu.etaxonomy.cdm.model.description.MultiAccessKey;
58
import eu.etaxonomy.cdm.model.description.PolytomousKey;
59
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
60
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
61
import eu.etaxonomy.cdm.model.description.QuantitativeData;
62
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
63
import eu.etaxonomy.cdm.model.description.State;
64
import eu.etaxonomy.cdm.model.description.StateData;
65
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
66
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
67
import eu.etaxonomy.cdm.model.description.TaxonDescription;
68
import eu.etaxonomy.cdm.model.description.TaxonInteraction;
69
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
70
import eu.etaxonomy.cdm.model.description.TextData;
71
import eu.etaxonomy.cdm.model.description.TextFormat;
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.HybridRelationship;
98
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
99
import eu.etaxonomy.cdm.model.name.NameRelationship;
100
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
101
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
102
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
103
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
104
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
105
import eu.etaxonomy.cdm.model.name.Rank;
106
import eu.etaxonomy.cdm.model.name.Registration;
107
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
108
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
109
import eu.etaxonomy.cdm.model.name.TaxonName;
110
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
111
import eu.etaxonomy.cdm.model.occurrence.Collection;
112
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
113
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
114
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
115
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
116
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
117
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
118
import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
119
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
120
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
121
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
122
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
123
import eu.etaxonomy.cdm.model.reference.Reference;
124
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
125
import eu.etaxonomy.cdm.model.taxon.Classification;
126
import eu.etaxonomy.cdm.model.taxon.Synonym;
127
import eu.etaxonomy.cdm.model.taxon.SynonymType;
128
import eu.etaxonomy.cdm.model.taxon.Taxon;
129
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
130
import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
131
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
132
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
133
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
134

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

    
153

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

    
157
		createAgents(cdmBases);
158

    
159
		createDescriptions(cdmBases);
160

    
161
		createMedia(cdmBases);
162

    
163
		createMolecular(cdmBases);
164

    
165
		createTaxonName(cdmBases);
166

    
167
		createOccurrence(cdmBases);
168

    
169
		createReference(cdmBases);
170

    
171
		createTaxon(cdmBases);
172

    
173
		createSupplemental(cdmBases);
174

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

    
180

    
181
	private void createSupplemental(List<CdmBase> cdmBases)  {
182

    
183
		Reference ref = ReferenceFactory.newBook();
184

    
185
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
186
		ref.addAnnotation(annotation);
187
		handleAnnotatableEntity(annotation);
188

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

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

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

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

    
210
		cdmBases.add(user);
211
		cdmBases.add(group);
212

    
213

    
214
		cdmBases.add(ref);
215

    
216
	}
217

    
218

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

    
231
		handleIdentifiableEntity(person);
232

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

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

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

    
251

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

    
258

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

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

    
271
		cdmBases.add(person);
272
		cdmBases.add(team);
273
		cdmBases.add(institution);
274
	}
275

    
276

    
277
	private void createDescriptions(List<CdmBase> cdmBases) {
278

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

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

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

    
299

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

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

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

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

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

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

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

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

    
357

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

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

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

    
373
		DerivedUnit describedSpecimenOrObservation = DerivedUnit.NewInstance(SpecimenOrObservationType.DerivedUnit);
374
		taxonDescription.setDescribedSpecimenOrObservation(describedSpecimenOrObservation);
375

    
376
		taxonDescription.addScope(DefinedTerm.SEX_FEMALE());
377
		taxonDescription.addGeoScope(Country.GERMANY());
378
		handleIdentifiableEntity(taxonDescription);
379

    
380
		cdmBases.add(taxon);
381

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

    
392
		taxonDescription.addDescriptionSource(ref);
393

    
394

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

    
401
		//Name description
402
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
403
		TaxonNameDescription nameDesc = TaxonNameDescription.NewInstance(name);
404
		cdmBases.add(name);
405
		handleAnnotatableEntity(nameDesc);
406

    
407

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

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

    
426

    
427
		//DescriptiveDataSet
428
		DescriptiveDataSet descriptiveDataSet = DescriptiveDataSet.NewInstance();
429
		descriptiveDataSet.addDescription(taxonDescription);
430
		descriptiveDataSet.setLabel("My Descriptive Dataset");
431
		descriptiveDataSet.getDescriptiveSystem();
432
		handleAnnotatableEntity(descriptiveDataSet);
433
		descriptiveDataSet.addGeoFilterArea(Country.GERMANY());
434
		Classification classification = Classification.NewInstance("DescriptiveDataSet subtree classification");
435
		Taxon subTreeTaxon = getTaxon();
436
        TaxonNode subtree = classification.addChildTaxon(subTreeTaxon, null, null);
437
		descriptiveDataSet.addTaxonSubtree(subtree);
438

    
439
		cdmBases.add(classification);
440
		cdmBases.add(subtree);
441

    
442

    
443
		//polytomous keys
444
		Taxon coveredTaxon = Taxon.NewInstance(name, null);
445
		PolytomousKey key = PolytomousKey.NewTitledInstance("My Polykey");
446
		handleIdentificationKey(key, taxon, coveredTaxon);
447
		key.setStartNumber(10);
448

    
449

    
450
		PolytomousKeyNode firstChildNode = PolytomousKeyNode.NewInstance("Green", "What is the leave length?", coveredTaxon, leaveLength);
451
		key.getRoot().addChild(firstChildNode);
452
		PolytomousKeyNode secondChildNode = PolytomousKeyNode.NewInstance("234");
453
		firstChildNode.addChild(secondChildNode);
454

    
455
		PolytomousKey subkey = PolytomousKey.NewTitledInstance("Sub-key");
456
		firstChildNode.setSubkey(subkey);
457

    
458
		PolytomousKeyNode subKeyNode = PolytomousKeyNode.NewInstance("sub key couplet");
459
		subkey.getRoot().addChild(subKeyNode);
460
		secondChildNode.setOtherNode(subKeyNode);
461

    
462
		secondChildNode.putModifyingText(Language.GERMAN(), "manchmal");
463

    
464
		cdmBases.add(key);
465
		cdmBases.add(subkey);
466

    
467
		MediaKey mediaKey = MediaKey.NewInstance();
468
		mediaKey.addKeyRepresentation(Representation.NewInstance("Media Key Representation", "media key", null, Language.ENGLISH()));
469
		handleIdentificationKey(mediaKey, taxon, coveredTaxon);
470

    
471
		MultiAccessKey multiAccessKey = MultiAccessKey.NewInstance();
472
		handleIdentificationKey(multiAccessKey, taxon, coveredTaxon);
473

    
474
		cdmBases.add(mediaKey);
475
		cdmBases.add(multiAccessKey);
476

    
477
	}
478

    
479

    
480

    
481
	private void handleIdentificationKey(IIdentificationKey key, Taxon taxon, Taxon coveredTaxon){
482
		key.addCoveredTaxon(coveredTaxon);
483
		key.addGeographicalScope(Country.GERMANY());
484
		key.addScopeRestriction(DefinedTerm.SEX_FEMALE());
485
		key.addTaxonomicScope(taxon);
486
		if (key instanceof IdentifiableEntity<?>){
487
			handleIdentifiableEntity((IdentifiableEntity<?>)key);
488
		}else{
489
			handleAnnotatableEntity((AnnotatableEntity)key);
490
		}
491

    
492

    
493
	}
494

    
495

    
496
	private void createMedia(List<CdmBase> cdmBases){
497
		AudioFile audioFile = AudioFile.NewInstance(URI.create("http://a.b.de"), 22);
498
		ImageFile imageFile = ImageFile.NewInstance(URI.create("http://b.c.de"), 44, 467, 55);
499
		MovieFile movieFile = MovieFile.NewInstance(URI.create("http://b.c.de"), 67);
500
		MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance("mime", "media");
501

    
502
		mediaRepresentation.addRepresentationPart(movieFile);
503
		mediaRepresentation.addRepresentationPart(imageFile);
504
		mediaRepresentation.addRepresentationPart(audioFile);
505
		Media media = Media.NewInstance();
506
		media.addRepresentation(mediaRepresentation);
507

    
508
		media.putTitle(Language.ENGLISH(), "Media title");
509
		media.setMediaCreated(DateTime.now());
510
		media.putDescription(Language.ENGLISH(), "Media description");
511
		handleIdentifiableEntity(media);
512

    
513

    
514
		Person artist = Person.NewTitledInstance("artist");
515
		media.setArtist(artist);
516
		cdmBases.add(media);
517
		cdmBases.add(artist);
518
	}
519

    
520

    
521
	private void createMolecular(List<CdmBase> cdmBases) {
522
		DnaSample dnaSample = DnaSample.NewInstance();
523

    
524
		//Amplification
525
		Amplification amplification = Amplification.NewInstance();
526

    
527
		DefinedTerm dnaMarker = DefinedTerm.NewDnaMarkerInstance("My dna marker", "dna marker", null);
528
		cdmBases.add(dnaMarker);
529
		amplification.setDnaMarker(dnaMarker);
530
		Institution inst = Institution.NewInstance();
531
		amplification.setInstitution(inst);
532
		handleEventBase(amplification);
533
		handleAnnotatableEntity(amplification);
534

    
535
		Primer forwardPrimer = Primer.NewInstance("forward primer");
536
		forwardPrimer.setPublishedIn(getReference());
537
		forwardPrimer.setSequence(SequenceString.NewInstance("my sequence"));
538
		handleAnnotatableEntity(forwardPrimer);
539

    
540
		Primer reversePrimer = Primer.NewInstance("reverse primer");
541
		handleAnnotatableEntity(reversePrimer);
542

    
543
		amplification.setForwardPrimer(forwardPrimer);
544
		amplification.setReversePrimer(reversePrimer);
545

    
546
		DefinedTerm purificationMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "purification method", "purification method", null);
547
		cdmBases.add(purificationMethod);
548
		MaterialOrMethodEvent purification = MaterialOrMethodEvent.NewInstance(purificationMethod, "purification method");
549
		amplification.setPurification(purification);
550
		handleAnnotatableEntity(purification);
551
		handleAnnotatableEntity(purificationMethod);
552

    
553
		amplification.setLadderUsed("ladder");
554
		amplification.setElectrophoresisVoltage(5.5);
555
		amplification.setGelConcentration(2.4);
556
		amplification.setGelRunningTime(3.6);
557

    
558
		//Amplification result
559
		AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample, amplification);
560
		amplificationResult.setSuccessful(true);
561
		amplificationResult.setSuccessText("Very successful");
562
		handleAnnotatableEntity(amplificationResult);
563

    
564
		DefinedTerm cloningMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "cloning method", "cloning method", null);
565
		cdmBases.add(cloningMethod);
566
		Cloning cloning = Cloning.NewInstance(cloningMethod, "My cloning method", "my strain", forwardPrimer, reversePrimer);
567
		amplificationResult.setCloning(cloning);
568
		handleAnnotatableEntity(cloningMethod);
569
		handleAnnotatableEntity(cloning);
570

    
571
		Media gelPhoto = Media.NewInstance();
572
		amplificationResult.setGelPhoto(gelPhoto);
573

    
574
		//SingleRead
575
		SingleRead singleRead = SingleRead.NewInstance();
576
		handleAnnotatableEntity(singleRead);
577
		amplificationResult.addSingleRead(singleRead);
578
		MaterialOrMethodEvent readMethod = MaterialOrMethodEvent.NewInstance(null, "read method");
579
		singleRead.setMaterialOrMethod(readMethod);
580
		handleAnnotatableEntity(readMethod);
581

    
582
		Media pherogram = Media.NewInstance();
583
		singleRead.setPherogram(pherogram);
584

    
585
		singleRead.setPrimer(forwardPrimer);
586
		singleRead.setSequence(SequenceString.NewInstance("ABTC"));
587
		singleRead.setDirection(SequenceDirection.Forward);
588

    
589
		//Sequence
590
		Sequence sequence = Sequence.NewInstance("ADDT");
591
		dnaSample.addSequence(sequence);
592

    
593
//		SequenceString alignedSequence = SequenceString.NewInstance("AGTC");
594
		Shift[] shifts = new Shift[]{new Shift(66,1),new Shift(103,-2)};
595
		SingleReadAlignment.NewInstance(sequence, singleRead, shifts, "AGTC");
596

    
597
		Media contigFile = Media.NewInstance();
598
		sequence.setContigFile(contigFile);
599
		sequence.setIsBarcode(true);
600
		sequence.setDnaMarker(dnaMarker);
601
		sequence.setBarcodeSequencePart(SequenceString.NewInstance("ADTA"));
602
		sequence.setGeneticAccessionNumber("GenNO12345");
603
		sequence.setBoldProcessId("boldId");
604
		sequence.setHaplotype("haplotype");
605
		Reference sequenceCitation = getReference();
606
		sequence.addCitation(sequenceCitation);
607
		handleAnnotatableEntity(sequence);
608

    
609
		//DnaQuality
610
		DnaQuality dnaQuality = DnaQuality.NewInstance();
611
		dnaQuality.setConcentration(2.0);
612
		MeasurementUnit mu = MeasurementUnit.NewInstance("mg/ml", "mg/ml","mg/ml");
613
		cdmBases.add(mu);
614
		dnaQuality.setConcentrationUnit(mu);
615
		dnaQuality.setPurificationMethod("purification method");
616
		dnaQuality.setQualityCheckDate(DateTime.now());
617
		dnaQuality.setQualityTerm(null); //TODO
618
		dnaQuality.setRatioOfAbsorbance260_230(22.0);
619
		dnaQuality.setRatioOfAbsorbance260_280(3.9);
620
		dnaSample.setDnaQuality(dnaQuality);
621

    
622

    
623
		//Phylogenetic Tree
624
		PhylogeneticTree phyloTree = PhylogeneticTree.NewInstance();
625
		phyloTree.addUsedSequences(sequence);
626
		handleIdentifiableEntity(phyloTree);
627

    
628

    
629
		cdmBases.add(dnaSample);
630
		cdmBases.add(phyloTree);
631
	}
632

    
633

    
634
	private void createTaxon(List<CdmBase> cdmBases) {
635
		Reference sec = getReference();
636
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
637
		Taxon taxon = Taxon.NewInstance(name, sec);
638
		handleIdentifiableEntity(taxon);
639

    
640
		TaxonName synName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
641
		Synonym syn = Synonym.NewInstance(synName, sec, "123");
642
		taxon.addSynonym(syn, SynonymType.HETEROTYPIC_SYNONYM_OF());
643
		taxon.setDoubtful(true);
644
		handleIdentifiableEntity(syn);
645

    
646

    
647
		Taxon concept = Taxon.NewInstance(name, getReference());
648
		TaxonRelationship taxRel = taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
649
				sec, "444");
650
		taxon.setTaxonStatusUnknown(true);
651
		handleAnnotatableEntity(taxRel);
652

    
653

    
654
		//Classification
655
		Classification classification = Classification.NewInstance("My classification", sec);
656
		classification.setMicroReference("p. 123");
657
		classification.setTimeperiod(TimePeriodParser.parseString("1.1.2012-4.8.2013"));
658
		classification.addGeoScope(Country.GERMANY());
659
		classification.putDescription(Language.ENGLISH(), "An interesting classification");
660

    
661
		TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
662
		handleIdentifiableEntity(classification);
663
		handleAnnotatableEntity(node);
664
		node.putExcludedNote(Language.DEFAULT(), "Excluded note");
665
		DefinedTerm agentRelationType = DefinedTerm.NewTaxonNodeAgentRelationTypeInstance(null, "agentRelation", "ar");
666
		Person agent = Person.NewTitledInstance("Related agent");
667
		TaxonNodeAgentRelation agentRelation = node.addAgentRelation(agentRelationType, agent);
668
		handleAnnotatableEntity(agentRelation);
669

    
670
		Taxon childTaxon = Taxon.NewInstance(synName, sec);
671
		node.addChildTaxon(childTaxon, sec, "44");
672
	    node.setUnplaced(true);
673
	    node.setExcluded(true);
674

    
675
		cdmBases.add(taxon);
676
		cdmBases.add(concept);
677
		cdmBases.add(childTaxon);
678
		cdmBases.add(classification);
679
		cdmBases.add(agentRelationType);
680

    
681

    
682
	}
683

    
684

    
685

    
686

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

    
713
		Reference journal = ReferenceFactory.newJournal();
714
		reference.setInJournal(journal);
715

    
716
		handleIdentifiableEntity(reference);
717

    
718
		cdmBases.add(reference);
719

    
720
	}
721

    
722

    
723

    
724

    
725
	private void createOccurrence(List<CdmBase> cdmBases) {
726
		//Collection
727
		Collection collection = Collection.NewInstance();
728
		Collection subCollection = Collection.NewInstance();
729
		subCollection.setSuperCollection(collection);
730
		handleIdentifiableEntity(collection);
731
		handleIdentifiableEntity(subCollection);
732
		cdmBases.add(subCollection);
733

    
734
		collection.setCode("coll code");
735
		collection.setCodeStandard("codeStandard");
736
		collection.setName("coll name");
737
		collection.setTownOrLocation("townOrLocation");
738
		Institution institution = Institution.NewInstance();
739
		collection.setInstitute(institution);
740

    
741
		//FieldUnit
742
		FieldUnit fieldUnit = FieldUnit.NewInstance();
743
		fieldUnit.setFieldNumber("fieldNumber");
744
		fieldUnit.setFieldNotes("fieldNotes");
745
		Person primaryCollector = Person.NewInstance();
746
		fieldUnit.setPrimaryCollector(primaryCollector);
747
		handleIdentifiableEntity(fieldUnit);
748

    
749
		GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
750
		fieldUnit.setGatheringEvent(gatheringEvent);
751
		gatheringEvent.putLocality(Language.ENGLISH(), "locality");
752
		gatheringEvent.setExactLocation(Point.NewInstance(22.4, -34.2,
753
				ReferenceSystem.WGS84(), 33));
754
		gatheringEvent.setCountry(Country.GERMANY());
755
		gatheringEvent.addCollectingArea(NamedArea.EUROPE());
756
		gatheringEvent.setCollectingMethod("collectingMethod");
757
		gatheringEvent.setAbsoluteElevation(10);
758
		gatheringEvent.setAbsoluteElevationMax(100);
759
		gatheringEvent.setAbsoluteElevationText("elevation text");
760

    
761
		gatheringEvent.setDistanceToGround(10.4);
762
		gatheringEvent.setDistanceToGroundMax(100.3);
763
		gatheringEvent.setDistanceToGroundText("distance to ground text");
764

    
765
		gatheringEvent.setDistanceToWaterSurface(10.4);
766
		gatheringEvent.setDistanceToWaterSurfaceMax(100.3);
767
		gatheringEvent.setDistanceToWaterSurfaceText("distance to water text");
768
		handleAnnotatableEntity(gatheringEvent);
769
		handleEventBase(gatheringEvent);
770

    
771

    
772
		//Derived Unit
773
		MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(SpecimenOrObservationType.StillImage);
774
		mediaSpecimen.setCollection(collection);
775
		mediaSpecimen.setCatalogNumber("catalogNumber");
776
		mediaSpecimen.setAccessionNumber("accessionNumber");
777
//		mediaSpecimen.setCollectorsNumber("collectorsNumber");
778
		mediaSpecimen.setBarcode("barcode");
779
		TaxonName storedUnder = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
780
		storedUnder.setTitleCache("Stored under", true);
781
		mediaSpecimen.setStoredUnder(storedUnder);
782
		mediaSpecimen.setExsiccatum("exsiccatum");
783
		PreservationMethod preservation = PreservationMethod.NewInstance(null, "My preservation");
784
		preservation.setTemperature(22.4);
785
		mediaSpecimen.setPreservation(preservation);
786
		mediaSpecimen.setOriginalLabelInfo("Original Label Info");
787
		handleIdentifiableEntity(mediaSpecimen);
788

    
789
		//DerivationEvent
790
		DerivationEvent event = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
791
		event.addOriginal(fieldUnit);
792
		event.addDerivative(mediaSpecimen);
793
		Institution inst = Institution.NewInstance();
794
		event.setInstitution(inst);
795
		handleAnnotatableEntity(event);
796
		handleEventBase(event);
797

    
798
		//SpecOrObservationBase
799
		fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
800
		DefinedTerm lifeStage = DefinedTerm.NewStageInstance("Live stage", "stage", null);
801
		cdmBases.add(lifeStage);
802
		fieldUnit.setLifeStage(lifeStage);
803
		DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null);
804
		cdmBases.add(kindOfUnit);
805
		fieldUnit.setKindOfUnit(kindOfUnit);
806
		fieldUnit.setIndividualCount("3");
807
		fieldUnit.putDefinition(Language.ENGLISH(), "definition");
808
		fieldUnit.setPublish(true);
809
		handleIdentifiableEntity(fieldUnit);
810

    
811
		//Determination
812
		DeterminationEvent determinationEvent = DeterminationEvent.NewInstance(getTaxon(), mediaSpecimen);
813
		determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
814
		determinationEvent.setPreferredFlag(true);
815
		determinationEvent.addReference(getReference());
816
		handleAnnotatableEntity(determinationEvent);
817
		handleEventBase(determinationEvent);
818

    
819
		cdmBases.add(fieldUnit);
820
		cdmBases.add(mediaSpecimen);
821
		cdmBases.add(collection);
822
	}
823

    
824

    
825
	private void createTaxonName(List<CdmBase> cdmBases) {
826
		TaxonName bacName = TaxonNameFactory.NewBacterialInstance(Rank.GENUS());
827
		bacName.setSubGenusAuthorship("sub Genus author");
828
		bacName.setNameApprobation("nameApprobation");
829
		handleIdentifiableEntity(bacName);
830

    
831
		TaxonName botName = TaxonNameFactory.NewCultivarInstance(Rank.SUBSPECIES());
832
		botName.setAnamorphic(true);
833
		botName.setCultivarName("cultivarName");
834
		botName.setGenusOrUninomial("Genus");
835
		botName.setInfraGenericEpithet("InfraGeneric");
836
		botName.setSpecificEpithet("specificEpithet");
837
		botName.setInfraSpecificEpithet("infraSpecificEpithet");
838
		Person combinationAuthorship = Person.NewInstance();
839
		botName.setCombinationAuthorship(combinationAuthorship);
840
		Person exCombinationAuthorship = Person.NewInstance();
841
		botName.setExCombinationAuthorship(exCombinationAuthorship);
842
		Person basionymAuthorship = Person.NewInstance();
843
		botName.setBasionymAuthorship(basionymAuthorship);
844
		Person exBasionymAuthorship = Person.NewInstance();
845
		botName.setExBasionymAuthorship(exBasionymAuthorship);
846
		handleIdentifiableEntity(botName);
847
		handleAnnotatableEntity(botName.getHomotypicalGroup());
848
		TaxonName botName2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
849
		HybridRelationship hybridRel = botName2.addHybridChild(botName, HybridRelationshipType.FIRST_PARENT(), "Rule 1.2.3");
850
		hybridRel.setCitation(ReferenceFactory.newBook());
851
		hybridRel.setCitationMicroReference("p. 123");
852
		handleAnnotatableEntity(hybridRel);
853

    
854
		TaxonName zooName = TaxonNameFactory.NewZoologicalInstance(Rank.GENUS());
855
		zooName.setBreed("breed");
856
		zooName.setPublicationYear(1922);
857
		zooName.setOriginalPublicationYear(1987);
858
		zooName.setAppendedPhrase("appended phrase");
859
		zooName.addDescription(TaxonNameDescription.NewInstance());
860
		zooName.setNomenclaturalMicroReference("p. 123");
861
		zooName.setNomenclaturalReference(getReference());
862
		NameRelationship rel = zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered");
863
		NomenclaturalStatus status = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222");
864
		zooName.addStatus(status);
865
		handleAnnotatableEntity(rel);
866
		handleAnnotatableEntity(status);
867
		handleIdentifiableEntity(zooName);
868

    
869
		//TypeDesignation
870
		TaxonName speciesZooName = TaxonNameFactory.NewZoologicalInstance(Rank.SPECIES());
871
		NameTypeDesignation nameDesig = zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
872
				NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
873
		handleAnnotatableEntity(nameDesig);
874
		SpecimenTypeDesignation specimenDesig = speciesZooName.addSpecimenTypeDesignation(getSpecimen(), SpecimenTypeDesignationStatus.HOLOTYPE(),
875
				getReference(), "p,22", "original name", false, true);
876
		handleAnnotatableEntity(specimenDesig);
877

    
878
		TaxonName viralName = TaxonNameFactory.NewViralInstance(Rank.GENUS());
879
		viralName.setAcronym("acronym");
880
		handleIdentifiableEntity(viralName);
881

    
882
		//Registration
883
		Registration registration = Registration.NewInstance("registration identifier",
884
		        "specificIdentifier", speciesZooName, null);
885
		registration.addTypeDesignation(specimenDesig);
886
		registration.setRegistrationDate(DateTime.now());
887
		Registration blockingRegistration = Registration.NewInstance();
888
		registration.addBlockedBy(blockingRegistration);
889
		registration.setInstitution(Institution.NewInstance());
890
		User submitter = User.NewInstance("submitter", "12345");
891
		registration.setSubmitter(submitter);
892

    
893
		cdmBases.add(submitter);
894
		cdmBases.add(bacName);
895
		cdmBases.add(botName);
896
		cdmBases.add(viralName);
897
		cdmBases.add(zooName);
898
		cdmBases.add(botName2);
899
	}
900

    
901
	private void handleEventBase(EventBase event){
902
		event.setTimeperiod(TimePeriodParser.parseString("1.4.1975-2.5.1980"));
903
		event.setActor(Person.NewTitledInstance("EventActor"));
904
		event.setDescription("Some interesing event");
905
	}
906

    
907
	private void handleAnnotatableEntity(AnnotatableEntity entity){
908
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
909
		entity.addAnnotation(annotation);
910
		Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), true);
911
		entity.addMarker(marker);
912
	}
913

    
914
	private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
915
		handleAnnotatableEntity(identifiableEntity);
916

    
917
		//Credits
918
		Person creditor = Person.NewTitledInstance("Creditor");
919
		Credit credit = Credit.NewInstance(creditor, "credit");
920
		identifiableEntity.addCredit(credit);
921

    
922
		//Extension
923
		Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
924

    
925
		//Identifier
926
		Identifier<?> identifier = identifiableEntity.addIdentifier("ident23", DefinedTerm.SEX_FEMALE());
927
		handleAnnotatableEntity(identifier);
928

    
929

    
930
		//Rights
931
		Rights rights = Rights.NewInstance("right", Language.ENGLISH());
932
		rights.setUri(URI.create("http://rights.abc.de"));
933
		rights.setAbbreviatedText("abbrev");
934
		rights.setType(RightsType.COPYRIGHT());
935
		Person owner = Person.NewTitledInstance("Owner");
936
		rights.setAgent(owner);
937
		identifiableEntity.addRights(rights);
938

    
939
		if (identifiableEntity.isInstanceOf(IdentifiableMediaEntity.class)){
940
			Media media = Media.NewInstance(URI.create("http://www.identifiableMedia.de"), 22, "img/jpg", "jpg");
941
			((IdentifiableMediaEntity<?>)identifiableEntity).addMedia(media);
942
		}
943

    
944
		//source
945
		IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
946
				getReference(), "123");
947
		source.setOriginalNameString("original name");
948

    
949
		//LSID
950
		 try {
951
			LSID lsid = new LSID("urn:lsid:a.b.de:namespace:1234");
952
			identifiableEntity.setLsid(lsid);
953
		} catch (MalformedLSIDException e) {
954
			e.printStackTrace();
955
		}
956

    
957

    
958
	}
959

    
960

    
961
	private Reference getReference() {
962
		 Reference result = ReferenceFactory.newGeneric();
963
		 result.setTitle("some generic reference");
964
		 return result;
965
	}
966

    
967

    
968
	private DerivedUnit getSpecimen() {
969
		DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
970
		return derivedUnit;
971
	}
972

    
973

    
974

    
975
	private Taxon getTaxon() {
976
		Reference sec = getReference();
977
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
978
		Taxon taxon = Taxon.NewInstance(name, sec);
979
		return taxon;
980

    
981
	}
982
}
    (1-1/1)