Project

General

Profile

Download (41.8 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
        createReference(cdmBases);
180

    
181
		createDescriptions(cdmBases);
182

    
183
		createMedia(cdmBases);
184

    
185
		createMolecular(cdmBases);
186

    
187
		createTaxonName(cdmBases);
188

    
189
		createOccurrence(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(), TimePeriodParser.parseString("22.4.2022-12.5.2023"),
215
		        "refCredit", "rc", Language.DEFAULT());
216
		ref.addCredit(credit);
217
		handleAnnotatableEntity(credit);
218

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

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

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

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

    
245
		cdmBases.add(ref);
246
	}
247

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

    
259
		handleIdentifiableEntity(person);
260

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

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

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

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

    
285

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
420
		taxon.addAggregationSource(taxonDescription);
421

    
422
		cdmBases.add(taxon);
423

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

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

    
439

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

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

    
452

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

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

    
469

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

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

    
485

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

    
492

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

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

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

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

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

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

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

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

    
520
	}
521

    
522

    
523

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

    
535

    
536
	}
537

    
538

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

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

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

    
556

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

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

    
565

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
761
		handleIdentifiableEntity(reference);
762

    
763
		cdmBases.add(reference);
764
	}
765

    
766
	private void createOccurrence(List<CdmBase> cdmBases) {
767

    
768
	    //Collection
769
		Collection collection = Collection.NewInstance();
770
		Collection subCollection = Collection.NewInstance();
771
		subCollection.setSuperCollection(collection);
772
		handleIdentifiableEntity(collection);
773
		handleIdentifiableEntity(subCollection);
774
		cdmBases.add(subCollection);
775

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

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

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

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

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

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

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

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

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

    
861
		cdmBases.add(fieldUnit);
862
		cdmBases.add(mediaSpecimen);
863
		cdmBases.add(collection);
864
	}
865

    
866

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

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

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

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

    
922

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

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

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

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

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

    
960
	private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
961
		handleAnnotatableEntity(identifiableEntity);
962

    
963
		//Credits
964
		Person creditor = Person.NewTitledInstance("Creditor");
965
		Credit credit = Credit.NewInstance(creditor, TimePeriod.NewInstance(DateTime.now(), DateTime.now()), "credit");
966
		identifiableEntity.addCredit(credit);
967

    
968
		//Extension
969
		Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
970

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

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

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

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

    
992
		//source
993
		IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
994
				getReference(), "123");
995
		source.setAccessed(TimePeriod.NewInstance(2020, 2021));
996
		source.setOriginalInfo("original name");
997

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

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

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

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