ref #6365 use TaxonNameFactory for botanical names
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / data / FullCoverageDataGenerator.java
1 /**
2 *
3 */
4 package eu.etaxonomy.cdm.database.data;
5
6 import java.net.URI;
7 import java.util.ArrayList;
8 import java.util.List;
9
10 import org.hibernate.Session;
11 import org.joda.time.DateTime;
12
13 import com.ibm.lsid.MalformedLSIDException;
14
15 import eu.etaxonomy.cdm.common.DOI;
16 import eu.etaxonomy.cdm.model.agent.Address;
17 import eu.etaxonomy.cdm.model.agent.Contact;
18 import eu.etaxonomy.cdm.model.agent.Institution;
19 import eu.etaxonomy.cdm.model.agent.Person;
20 import eu.etaxonomy.cdm.model.agent.Team;
21 import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
22 import eu.etaxonomy.cdm.model.common.Annotation;
23 import eu.etaxonomy.cdm.model.common.CdmBase;
24 import eu.etaxonomy.cdm.model.common.Credit;
25 import eu.etaxonomy.cdm.model.common.DefinedTerm;
26 import eu.etaxonomy.cdm.model.common.EventBase;
27 import eu.etaxonomy.cdm.model.common.Extension;
28 import eu.etaxonomy.cdm.model.common.ExtensionType;
29 import eu.etaxonomy.cdm.model.common.Group;
30 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
31 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
32 import eu.etaxonomy.cdm.model.common.Identifier;
33 import eu.etaxonomy.cdm.model.common.IntextReference;
34 import eu.etaxonomy.cdm.model.common.LSID;
35 import eu.etaxonomy.cdm.model.common.LSIDAuthority;
36 import eu.etaxonomy.cdm.model.common.Language;
37 import eu.etaxonomy.cdm.model.common.LanguageString;
38 import eu.etaxonomy.cdm.model.common.Marker;
39 import eu.etaxonomy.cdm.model.common.MarkerType;
40 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
41 import eu.etaxonomy.cdm.model.common.Representation;
42 import eu.etaxonomy.cdm.model.common.TermType;
43 import eu.etaxonomy.cdm.model.common.TermVocabulary;
44 import eu.etaxonomy.cdm.model.common.User;
45 import eu.etaxonomy.cdm.model.description.CategoricalData;
46 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
47 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
48 import eu.etaxonomy.cdm.model.description.Distribution;
49 import eu.etaxonomy.cdm.model.description.Feature;
50 import eu.etaxonomy.cdm.model.description.FeatureNode;
51 import eu.etaxonomy.cdm.model.description.FeatureTree;
52 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
53 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
54 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
55 import eu.etaxonomy.cdm.model.description.MediaKey;
56 import eu.etaxonomy.cdm.model.description.MultiAccessKey;
57 import eu.etaxonomy.cdm.model.description.PolytomousKey;
58 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
59 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
60 import eu.etaxonomy.cdm.model.description.QuantitativeData;
61 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
62 import eu.etaxonomy.cdm.model.description.State;
63 import eu.etaxonomy.cdm.model.description.StateData;
64 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
65 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
66 import eu.etaxonomy.cdm.model.description.TaxonDescription;
67 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
68 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
69 import eu.etaxonomy.cdm.model.description.TextData;
70 import eu.etaxonomy.cdm.model.description.TextFormat;
71 import eu.etaxonomy.cdm.model.description.WorkingSet;
72 import eu.etaxonomy.cdm.model.location.Country;
73 import eu.etaxonomy.cdm.model.location.NamedArea;
74 import eu.etaxonomy.cdm.model.location.Point;
75 import eu.etaxonomy.cdm.model.location.ReferenceSystem;
76 import eu.etaxonomy.cdm.model.media.AudioFile;
77 import eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity;
78 import eu.etaxonomy.cdm.model.media.ImageFile;
79 import eu.etaxonomy.cdm.model.media.Media;
80 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
81 import eu.etaxonomy.cdm.model.media.MovieFile;
82 import eu.etaxonomy.cdm.model.media.Rights;
83 import eu.etaxonomy.cdm.model.media.RightsType;
84 import eu.etaxonomy.cdm.model.molecular.Amplification;
85 import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
86 import eu.etaxonomy.cdm.model.molecular.Cloning;
87 import eu.etaxonomy.cdm.model.molecular.DnaQuality;
88 import eu.etaxonomy.cdm.model.molecular.DnaSample;
89 import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
90 import eu.etaxonomy.cdm.model.molecular.Primer;
91 import eu.etaxonomy.cdm.model.molecular.Sequence;
92 import eu.etaxonomy.cdm.model.molecular.SequenceDirection;
93 import eu.etaxonomy.cdm.model.molecular.SequenceString;
94 import eu.etaxonomy.cdm.model.molecular.SingleRead;
95 import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment;
96 import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment.Shift;
97 import eu.etaxonomy.cdm.model.name.BacterialName;
98 import eu.etaxonomy.cdm.model.name.BotanicalName;
99 import eu.etaxonomy.cdm.model.name.CultivarPlantName;
100 import eu.etaxonomy.cdm.model.name.HybridRelationship;
101 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
102 import eu.etaxonomy.cdm.model.name.NameRelationship;
103 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
104 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
105 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
106 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
107 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
108 import eu.etaxonomy.cdm.model.name.Rank;
109 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
110 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
111 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
112 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
113 import eu.etaxonomy.cdm.model.name.ViralName;
114 import eu.etaxonomy.cdm.model.name.ZoologicalName;
115 import eu.etaxonomy.cdm.model.occurrence.Collection;
116 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
117 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
118 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
119 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
120 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
121 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
122 import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
123 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
124 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
125 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
126 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
127 import eu.etaxonomy.cdm.model.reference.Reference;
128 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
129 import eu.etaxonomy.cdm.model.taxon.Classification;
130 import eu.etaxonomy.cdm.model.taxon.Synonym;
131 import eu.etaxonomy.cdm.model.taxon.SynonymType;
132 import eu.etaxonomy.cdm.model.taxon.Taxon;
133 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
134 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
135 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
136 import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
137
138 /**
139 * This class tries to create a database that has
140 * at least one record in each table.
141 * It is meant to test update scripts as well as imports
142 * and exports.
143 *
144 * ATTENTION: As the content of the created database may change
145 * over time due to model changes and other requirements test using
146 * this class should be written in a way that they do rather
147 * depend on general parameter than concrete data values.
148 *
149 * @author a.mueller
150 * @created 3013-12-02
151 *
152 *
153 */
154 public class FullCoverageDataGenerator {
155
156
157 public void fillWithData(Session session){
158 List<CdmBase> cdmBases = new ArrayList<CdmBase>();
159
160 createAgents(cdmBases);
161
162 createDescriptions(cdmBases);
163
164 createMedia(cdmBases);
165
166 createMolecular(cdmBases);
167
168 createTaxonName(cdmBases);
169
170 createOccurrence(cdmBases);
171
172 createReference(cdmBases);
173
174 createTaxon(cdmBases);
175
176 createSupplemental(cdmBases);
177
178 for (CdmBase cdmBase: cdmBases){
179 session.save(cdmBase);
180 }
181 }
182
183
184 private void createSupplemental(List<CdmBase> cdmBases) {
185
186 Reference ref = ReferenceFactory.newBook();
187
188 Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
189 ref.addAnnotation(annotation);
190 handleAnnotatableEntity(annotation);
191
192 Credit credit = Credit.NewInstance(Person.NewInstance(), "refCredit", "rc", Language.DEFAULT());
193 ref.addCredit(credit);
194 handleAnnotatableEntity(credit);
195
196 Rights rights = Rights.NewInstance("My rights", Language.GERMAN());
197 ref.addRights(rights);
198 handleAnnotatableEntity(rights);
199
200 //Others
201 try {
202 LSIDAuthority lsidAuthority = new LSIDAuthority("My authority");
203 lsidAuthority.addNamespace("lsidNamespace", TaxonNameBase.class);
204 cdmBases.add(lsidAuthority);
205 } catch (MalformedLSIDException e) {
206 e.printStackTrace();
207 }
208
209 User user = User.NewInstance("myUser", "12345");
210 Group group = Group.NewInstance("MyGroup");
211 group.addMember(user);
212
213 cdmBases.add(user);
214 cdmBases.add(group);
215
216
217 cdmBases.add(ref);
218
219 }
220
221
222 /**
223 * @param cdmBases
224 */
225 private void createAgents(List<CdmBase> cdmBases) {
226 //Person
227 Person person = Person.NewTitledInstance("Person Title");
228 person.setFirstname("first name");
229 person.setLastname("last name");
230 person.setLifespan(TimePeriodParser.parseString("1905-1995"));
231 person.setPrefix("prefix");
232 person.setSuffix("suffix");
233
234 handleIdentifiableEntity(person);
235
236 //Contact
237 Contact contact = Contact.NewInstance();
238 person.setContact(contact);
239 Point locality = Point.NewInstance(45.12, -38.69, ReferenceSystem.WGS84(), 22);
240 contact.addEmailAddress("a@b.de");
241 contact.addFaxNumber("f:010-123456");
242 contact.addPhoneNumber("p:090-987654");
243 contact.addUrl(URI.create("http://www.abc.de"));
244
245 //Address
246 Address address = Address.NewInstance(Country.GERMANY(), "locality", "pobox", "12345", "region", "street", locality);
247 contact.addAddress(address);
248
249 //Team
250 Team team = Team.NewTitledInstance("Team title", "Team abbrev title");
251 team.addTeamMember(person);
252 handleIdentifiableEntity(team);
253
254
255 //Institution
256 Institution institution = Institution.NewInstance();
257 institution.setCode("institution code");
258 institution.setName("institution name");
259 handleIdentifiableEntity(institution);
260
261
262 //TODO vocabulary
263 // voc = "29ad808b-3126-4274-be81-4561e7afc76f"
264 DefinedTerm instType = DefinedTerm.NewInstitutionTypeInstance("Description forthis instition type", "institution type", "inst. t.");
265 cdmBases.add(instType);
266 institution.addType(instType);
267 person.addInstitutionalMembership(institution, TimePeriodParser.parseString("1955-1956"), "department", "role");
268
269 Institution subInstitution = Institution.NewInstance();
270 subInstitution.setCode("sub institution code");
271 subInstitution.setName("sub institution name");
272 subInstitution.setIsPartOf(institution);
273
274 cdmBases.add(person);
275 cdmBases.add(team);
276 cdmBases.add(institution);
277 }
278
279
280 private void createDescriptions(List<CdmBase> cdmBases) {
281
282 TermVocabulary<?> voc = TermVocabulary.NewInstance(TermType.AnnotationType, "my termVoc desc",
283 "myTerm voc", "mtv", URI.create("http://www.abc.de"));
284 handleIdentifiableEntity(voc);
285 cdmBases.add(voc);
286
287 Representation rep = voc.getRepresentations().iterator().next();
288 handleAnnotatableEntity(rep);
289 // Representation engRep = Language.ENGLISH().getRepresentations().iterator().next();
290 // handleAnnotatableEntity(engRep);
291 // cdmBases.add(engRep); //needed?
292
293 //Categorical data
294 State state = State.NewInstance("Test state", "state", "st.");
295 state.addMedia(Media.NewInstance());
296 cdmBases.add(state);
297 CategoricalData categoricalData = CategoricalData.NewInstance(state, Feature.CONSERVATION());
298 StateData stateData = categoricalData.getStateData().get(0);
299 stateData.addModifier(DefinedTerm.SEX_FEMALE());
300 handleAnnotatableEntity(categoricalData);
301
302
303 State nextState = State.NewInstance();
304 cdmBases.add(nextState);
305 StateData stateData2 = StateData.NewInstance(nextState);
306 stateData2.putModifyingText(Language.ENGLISH(), "State2 modifying text");
307 categoricalData.addStateData(stateData2);
308 categoricalData.setOrderRelevant(true);
309
310 //Quantitative data
311 Feature leaveLength = Feature.NewInstance("Leave length description", "leave length", "l.l.");
312 cdmBases.add(leaveLength);
313 leaveLength.setSupportsQuantitativeData(true);
314 QuantitativeData quantitativeData = QuantitativeData.NewInstance(leaveLength);
315 MeasurementUnit measurementUnit = MeasurementUnit.NewInstance("Measurement Unit", "munit", null);
316 cdmBases.add(measurementUnit);
317 quantitativeData.setUnit(measurementUnit);
318 StatisticalMeasurementValue statisticalMeasurementValue = quantitativeData.setAverage((float)22.9 , null);
319 handleAnnotatableEntity(quantitativeData);
320 handleIdentifiableEntity(measurementUnit);
321 DefinedTerm valueModifier = DefinedTerm.NewModifierInstance("about", "about", null);
322 statisticalMeasurementValue.addModifier(valueModifier);
323 cdmBases.add(valueModifier);
324
325 //Feature
326 TermVocabulary<DefinedTerm> recommendedModifierEnumeration = TermVocabulary.NewInstance(TermType.Modifier, DefinedTerm.class);
327 leaveLength.addRecommendedModifierEnumeration(recommendedModifierEnumeration);
328 cdmBases.add(recommendedModifierEnumeration);
329 TermVocabulary<State> supportedCategoricalEnumeration = TermVocabulary.NewInstance(TermType.State, State.class);
330 leaveLength.addSupportedCategoricalEnumeration(supportedCategoricalEnumeration);
331 cdmBases.add(supportedCategoricalEnumeration);
332 leaveLength.addRecommendedMeasurementUnit(measurementUnit);
333 leaveLength.addRecommendedStatisticalMeasure(StatisticalMeasure.AVERAGE());
334
335 CommonTaxonName commonTaxonName = CommonTaxonName.NewInstance("common name", Language.ENGLISH(), Country.UNITEDSTATESOFAMERICA());
336 handleAnnotatableEntity(commonTaxonName);
337
338 TextData textData = TextData.NewInstance(Feature.DIAGNOSIS());
339 Language eng = Language.ENGLISH();
340 textData.putText(eng, "My text data");
341 LanguageString languageString = textData.getLanguageText(eng);
342
343 Taxon referencedTaxon = getTaxon();
344 cdmBases.add(referencedTaxon);
345 languageString.addIntextReference(IntextReference.NewTaxonInstance(referencedTaxon, languageString, 2, 5));
346 textData.putModifyingText(eng, "nice diagnosis");
347 handleAnnotatableEntity(textData);
348 handleAnnotatableEntity(languageString);
349
350 TextFormat format = TextFormat.NewInstance("format", "format", null);
351 textData.setFormat(format);
352 cdmBases.add(format);
353 handleAnnotatableEntity(format);
354
355 DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
356 IndividualsAssociation indAssoc = IndividualsAssociation.NewInstance(specimen);
357 indAssoc.putDescription(Language.ENGLISH(), "description for individuals association");
358 handleAnnotatableEntity(indAssoc);
359
360
361 TaxonInteraction taxonInteraction = TaxonInteraction.NewInstance(Feature.HOSTPLANT());
362 taxonInteraction.putDescription(Language.ENGLISH(), "interaction description");
363 handleAnnotatableEntity(taxonInteraction);
364
365 NamedArea inCountryArea = NamedArea.NewInstance("My area in a country", "my area", "ma");
366 inCountryArea.addCountry(Country.TURKEYREPUBLICOF());
367 cdmBases.add(inCountryArea);
368 Distribution distribution = Distribution.NewInstance(inCountryArea, PresenceAbsenceTerm.CULTIVATED());
369 handleAnnotatableEntity(distribution);
370
371 Taxon taxon = getTaxon();
372 TaxonDescription taxonDescription = TaxonDescription.NewInstance(taxon);
373 taxonDescription.addElements(categoricalData, quantitativeData,
374 textData, commonTaxonName, taxonInteraction, indAssoc, distribution);
375
376 DerivedUnit describedSpecimenOrObservation = DerivedUnit.NewInstance(SpecimenOrObservationType.DerivedUnit);
377 taxonDescription.setDescribedSpecimenOrObservation(describedSpecimenOrObservation);
378
379 taxonDescription.addScope(DefinedTerm.SEX_FEMALE());
380 taxonDescription.addGeoScope(Country.GERMANY());
381 handleIdentifiableEntity(taxonDescription);
382
383 cdmBases.add(taxon);
384
385 //DescriptionElmenetBase + source
386 textData.addMedia(Media.NewInstance());
387 textData.addModifier(DefinedTerm.SEX_HERMAPHRODITE());
388 textData.putModifyingText(Language.ENGLISH(), "no modification");
389 textData.setTimeperiod(TimePeriodParser.parseString("1970-1980"));
390 Reference ref = ReferenceFactory.newArticle();
391 DescriptionElementSource source = textData.addSource(OriginalSourceType.Import, "22", "taxon description table", ref, "detail");
392 source.setNameUsedInSource(TaxonNameFactory.NewBotanicalInstance(Rank.GENUS()));
393 handleAnnotatableEntity(source);
394
395 taxonDescription.addDescriptionSource(ref);
396
397
398 //Specimen description
399 SpecimenOrObservationBase<?> describedSpecimen = getSpecimen();
400 SpecimenDescription specDesc = SpecimenDescription.NewInstance(specimen);
401 cdmBases.add(describedSpecimen);
402 handleAnnotatableEntity(specDesc);
403
404 //Name description
405 TaxonNameBase<?,?> name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
406 TaxonNameDescription nameDesc = TaxonNameDescription.NewInstance(name);
407 cdmBases.add(name);
408 handleAnnotatableEntity(nameDesc);
409
410
411 //Feature Tree
412 FeatureTree featureTree = FeatureTree.NewInstance();
413 // featureTree
414 FeatureNode descriptionFeatureNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
415 FeatureNode leaveLengthNode = FeatureNode.NewInstance(leaveLength);
416 featureTree.getRootChildren().add(descriptionFeatureNode);
417 descriptionFeatureNode.addChild(leaveLengthNode);
418 handleIdentifiableEntity(featureTree);
419
420 State inapplicableState = State.NewInstance("inapplicableState", "inapplicableState", null);
421 State applicableState = State.NewInstance("only applicable state", "only applicable state", null);
422 cdmBases.add(applicableState);
423 cdmBases.add(inapplicableState);
424 leaveLengthNode.addInapplicableState(inapplicableState);
425 leaveLengthNode.addApplicableState(applicableState);
426 cdmBases.add(featureTree);
427 cdmBases.add(leaveLengthNode);
428
429
430 WorkingSet workingSet = WorkingSet.NewInstance();
431 workingSet.addDescription(taxonDescription);
432 workingSet.setLabel("My Workingset");
433 workingSet.getDescriptiveSystem();
434 handleAnnotatableEntity(workingSet);
435
436
437 //polytomous keys
438 Taxon coveredTaxon = Taxon.NewInstance(name, null);
439 PolytomousKey key = PolytomousKey.NewTitledInstance("My Polykey");
440 handleIdentificationKey(key, taxon, coveredTaxon);
441 key.setStartNumber(10);
442
443
444 PolytomousKeyNode firstChildNode = PolytomousKeyNode.NewInstance("Green", "What is the leave length?", coveredTaxon, leaveLength);
445 key.getRoot().addChild(firstChildNode);
446 PolytomousKeyNode secondChildNode = PolytomousKeyNode.NewInstance("234");
447 firstChildNode.addChild(secondChildNode);
448
449 PolytomousKey subkey = PolytomousKey.NewTitledInstance("Sub-key");
450 firstChildNode.setSubkey(subkey);
451
452 PolytomousKeyNode subKeyNode = PolytomousKeyNode.NewInstance("sub key couplet");
453 subkey.getRoot().addChild(subKeyNode);
454 secondChildNode.setOtherNode(subKeyNode);
455
456 secondChildNode.putModifyingText(Language.GERMAN(), "manchmal");
457
458 cdmBases.add(key);
459 cdmBases.add(subkey);
460
461 MediaKey mediaKey = MediaKey.NewInstance();
462 mediaKey.addKeyRepresentation(Representation.NewInstance("Media Key Representation", "media key", null, Language.ENGLISH()));
463 handleIdentificationKey(mediaKey, taxon, coveredTaxon);
464
465 MultiAccessKey multiAccessKey = MultiAccessKey.NewInstance();
466 handleIdentificationKey(multiAccessKey, taxon, coveredTaxon);
467
468 cdmBases.add(mediaKey);
469 cdmBases.add(multiAccessKey);
470
471 }
472
473
474
475 private void handleIdentificationKey(IIdentificationKey key, Taxon taxon, Taxon coveredTaxon){
476 key.addCoveredTaxon(coveredTaxon);
477 key.addGeographicalScope(Country.GERMANY());
478 key.addScopeRestriction(DefinedTerm.SEX_FEMALE());
479 key.addTaxonomicScope(taxon);
480 if (key instanceof IdentifiableEntity<?>){
481 handleIdentifiableEntity((IdentifiableEntity<?>)key);
482 }else{
483 handleAnnotatableEntity((AnnotatableEntity)key);
484 }
485
486
487 }
488
489
490 private void createMedia(List<CdmBase> cdmBases){
491 AudioFile audioFile = AudioFile.NewInstance(URI.create("http://a.b.de"), 22);
492 ImageFile imageFile = ImageFile.NewInstance(URI.create("http://b.c.de"), 44, 467, 55);
493 MovieFile movieFile = MovieFile.NewInstance(URI.create("http://b.c.de"), 67);
494 MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance("mime", "media");
495
496 mediaRepresentation.addRepresentationPart(movieFile);
497 mediaRepresentation.addRepresentationPart(imageFile);
498 mediaRepresentation.addRepresentationPart(audioFile);
499 Media media = Media.NewInstance();
500 media.addRepresentation(mediaRepresentation);
501
502 media.putTitle(Language.ENGLISH(), "Media title");
503 media.setMediaCreated(DateTime.now());
504 media.putDescription(Language.ENGLISH(), "Media description");
505 handleIdentifiableEntity(media);
506
507
508 Person artist = Person.NewTitledInstance("artist");
509 media.setArtist(artist);
510 cdmBases.add(media);
511 cdmBases.add(artist);
512 }
513
514
515 private void createMolecular(List<CdmBase> cdmBases) {
516 DnaSample dnaSample = DnaSample.NewInstance();
517
518 //Amplification
519 Amplification amplification = Amplification.NewInstance();
520
521 DefinedTerm dnaMarker = DefinedTerm.NewDnaMarkerInstance("My dna marker", "dna marker", null);
522 cdmBases.add(dnaMarker);
523 amplification.setDnaMarker(dnaMarker);
524 Institution inst = Institution.NewInstance();
525 amplification.setInstitution(inst);
526 handleEventBase(amplification);
527 handleAnnotatableEntity(amplification);
528
529 Primer forwardPrimer = Primer.NewInstance("forward primer");
530 forwardPrimer.setPublishedIn(getReference());
531 forwardPrimer.setSequence(SequenceString.NewInstance("my sequence"));
532 handleAnnotatableEntity(forwardPrimer);
533
534 Primer reversePrimer = Primer.NewInstance("reverse primer");
535 handleAnnotatableEntity(reversePrimer);
536
537 amplification.setForwardPrimer(forwardPrimer);
538 amplification.setReversePrimer(reversePrimer);
539
540 DefinedTerm purificationMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "purification method", "purification method", null);
541 cdmBases.add(purificationMethod);
542 MaterialOrMethodEvent purification = MaterialOrMethodEvent.NewInstance(purificationMethod, "purification method");
543 amplification.setPurification(purification);
544 handleAnnotatableEntity(purification);
545 handleAnnotatableEntity(purificationMethod);
546
547 amplification.setLadderUsed("ladder");
548 amplification.setElectrophoresisVoltage(5.5);
549 amplification.setGelConcentration(2.4);
550 amplification.setGelRunningTime(3.6);
551
552 //Amplification result
553 AmplificationResult amplificationResult = AmplificationResult.NewInstance(dnaSample, amplification);
554 amplificationResult.setSuccessful(true);
555 amplificationResult.setSuccessText("Very successful");
556 handleAnnotatableEntity(amplificationResult);
557
558 DefinedTerm cloningMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "cloning method", "cloning method", null);
559 cdmBases.add(cloningMethod);
560 Cloning cloning = Cloning.NewInstance(cloningMethod, "My cloning method", "my strain", forwardPrimer, reversePrimer);
561 amplificationResult.setCloning(cloning);
562 handleAnnotatableEntity(cloningMethod);
563 handleAnnotatableEntity(cloning);
564
565 Media gelPhoto = Media.NewInstance();
566 amplificationResult.setGelPhoto(gelPhoto);
567
568 //SingleRead
569 SingleRead singleRead = SingleRead.NewInstance();
570 handleAnnotatableEntity(singleRead);
571 amplificationResult.addSingleRead(singleRead);
572 MaterialOrMethodEvent readMethod = MaterialOrMethodEvent.NewInstance(null, "read method");
573 singleRead.setMaterialOrMethod(readMethod);
574 handleAnnotatableEntity(readMethod);
575
576 Media pherogram = Media.NewInstance();
577 singleRead.setPherogram(pherogram);
578
579 singleRead.setPrimer(forwardPrimer);
580 singleRead.setSequence(SequenceString.NewInstance("ABTC"));
581 singleRead.setDirection(SequenceDirection.Forward);
582
583 //Sequence
584 Sequence sequence = Sequence.NewInstance("ADDT");
585 dnaSample.addSequence(sequence);
586
587 // SequenceString alignedSequence = SequenceString.NewInstance("AGTC");
588 Shift[] shifts = new Shift[]{new Shift(66,1),new Shift(103,-2)};
589 SingleReadAlignment.NewInstance(sequence, singleRead, shifts, "AGTC");
590
591 Media contigFile = Media.NewInstance();
592 sequence.setContigFile(contigFile);
593 sequence.setIsBarcode(true);
594 sequence.setDnaMarker(dnaMarker);
595 sequence.setBarcodeSequencePart(SequenceString.NewInstance("ADTA"));
596 sequence.setGeneticAccessionNumber("GenNO12345");
597 sequence.setBoldProcessId("boldId");
598 sequence.setHaplotype("haplotype");
599 Reference sequenceCitation = getReference();
600 sequence.addCitation(sequenceCitation);
601 handleAnnotatableEntity(sequence);
602
603 //DnaQuality
604 DnaQuality dnaQuality = DnaQuality.NewInstance();
605 dnaQuality.setConcentration(2.0);
606 MeasurementUnit mu = MeasurementUnit.NewInstance("mg/ml", "mg/ml","mg/ml");
607 cdmBases.add(mu);
608 dnaQuality.setConcentrationUnit(mu);
609 dnaQuality.setPurificationMethod("purification method");
610 dnaQuality.setQualityCheckDate(DateTime.now());
611 dnaQuality.setQualityTerm(null); //TODO
612 dnaQuality.setRatioOfAbsorbance260_230(22.0);
613 dnaQuality.setRatioOfAbsorbance260_280(3.9);
614 dnaSample.setDnaQuality(dnaQuality);
615
616
617 //Phylogenetic Tree
618 PhylogeneticTree phyloTree = PhylogeneticTree.NewInstance();
619 phyloTree.addUsedSequences(sequence);
620 handleIdentifiableEntity(phyloTree);
621
622
623 cdmBases.add(dnaSample);
624 cdmBases.add(phyloTree);
625 }
626
627
628 private void createTaxon(List<CdmBase> cdmBases) {
629 Reference sec = getReference();
630 TaxonNameBase<?,?> name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
631 Taxon taxon = Taxon.NewInstance(name, sec);
632 handleIdentifiableEntity(taxon);
633
634 TaxonNameBase<?,?> synName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
635 Synonym syn = Synonym.NewInstance(synName, sec, "123");
636 taxon.addSynonym(syn, SynonymType.HETEROTYPIC_SYNONYM_OF());
637 taxon.setDoubtful(true);
638 handleIdentifiableEntity(syn);
639
640
641 Taxon concept = Taxon.NewInstance(name, getReference());
642 TaxonRelationship taxRel = taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
643 sec, "444");
644 taxon.setTaxonStatusUnknown(true);
645 handleAnnotatableEntity(taxRel);
646
647
648 //Classification
649 Classification classification = Classification.NewInstance("My classification", sec);
650 classification.setMicroReference("p. 123");
651 classification.setTimeperiod(TimePeriodParser.parseString("1.1.2012-4.8.2013"));
652 classification.addGeoScope(Country.GERMANY());
653 classification.putDescription(Language.ENGLISH(), "An interesting classification");
654
655
656 TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
657 handleIdentifiableEntity(classification);
658 handleAnnotatableEntity(node);
659
660 Taxon childTaxon = Taxon.NewInstance(synName, sec);
661 node.addChildTaxon(childTaxon, sec, "44");
662 node.setUnplaced(true);
663 node.setExcluded(true);
664
665 cdmBases.add(taxon);
666 cdmBases.add(concept);
667 cdmBases.add(childTaxon);
668 cdmBases.add(classification);
669
670
671 }
672
673
674
675
676 private void createReference(List<CdmBase> cdmBases) {
677 Reference reference = ReferenceFactory.newArticle();
678 Person author = Person.NewTitledInstance("Author team");
679 reference.setAuthorship(author);
680 reference.setTitle("ref title");
681 reference.setAbbrevTitle("abbrev title");
682 reference.setDatePublished(TimePeriodParser.parseString("1999"));
683 reference.setEdition("edition");
684 reference.setEditor("editor");
685 Institution institution = Institution.NewInstance();
686 reference.setInstitution(institution);
687 reference.setIsbn("1234556");
688 reference.setIssn("issn");
689 reference.setDoi(DOI.fromRegistrantCodeAndSuffix("14356", "suffix"));
690 reference.setReferenceAbstract("referenceAbstract");
691 reference.setOrganization("organization");
692 reference.setPages("123-134");
693 reference.setPlacePublished("place Published");
694 reference.setPublisher("publisher");
695 Institution school = Institution.NewInstance();
696 reference.setSchool(school);
697 // reference.setSeriesPart("series");
698 reference.setSeriesPart("seriesPart");
699 reference.setVolume("vol. 3");
700 reference.setUri(URI.create("http://rer.abc.de"));
701
702 Reference journal = ReferenceFactory.newJournal();
703 reference.setInJournal(journal);
704
705 handleIdentifiableEntity(reference);
706
707 cdmBases.add(reference);
708
709 }
710
711
712
713
714 private void createOccurrence(List<CdmBase> cdmBases) {
715 //Collection
716 Collection collection = Collection.NewInstance();
717 Collection subCollection = Collection.NewInstance();
718 subCollection.setSuperCollection(collection);
719 handleIdentifiableEntity(collection);
720 handleIdentifiableEntity(subCollection);
721 cdmBases.add(subCollection);
722
723 collection.setCode("coll code");
724 collection.setCodeStandard("codeStandard");
725 collection.setName("coll name");
726 collection.setTownOrLocation("townOrLocation");
727 Institution institution = Institution.NewInstance();
728 collection.setInstitute(institution);
729
730 //FieldUnit
731 FieldUnit fieldUnit = FieldUnit.NewInstance();
732 fieldUnit.setFieldNumber("fieldNumber");
733 fieldUnit.setFieldNotes("fieldNotes");
734 Person primaryCollector = Person.NewInstance();
735 fieldUnit.setPrimaryCollector(primaryCollector);
736 handleIdentifiableEntity(fieldUnit);
737
738 GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
739 fieldUnit.setGatheringEvent(gatheringEvent);
740 gatheringEvent.putLocality(Language.ENGLISH(), "locality");
741 gatheringEvent.setExactLocation(Point.NewInstance(22.4, -34.2,
742 ReferenceSystem.WGS84(), 33));
743 gatheringEvent.setCountry(Country.GERMANY());
744 gatheringEvent.addCollectingArea(NamedArea.EUROPE());
745 gatheringEvent.setCollectingMethod("collectingMethod");
746 gatheringEvent.setAbsoluteElevation(10);
747 gatheringEvent.setAbsoluteElevationMax(100);
748 gatheringEvent.setAbsoluteElevationText("elevation text");
749
750 gatheringEvent.setDistanceToGround(10.4);
751 gatheringEvent.setDistanceToGroundMax(100.3);
752 gatheringEvent.setDistanceToGroundText("distance to ground text");
753
754 gatheringEvent.setDistanceToWaterSurface(10.4);
755 gatheringEvent.setDistanceToWaterSurfaceMax(100.3);
756 gatheringEvent.setDistanceToWaterSurfaceText("distance to water text");
757 handleAnnotatableEntity(gatheringEvent);
758 handleEventBase(gatheringEvent);
759
760
761 //Derived Unit
762 MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(SpecimenOrObservationType.StillImage);
763 mediaSpecimen.setCollection(collection);
764 mediaSpecimen.setCatalogNumber("catalogNumber");
765 mediaSpecimen.setAccessionNumber("accessionNumber");
766 // mediaSpecimen.setCollectorsNumber("collectorsNumber");
767 mediaSpecimen.setBarcode("barcode");
768 BotanicalName storedUnder = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
769 storedUnder.setTitleCache("Stored under", true);
770 mediaSpecimen.setStoredUnder(storedUnder);
771 mediaSpecimen.setExsiccatum("exsiccatum");
772 PreservationMethod preservation = PreservationMethod.NewInstance(null, "My preservation");
773 preservation.setTemperature(22.4);
774 mediaSpecimen.setPreservation(preservation);
775 mediaSpecimen.setOriginalLabelInfo("Original Label Info");
776 handleIdentifiableEntity(mediaSpecimen);
777
778 //DerivationEvent
779 DerivationEvent event = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
780 event.addOriginal(fieldUnit);
781 event.addDerivative(mediaSpecimen);
782 Institution inst = Institution.NewInstance();
783 event.setInstitution(inst);
784 handleAnnotatableEntity(event);
785 handleEventBase(event);
786
787 //SpecOrObservationBase
788 fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
789 DefinedTerm lifeStage = DefinedTerm.NewStageInstance("Live stage", "stage", null);
790 cdmBases.add(lifeStage);
791 fieldUnit.setLifeStage(lifeStage);
792 DefinedTerm kindOfUnit = DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null);
793 cdmBases.add(kindOfUnit);
794 fieldUnit.setKindOfUnit(kindOfUnit);
795 fieldUnit.setIndividualCount(3);
796 fieldUnit.putDefinition(Language.ENGLISH(), "definition");
797 fieldUnit.setPublish(true);
798 handleIdentifiableEntity(fieldUnit);
799
800 //Determination
801 DeterminationEvent determinationEvent = DeterminationEvent.NewInstance(getTaxon(), mediaSpecimen);
802 determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
803 determinationEvent.setPreferredFlag(true);
804 determinationEvent.addReference(getReference());
805 handleAnnotatableEntity(determinationEvent);
806 handleEventBase(determinationEvent);
807
808 cdmBases.add(fieldUnit);
809 cdmBases.add(mediaSpecimen);
810 cdmBases.add(collection);
811 }
812
813
814 private void createTaxonName(List<CdmBase> cdmBases) {
815 BacterialName bacName = TaxonNameFactory.NewBacterialInstance(Rank.GENUS());
816 bacName.setSubGenusAuthorship("sub Genus author");
817 bacName.setNameApprobation("nameApprobation");
818 handleIdentifiableEntity(bacName);
819
820 CultivarPlantName botName = TaxonNameFactory.NewCultivarInstance(Rank.SUBSPECIES());
821 botName.setAnamorphic(true);
822 botName.setCultivarName("cultivarName");
823 botName.setGenusOrUninomial("Genus");
824 botName.setInfraGenericEpithet("InfraGeneric");
825 botName.setSpecificEpithet("specificEpithet");
826 botName.setInfraSpecificEpithet("infraSpecificEpithet");
827 Person combinationAuthorship = Person.NewInstance();
828 botName.setCombinationAuthorship(combinationAuthorship);
829 Person exCombinationAuthorship = Person.NewInstance();
830 botName.setExCombinationAuthorship(exCombinationAuthorship);
831 Person basionymAuthorship = Person.NewInstance();
832 botName.setBasionymAuthorship(basionymAuthorship);
833 Person exBasionymAuthorship = Person.NewInstance();
834 botName.setExBasionymAuthorship(exBasionymAuthorship);
835 handleIdentifiableEntity(botName);
836 handleAnnotatableEntity(botName.getHomotypicalGroup());
837 BotanicalName botName2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
838 HybridRelationship hybridRel = botName2.addHybridChild(botName, HybridRelationshipType.FIRST_PARENT(), "Rule 1.2.3");
839 hybridRel.setCitation(ReferenceFactory.newBook());
840 hybridRel.setCitationMicroReference("p. 123");
841 handleAnnotatableEntity(hybridRel);
842
843 ZoologicalName zooName = TaxonNameFactory.NewZoologicalInstance(Rank.GENUS());
844 zooName.setBreed("breed");
845 zooName.setPublicationYear(1922);
846 zooName.setOriginalPublicationYear(1987);
847 zooName.setAppendedPhrase("appended phrase");
848 zooName.addDescription(TaxonNameDescription.NewInstance());
849 zooName.setNomenclaturalMicroReference("p. 123");
850 zooName.setNomenclaturalReference(getReference());
851 NameRelationship rel = zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered");
852 NomenclaturalStatus status = NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222");
853 zooName.addStatus(status);
854 handleAnnotatableEntity(rel);
855 handleAnnotatableEntity(status);
856 handleIdentifiableEntity(zooName);
857
858 //TypeDesignation
859 ZoologicalName speciesZooName = TaxonNameFactory.NewZoologicalInstance(Rank.SPECIES());
860 NameTypeDesignation nameDesig = zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
861 NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
862 handleAnnotatableEntity(nameDesig);
863 SpecimenTypeDesignation specimenDesig = speciesZooName.addSpecimenTypeDesignation(getSpecimen(), SpecimenTypeDesignationStatus.HOLOTYPE(),
864 getReference(), "p,22", "original name", false, true);
865 handleAnnotatableEntity(specimenDesig);
866
867 ViralName viralName = TaxonNameFactory.NewViralInstance(Rank.GENUS());
868 viralName.setAcronym("acronym");
869 handleIdentifiableEntity(viralName);
870
871
872 cdmBases.add(bacName);
873 cdmBases.add(botName);
874 cdmBases.add(viralName);
875 cdmBases.add(zooName);
876 }
877
878 private void handleEventBase(EventBase event){
879 event.setTimeperiod(TimePeriodParser.parseString("1.4.1975-2.5.1980"));
880 event.setActor(Person.NewTitledInstance("EventActor"));
881 event.setDescription("Some interesing event");
882 }
883
884 private void handleAnnotatableEntity(AnnotatableEntity entity){
885 Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
886 entity.addAnnotation(annotation);
887 Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), true);
888 entity.addMarker(marker);
889 }
890
891 private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
892 handleAnnotatableEntity(identifiableEntity);
893
894 //Credits
895 Person creditor = Person.NewTitledInstance("Creditor");
896 Credit credit = Credit.NewInstance(creditor, "credit");
897 identifiableEntity.addCredit(credit);
898
899 //Extension
900 Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
901
902 //Identifier
903 Identifier<?> identifier = identifiableEntity.addIdentifier("ident23", DefinedTerm.SEX_FEMALE());
904 handleAnnotatableEntity(identifier);
905
906
907 //Rights
908 Rights rights = Rights.NewInstance("right", Language.ENGLISH());
909 rights.setUri(URI.create("http://rights.abc.de"));
910 rights.setAbbreviatedText("abbrev");
911 rights.setType(RightsType.COPYRIGHT());
912 Person owner = Person.NewTitledInstance("Owner");
913 rights.setAgent(owner);
914 identifiableEntity.addRights(rights);
915
916 if (identifiableEntity.isInstanceOf(IdentifiableMediaEntity.class)){
917 Media media = Media.NewInstance(URI.create("http://www.identifiableMedia.de"), 22, "img/jpg", "jpg");
918 ((IdentifiableMediaEntity<?>)identifiableEntity).addMedia(media);
919 }
920
921 //source
922 IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
923 getReference(), "123");
924 source.setOriginalNameString("original name");
925
926 //LSID
927 try {
928 LSID lsid = new LSID("urn:lsid:a.b.de:namespace:1234");
929 identifiableEntity.setLsid(lsid);
930 } catch (MalformedLSIDException e) {
931 e.printStackTrace();
932 }
933
934
935 }
936
937
938 private Reference getReference() {
939 Reference result = ReferenceFactory.newGeneric();
940 result.setTitle("some generic reference");
941 return result;
942 }
943
944
945 private DerivedUnit getSpecimen() {
946 DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
947 return derivedUnit;
948 }
949
950
951
952 private Taxon getTaxon() {
953 Reference sec = getReference();
954 TaxonNameBase<?,?> name = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
955 Taxon taxon = Taxon.NewInstance(name, sec);
956 return taxon;
957
958 }
959 }