Project

General

Profile

Download (41.6 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2020 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9
package eu.etaxonomy.cdm.database.data;
10

    
11
import java.math.BigDecimal;
12
import java.util.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.hibernate.Session;
17
import org.joda.time.DateTime;
18

    
19
import com.ibm.lsid.MalformedLSIDException;
20

    
21
import eu.etaxonomy.cdm.common.DOI;
22
import eu.etaxonomy.cdm.common.URI;
23
import eu.etaxonomy.cdm.model.agent.Address;
24
import eu.etaxonomy.cdm.model.agent.Contact;
25
import eu.etaxonomy.cdm.model.agent.Institution;
26
import eu.etaxonomy.cdm.model.agent.ORCID;
27
import eu.etaxonomy.cdm.model.agent.Person;
28
import eu.etaxonomy.cdm.model.agent.Team;
29
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
30
import eu.etaxonomy.cdm.model.common.Annotation;
31
import eu.etaxonomy.cdm.model.common.AnnotationType;
32
import eu.etaxonomy.cdm.model.common.CdmBase;
33
import eu.etaxonomy.cdm.model.common.Credit;
34
import eu.etaxonomy.cdm.model.common.EventBase;
35
import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
36
import eu.etaxonomy.cdm.model.common.Extension;
37
import eu.etaxonomy.cdm.model.common.ExtensionType;
38
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
39
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
40
import eu.etaxonomy.cdm.model.common.Identifier;
41
import eu.etaxonomy.cdm.model.common.IntextReference;
42
import eu.etaxonomy.cdm.model.common.LSID;
43
import eu.etaxonomy.cdm.model.common.LSIDAuthority;
44
import eu.etaxonomy.cdm.model.common.Language;
45
import eu.etaxonomy.cdm.model.common.LanguageString;
46
import eu.etaxonomy.cdm.model.common.Marker;
47
import eu.etaxonomy.cdm.model.common.MarkerType;
48
import eu.etaxonomy.cdm.model.common.TimePeriod;
49
import eu.etaxonomy.cdm.model.description.CategoricalData;
50
import eu.etaxonomy.cdm.model.description.CommonTaxonName;
51
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
52
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
53
import eu.etaxonomy.cdm.model.description.Distribution;
54
import eu.etaxonomy.cdm.model.description.Feature;
55
import eu.etaxonomy.cdm.model.description.IIdentificationKey;
56
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
57
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
58
import eu.etaxonomy.cdm.model.description.MediaKey;
59
import eu.etaxonomy.cdm.model.description.MultiAccessKey;
60
import eu.etaxonomy.cdm.model.description.PolytomousKey;
61
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
62
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
63
import eu.etaxonomy.cdm.model.description.QuantitativeData;
64
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
65
import eu.etaxonomy.cdm.model.description.State;
66
import eu.etaxonomy.cdm.model.description.StateData;
67
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
68
import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
69
import eu.etaxonomy.cdm.model.description.TaxonDescription;
70
import eu.etaxonomy.cdm.model.description.TaxonInteraction;
71
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
72
import eu.etaxonomy.cdm.model.description.TemporalData;
73
import eu.etaxonomy.cdm.model.description.TextData;
74
import eu.etaxonomy.cdm.model.description.TextFormat;
75
import eu.etaxonomy.cdm.model.location.Country;
76
import eu.etaxonomy.cdm.model.location.NamedArea;
77
import eu.etaxonomy.cdm.model.location.Point;
78
import eu.etaxonomy.cdm.model.location.ReferenceSystem;
79
import eu.etaxonomy.cdm.model.media.AudioFile;
80
import eu.etaxonomy.cdm.model.media.ExternalLink;
81
import eu.etaxonomy.cdm.model.media.ExternalLinkType;
82
import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
83
import eu.etaxonomy.cdm.model.media.ImageFile;
84
import eu.etaxonomy.cdm.model.media.Media;
85
import eu.etaxonomy.cdm.model.media.MediaMetaData;
86
import eu.etaxonomy.cdm.model.media.MediaRepresentation;
87
import eu.etaxonomy.cdm.model.media.MovieFile;
88
import eu.etaxonomy.cdm.model.media.Rights;
89
import eu.etaxonomy.cdm.model.media.RightsType;
90
import eu.etaxonomy.cdm.model.molecular.Amplification;
91
import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
92
import eu.etaxonomy.cdm.model.molecular.Cloning;
93
import eu.etaxonomy.cdm.model.molecular.DnaQuality;
94
import eu.etaxonomy.cdm.model.molecular.DnaSample;
95
import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
96
import eu.etaxonomy.cdm.model.molecular.Primer;
97
import eu.etaxonomy.cdm.model.molecular.Sequence;
98
import eu.etaxonomy.cdm.model.molecular.SequenceDirection;
99
import eu.etaxonomy.cdm.model.molecular.SequenceString;
100
import eu.etaxonomy.cdm.model.molecular.SingleRead;
101
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
102
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment.Shift;
103
import eu.etaxonomy.cdm.model.name.HybridRelationship;
104
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
105
import eu.etaxonomy.cdm.model.name.NameRelationship;
106
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
107
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
108
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
109
import eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition;
110
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
111
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
112
import eu.etaxonomy.cdm.model.name.Rank;
113
import eu.etaxonomy.cdm.model.name.Registration;
114
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
115
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
116
import eu.etaxonomy.cdm.model.name.TaxonName;
117
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
118
import eu.etaxonomy.cdm.model.occurrence.Collection;
119
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
120
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
121
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
122
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
123
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
124
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
125
import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
126
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
127
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
128
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
129
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
130
import eu.etaxonomy.cdm.model.permission.CdmAuthority;
131
import eu.etaxonomy.cdm.model.permission.Group;
132
import eu.etaxonomy.cdm.model.permission.Operation;
133
import eu.etaxonomy.cdm.model.permission.PermissionClass;
134
import eu.etaxonomy.cdm.model.permission.Role;
135
import eu.etaxonomy.cdm.model.permission.User;
136
import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
137
import eu.etaxonomy.cdm.model.reference.Reference;
138
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
139
import eu.etaxonomy.cdm.model.taxon.Classification;
140
import eu.etaxonomy.cdm.model.taxon.Synonym;
141
import eu.etaxonomy.cdm.model.taxon.SynonymType;
142
import eu.etaxonomy.cdm.model.taxon.Taxon;
143
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
144
import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
145
import eu.etaxonomy.cdm.model.taxon.TaxonNodeStatus;
146
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
147
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
148
import eu.etaxonomy.cdm.model.taxon.TaxonomicOperation;
149
import eu.etaxonomy.cdm.model.taxon.TaxonomicOperationType;
150
import eu.etaxonomy.cdm.model.term.DefinedTerm;
151
import eu.etaxonomy.cdm.model.term.Representation;
152
import eu.etaxonomy.cdm.model.term.TermNode;
153
import eu.etaxonomy.cdm.model.term.TermTree;
154
import eu.etaxonomy.cdm.model.term.TermType;
155
import eu.etaxonomy.cdm.model.term.TermVocabulary;
156
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
157

    
158
/**
159
 * This class tries to create a database that has
160
 * at least one record in each table.
161
 * It is meant to test update scripts as well as imports
162
 * and exports.
163
 *
164
 * ATTENTION: As the content of the created database may change
165
 * over time due to model changes and other requirements test using
166
 * this class should be written in a way that they do rather
167
 * depend on general parameter than concrete data values.
168
 *
169
 * @author a.mueller
170
 * @since 2013-12-02
171
 */
172
public class FullCoverageDataGenerator {
173

    
174
	public void fillWithData(Session session){
175
		List<CdmBase> cdmBases = new ArrayList<>();
176

    
177
		createAgents(cdmBases);
178

    
179
		createDescriptions(cdmBases);
180

    
181
		createMedia(cdmBases);
182

    
183
		createMolecular(cdmBases);
184

    
185
		createTaxonName(cdmBases);
186

    
187
		createOccurrence(cdmBases);
188

    
189
		createReference(cdmBases);
190

    
191
		createTaxon(cdmBases);
192

    
193
		createSupplemental(cdmBases);
194

    
195
		createUserAuthority(cdmBases);
196

    
197
		for (CdmBase cdmBase: cdmBases){
198
			session.save(cdmBase);
199
		}
200
	}
201

    
202
    private void createUserAuthority(List<CdmBase> cdmBases) {
203
        // TODO Auto-generated method stub
204
    }
205

    
206
    private void createSupplemental(List<CdmBase> cdmBases)  {
207

    
208
		Reference ref = ReferenceFactory.newBook();
209

    
210
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
211
		ref.addAnnotation(annotation);
212
		handleAnnotatableEntity(annotation);
213

    
214
		Credit credit = Credit.NewInstance(Person.NewInstance(), "refCredit", "rc", Language.DEFAULT());
215
		ref.addCredit(credit);
216
		handleAnnotatableEntity(credit);
217

    
218
		Rights rights = Rights.NewInstance("My rights", Language.GERMAN());
219
		ref.addRights(rights);
220
		handleAnnotatableEntity(rights);
221

    
222
		//Others
223
		try {
224
			LSIDAuthority lsidAuthority = new LSIDAuthority("My authority");
225
			lsidAuthority.addNamespace("lsidNamespace", TaxonName.class);
226
			cdmBases.add(lsidAuthority);
227
		} catch (MalformedLSIDException e) {
228
			e.printStackTrace();
229
		}
230

    
231
		User user = User.NewInstance("myUser", "12345");
232
		Group group = Group.NewInstance("MyGroup");
233
		group.addMember(user);
234
		CdmAuthority authority = CdmAuthority.NewInstance(PermissionClass.TAXONNAME,
235
		        "a property", Operation.CREATE, UUID.fromString("f1653cb8-5956-429e-852a-4a3b57893f49"));
236
		group.addAuthority(authority);
237
		Role role = Role.NewInstance("my role");
238
		user.addAuthority(role);
239

    
240
		cdmBases.add(user);
241
		cdmBases.add(group);
242
		cdmBases.add(authority);
243

    
244
		cdmBases.add(ref);
245
	}
246

    
247
	private void createAgents(List<CdmBase> cdmBases) {
248
		//Person
249
		Person person = Person.NewTitledInstance("Person Title");
250
		person.setGivenName("first name");
251
		person.setFamilyName("last name");
252
		person.setCollectorTitle("C. collector");
253
		person.setLifespan(TimePeriodParser.parseString("1905-1995"));
254
		person.setPrefix("prefix");
255
		person.setSuffix("suffix");
256
		person.setOrcid(ORCID.fromString("0000-0001-5000-0007"));
257

    
258
		handleIdentifiableEntity(person);
259

    
260
		//Contact
261
		Contact contact = Contact.NewInstance();
262
		person.setContact(contact);
263
		Point locality = Point.NewInstance(45.12, -38.69, ReferenceSystem.WGS84(), 22);
264
		contact.addEmailAddress("a@b.de");
265
		contact.addFaxNumber("f:010-123456");
266
		contact.addPhoneNumber("p:090-987654");
267
		contact.addUrl(URI.create("http://www.abc.de"));
268

    
269
		//Address
270
		Address address = Address.NewInstance(Country.GERMANY(), "locality", "pobox", "12345", "region", "street", locality);
271
		contact.addAddress(address);
272

    
273
		//Team
274
		Team team = Team.NewTitledInstance("Team title", "Team abbrev title");
275
		team.addTeamMember(person);
276
		handleIdentifiableEntity(team);
277

    
278
		//Institution
279
		Institution institution = Institution.NewInstance();
280
		institution.setCode("institution code");
281
		institution.setName("institution name");
282
		handleIdentifiableEntity(institution);
283

    
284

    
285
		//TODO vocabulary
286
//		voc = "29ad808b-3126-4274-be81-4561e7afc76f"
287
		DefinedTerm instType = DefinedTerm.NewInstitutionTypeInstance("Description forthis instition type", "institution type", "inst. t.");
288
		cdmBases.add(instType);
289
		institution.addType(instType);
290
		person.addInstitutionalMembership(institution, TimePeriodParser.parseString("1955-1956"), "department", "role");
291

    
292
		Institution subInstitution = Institution.NewInstance();
293
		subInstitution.setCode("sub institution code");
294
		subInstitution.setName("sub institution name");
295
		subInstitution.setIsPartOf(institution);
296

    
297
		cdmBases.add(person);
298
		cdmBases.add(team);
299
		cdmBases.add(institution);
300
	}
301

    
302
	private void createDescriptions(List<CdmBase> cdmBases) {
303

    
304
		TermVocabulary<AnnotationType> voc = TermVocabulary.NewInstance(TermType.AnnotationType, AnnotationType.class,
305
		        "my termVoc desc", "myTerm voc", "mtv", URI.create("http://www.abc.de"));
306
		handleIdentifiableEntity(voc);
307
		cdmBases.add(voc);
308

    
309
		Representation rep = voc.getRepresentations().iterator().next();
310
		handleAnnotatableEntity(rep);
311
//		Representation engRep = Language.ENGLISH().getRepresentations().iterator().next();
312
//		handleAnnotatableEntity(engRep);
313
//		cdmBases.add(engRep);  //needed?
314

    
315
		//Categorical data
316
		State state = State.NewInstance("Test state", "state", "st.");
317
		state.addMedia(Media.NewInstance());
318
		cdmBases.add(state);
319
		CategoricalData categoricalData = CategoricalData.NewInstance(state, Feature.CONSERVATION());
320
		StateData stateData = categoricalData.getStateData().get(0);
321
		stateData.addModifier(DefinedTerm.SEX_FEMALE());
322
		handleAnnotatableEntity(categoricalData);
323

    
324
		State nextState = State.NewInstance();
325
		cdmBases.add(nextState);
326
		StateData stateData2 = StateData.NewInstance(nextState);
327
		stateData2.setCount(3);
328
		stateData2.putModifyingText(Language.ENGLISH(), "State2 modifying text");
329
		categoricalData.addStateData(stateData2);
330
		categoricalData.setOrderRelevant(true);
331

    
332
		//Quantitative data
333
		Feature leaveLength = Feature.NewInstance("Leave length description", "leave length", "l.l.");
334
		cdmBases.add(leaveLength);
335
		leaveLength.setSupportsQuantitativeData(true);
336
		QuantitativeData quantitativeData = QuantitativeData.NewInstance(leaveLength);
337
		MeasurementUnit measurementUnit = MeasurementUnit.NewInstance("Measurement Unit", "munit", null);
338
		cdmBases.add(measurementUnit);
339
		quantitativeData.setUnit(measurementUnit);
340
		quantitativeData.setUuid(UUID.fromString("920fce5e-4913-4a3f-89bf-1611f5081869"));
341
		StatisticalMeasurementValue statisticalMeasurementValue = quantitativeData.setAverage(
342
		        new BigDecimal("22.9215"), null);
343
		handleAnnotatableEntity(quantitativeData);
344
		handleIdentifiableEntity(measurementUnit);
345
		DefinedTerm valueModifier = DefinedTerm.NewModifierInstance("about", "about", null);
346
		statisticalMeasurementValue.addModifier(valueModifier);
347
		cdmBases.add(valueModifier);
348

    
349
		//Feature
350
		TermVocabulary<DefinedTerm> recommendedModifierEnumeration = TermVocabulary.NewInstance(TermType.Modifier, DefinedTerm.class);
351
		leaveLength.addRecommendedModifierEnumeration(recommendedModifierEnumeration);
352
		cdmBases.add(recommendedModifierEnumeration);
353
		TermVocabulary<State> supportedCategoricalEnumeration = TermVocabulary.NewInstance(TermType.State, State.class);
354
		leaveLength.addSupportedCategoricalEnumeration(supportedCategoricalEnumeration);
355
		cdmBases.add(supportedCategoricalEnumeration);
356
		leaveLength.addRecommendedMeasurementUnit(measurementUnit);
357
		leaveLength.addRecommendedStatisticalMeasure(StatisticalMeasure.AVERAGE());
358

    
359
		//CommonTaxonName
360
		CommonTaxonName commonTaxonName = CommonTaxonName.NewInstance("common name", Language.ENGLISH(), Country.UNITEDSTATESOFAMERICA());
361
		handleAnnotatableEntity(commonTaxonName);
362

    
363
		//TextData
364
		TextData textData = TextData.NewInstance(Feature.DIAGNOSIS());
365
		Language eng = Language.ENGLISH();
366
		textData.putText(eng, "My text data");
367
		LanguageString languageString = textData.getLanguageText(eng);
368

    
369
		Taxon referencedTaxon = getTaxon();
370
		cdmBases.add(referencedTaxon);
371
		languageString.addIntextReference(IntextReference.NewInstance(referencedTaxon, languageString, 2, 5));
372
		textData.putModifyingText(eng, "nice diagnosis");
373
		handleAnnotatableEntity(textData);
374
		handleAnnotatableEntity(languageString);
375

    
376
		TextFormat format = TextFormat.NewInstance("format", "format", null);
377
		textData.setFormat(format);
378
		cdmBases.add(format);
379
		handleAnnotatableEntity(format);
380

    
381
		//IndividualsAssociation
382
		DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
383
		IndividualsAssociation indAssoc = IndividualsAssociation.NewInstance(specimen);
384
		indAssoc.putDescription(Language.ENGLISH(), "description for individuals association");
385
		handleAnnotatableEntity(indAssoc);
386

    
387
		//TaxonInteraction
388
		TaxonInteraction taxonInteraction = TaxonInteraction.NewInstance(Feature.HOSTPLANT());
389
		taxonInteraction.putDescription(Language.ENGLISH(), "interaction description");
390
		handleAnnotatableEntity(taxonInteraction);
391

    
392
		//Distribution
393
		NamedArea inCountryArea = NamedArea.NewInstance("My area in a country", "my area", "ma");
394
		inCountryArea.addCountry(Country.TURKEYREPUBLICOF());
395
		cdmBases.add(inCountryArea);
396
		Distribution distribution = Distribution.NewInstance(inCountryArea, PresenceAbsenceTerm.CULTIVATED());
397
		handleAnnotatableEntity(distribution);
398

    
399
		//TemporalData
400
		Feature floweringSeason = Feature.FLOWERING_PERIOD();
401
        TemporalData temporalData = TemporalData.NewInstance(ExtendedTimePeriod.NewExtendedMonthInstance(5, 8, 4, 9));
402
        temporalData.setFeature(floweringSeason);
403
        temporalData.getPeriod().setFreeText("My temporal text");
404
        handleAnnotatableEntity(temporalData);
405
        temporalData.setUuid(UUID.fromString("9a1c91c0-fc58-4310-94cb-8c26115985d3"));
406

    
407
		Taxon taxon = getTaxon();
408
		TaxonDescription taxonDescription = TaxonDescription.NewInstance(taxon);
409
		taxonDescription.addElements(categoricalData, quantitativeData,
410
				textData, commonTaxonName, taxonInteraction, indAssoc, distribution, temporalData);
411

    
412
		DerivedUnit describedSpecimenOrObservation = DerivedUnit.NewInstance(SpecimenOrObservationType.DerivedUnit);
413
		taxonDescription.setDescribedSpecimenOrObservation(describedSpecimenOrObservation);
414

    
415
		taxonDescription.addScope(DefinedTerm.SEX_FEMALE());
416
		taxonDescription.addGeoScope(Country.GERMANY());
417
		handleIdentifiableEntity(taxonDescription);
418

    
419
		taxon.addAggregationSource(taxonDescription);
420

    
421
		cdmBases.add(taxon);
422

    
423
		//DescriptionElmenetBase  + source
424
		textData.addMedia(Media.NewInstance());
425
		textData.addModifier(DefinedTerm.SEX_HERMAPHRODITE());
426
		textData.putModifyingText(Language.ENGLISH(), "no modification");
427
		textData.setTimeperiod(TimePeriodParser.parseString("1970-1980"));
428
		Reference ref = ReferenceFactory.newArticle();
429
		DescriptionElementSource source = textData.addSource(OriginalSourceType.Import, "22", "taxon description table", ref, "detail");
430
		source.setNameUsedInSource(TaxonNameFactory.NewBotanicalInstance(Rank.GENUS()));
431
		ExternalLink link = ExternalLink.NewInstance(ExternalLinkType.WebSite,
432
		        URI.create("http://wwww.abd.de"), "Somehow useful link", 445);
433
		source.addLink(link);
434
		handleAnnotatableEntity(source);
435

    
436
		taxonDescription.addDescriptionSource(ref);  //as long as it still exists
437

    
438

    
439
		//Specimen description
440
		SpecimenOrObservationBase<?> describedSpecimen = getSpecimen();
441
		SpecimenDescription specDesc = SpecimenDescription.NewInstance(specimen);
442
		cdmBases.add(describedSpecimen);
443
		handleAnnotatableEntity(specDesc);
444

    
445
		//Name description
446
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
447
		TaxonNameDescription nameDesc = TaxonNameDescription.NewInstance(name);
448
		cdmBases.add(name);
449
		handleAnnotatableEntity(nameDesc);
450

    
451

    
452
		//Feature Tree
453
		TermTree<Feature> featureTree = TermTree.NewFeatureInstance();
454
//		featureTree
455
        TermNode<Feature> descriptionTermNode = featureTree.getRoot().addChild(Feature.DESCRIPTION());
456
        TermNode<Feature> leaveLengthNode = descriptionTermNode.addChild(leaveLength);
457
		handleIdentifiableEntity(featureTree);
458

    
459
		State inapplicableState = State.NewInstance("inapplicableState", "inapplicableState", null);
460
		State applicableState = State.NewInstance("only applicable state", "only applicable state", null);
461
		cdmBases.add(applicableState);
462
		cdmBases.add(inapplicableState);
463
		leaveLengthNode.addInapplicableState(leaveLength, inapplicableState);  //this is semantically not correct, should be a parent feature
464
		leaveLengthNode.addApplicableState(leaveLength, applicableState);
465
		cdmBases.add(featureTree);
466
		cdmBases.add(leaveLengthNode);
467

    
468

    
469
		//DescriptiveDataSet
470
		DescriptiveDataSet descriptiveDataSet = DescriptiveDataSet.NewInstance();
471
		descriptiveDataSet.addDescription(taxonDescription);
472
		descriptiveDataSet.setLabel("My Descriptive Dataset");
473
		descriptiveDataSet.getDescriptiveSystem();
474
		handleAnnotatableEntity(descriptiveDataSet);
475
		descriptiveDataSet.addGeoFilterArea(Country.GERMANY());
476
		Classification classification = Classification.NewInstance("DescriptiveDataSet subtree classification");
477
		Taxon subTreeTaxon = getTaxon();
478
        TaxonNode subtree = classification.addChildTaxon(subTreeTaxon, null, null);
479
		descriptiveDataSet.addTaxonSubtree(subtree);
480

    
481
		cdmBases.add(classification);
482
		cdmBases.add(subtree);
483

    
484

    
485
		//polytomous keys
486
		Taxon coveredTaxon = Taxon.NewInstance(name, null);
487
		PolytomousKey key = PolytomousKey.NewTitledInstance("My Polykey");
488
		handleIdentificationKey(key, taxon, coveredTaxon);
489
		key.setStartNumber(10);
490

    
491

    
492
		PolytomousKeyNode firstChildNode = PolytomousKeyNode.NewInstance("Green", "What is the leave length?", coveredTaxon, leaveLength);
493
		key.getRoot().addChild(firstChildNode);
494
		PolytomousKeyNode secondChildNode = PolytomousKeyNode.NewInstance("234");
495
		firstChildNode.addChild(secondChildNode);
496

    
497
		PolytomousKey subkey = PolytomousKey.NewTitledInstance("Sub-key");
498
		firstChildNode.setSubkey(subkey);
499

    
500
		PolytomousKeyNode subKeyNode = PolytomousKeyNode.NewInstance("sub key couplet");
501
		subkey.getRoot().addChild(subKeyNode);
502
		secondChildNode.setOtherNode(subKeyNode);
503

    
504
		secondChildNode.putModifyingText(Language.GERMAN(), "manchmal");
505

    
506
		cdmBases.add(key);
507
		cdmBases.add(subkey);
508

    
509
		MediaKey mediaKey = MediaKey.NewInstance();
510
		mediaKey.addKeyRepresentation(Representation.NewInstance("Media Key Representation", "media key", null, Language.ENGLISH()));
511
		handleIdentificationKey(mediaKey, taxon, coveredTaxon);
512

    
513
		MultiAccessKey multiAccessKey = MultiAccessKey.NewInstance();
514
		handleIdentificationKey(multiAccessKey, taxon, coveredTaxon);
515

    
516
		cdmBases.add(mediaKey);
517
		cdmBases.add(multiAccessKey);
518

    
519
	}
520

    
521

    
522

    
523
	private void handleIdentificationKey(IIdentificationKey key, Taxon taxon, Taxon coveredTaxon){
524
		key.addCoveredTaxon(coveredTaxon);
525
		key.addGeographicalScope(Country.GERMANY());
526
		key.addScopeRestriction(DefinedTerm.SEX_FEMALE());
527
		key.addTaxonomicScope(taxon);
528
		if (key instanceof IdentifiableEntity<?>){
529
			handleIdentifiableEntity((IdentifiableEntity<?>)key);
530
		}else{
531
			handleAnnotatableEntity((AnnotatableEntity)key);
532
		}
533

    
534

    
535
	}
536

    
537

    
538
	private void createMedia(List<CdmBase> cdmBases){
539
		AudioFile audioFile = AudioFile.NewInstance(URI.create("http://a.b.de"), 22);
540
		ImageFile imageFile = ImageFile.NewInstance(URI.create("http://b.c.de"), 44, 467, 55);
541
		MovieFile movieFile = MovieFile.NewInstance(URI.create("http://b.c.de"), 67);
542
		MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance("mime", "media");
543

    
544
		mediaRepresentation.addRepresentationPart(movieFile);
545
		mediaRepresentation.addRepresentationPart(imageFile);
546
		mediaRepresentation.addRepresentationPart(audioFile);
547
		Media media = Media.NewInstance();
548
		media.addRepresentation(mediaRepresentation);
549

    
550
		media.putTitle(Language.ENGLISH(), "Media title");
551
		media.setMediaCreated(TimePeriod.NewInstance(DateTime.now()));
552
		media.putDescription(Language.ENGLISH(), "Media description");
553
		handleIdentifiableEntity(media);
554

    
555

    
556
		Person artist = Person.NewTitledInstance("artist");
557
		media.setArtist(artist);
558
		cdmBases.add(media);
559
		cdmBases.add(artist);
560

    
561
		MediaMetaData.NewInstance(imageFile, "Key", "Value");
562
	}
563

    
564

    
565
	private void createMolecular(List<CdmBase> cdmBases) {
566
		DnaSample dnaSample = DnaSample.NewInstance();
567

    
568
		//Amplification
569
		Amplification amplification = Amplification.NewInstance();
570

    
571
		DefinedTerm dnaMarker = DefinedTerm.NewDnaMarkerInstance("My dna marker", "dna marker", null);
572
		cdmBases.add(dnaMarker);
573
		amplification.setDnaMarker(dnaMarker);
574
		Institution inst = Institution.NewInstance();
575
		amplification.setInstitution(inst);
576
		handleEventBase(amplification);
577
		handleAnnotatableEntity(amplification);
578

    
579
		Primer forwardPrimer = Primer.NewInstance("forward primer");
580
		forwardPrimer.setPublishedIn(getReference());
581
		forwardPrimer.setSequence(SequenceString.NewInstance("my sequence"));
582
		handleAnnotatableEntity(forwardPrimer);
583

    
584
		Primer reversePrimer = Primer.NewInstance("reverse primer");
585
		handleAnnotatableEntity(reversePrimer);
586

    
587
		amplification.setForwardPrimer(forwardPrimer);
588
		amplification.setReversePrimer(reversePrimer);
589

    
590
		DefinedTerm purificationMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "purification method", "purification method", null);
591
		cdmBases.add(purificationMethod);
592
		MaterialOrMethodEvent purification = MaterialOrMethodEvent.NewInstance(purificationMethod, "purification method");
593
		amplification.setPurification(purification);
594
		handleAnnotatableEntity(purification);
595
		handleAnnotatableEntity(purificationMethod);
596

    
597
		amplification.setLadderUsed("ladder");
598
		amplification.setElectrophoresisVoltage(5.5);
599
		amplification.setGelConcentration(2.4);
600
		amplification.setGelRunningTime(3.6);
601

    
602
		//Amplification result
603
		AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample, amplification);
604
		amplificationResult.setSuccessful(true);
605
		amplificationResult.setSuccessText("Very successful");
606
		handleAnnotatableEntity(amplificationResult);
607

    
608
		DefinedTerm cloningMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "cloning method", "cloning method", null);
609
		cdmBases.add(cloningMethod);
610
		Cloning cloning = Cloning.NewInstance(cloningMethod, "My cloning method", "my strain", forwardPrimer, reversePrimer);
611
		amplificationResult.setCloning(cloning);
612
		handleAnnotatableEntity(cloningMethod);
613
		handleAnnotatableEntity(cloning);
614

    
615
		Media gelPhoto = Media.NewInstance();
616
		amplificationResult.setGelPhoto(gelPhoto);
617

    
618
		//SingleRead
619
		SingleRead singleRead = SingleRead.NewInstance();
620
		handleAnnotatableEntity(singleRead);
621
		amplificationResult.addSingleRead(singleRead);
622
		MaterialOrMethodEvent readMethod = MaterialOrMethodEvent.NewInstance(null, "read method");
623
		singleRead.setMaterialOrMethod(readMethod);
624
		handleAnnotatableEntity(readMethod);
625

    
626
		Media pherogram = Media.NewInstance();
627
		singleRead.setPherogram(pherogram);
628

    
629
		singleRead.setPrimer(forwardPrimer);
630
		singleRead.setSequence(SequenceString.NewInstance("ABTC"));
631
		singleRead.setDirection(SequenceDirection.Forward);
632

    
633
		//Sequence
634
		Sequence sequence = Sequence.NewInstance("ADDT");
635
		dnaSample.addSequence(sequence);
636

    
637
//		SequenceString alignedSequence = SequenceString.NewInstance("AGTC");
638
		Shift[] shifts = new Shift[]{new Shift(66,1),new Shift(103,-2)};
639
		SingleReadAlignment.NewInstance(sequence, singleRead, shifts, "AGTC");
640

    
641
		Media contigFile = Media.NewInstance();
642
		sequence.setContigFile(contigFile);
643
		sequence.setIsBarcode(true);
644
		sequence.setDnaMarker(dnaMarker);
645
		sequence.setBarcodeSequencePart(SequenceString.NewInstance("ADTA"));
646
		sequence.setGeneticAccessionNumber("GenNO12345");
647
		sequence.setBoldProcessId("boldId");
648
		sequence.setHaplotype("haplotype");
649
		Reference sequenceCitation = getReference();
650
		sequence.addCitation(sequenceCitation);
651
		handleAnnotatableEntity(sequence);
652

    
653
		//DnaQuality
654
		DnaQuality dnaQuality = DnaQuality.NewInstance();
655
		dnaQuality.setConcentration(2.0);
656
		MeasurementUnit mu = MeasurementUnit.NewInstance("mg/ml", "mg/ml","mg/ml");
657
		cdmBases.add(mu);
658
		dnaQuality.setConcentrationUnit(mu);
659
		dnaQuality.setPurificationMethod("purification method");
660
		dnaQuality.setQualityCheckDate(DateTime.now());
661
		dnaQuality.setQualityTerm(null); //TODO
662
		dnaQuality.setRatioOfAbsorbance260_230(22.0);
663
		dnaQuality.setRatioOfAbsorbance260_280(3.9);
664
		dnaSample.setDnaQuality(dnaQuality);
665

    
666
		//Phylogenetic Tree
667
		PhylogeneticTree phyloTree = PhylogeneticTree.NewInstance();
668
		phyloTree.addUsedSequences(sequence);
669
		handleIdentifiableEntity(phyloTree);
670

    
671
		cdmBases.add(dnaSample);
672
		cdmBases.add(phyloTree);
673
	}
674

    
675
	private void createTaxon(List<CdmBase> cdmBases) {
676

    
677
		Reference sec = getReference();
678
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
679
		Taxon taxon = Taxon.NewInstance(name, sec);
680
		taxon.getSecSource().addLink(ExternalLink.NewInstance(ExternalLinkType.WebSite, URI.create("https://www.abc.de"),
681
		        "link description", Language.GERMAN(), 44));
682
		handleIdentifiableEntity(taxon);
683

    
684
		TaxonName synName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
685
		Synonym syn = Synonym.NewInstance(synName, sec, "123");
686
		taxon.addSynonym(syn, SynonymType.HETEROTYPIC_SYNONYM_OF());
687
		taxon.setDoubtful(true);
688
		handleIdentifiableEntity(syn);
689

    
690
		Taxon concept = Taxon.NewInstance(name, getReference());
691
		TaxonRelationship taxRel = taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
692
				sec, "444");
693
		taxRel.setOperation(TaxonomicOperation.NewInstance(TaxonomicOperationType.SPLIT));
694
		taxon.setTaxonStatusUnknown(true);
695
		handleAnnotatableEntity(taxRel);
696
		concept.setConcept(true);
697
		concept.setNameUsage(true);
698
		concept.setHomotypicGroups(true);
699
		concept.setConceptId("euromed123");
700
		concept.setPersistent(true);
701
		concept.setCurrentConceptPeriod(TimePeriod.NewInstance(1999, 2019));
702
		concept.setSupportsProvenance(true);
703

    
704
		//Classification
705
		Classification classification = Classification.NewInstance("My classification", sec);
706
		classification.setMicroReference("p. 123");
707
		classification.setTimeperiod(TimePeriodParser.parseString("1.1.2012-4.8.2013"));
708
		classification.addGeoScope(Country.GERMANY());
709
		classification.putDescription(Language.ENGLISH(), "An interesting classification");
710

    
711
		TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
712
		handleIdentifiableEntity(classification);
713
		handleAnnotatableEntity(node);
714
		node.putStatusNote(Language.DEFAULT(), "Status note");
715
		DefinedTerm agentRelationType = DefinedTerm.NewTaxonNodeAgentRelationTypeInstance(null, "agentRelation", "ar");
716
		Person agent = Person.NewTitledInstance("Related agent");
717
		TaxonNodeAgentRelation agentRelation = node.addAgentRelation(agentRelationType, agent);
718
		handleAnnotatableEntity(agentRelation);
719

    
720
		Taxon childTaxon = Taxon.NewInstance(synName, sec);
721
		node.addChildTaxon(childTaxon, sec, "44");
722
	    node.setStatus(TaxonNodeStatus.EXCLUDED);
723

    
724
		cdmBases.add(taxon);
725
		cdmBases.add(concept);
726
		cdmBases.add(childTaxon);
727
		cdmBases.add(classification);
728
		cdmBases.add(agentRelationType);
729
	}
730

    
731
	private void createReference(List<CdmBase> cdmBases) {
732
		Reference reference = ReferenceFactory.newArticle();
733
		Person author = Person.NewTitledInstance("Author team");
734
		reference.setAuthorship(author);
735
		reference.setTitle("ref title");
736
		reference.setAbbrevTitle("abbrev title");
737
		reference.setDatePublished(TimePeriodParser.parseStringVerbatim("1999"));
738
		reference.setEdition("edition");
739
		reference.setEditor("editor");
740
		Institution institution = Institution.NewInstance();
741
		reference.setInstitution(institution);
742
		reference.setIsbn("1234556");
743
		reference.setIssn("issn");
744
		reference.setDoi(DOI.fromRegistrantCodeAndSuffix("14356", "suffix"));
745
		reference.setReferenceAbstract("referenceAbstract");
746
		reference.setOrganization("organization");
747
		reference.setPages("123-134");
748
		reference.setPlacePublished("place Published");
749
		reference.setPublisher("publisher");
750
		Institution school = Institution.NewInstance();
751
		reference.setSchool(school);
752
//		reference.setSeriesPart("series");
753
		reference.setSeriesPart("seriesPart");
754
		reference.setVolume("vol. 3");
755
		reference.setUri(URI.create("http://rer.abc.de"));
756

    
757
		Reference journal = ReferenceFactory.newJournal();
758
		reference.setInJournal(journal);
759

    
760
		handleIdentifiableEntity(reference);
761

    
762
		cdmBases.add(reference);
763

    
764
	}
765

    
766

    
767

    
768

    
769
	private void createOccurrence(List<CdmBase> cdmBases) {
770
		//Collection
771
		Collection collection = Collection.NewInstance();
772
		Collection subCollection = Collection.NewInstance();
773
		subCollection.setSuperCollection(collection);
774
		handleIdentifiableEntity(collection);
775
		handleIdentifiableEntity(subCollection);
776
		cdmBases.add(subCollection);
777

    
778
		collection.setCode("coll code");
779
		collection.setCodeStandard("codeStandard");
780
		collection.setName("coll name");
781
		collection.setTownOrLocation("townOrLocation");
782
		Institution institution = Institution.NewInstance();
783
		collection.setInstitute(institution);
784

    
785
		//FieldUnit
786
		FieldUnit fieldUnit = FieldUnit.NewInstance();
787
		fieldUnit.setFieldNumber("fieldNumber");
788
		fieldUnit.setFieldNotes("fieldNotes");
789
		Person primaryCollector = Person.NewInstance();
790
		fieldUnit.setPrimaryCollector(primaryCollector);
791
		handleIdentifiableEntity(fieldUnit);
792

    
793
		GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
794
		fieldUnit.setGatheringEvent(gatheringEvent);
795
		gatheringEvent.putLocality(Language.ENGLISH(), "locality");
796
		gatheringEvent.setExactLocation(Point.NewInstance(22.4, -34.2,
797
				ReferenceSystem.WGS84(), 33));
798
		gatheringEvent.setCountry(Country.GERMANY());
799
		gatheringEvent.addCollectingArea(NamedArea.EUROPE());
800
		gatheringEvent.setCollectingMethod("collectingMethod");
801
		gatheringEvent.setAbsoluteElevation(10);
802
		gatheringEvent.setAbsoluteElevationMax(100);
803
		gatheringEvent.setAbsoluteElevationText("elevation text");
804

    
805
		gatheringEvent.setDistanceToGround(10.4);
806
		gatheringEvent.setDistanceToGroundMax(100.3);
807
		gatheringEvent.setDistanceToGroundText("distance to ground text");
808

    
809
		gatheringEvent.setDistanceToWaterSurface(10.4);
810
		gatheringEvent.setDistanceToWaterSurfaceMax(100.3);
811
		gatheringEvent.setDistanceToWaterSurfaceText("distance to water text");
812
		handleAnnotatableEntity(gatheringEvent);
813
		handleEventBase(gatheringEvent);
814

    
815

    
816
		//Derived Unit
817
		MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(SpecimenOrObservationType.StillImage);
818
		mediaSpecimen.setCollection(collection);
819
		mediaSpecimen.setCatalogNumber("catalogNumber");
820
		mediaSpecimen.setAccessionNumber("accessionNumber");
821
//		mediaSpecimen.setCollectorsNumber("collectorsNumber");
822
		mediaSpecimen.setBarcode("barcode");
823
		TaxonName storedUnder = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
824
		storedUnder.setTitleCache("Stored under", true);
825
		mediaSpecimen.setStoredUnder(storedUnder);
826
		mediaSpecimen.setExsiccatum("exsiccatum");
827
		PreservationMethod preservation = PreservationMethod.NewInstance(null, "My preservation");
828
		preservation.setTemperature(22.4);
829
		mediaSpecimen.setPreservation(preservation);
830
		mediaSpecimen.setOriginalLabelInfo("Original Label Info");
831
		handleIdentifiableEntity(mediaSpecimen);
832

    
833
		//DerivationEvent
834
		DerivationEvent event = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
835
		event.addOriginal(fieldUnit);
836
		event.addDerivative(mediaSpecimen);
837
		Institution inst = Institution.NewInstance();
838
		event.setInstitution(inst);
839
		handleAnnotatableEntity(event);
840
		handleEventBase(event);
841

    
842
		//SpecOrObservationBase
843
		fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
844
		DefinedTerm lifeStage = DefinedTerm.NewStageInstance("Live stage", "stage", null);
845
		cdmBases.add(lifeStage);
846
		fieldUnit.setLifeStage(lifeStage);
847
		DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null);
848
		cdmBases.add(kindOfUnit);
849
		fieldUnit.setKindOfUnit(kindOfUnit);
850
		fieldUnit.setIndividualCount("3");
851
		fieldUnit.putDefinition(Language.ENGLISH(), "definition");
852
		fieldUnit.setPublish(true);
853
		handleIdentifiableEntity(fieldUnit);
854

    
855
		//Determination
856
		DeterminationEvent determinationEvent = DeterminationEvent.NewInstance(getTaxon(), mediaSpecimen);
857
		determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
858
		determinationEvent.setPreferredFlag(true);
859
		determinationEvent.addReference(getReference());
860
		handleAnnotatableEntity(determinationEvent);
861
		handleEventBase(determinationEvent);
862

    
863
		cdmBases.add(fieldUnit);
864
		cdmBases.add(mediaSpecimen);
865
		cdmBases.add(collection);
866
	}
867

    
868

    
869
	private void createTaxonName(List<CdmBase> cdmBases) {
870
		TaxonName bacName = TaxonNameFactory.NewBacterialInstance(Rank.GENUS());
871
		bacName.setSubGenusAuthorship("sub Genus author");
872
		bacName.setNameApprobation("nameApprobation");
873
		handleIdentifiableEntity(bacName);
874

    
875
		TaxonName botName = TaxonNameFactory.NewCultivarInstance(Rank.SUBSPECIES());
876
		botName.setAnamorphic(true);
877
		botName.setCultivarEpithet("cultivarEpithet");
878
		botName.setGenusOrUninomial("Genus");
879
		botName.setInfraGenericEpithet("InfraGeneric");
880
		botName.setSpecificEpithet("specificEpithet");
881
		botName.setInfraSpecificEpithet("infraSpecificEpithet");
882
		Person combinationAuthorship = Person.NewInstance();
883
		botName.setCombinationAuthorship(combinationAuthorship);
884
		Person exCombinationAuthorship = Person.NewInstance();
885
		botName.setExCombinationAuthorship(exCombinationAuthorship);
886
		Person basionymAuthorship = Person.NewInstance();
887
		botName.setBasionymAuthorship(basionymAuthorship);
888
		Person exBasionymAuthorship = Person.NewInstance();
889
		botName.setExBasionymAuthorship(exBasionymAuthorship);
890
		handleIdentifiableEntity(botName);
891
		handleAnnotatableEntity(botName.getHomotypicalGroup());
892
		TaxonName botName2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
893
		HybridRelationship hybridRel = botName2.addHybridChild(botName, HybridRelationshipType.FIRST_PARENT(), "Rule 1.2.3");
894
		hybridRel.setCitation(ReferenceFactory.newBook());
895
		hybridRel.setCitationMicroReference("p. 123");
896
		handleAnnotatableEntity(hybridRel);
897

    
898
		TaxonName zooName = TaxonNameFactory.NewZoologicalInstance(Rank.GENUS());
899
		zooName.setBreed("breed");
900
		zooName.setPublicationYear(1922);
901
		zooName.setOriginalPublicationYear(1987);
902
		zooName.setAppendedPhrase("appended phrase");
903
		zooName.addDescription(TaxonNameDescription.NewInstance());
904
		zooName.setNomenclaturalMicroReference("p. 123");
905
		zooName.setNomenclaturalReference(getReference());
906
		NameRelationship rel = zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered", NomenclaturalCodeEdition.ICN_2017_SHENZHEN);
907
		NomenclaturalStatus status = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222");
908
		zooName.addStatus(status);
909
		handleAnnotatableEntity(rel);
910
		handleAnnotatableEntity(status);
911
		handleIdentifiableEntity(zooName);
912

    
913
		//TypeDesignation
914
		TaxonName speciesZooName = TaxonNameFactory.NewZoologicalInstance(Rank.SPECIES());
915
		NameTypeDesignation nameDesig = zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
916
				NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
917
		handleAnnotatableEntity(nameDesig);
918
		SpecimenTypeDesignation specimenDesig = speciesZooName.addSpecimenTypeDesignation(getSpecimen(), SpecimenTypeDesignationStatus.HOLOTYPE(),
919
				getReference(), "p,22", "original name", false, true);
920
		handleAnnotatableEntity(specimenDesig);
921
		speciesZooName.addTextualTypeDesignation("A textual type designation", Language.ENGLISH(), true,
922
		        getReference(), "123", "Species orginalus", false);
923

    
924

    
925
		TaxonName viralName = TaxonNameFactory.NewViralInstance(Rank.GENUS());
926
		viralName.setAcronym("acronym");
927
		handleIdentifiableEntity(viralName);
928

    
929
		//Registration
930
		Registration registration = Registration.NewInstance("registration identifier",
931
		        "specificIdentifier", speciesZooName, null);
932
		registration.addTypeDesignation(specimenDesig);
933
		registration.setRegistrationDate(DateTime.now());
934
		Registration blockingRegistration = Registration.NewInstance();
935
		registration.addBlockedBy(blockingRegistration);
936
		registration.setInstitution(Institution.NewInstance());
937
		User submitter = User.NewInstance("submitter", "12345");
938
		registration.setSubmitter(submitter);
939
		handleAnnotatableEntity(registration);;
940

    
941
		cdmBases.add(submitter);
942
		cdmBases.add(bacName);
943
		cdmBases.add(botName);
944
		cdmBases.add(viralName);
945
		cdmBases.add(zooName);
946
		cdmBases.add(botName2);
947
	}
948

    
949
	private void handleEventBase(EventBase event){
950
		event.setTimeperiod(TimePeriodParser.parseString("1.4.1975-2.5.1980"));
951
		event.setActor(Person.NewTitledInstance("EventActor"));
952
		event.setDescription("Some interesing event");
953
	}
954

    
955
	private void handleAnnotatableEntity(AnnotatableEntity entity){
956
		Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
957
		entity.addAnnotation(annotation);
958
		Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), true);
959
		entity.addMarker(marker);
960
	}
961

    
962
	private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
963
		handleAnnotatableEntity(identifiableEntity);
964

    
965
		//Credits
966
		Person creditor = Person.NewTitledInstance("Creditor");
967
		Credit credit = Credit.NewInstance(creditor, "credit");
968
		identifiableEntity.addCredit(credit);
969

    
970
		//Extension
971
		Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
972

    
973
		//Identifier
974
		Identifier identifier = identifiableEntity.addIdentifier("ident23", DefinedTerm.SEX_FEMALE());
975
		handleAnnotatableEntity(identifier);
976

    
977
	    //Links
978
        identifiableEntity.addLinkWebsite(URI.create("http://a.bc.de"), "Description", Language.ENGLISH());
979

    
980
		//Rights
981
		Rights rights = Rights.NewInstance("right", Language.ENGLISH());
982
		rights.setUri(URI.create("http://rights.abc.de"));
983
		rights.setAbbreviatedText("abbrev");
984
		rights.setType(RightsType.COPYRIGHT());
985
		Person owner = Person.NewTitledInstance("Owner");
986
		rights.setAgent(owner);
987
		identifiableEntity.addRights(rights);
988

    
989
		if (identifiableEntity.isInstanceOf(IdentifiableMediaEntity.class)){
990
			Media media = Media.NewInstance(URI.create("http://www.identifiableMedia.de"), 22, "img/jpg", "jpg");
991
			((IdentifiableMediaEntity<?>)identifiableEntity).addMedia(media);
992
		}
993

    
994
		//source
995
		IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
996
				getReference(), "123");
997
		source.setOriginalNameString("original name");
998

    
999
		//LSID
1000
		 try {
1001
			LSID lsid = new LSID("urn:lsid:a.b.de:namespace:1234");
1002
			identifiableEntity.setLsid(lsid);
1003
		} catch (MalformedLSIDException e) {
1004
			e.printStackTrace();
1005
		}
1006
	}
1007

    
1008
	private Reference getReference() {
1009
		 Reference result = ReferenceFactory.newGeneric();
1010
		 result.setTitle("some generic reference");
1011
		 return result;
1012
	}
1013

    
1014
	private DerivedUnit getSpecimen() {
1015
		DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
1016
		return derivedUnit;
1017
	}
1018

    
1019
	private Taxon getTaxon() {
1020
		Reference sec = getReference();
1021
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1022
		Taxon taxon = Taxon.NewInstance(name, sec);
1023
		return taxon;
1024
	}
1025
}
    (1-1/1)