allow saving FullDataGenerator data through API (preliminary)
[cdmlib.git] / cdmlib-persistence / src / test / java / eu / etaxonomy / cdm / datagenerator / FullCoverageDataGenerator.java
1 /**
2 *
3 */
4 package eu.etaxonomy.cdm.datagenerator;
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.Extension;
27 import eu.etaxonomy.cdm.model.common.ExtensionType;
28 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
29 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
30 import eu.etaxonomy.cdm.model.common.LSID;
31 import eu.etaxonomy.cdm.model.common.Language;
32 import eu.etaxonomy.cdm.model.common.Marker;
33 import eu.etaxonomy.cdm.model.common.MarkerType;
34 import eu.etaxonomy.cdm.model.common.OriginalSourceType;
35 import eu.etaxonomy.cdm.model.common.Representation;
36 import eu.etaxonomy.cdm.model.common.TermType;
37 import eu.etaxonomy.cdm.model.description.CategoricalData;
38 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
39 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
40 import eu.etaxonomy.cdm.model.description.Distribution;
41 import eu.etaxonomy.cdm.model.description.Feature;
42 import eu.etaxonomy.cdm.model.description.FeatureNode;
43 import eu.etaxonomy.cdm.model.description.FeatureTree;
44 import eu.etaxonomy.cdm.model.description.IIdentificationKey;
45 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
46 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
47 import eu.etaxonomy.cdm.model.description.MediaKey;
48 import eu.etaxonomy.cdm.model.description.MultiAccessKey;
49 import eu.etaxonomy.cdm.model.description.PolytomousKey;
50 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
51 import eu.etaxonomy.cdm.model.description.PresenceTerm;
52 import eu.etaxonomy.cdm.model.description.QuantitativeData;
53 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
54 import eu.etaxonomy.cdm.model.description.State;
55 import eu.etaxonomy.cdm.model.description.StateData;
56 import eu.etaxonomy.cdm.model.description.TaxonDescription;
57 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
58 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
59 import eu.etaxonomy.cdm.model.description.TextData;
60 import eu.etaxonomy.cdm.model.description.TextFormat;
61 import eu.etaxonomy.cdm.model.description.WorkingSet;
62 import eu.etaxonomy.cdm.model.location.Country;
63 import eu.etaxonomy.cdm.model.location.NamedArea;
64 import eu.etaxonomy.cdm.model.location.Point;
65 import eu.etaxonomy.cdm.model.location.ReferenceSystem;
66 import eu.etaxonomy.cdm.model.media.AudioFile;
67 import eu.etaxonomy.cdm.model.media.ImageFile;
68 import eu.etaxonomy.cdm.model.media.Media;
69 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
70 import eu.etaxonomy.cdm.model.media.MovieFile;
71 import eu.etaxonomy.cdm.model.media.Rights;
72 import eu.etaxonomy.cdm.model.media.RightsType;
73 import eu.etaxonomy.cdm.model.molecular.Amplification;
74 import eu.etaxonomy.cdm.model.molecular.Cloning;
75 import eu.etaxonomy.cdm.model.molecular.DnaSample;
76 import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
77 import eu.etaxonomy.cdm.model.molecular.Primer;
78 import eu.etaxonomy.cdm.model.molecular.Sequence;
79 import eu.etaxonomy.cdm.model.molecular.SequenceDirection;
80 import eu.etaxonomy.cdm.model.molecular.SequenceString;
81 import eu.etaxonomy.cdm.model.molecular.SingleRead;
82 import eu.etaxonomy.cdm.model.name.BacterialName;
83 import eu.etaxonomy.cdm.model.name.BotanicalName;
84 import eu.etaxonomy.cdm.model.name.CultivarPlantName;
85 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
86 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
87 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
88 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
89 import eu.etaxonomy.cdm.model.name.Rank;
90 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
91 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
92 import eu.etaxonomy.cdm.model.name.ViralName;
93 import eu.etaxonomy.cdm.model.name.ZoologicalName;
94 import eu.etaxonomy.cdm.model.occurrence.Collection;
95 import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
96 import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
97 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
98 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
99 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
100 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
101 import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
102 import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
103 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
104 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
105 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
106 import eu.etaxonomy.cdm.model.reference.Reference;
107 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
108 import eu.etaxonomy.cdm.model.taxon.Classification;
109 import eu.etaxonomy.cdm.model.taxon.Synonym;
110 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
111 import eu.etaxonomy.cdm.model.taxon.Taxon;
112 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
113 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
114 import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
115
116 /**
117 * This class tries to create a database that has
118 * at least one record in each database.
119 * It is meant to test update scripts as well as imports
120 * and exports.
121 * ATTENTION: As the content of the created database may change
122 * over time due to model changes and other requirements test using
123 * this class should be written in a way that they do rather
124 * depend on general parameter than concrete data values.
125 *
126 * @author a.mueller
127 * @created 3013-12-02
128 *
129 * TODO under construction
130 *
131 */
132 public class FullCoverageDataGenerator {
133
134
135 public void fillWithData(Session session){
136 List<CdmBase> cdmBases = new ArrayList<CdmBase>();
137
138 createAgents(cdmBases);
139
140 createDescriptions(cdmBases);
141
142 createMedia(cdmBases);
143
144 createMolecular(cdmBases);
145
146 createTaxonName(cdmBases);
147
148 createOccurrence(cdmBases);
149
150 createReference(cdmBases);
151
152 createTaxon(cdmBases);
153
154 for (CdmBase cdmBase: cdmBases){
155 session.save(cdmBase);
156 }
157 }
158
159
160 /**
161 * @param cdmBases
162 */
163 private void createAgents(List<CdmBase> cdmBases) {
164 //Person
165 Person person = Person.NewTitledInstance("Person Title");
166 person.setFirstname("first name");
167 person.setLastname("last name");
168 person.setLifespan(TimePeriodParser.parseString("1905-1995"));
169 person.setPrefix("prefix");
170 person.setSuffix("suffix");
171
172 handleIdentifiableEntity(person);
173
174 //Contact
175 Contact contact = Contact.NewInstance();
176 person.setContact(contact);
177 Point locality = Point.NewInstance(45.12, -38.69, ReferenceSystem.WGS84(), 22);
178 contact.addEmailAddress("a@b.de");
179 contact.addFaxNumber("f:010-123456");
180 contact.addPhoneNumber("p:090-987654");
181 contact.addUrl(URI.create("http://www.abc.de").toString());
182
183 //Address
184 Address address = Address.NewInstance(Country.GERMANY(), "locality", "pobox", "12345", "region", "street", locality);
185 contact.addAddress(address);
186
187 //Team
188 Team team = Team.NewTitledInstance("Team title", "Team abbrev title");
189 team.addTeamMember(person);
190
191 //Institution
192 Institution institution = Institution.NewInstance();
193 institution.setCode("institution code");
194 institution.setName("institution name");
195
196 //TODO vocabulary
197 // voc = "29ad808b-3126-4274-be81-4561e7afc76f"
198 DefinedTerm instType = DefinedTerm.NewInstitutionTypeInstance("Description forthis instition type", "institution type", "inst. t.");
199 institution.addType(instType);
200 person.addInstitutionalMembership(institution, TimePeriodParser.parseString("1955-1956"), "department", "role");
201
202 Institution subInstitution = Institution.NewInstance();
203 subInstitution.setCode("sub institution code");
204 subInstitution.setName("sub institution name");
205 subInstitution.setIsPartOf(institution);
206
207 cdmBases.add(person);
208 cdmBases.add(team);
209 }
210
211
212 private void createDescriptions(List<CdmBase> cdmBases) {
213
214 //Categorical data
215 State state = State.NewInstance("Test state", "state", "st.");
216 CategoricalData categoricalData = CategoricalData.NewInstance(state, Feature.CONSERVATION());
217 StateData stateData = categoricalData.getStateData().get(0);
218 stateData.addModifier(DefinedTerm.SEX_FEMALE());
219
220 StateData stateData2 = StateData.NewInstance(State.NewInstance());
221 stateData2.putModifyingText(Language.ENGLISH(), "State2 modifying text");
222 categoricalData.addStateData(stateData2);
223
224
225 categoricalData.setOrderRelevant(true);
226
227 //Quantitative data
228 Feature leaveLength = Feature.NewInstance("Leave length description", "leave length", "l.l.");
229 leaveLength.setSupportsQuantitativeData(true);
230 QuantitativeData quantitativeData = QuantitativeData.NewInstance(leaveLength);
231 MeasurementUnit measurementUnit = MeasurementUnit.NewInstance("Measurement Unit", "munit", null);
232 quantitativeData.setUnit(measurementUnit);
233 quantitativeData.setAverage((float)22.9 , null);
234
235
236 CommonTaxonName commonTaxonName = CommonTaxonName.NewInstance("common name", Language.ENGLISH(), Country.UNITEDSTATESOFAMERICA());
237
238 TextData textData = TextData.NewInstance(Feature.DIAGNOSIS());
239 textData.putModifyingText(Language.ENGLISH(), "nice diagnosis");
240
241 TextFormat format = TextFormat.NewInstance("format", "format", null);
242 textData.setFormat(format);
243
244 DerivedUnit specimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
245 IndividualsAssociation indAssoc = IndividualsAssociation.NewInstance(specimen);
246 indAssoc.putDescription(Language.ENGLISH(), "description for individuals association");
247
248 TaxonInteraction taxonInteraction = TaxonInteraction.NewInstance(Feature.HOSTPLANT());
249 taxonInteraction.putDescription(Language.ENGLISH(), "interaction description");
250
251
252 Distribution distribution = Distribution.NewInstance(Country.GERMANY(), PresenceTerm.CULTIVATED());
253
254
255 Taxon taxon = getTaxon();
256 TaxonDescription taxonDescription = TaxonDescription.NewInstance(taxon);
257 taxonDescription.addElements(categoricalData, quantitativeData,
258 textData, commonTaxonName, taxonInteraction, indAssoc, distribution);
259
260 DerivedUnit describedSpecimenOrObservation = DerivedUnit.NewInstance(SpecimenOrObservationType.DerivedUnit);
261 taxonDescription.setDescribedSpecimenOrObservation(describedSpecimenOrObservation);
262
263 taxonDescription.addScope(DefinedTerm.SEX_FEMALE());
264 taxonDescription.addGeoScope(Country.GERMANY());
265
266 cdmBases.add(taxon);
267
268 //DescriptionElmenetBase + source
269 textData.addMedia(Media.NewInstance());
270 textData.addModifier(DefinedTerm.SEX_HERMAPHRODITE());
271 textData.putModifyingText(Language.ENGLISH(), "no modification");
272 textData.setTimeperiod(TimePeriodParser.parseString("1970-1980"));
273 Reference<?> ref = ReferenceFactory.newArticle();
274 DescriptionElementSource source = textData.addSource(OriginalSourceType.Import, "22", "taxon description table", ref, "detail");
275 source.setNameUsedInSource(BotanicalName.NewInstance(Rank.GENUS()));
276
277
278
279 //Specimen description
280 SpecimenOrObservationBase<?> describedSpecimen = getSpecimen();
281 SpecimenDescription.NewInstance(specimen);
282 cdmBases.add(describedSpecimen);
283
284 //Name description
285 TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
286 TaxonNameDescription.NewInstance(name);
287 cdmBases.add(name);
288
289 //Feature Tree
290 FeatureTree featureTree = FeatureTree.NewInstance();
291 FeatureNode descriptionFeatureNode = FeatureNode.NewInstance(Feature.DESCRIPTION());
292 FeatureNode leaveLengthNode = FeatureNode.NewInstance(leaveLength);
293 featureTree.getRootChildren().add(descriptionFeatureNode);
294 descriptionFeatureNode.addChild(leaveLengthNode);
295
296 State inapplicableState = State.NewInstance("inapplicableState", "inapplicableState", null);
297 State applicableState = State.NewInstance("only applicable state", "only applicable state", null);
298 leaveLengthNode.addInapplicableState(inapplicableState);
299 leaveLengthNode.addApplicableState(applicableState);
300 cdmBases.add(featureTree);
301
302
303 WorkingSet workingSet = WorkingSet.NewInstance();
304 workingSet.addDescription(taxonDescription);
305 workingSet.setLabel("My Workingset");
306 workingSet.getDescriptiveSystem();
307
308
309 //polytomous keys
310 Taxon coveredTaxon = Taxon.NewInstance(name, null);
311 PolytomousKey key = PolytomousKey.NewTitledInstance("My Polykey");
312 handleIdentificationKey(key, taxon, coveredTaxon);
313 key.setStartNumber(10);
314
315
316 PolytomousKeyNode firstChildNode = PolytomousKeyNode.NewInstance("Green", "What is the leave length?", coveredTaxon, leaveLength);
317 key.getRoot().addChild(firstChildNode);
318 PolytomousKeyNode secondChildNode = PolytomousKeyNode.NewInstance("234");
319 firstChildNode.addChild(secondChildNode);
320
321 PolytomousKey subkey = PolytomousKey.NewTitledInstance("Sub-key");
322 firstChildNode.setSubkey(subkey);
323
324 PolytomousKeyNode subKeyNode = PolytomousKeyNode.NewInstance("sub key couplet");
325 subkey.getRoot().addChild(subKeyNode);
326 secondChildNode.setOtherNode(subKeyNode);
327
328 secondChildNode.putModifyingText(Language.GERMAN(), "manchmal");
329
330 cdmBases.add(key);
331 cdmBases.add(subkey);
332
333 MediaKey mediaKey = MediaKey.NewInstance();
334 mediaKey.addKeyRepresentation(Representation.NewInstance("Media Key Representation", "media key", null, Language.ENGLISH()));
335 handleIdentificationKey(mediaKey, taxon, coveredTaxon);
336
337 MultiAccessKey multiAccessKey = MultiAccessKey.NewInstance();
338 handleIdentificationKey(multiAccessKey, taxon, coveredTaxon);
339
340 cdmBases.add(mediaKey);
341 cdmBases.add(multiAccessKey);
342
343 }
344
345
346
347 private void handleIdentificationKey(IIdentificationKey key, Taxon taxon, Taxon coveredTaxon){
348 key.addCoveredTaxon(coveredTaxon);
349 key.addGeographicalScope(Country.GERMANY());
350 key.addScopeRestriction(DefinedTerm.SEX_FEMALE());
351 key.addTaxonomicScope(taxon);
352 }
353
354
355 private void createMedia(List<CdmBase> cdmBases){
356 AudioFile audioFile = AudioFile.NewInstance(URI.create("http://a.b.de"), 22);
357 ImageFile imageFile = ImageFile.NewInstance(URI.create("http://b.c.de"), 44, 467, 55);
358 MovieFile movieFile = MovieFile.NewInstance(URI.create("http://b.c.de"), 67);
359 MediaRepresentation mediaRepresentation = MediaRepresentation.NewInstance("mime", "media");
360
361 mediaRepresentation.addRepresentationPart(movieFile);
362 mediaRepresentation.addRepresentationPart(imageFile);
363 mediaRepresentation.addRepresentationPart(audioFile);
364 Media media = Media.NewInstance();
365 media.addRepresentation(mediaRepresentation);
366
367 media.putTitle(Language.ENGLISH(), "Media title");
368 media.setMediaCreated(DateTime.now());
369 media.putDescription(Language.ENGLISH(), "Media description");
370
371 Person artist = Person.NewTitledInstance("artist");
372 media.setArtist(artist);
373 cdmBases.add(media);
374 cdmBases.add(artist);
375 }
376
377
378 private void createMolecular(List<CdmBase> cdmBases) {
379 DnaSample dnaSample = DnaSample.NewInstance();
380
381 //Amplification
382 Amplification amplification = Amplification.NewInstance(dnaSample);
383 DefinedTerm dnaMarker = DefinedTerm.NewDnaMarkerInstance("My dna marker", "dna marker", null);
384 amplification.setDnaMarker(dnaMarker);
385 amplification.setSuccessful(true);
386 amplification.setSuccessText("Very successful");
387
388 Primer forwardPrimer = Primer.NewInstance("forward primer");
389 forwardPrimer.setPublishedIn(getReference());
390 forwardPrimer.setSequence(Sequence.NewInstance("my sequence"));
391
392 Primer reversePrimer = Primer.NewInstance("reverse primer");
393
394 amplification.setForwardPrimer(forwardPrimer);
395 amplification.setReversePrimer(reversePrimer);
396
397 DefinedTerm cloningMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "cloning method", "cloning method", null);
398 Cloning cloning = Cloning.NewInstance(cloningMethod, "My cloning method", "my strain", forwardPrimer, reversePrimer);
399 amplification.setCloning(cloning);
400
401 DefinedTerm purificationMethod = DefinedTerm.NewInstance(TermType.MaterialOrMethod, "purification method", "purification method", null);
402 MaterialOrMethodEvent purification = MaterialOrMethodEvent.NewInstance(purificationMethod, "purification method");
403 amplification.setPurification(purification);
404
405
406 amplification.setLadderUsed("ladder");
407 amplification.setElectrophoresisVoltage(5.5);
408 amplification.setGelConcentration(2.4);
409 amplification.setGelRunningTime(3.6);
410 Media gelPhoto = Media.NewInstance();
411 amplification.setGelPhoto(gelPhoto);
412
413 //SingleRead
414 SingleRead singleRead = SingleRead.NewInstance();
415 amplification.addSingleRead(singleRead);
416 MaterialOrMethodEvent readEvent = MaterialOrMethodEvent.NewInstance(null, "read method");
417
418 singleRead.setMaterialOrMethod(readEvent);
419 Media pherogram = Media.NewInstance();
420 singleRead.setPherogram(pherogram);
421
422 singleRead.setPrimer(forwardPrimer);
423 singleRead.setSequence(SequenceString.NewInstance("ABTC"));
424 singleRead.setDirection(SequenceDirection.Forward);
425
426 //Seuqence
427 Sequence sequence = Sequence.NewInstance("ADDT");
428 dnaSample.addSequence(sequence);
429 sequence.addSingleRead(singleRead);
430 Media contigFile = Media.NewInstance();
431 sequence.setContigFile(contigFile);
432 sequence.setIsBarcode(true);
433 sequence.setDnaMarker(dnaMarker);
434 sequence.setBarcodeSequencePart(SequenceString.NewInstance("ADTA"));
435 sequence.setGeneticAccessionNumber("GenNO12345");
436 sequence.setBoldProcessId("boldId");
437 sequence.setHaplotype("haplotype");
438 Reference<?> sequenceCitation = getReference();
439 sequence.addCitation(sequenceCitation);
440
441
442 //Phylogenetic Tree
443 PhylogeneticTree phyloTree = PhylogeneticTree.NewInstance();
444 phyloTree.addUsedSequences(sequence);
445
446 cdmBases.add(dnaSample);
447 cdmBases.add(phyloTree);
448 }
449
450
451 private void createTaxon(List<CdmBase> cdmBases) {
452 Reference<?> sec = getReference();
453 TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
454 Taxon taxon = Taxon.NewInstance(name, sec);
455
456 TaxonNameBase<?,?> synName = BotanicalName.NewInstance(Rank.GENUS());
457 Synonym syn = Synonym.NewInstance(synName, sec);
458 taxon.addSynonym(syn, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(),
459 getReference(), "123");
460 taxon.setDoubtful(true);
461
462 Taxon concept = Taxon.NewInstance(name, getReference());
463 taxon.addTaxonRelation(concept, TaxonRelationshipType.CONGRUENT_TO(),
464 sec, "444");
465 taxon.setTaxonStatusUnknown(true);
466 taxon.setUnplaced(true);
467 taxon.setExcluded(true);
468
469 //Classification
470 Classification classification = Classification.NewInstance("My classification", sec);
471 TaxonNode node = classification.addChildTaxon(taxon, sec,"22");
472
473 Taxon childTaxon = Taxon.NewInstance(synName, sec);
474 node.addChildTaxon(childTaxon, sec, "44");
475
476 cdmBases.add(taxon);
477 cdmBases.add(concept);
478 cdmBases.add(childTaxon);
479 cdmBases.add(classification);
480
481
482 }
483
484
485
486
487 private void createReference(List<CdmBase> cdmBases) {
488 Reference<?> reference = ReferenceFactory.newArticle();
489 Person author = Person.NewTitledInstance("Author team");
490 reference.setAuthorTeam(author);
491 reference.setTitle("ref title");
492 reference.setAbbrevTitle("abbrev title");
493 reference.setDatePublished(TimePeriodParser.parseString("1999"));
494 reference.setEdition("edition");
495 reference.setEditor("editor");
496 Institution institution = Institution.NewInstance();
497 reference.setInstitution(institution);
498 reference.setIsbn("1234556");
499 reference.setIssn("issn");
500 reference.setDoi(DOI.fromRegistrantCodeAndSuffix("14356", "suffix"));
501 reference.setReferenceAbstract("referenceAbstract");
502 reference.setOrganization("organization");
503 reference.setPages("123-134");
504 reference.setPlacePublished("place Published");
505 reference.setPublisher("publisher");
506 Institution school = Institution.NewInstance();
507 reference.setSchool(school);
508 // reference.setSeriesPart("series");
509 reference.setSeriesPart("seriesPart");
510 reference.setVolume("vol. 3");
511 reference.setUri(URI.create("http://rer.abc.de"));
512
513 Reference<?> journal = ReferenceFactory.newJournal();
514 reference.setInJournal(journal);
515
516 cdmBases.add(reference);
517
518 }
519
520
521
522
523 private void createOccurrence(List<CdmBase> cdmBases) {
524 //Collection
525 Collection collection = Collection.NewInstance();
526 Collection subCollection = Collection.NewInstance();
527 subCollection.setSuperCollection(collection);
528
529 collection.setCode("coll code");
530 collection.setCodeStandard("codeStandard");
531 collection.setName("coll name");
532 collection.setTownOrLocation("townOrLocation");
533 Institution institution = Institution.NewInstance();
534 collection.setInstitute(institution);
535
536 //FieldUnit
537 FieldUnit fieldUnit = FieldUnit.NewInstance();
538 fieldUnit.setFieldNumber("fieldNumber");
539 fieldUnit.setFieldNotes("fieldNotes");
540 Person primaryCollector = Person.NewInstance();
541 fieldUnit.setPrimaryCollector(primaryCollector);
542
543 GatheringEvent gatheringEvent = GatheringEvent.NewInstance();
544 fieldUnit.setGatheringEvent(gatheringEvent);
545 gatheringEvent.putLocality(Language.ENGLISH(), "locality");
546 gatheringEvent.setExactLocation(Point.NewInstance(22.4, -34.2,
547 ReferenceSystem.WGS84(), 33));
548 gatheringEvent.setCountry(Country.GERMANY());
549 gatheringEvent.addCollectingArea(NamedArea.EUROPE());
550 gatheringEvent.setCollectingMethod("collectingMethod");
551 gatheringEvent.setAbsoluteElevation(10);
552 gatheringEvent.setAbsoluteElevationMax(100);
553 gatheringEvent.setAbsoluteElevationText("elevation text");
554
555 gatheringEvent.setDistanceToGround(10.4);
556 gatheringEvent.setDistanceToGroundMax(100.3);
557 gatheringEvent.setDistanceToGroundText("distance to ground text");
558
559 gatheringEvent.setDistanceToWaterSurface(10.4);
560 gatheringEvent.setDistanceToWaterSurfaceMax(100.3);
561 gatheringEvent.setDistanceToWaterSurfaceText("distance to water text");
562
563
564 //Derived Unit
565 MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(SpecimenOrObservationType.StillImage);
566 mediaSpecimen.setCollection(collection);
567 mediaSpecimen.setCatalogNumber("catalogNumber");
568 mediaSpecimen.setAccessionNumber("accessionNumber");
569 // mediaSpecimen.setCollectorsNumber("collectorsNumber");
570 mediaSpecimen.setBarcode("barcode");
571 BotanicalName storedUnder = BotanicalName.NewInstance(Rank.SPECIES());
572 storedUnder.setTitleCache("Stored under", true);
573 mediaSpecimen.setStoredUnder(storedUnder);
574 mediaSpecimen.setExsiccatum("exsiccatum");
575 PreservationMethod preservation = PreservationMethod.NewInstance(null, "My preservation");
576 preservation.setTemperature(22.4);
577 mediaSpecimen.setPreservation(preservation);
578
579 //DerivationEvent
580 DerivationEvent event = DerivationEvent.NewInstance(DerivationEventType.ACCESSIONING());
581 event.addOriginal(fieldUnit);
582 event.addDerivative(mediaSpecimen);
583
584
585 //SpecOrObservationBase
586 fieldUnit.setSex(DefinedTerm.SEX_FEMALE());
587 fieldUnit.setLifeStage(DefinedTerm.NewStageInstance("Live stage", "stage", null));
588 fieldUnit.setKindOfUnit(DefinedTerm.NewKindOfUnitInstance("Kind of unit", "Kind of unit", null));
589 fieldUnit.setIndividualCount(3);
590 fieldUnit.putDefinition(Language.ENGLISH(), "definition");
591 fieldUnit.setPublish(true);
592
593 //Determination
594 DeterminationEvent determinationEvent = DeterminationEvent.NewInstance(getTaxon(), mediaSpecimen);
595 determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
596 determinationEvent.setPreferredFlag(true);
597 determinationEvent.addReference(getReference());
598
599 cdmBases.add(fieldUnit);
600 cdmBases.add(mediaSpecimen);
601 cdmBases.add(collection);
602 }
603
604
605 private void createTaxonName(List<CdmBase> cdmBases) {
606 BacterialName bacName = BacterialName.NewInstance(Rank.GENUS());
607 bacName.setSubGenusAuthorship("sub Genus author");
608 bacName.setNameApprobation("nameApprobation");
609
610 CultivarPlantName botName = CultivarPlantName.NewInstance(Rank.SUBSPECIES());
611 botName.setAnamorphic(true);
612 botName.setCultivarName("cultivarName");
613 botName.setGenusOrUninomial("Genus");
614 botName.setInfraGenericEpithet("InfraGeneric");
615 botName.setSpecificEpithet("specificEpithet");
616 botName.setInfraSpecificEpithet("infraSpecificEpithet");
617 Person combinationAuthorTeam = Person.NewInstance();
618 botName.setCombinationAuthorTeam(combinationAuthorTeam);
619 Person exCombinationAuthorTeam = Person.NewInstance();
620 botName.setExCombinationAuthorTeam(exCombinationAuthorTeam);
621 Person basionymAuthorTeam = Person.NewInstance();
622 botName.setBasionymAuthorTeam(basionymAuthorTeam);
623 Person exBasionymAuthorTeam = Person.NewInstance();
624 botName.setExBasionymAuthorTeam(exBasionymAuthorTeam);
625
626 ZoologicalName zooName = ZoologicalName.NewInstance(Rank.GENUS());
627 zooName.setBreed("breed");
628 zooName.setPublicationYear(1922);
629 zooName.setOriginalPublicationYear(1987);
630 zooName.setAppendedPhrase("appended phrase");
631 zooName.addDescription(TaxonNameDescription.NewInstance());
632 zooName.setNomenclaturalMicroReference("p. 123");
633 zooName.setNomenclaturalReference(getReference());
634 zooName.addRelationshipFromName(botName, NameRelationshipType.LATER_HOMONYM() , "ruleConsidered");
635 zooName.addStatus(NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED(), getReference(), "p. 222"));
636
637 //TypeDesignation
638 ZoologicalName speciesZooName = ZoologicalName.NewInstance(Rank.SPECIES());
639 zooName.addNameTypeDesignation(speciesZooName, getReference(), "111", "original name",
640 NameTypeDesignationStatus.AUTOMATIC(), true, true, true, true);
641 speciesZooName.addSpecimenTypeDesignation(getSpecimen(), SpecimenTypeDesignationStatus.HOLOTYPE(),
642 getReference(), "p,22", "original name", false, true);
643
644
645 ViralName viralName = ViralName.NewInstance(Rank.GENUS());
646 viralName.setAcronym("acronym");
647
648 cdmBases.add(bacName);
649 cdmBases.add(botName);
650 cdmBases.add(viralName);
651 cdmBases.add(zooName);
652 }
653
654 private void handleAnnotatableEntity(AnnotatableEntity entity){
655 Annotation annotation = Annotation.NewDefaultLanguageInstance("annotation");
656 entity.addAnnotation(annotation);
657 Marker marker = Marker.NewInstance(MarkerType.COMPLETE(), true);
658 entity.addMarker(marker);
659 }
660
661 private void handleIdentifiableEntity(IdentifiableEntity<?> identifiableEntity){
662 handleAnnotatableEntity(identifiableEntity);
663
664 //Credits
665 Person creditor = Person.NewTitledInstance("Creditor");
666 Credit credit = Credit.NewInstance(creditor, "credit");
667 identifiableEntity.addCredit(credit);
668
669 //Extension
670 Extension.NewInstance(identifiableEntity, "extension", ExtensionType.INFORMAL_CATEGORY());
671
672 //Rights
673 Rights rights = Rights.NewInstance("right", Language.ENGLISH());
674 rights.setUri(URI.create("http://rights.abc.de"));
675 rights.setAbbreviatedText("abbrev");
676 rights.setType(RightsType.COPYRIGHT());
677 Person owner = Person.NewTitledInstance("Owner");
678 rights.setAgent(owner);
679
680 //source
681 IdentifiableSource source = identifiableEntity.addSource(OriginalSourceType.Import, "id", "idNamespace",
682 getReference(), "123");
683 source.setOriginalNameString("original name");
684
685 //LSID
686 try {
687 LSID lsid = new LSID("urn:lsid:a.b.de:namespace:1234");
688 identifiableEntity.setLsid(lsid);
689 } catch (MalformedLSIDException e) {
690 e.printStackTrace();
691 }
692
693
694 }
695
696
697 private Reference<?> getReference() {
698 Reference<?> result = ReferenceFactory.newGeneric();
699 result.setTitle("some generic reference");
700 return result;
701 }
702
703
704 private DerivedUnit getSpecimen() {
705 DerivedUnit derivedUnit = DerivedUnit.NewPreservedSpecimenInstance();
706 return derivedUnit;
707 }
708
709
710
711 private Taxon getTaxon() {
712 Reference<?> sec = getReference();
713 TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.GENUS());
714 Taxon taxon = Taxon.NewInstance(name, sec);
715 return taxon;
716
717 }
718 }