2 * Copyright (C) 2014 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.api
.service
;
11 import static org
.junit
.Assert
.assertEquals
;
12 import static org
.junit
.Assert
.assertFalse
;
13 import static org
.junit
.Assert
.assertNotEquals
;
14 import static org
.junit
.Assert
.assertNotNull
;
15 import static org
.junit
.Assert
.assertNull
;
16 import static org
.junit
.Assert
.assertTrue
;
18 import java
.io
.FileNotFoundException
;
19 import java
.util
.Collection
;
20 import java
.util
.Collections
;
21 import java
.util
.List
;
23 import java
.util
.UUID
;
24 import java
.util
.stream
.Collectors
;
26 import org
.apache
.log4j
.Logger
;
27 import org
.junit
.Test
;
28 import org
.unitils
.dbunit
.annotation
.DataSet
;
29 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
31 import eu
.etaxonomy
.cdm
.api
.service
.config
.FindOccurrencesConfigurator
;
32 import eu
.etaxonomy
.cdm
.api
.service
.config
.SpecimenDeleteConfigurator
;
33 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.ISequenceService
;
34 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
35 import eu
.etaxonomy
.cdm
.model
.agent
.Institution
;
36 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
37 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
38 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
39 import eu
.etaxonomy
.cdm
.model
.common
.Identifier
;
40 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
41 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
42 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
43 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
44 import eu
.etaxonomy
.cdm
.model
.description
.SpecimenDescription
;
45 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
46 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
47 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
48 import eu
.etaxonomy
.cdm
.model
.name
.IBotanicalName
;
49 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
50 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
51 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
52 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameFactory
;
53 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
54 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
55 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
56 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
57 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationEvent
;
58 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
59 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
60 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
61 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
62 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
63 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
64 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
65 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymType
;
66 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
67 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
68 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
69 import eu
.etaxonomy
.cdm
.persistence
.dto
.SpecimenNodeWrapper
;
70 import eu
.etaxonomy
.cdm
.persistence
.query
.AssignmentStatus
;
71 import eu
.etaxonomy
.cdm
.test
.integration
.CdmTransactionalIntegrationTest
;
72 import eu
.etaxonomy
.cdm
.test
.unitils
.CleanSweepInsertLoadStrategy
;
79 public class OccurrenceServiceTest
extends CdmTransactionalIntegrationTest
{
81 @SuppressWarnings("unused")
82 private static final Logger logger
= Logger
.getLogger(OccurrenceServiceTest
.class);
85 private IOccurrenceService occurrenceService
;
88 private ISequenceService sequenceService
;
91 private ITaxonService taxonService
;
94 private ITaxonNodeService taxonNodeService
;
97 private IClassificationService classificationService
;
100 private INameService nameService
;
103 private ITermService termService
;
106 private IDescriptionService descriptionService
;
108 private Reference
getReference() {
109 Reference result
= ReferenceFactory
.newGeneric();
110 result
.setTitle("some generic reference");
114 private Taxon
getTaxon() {
115 Reference sec
= getReference();
116 TaxonName name
= TaxonNameFactory
.NewBotanicalInstance(Rank
.GENUS());
117 Taxon taxon
= Taxon
.NewInstance(name
, sec
);
123 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurenceServiceTest.move.xml")
124 public void testMoveDerivate() {
125 DerivedUnit specimenA
= (DerivedUnit
) occurrenceService
.load(UUID
126 .fromString("35cfb0b3-588d-4eee-9db6-ac9caa44e39a"));
127 DerivedUnit specimenB
= (DerivedUnit
) occurrenceService
.load(UUID
128 .fromString("09496534-efd0-44c8-b1ce-01a34a8a0229"));
129 DerivedUnit dnaSample
= (DnaSample
) occurrenceService
.load(UUID
130 .fromString("5995f852-0e78-405c-b849-d923bd6781d9"));
132 occurrenceService
.saveOrUpdate(specimenA
);
133 occurrenceService
.saveOrUpdate(specimenB
);
134 occurrenceService
.saveOrUpdate(dnaSample
);
136 Person derivationActor
= Person
.NewTitledInstance("Derivation Actor");
137 String derivationDescription
= "Derivation Description";
138 Institution derivationInstitution
= Institution
.NewInstance();
139 TimePeriod derivationTimePeriod
= TimePeriod
.NewInstance(2015);
141 DerivationEvent originalDerivedFromEvent
= DerivationEvent
.NewSimpleInstance(specimenA
, dnaSample
,
142 DerivationEventType
.DNA_EXTRACTION());
144 originalDerivedFromEvent
.setActor(derivationActor
);
145 originalDerivedFromEvent
.setDescription(derivationDescription
);
146 originalDerivedFromEvent
.setInstitution(derivationInstitution
);
147 originalDerivedFromEvent
.setTimeperiod(derivationTimePeriod
);
149 occurrenceService
.moveDerivate(specimenA
, specimenB
, dnaSample
);
150 assertTrue("DerivationEvent not removed from source!", specimenA
.getDerivationEvents().isEmpty());
151 assertEquals("DerivationEvent not moved to source!", 1, specimenB
.getDerivationEvents().size());
153 DerivationEvent derivationEvent
= specimenB
.getDerivationEvents().iterator().next();
154 assertEquals("Moved DerivationEvent not of same type!", DerivationEventType
.DNA_EXTRACTION(),
155 derivationEvent
.getType());
156 assertEquals(derivationActor
, derivationEvent
.getActor());
157 assertEquals(derivationDescription
, derivationEvent
.getDescription());
158 assertEquals(derivationInstitution
, derivationEvent
.getInstitution());
159 assertEquals(derivationTimePeriod
, derivationEvent
.getTimeperiod());
160 assertEquals(DerivationEventType
.DNA_EXTRACTION(), derivationEvent
.getType());
162 assertEquals("Wrong number of derivation originals!", 1, derivationEvent
.getOriginals().size());
163 SpecimenOrObservationBase
<?
> newOriginal
= derivationEvent
.getOriginals().iterator().next();
164 assertEquals("Target of moved object not correct", specimenB
, newOriginal
);
165 assertEquals("Wrong number of derivatives!", 1, derivationEvent
.getDerivatives().size());
167 DerivedUnit movedDerivate
= derivationEvent
.getDerivatives().iterator().next();
168 assertEquals("Moved derivate has wrong type", SpecimenOrObservationType
.DnaSample
,
169 movedDerivate
.getRecordBasis());
170 assertNotEquals("DerivationEvent 'derivedFrom' has not been changed after moving", originalDerivedFromEvent
,
171 movedDerivate
.getDerivedFrom());
176 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "../../database/BlankDataSet.xml")
177 public void testMoveDerivateNoParent() {
178 DerivedUnit derivedUnit
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
179 FieldUnit fieldUnit
= FieldUnit
.NewInstance();
181 occurrenceService
.saveOrUpdate(fieldUnit
);
182 occurrenceService
.saveOrUpdate(derivedUnit
);
184 assertEquals("DerivationEvent not moved to source!", 0, fieldUnit
.getDerivationEvents().size());
185 occurrenceService
.moveDerivate(null, fieldUnit
, derivedUnit
);
186 assertEquals("DerivationEvent not moved to source!", 1, fieldUnit
.getDerivationEvents().size());
188 DerivationEvent derivationEvent
= fieldUnit
.getDerivationEvents().iterator().next();
189 assertNull(derivationEvent
.getType());
191 assertEquals("Wrong number of derivation originals!", 1, derivationEvent
.getOriginals().size());
192 SpecimenOrObservationBase
<?
> newOriginal
= derivationEvent
.getOriginals().iterator().next();
193 assertEquals("Target of moved object not correct", fieldUnit
, newOriginal
);
194 assertEquals("Wrong number of derivatives!", 1, derivationEvent
.getDerivatives().size());
198 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurenceServiceTest.move.xml")
199 public void testMoveSequence() {
200 DnaSample dnaSampleA
= (DnaSample
) occurrenceService
.load(UUID
201 .fromString("5995f852-0e78-405c-b849-d923bd6781d9"));
202 DnaSample dnaSampleB
= (DnaSample
) occurrenceService
.load(UUID
203 .fromString("85fccc2f-c796-46b3-b2fc-6c9a4d68cfda"));
204 String consensusSequence
= "ATTCG";
205 Sequence sequence
= sequenceService
.load(UUID
.fromString("6da4f378-9861-4338-861b-7b8073763e7a"));
207 occurrenceService
.saveOrUpdate(dnaSampleA
);
208 occurrenceService
.saveOrUpdate(dnaSampleB
);
209 sequenceService
.saveOrUpdate(sequence
);
211 dnaSampleA
.addSequence(sequence
);
213 occurrenceService
.moveSequence(dnaSampleA
, dnaSampleB
, sequence
);
214 assertEquals("Number of sequences is wrong", 0, dnaSampleA
.getSequences().size());
215 assertEquals("Number of sequences is wrong", 1, dnaSampleB
.getSequences().size());
216 Sequence next
= dnaSampleB
.getSequences().iterator().next();
217 assertEquals("Sequences are not equals", sequence
, next
);
218 assertEquals("Sequences are not equals", consensusSequence
, next
.getSequenceString());
222 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testDeleteIndividualAssociatedAndTypeSpecimen.xml")
223 public void testDeleteIndividualAssociatedAndTypeSpecimen() {
224 final UUID taxonDEscriptionUuid
= UUID
.fromString("a87a893e-2ea8-427d-a26b-dbd2515d6b8a");
225 final UUID botanicalNameUuid
= UUID
.fromString("a604774e-d66a-4d47-b9d1-d0e38a8c787a");
226 final UUID fieldUnitUuid
= UUID
.fromString("67e81ca8-ff91-4df6-bf48-e4600c7f15a2");
227 final UUID derivedUnitUuid
= UUID
.fromString("d229713b-0123-4f15-bffc-76ae45c37564");
229 // //how the XML was generated
230 // FieldUnit fieldUnit = FieldUnit.NewInstance();
231 // fieldUnit.setUuid(fieldUnitUuid);
232 // //sub derivates (DerivedUnit, DnaSample)
233 // DerivedUnit derivedUnit =
234 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
235 // derivedUnit.setUuid(derivedUnitUuid);
237 // //derivation events
238 // DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit,
239 // DerivationEventType.ACCESSIONING());
241 // occurrenceService.save(fieldUnit);
242 // occurrenceService.save(derivedUnit);
244 // //create name with type specimen
245 // BotanicalName name =
246 // BotanicalName.PARSED_NAME("Campanula patual sec L.");
247 // name.setUuid(BOTANICAL_NAME_UUID);
248 // SpecimenTypeDesignation typeDesignation =
249 // SpecimenTypeDesignation.NewInstance();
250 // typeDesignation.setTypeSpecimen(derivedUnit);
251 // //add type designation to name
252 // name.addTypeDesignation(typeDesignation, false);
254 // // create taxon with name and two taxon descriptions (one with
255 // // IndividualsAssociations and a "described" voucher specimen, and an
257 // Taxon taxon = Taxon.NewInstance(name, null);
258 // taxon.setUuid(taxonUuid);
259 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
260 // taxonDescription.setUuid(TAXON_DESCRIPTION_UUID);
262 // taxonDescription.addElement(IndividualsAssociation.NewInstance(fieldUnit));
263 // taxon.addDescription(taxonDescription);
264 // //add another taxon description to taxon which is not associated with
265 // a specimen thus should not be taken into account
266 // taxon.addDescription(TaxonDescription.NewInstance());
267 // taxonService.saveOrUpdate(taxon);
270 // commitAndStartNewTransaction(null);
277 // writeDbUnitDataSetFile(new String[] {
278 // "SpecimenOrObservationBase",
279 // "SpecimenOrObservationBase_DerivationEvent",
280 // "DerivationEvent",
282 // "Sequence_SingleRead",
284 // "AmplificationResult",
285 // "DescriptionElementBase",
286 // "DescriptionBase",
288 // "TypeDesignationBase",
290 // "TaxonName_TypeDesignationBase",
291 // "HomotypicalGroup"
292 // }, "testDeleteIndividualAssociatedAndTypeSpecimen");
293 // } catch (FileNotFoundException e) {
294 // e.printStackTrace();
297 FieldUnit associatedFieldUnit
= (FieldUnit
) occurrenceService
.load(fieldUnitUuid
);
298 DerivedUnit typeSpecimen
= (DerivedUnit
) occurrenceService
.load(derivedUnitUuid
);
299 IBotanicalName name
= nameService
.load(botanicalNameUuid
);
300 TaxonDescription taxonDescription
= (TaxonDescription
) descriptionService
.load(taxonDEscriptionUuid
);
301 // check initial state (IndividualsAssociation)
302 DescriptionElementBase descriptionElement
= taxonDescription
.getElements().iterator().next();
303 assertTrue("wrong type of description element", descriptionElement
.isInstanceOf(IndividualsAssociation
.class));
304 assertEquals("associated specimen is incorrect", associatedFieldUnit
,
305 ((IndividualsAssociation
) descriptionElement
).getAssociatedSpecimenOrObservation());
306 // check initial state (Type Designation)
307 Set
<TypeDesignationBase
> typeDesignations
= name
.getTypeDesignations();
308 TypeDesignationBase
<?
> typeDesignation
= typeDesignations
.iterator().next();
309 assertTrue("wrong type of type designation", typeDesignation
.isInstanceOf(SpecimenTypeDesignation
.class));
310 assertEquals("type specimen is incorrect", typeSpecimen
,
311 ((SpecimenTypeDesignation
) typeDesignation
).getTypeSpecimen());
313 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
314 // delete type specimen from type designation
315 config
.setDeleteFromTypeDesignation(true);
316 occurrenceService
.delete(typeSpecimen
, config
);
317 assertTrue(((SpecimenTypeDesignation
) typeDesignation
).getTypeSpecimen() == null);
319 // delete associated field unit from IndividualsAssociation
320 config
.setDeleteFromIndividualsAssociation(true);
321 occurrenceService
.delete(associatedFieldUnit
, config
);
322 assertTrue(((IndividualsAssociation
) descriptionElement
).getAssociatedSpecimenOrObservation() == null);
327 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceService.loadData.xml")
328 public void testLoadData() {
329 String fieldUnitUuid
= "5a31df5a-2e4d-40b1-8d4e-5754736ae7ef";
330 String derivedUnitUuid
= "18f70977-5d9c-400a-96c4-0cb7a2cd287e";
332 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(UUID
.fromString(fieldUnitUuid
));
333 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(UUID
.fromString(derivedUnitUuid
));
335 assertFalse(fieldUnit
.getDerivationEvents().iterator().next().getDerivatives().isEmpty());
336 assertTrue(derivedUnit
.getDerivedFrom() != null);
340 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testListAssociatedAndTypedTaxa.xml")
341 public void testListIndividualsAssociatensAndSpecimenTypeDesignations(){
342 UUID fieldUnitUuid
= UUID
.fromString("b359ff20-98de-46bf-aa43-3e10bb072cd4");
343 UUID typeSpecimenUuid
= UUID
.fromString("0f8608c7-ffe7-40e6-828c-cb3382580878");
344 UUID taxonDescriptionUuid
= UUID
.fromString("d77db2d4-45a1-4aa1-ab34-f33395f54965");
345 UUID taxonUuid
= UUID
.fromString("b0de794c-8cb7-4369-8f83-870ca37abbe0");
346 // //how the XML was generated
347 // FieldUnit associatedFieldUnit = FieldUnit.NewInstance();
348 // associatedFieldUnit.setUuid(fieldUnitUuid);
349 // //sub derivates (DerivedUnit, DnaSample)
350 // DerivedUnit typeSpecimen =
351 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
352 // typeSpecimen.setUuid(typeSpecimenUuid);
354 // //derivation events
355 // DerivationEvent.NewSimpleInstance(associatedFieldUnit, typeSpecimen,
356 // DerivationEventType.ACCESSIONING());
358 // occurrenceService.save(associatedFieldUnit);
359 // occurrenceService.save(typeSpecimen);
361 // //create name with type specimen
362 // BotanicalName name =
363 // BotanicalName.PARSED_NAME("Campanula patual sec L.");
364 // SpecimenTypeDesignation typeDesignation =
365 // SpecimenTypeDesignation.NewInstance();
366 // typeDesignation.setTypeSpecimen(typeSpecimen);
368 // // create taxon with name and two taxon descriptions (one with
369 // // IndividualsAssociations and a "described" voucher specimen, and an
371 // Taxon taxon = Taxon.NewInstance(name, null);
372 // taxon.setUuid(taxonUuid);
373 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
374 // taxonDescription.setUuid(taxonDescriptionUuid);
376 // taxonDescription.addElement(IndividualsAssociation.NewInstance(associatedFieldUnit));
377 // taxon.addDescription(taxonDescription);
378 // //add type designation to name
379 // name.addTypeDesignation(typeDesignation, false);
380 // //add another taxon description to taxon which is not associated with
381 // a specimen thus should not be taken into account
382 // taxon.addDescription(TaxonDescription.NewInstance());
383 // taxonService.saveOrUpdate(taxon);
385 // commitAndStartNewTransaction(null);
391 // writeDbUnitDataSetFile(new String[]{
392 // "SpecimenOrObservationBase",
393 // "SpecimenOrObservationBase_DerivationEvent",
394 // "DerivationEvent",
396 // "Sequence_SingleRead",
398 // "AmplificationResult",
399 // "DescriptionElementBase",
400 // "DescriptionBase",
402 // "TypeDesignationBase",
404 // "TaxonName_TypeDesignationBase",
405 // "HomotypicalGroup"}, "testListAssociatedAndTypedTaxa");
406 // } catch (FileNotFoundException e) {
407 // e.printStackTrace();
410 // System.out.println("associatedFieldUnit.getUuid() " +
411 // associatedFieldUnit.getUuid());
412 // System.out.println("typeSpecimen.getUuid() "+typeSpecimen.getUuid());
413 // System.out.println("taxonDescription.getUuid() "+taxonDescription.getUuid());
414 // System.out.println("taxon.getUuid() "+taxon.getUuid());
416 FieldUnit associatedFieldUnit
= (FieldUnit
) occurrenceService
.load(fieldUnitUuid
);
417 DerivedUnit typeSpecimen
= (DerivedUnit
) occurrenceService
.load(typeSpecimenUuid
);
418 Taxon taxon
= (Taxon
) taxonService
.load(taxonUuid
);
419 TaxonDescription taxonDescription
= (TaxonDescription
) descriptionService
.load(taxonDescriptionUuid
);
420 // check for FieldUnit (IndividualsAssociation)
421 java
.util
.Collection
<IndividualsAssociation
> individualsAssociations
= occurrenceService
422 .listIndividualsAssociations(associatedFieldUnit
, null, null, null, null);
423 assertEquals("Number of individuals associations is incorrect", 1, individualsAssociations
.size());
424 IndividualsAssociation individualsAssociation
= individualsAssociations
.iterator().next();
425 assertTrue("association has wrong type",
426 individualsAssociation
.getInDescription().isInstanceOf(TaxonDescription
.class));
427 TaxonDescription retrievedTaxonDescription
= HibernateProxyHelper
.deproxy(
428 individualsAssociation
.getInDescription(), TaxonDescription
.class);
429 assertEquals(taxonDescription
, retrievedTaxonDescription
);
430 assertEquals("Associated taxon is incorrect", taxon
, retrievedTaxonDescription
.getTaxon());
432 // check for DerivedUnit (Type Designation should exist)
433 java
.util
.Collection
<SpecimenTypeDesignation
> typeDesignations
= occurrenceService
.listTypeDesignations(
434 typeSpecimen
, null, null, null, null);
435 assertEquals("Number of type designations is incorrect", 1, typeDesignations
.size());
436 SpecimenTypeDesignation specimenTypeDesignation
= typeDesignations
.iterator().next();
437 Set
<TaxonName
> typifiedNames
= specimenTypeDesignation
.getTypifiedNames();
438 assertEquals("number of typified names is incorrect", 1, typifiedNames
.size());
439 Set
<?
> taxonBases
= typifiedNames
.iterator().next().getTaxonBases();
440 assertEquals("number of taxa incorrect", 1, taxonBases
.size());
441 Object next
= taxonBases
.iterator().next();
442 assertTrue(next
instanceof CdmBase
&& ((CdmBase
) next
).isInstanceOf(Taxon
.class));
443 assertEquals("Typed taxon is incorrect", taxon
, next
);
447 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testIsDeletableWithSpecimenDescription.xml")
448 public void testIsDeletableWithSpecimenDescription() {
449 UUID derivedUnitUuid
= UUID
.fromString("68095c8e-025d-49f0-8bb2-ed36378b75c3");
450 UUID specimenDescriptionUuid
= UUID
.fromString("4094f947-ce84-47b1-bad5-e57e33239d3c");
451 // //how the XML was generated
452 // DerivedUnit derivedUnit =
453 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
454 // derivedUnit.setUuid(derivedUnitUuid);
455 // SpecimenDescription specimenDescription =
456 // SpecimenDescription.NewInstance();
457 // specimenDescription.setUuid(specimenDescriptionUuid);
458 // derivedUnit.addDescription(specimenDescription);
459 // occurrenceService.save(derivedUnit);
461 // commitAndStartNewTransaction(null);
467 // writeDbUnitDataSetFile(new String[] {
468 // "SpecimenOrObservationBase",
469 // "SpecimenOrObservationBase_DerivationEvent",
470 // "DerivationEvent",
472 // "Sequence_SingleRead",
474 // "AmplificationResult",
475 // "DescriptionElementBase",
476 // "DescriptionBase",
478 // "TypeDesignationBase",
480 // "TaxonName_TypeDesignationBase",
481 // "HomotypicalGroup"
482 // }, "testIsDeletableWithSpecimenDescription");
483 // } catch (FileNotFoundException e) {
484 // e.printStackTrace();
487 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(derivedUnitUuid
);
488 SpecimenDescription specimenDescription
= (SpecimenDescription
) descriptionService
489 .load(specimenDescriptionUuid
);
491 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
492 DeleteResult deleteResult
= null;
493 // delete derivedUnit1
494 deleteResult
= occurrenceService
.isDeletable(derivedUnit
.getUuid(), config
);
495 //deletion of specimen description should always work because there are no
496 //specimen description without a specimen
497 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
498 occurrenceService
.delete(derivedUnit
, config
);
499 specimenDescription
= (SpecimenDescription
) descriptionService
.find(specimenDescriptionUuid
);
501 assertNull(specimenDescription
);
505 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testIsDeletableWithDescribedSpecimenInTaxonDescription.xml")
506 public void testIsDeletableWithDescribedSpecimenInTaxonDescription() {
507 UUID fieldUnitUuid
= UUID
.fromString("d656a004-38ee-404c-810a-87ffb0ab16c2");
508 // //how the XML was generated
509 // FieldUnit fieldUnit = FieldUnit.NewInstance();
510 // fieldUnit.setUuid(fieldUnitUuid);
511 // DerivedUnit derivedUnit =
512 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
514 // //derivation events
515 // DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit,
516 // DerivationEventType.ACCESSIONING());
518 // occurrenceService.save(fieldUnit);
519 // occurrenceService.save(derivedUnit);
521 // // create taxon with name and two taxon descriptions
522 // //(one with a "described" voucher specimen, and an empty one)
524 // Taxon.NewInstance(BotanicalName.PARSED_NAME("Campanula patual sec L."),
526 // taxonDescription.setUuid(taxonDescriptionUuid);
528 // taxonDescription.setDescribedSpecimenOrObservation(derivedUnit);
529 // taxon.addDescription(taxonDescription);
530 // //add another taxon description to taxon which is not associated with
531 // a specimen thus should not be taken into account
532 // taxon.addDescription(TaxonDescription.NewInstance());
533 // taxonService.saveOrUpdate(taxon);
536 // commitAndStartNewTransaction(null);
543 // writeDbUnitDataSetFile(new String[] {
544 // "SpecimenOrObservationBase",
545 // "SpecimenOrObservationBase_DerivationEvent",
546 // "DerivationEvent",
548 // "Sequence_SingleRead",
550 // "AmplificationResult",
551 // "DescriptionElementBase",
552 // "DescriptionBase",
554 // "TypeDesignationBase",
556 // "TaxonName_TypeDesignationBase",
557 // "HomotypicalGroup"
558 // }, "testIsDeletableWithDescribedSpecimenInTaxonDescription");
559 // } catch (FileNotFoundException e) {
560 // e.printStackTrace();
563 FieldUnit associatedFieldUnit
= (FieldUnit
) occurrenceService
.load(fieldUnitUuid
);
565 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
566 DeleteResult deleteResult
= null;
567 // check deletion of field unit -> should fail because of voucher
568 // specimen (describedSpecimen) in TaxonDescription
569 deleteResult
= occurrenceService
.isDeletable(associatedFieldUnit
.getUuid(), config
);
570 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
572 // allow deletion from TaxonDescription and deletion of child derivates
573 config
.setDeleteFromDescription(true);
574 config
.setDeleteChildren(true);
575 deleteResult
= occurrenceService
.isDeletable(associatedFieldUnit
.getUuid(), config
);
576 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
580 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testIsDeletableWithIndividualsAssociationTaxonDescription.xml")
581 public void testIsDeletableWithIndividualsAssociationTaxonDescription() {
582 UUID fieldUnitUuid
= UUID
.fromString("7978b978-5100-4c7a-82ef-3a23e0f3c723");
583 UUID taxonDescriptionUuid
= UUID
.fromString("d4b0d561-6e7e-4fd8-bf3c-925530f949eb");
584 // //how the XML was generated
585 // FieldUnit fieldUnit = FieldUnit.NewInstance();
586 // fieldUnit.setUuid(fieldUnitUuid);
588 // occurrenceService.save(fieldUnit);
590 // // create taxon with name and two taxon descriptions (one with
591 // // IndividualsAssociations and a "described" voucher specimen, and an
594 // Taxon.NewInstance(BotanicalName.PARSED_NAME("Campanula patual sec L."),
596 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
597 // taxonDescription.setUuid(taxonDescriptionUuid);
599 // taxonDescription.addElement(IndividualsAssociation.NewInstance(fieldUnit));
600 // taxon.addDescription(taxonDescription);
601 // //add another taxon description to taxon which is not associated with
602 // a specimen thus should not be taken into account
603 // taxon.addDescription(TaxonDescription.NewInstance());
604 // taxonService.saveOrUpdate(taxon);
607 // commitAndStartNewTransaction(null);
614 // writeDbUnitDataSetFile(new String[] {
615 // "SpecimenOrObservationBase",
616 // "SpecimenOrObservationBase_DerivationEvent",
617 // "DerivationEvent",
619 // "Sequence_SingleRead",
621 // "AmplificationResult",
622 // "DescriptionElementBase",
623 // "DescriptionBase",
625 // "TypeDesignationBase",
627 // "TaxonName_TypeDesignationBase",
628 // "HomotypicalGroup"
629 // }, "testIsDeletableWithIndividualsAssociationTaxonDescription");
630 // } catch (FileNotFoundException e) {
631 // e.printStackTrace();
634 FieldUnit associatedFieldUnit
= (FieldUnit
) occurrenceService
.load(fieldUnitUuid
);
635 TaxonDescription taxonDescription
= (TaxonDescription
) descriptionService
.load(taxonDescriptionUuid
);
636 IndividualsAssociation individualsAssociation
= (IndividualsAssociation
) taxonDescription
.getElements()
639 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
640 DeleteResult deleteResult
= null;
641 // check deletion of field unit -> should fail because of
642 // IndividualAssociation
643 deleteResult
= occurrenceService
.isDeletable(associatedFieldUnit
.getUuid(), config
);
644 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
645 assertTrue(deleteResult
.toString(), deleteResult
.getRelatedObjects().contains(individualsAssociation
));
647 // allow deletion of individuals association
648 config
.setDeleteFromIndividualsAssociation(true);
649 deleteResult
= occurrenceService
.isDeletable(associatedFieldUnit
.getUuid(), config
);
650 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
655 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testIsDeletableWithTypeDesignation.xml")
656 public void testIsDeletableWithTypeDesignation() {
657 UUID derivedUnitUuid
= UUID
.fromString("f7fd1dc1-3c93-42a7-8279-cde5bfe37ea0");
658 UUID botanicalNameUuid
= UUID
.fromString("7396430c-c932-4dd3-a45a-40c2808b132e");
659 // DerivedUnit derivedUnit =
660 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
661 // derivedUnit.setUuid(derivedUnitUuid);
663 // occurrenceService.save(derivedUnit);
665 // //create name with type specimen
666 // BotanicalName name =
667 // BotanicalName.PARSED_NAME("Campanula patual sec L.");
668 // name.setUuid(botanicalNameUuid);
669 // SpecimenTypeDesignation typeDesignation =
670 // SpecimenTypeDesignation.NewInstance();
671 // typeDesignation.setTypeSpecimen(derivedUnit);
672 // //add type designation to name
673 // name.addTypeDesignation(typeDesignation, false);
675 // nameService.saveOrUpdate(name);
677 // commitAndStartNewTransaction(null);
684 // writeDbUnitDataSetFile(new String[] {
685 // "SpecimenOrObservationBase",
686 // "SpecimenOrObservationBase_DerivationEvent",
687 // "DerivationEvent",
689 // "Sequence_SingleRead",
691 // "AmplificationResult",
692 // "DescriptionElementBase",
693 // "DescriptionBase",
695 // "TypeDesignationBase",
697 // "TaxonName_TypeDesignationBase",
698 // "HomotypicalGroup"
699 // }, "testIsDeletableWithTypeDesignation");
700 // } catch (FileNotFoundException e) {
701 // e.printStackTrace();
704 DerivedUnit typeSpecimen
= (DerivedUnit
) occurrenceService
.load(derivedUnitUuid
);
706 // create name with type specimen
707 IBotanicalName name
= nameService
.load(botanicalNameUuid
);
708 SpecimenTypeDesignation typeDesignation
= (SpecimenTypeDesignation
) name
.getTypeDesignations().iterator()
711 // add type designation to name
712 name
.addTypeDesignation(typeDesignation
, false);
714 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
715 DeleteResult deleteResult
= null;
717 // check deletion of specimen
718 deleteResult
= occurrenceService
.isDeletable(typeSpecimen
.getUuid(), config
);
719 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
720 assertTrue(deleteResult
.toString(), deleteResult
.getRelatedObjects().contains(typeDesignation
));
722 // allow deletion of type designation
723 config
.setDeleteFromTypeDesignation(true);
725 deleteResult
= occurrenceService
.isDeletable(typeSpecimen
.getUuid(), config
);
726 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
730 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testIsDeletableWithChildren.xml")
731 public void testIsDeletableWithChildren() {
732 UUID fieldUnitUuid
= UUID
.fromString("92ada058-4c14-4131-8ecd-b82dc1dd2882");
733 UUID derivedUnitUuid
= UUID
.fromString("896dffdc-6809-4914-8950-5501fee1c0fd");
734 UUID dnaSampleUuid
= UUID
.fromString("7efd1d66-ac7f-4202-acdf-a72cbb9c3a21");
735 // if this test fails be sure to check if there are left-over elements
737 // e.g. clear by adding "<AMPLIFICATIONRESULT/>" to the data set XML
739 // //how the XML was generated
740 // FieldUnit fieldUnit = FieldUnit.NewInstance();
741 // fieldUnit.setUuid(fieldUnitUuid);
742 // //sub derivates (DerivedUnit, DnaSample)
743 // DerivedUnit derivedUnit =
744 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
745 // derivedUnit.setUuid(derivedUnitUuid);
746 // DnaSample dnaSample = DnaSample.NewInstance();
747 // dnaSample.setUuid(dnaSampleUuid);
749 // //derivation events
750 // DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit,
751 // DerivationEventType.ACCESSIONING());
752 // DerivationEvent.NewSimpleInstance(derivedUnit, dnaSample,
753 // DerivationEventType.DNA_EXTRACTION());
755 // occurrenceService.save(fieldUnit);
756 // occurrenceService.save(derivedUnit);
757 // occurrenceService.save(dnaSample);
759 // commitAndStartNewTransaction(null);
765 // writeDbUnitDataSetFile(new String[] {
766 // "SpecimenOrObservationBase",
767 // "SpecimenOrObservationBase_DerivationEvent",
768 // "DerivationEvent",
771 // "SingleReadAlignment",
773 // "AmplificationResult",
774 // "DescriptionElementBase",
775 // "DescriptionBase",
777 // "TypeDesignationBase",
779 // "TaxonName_TypeDesignationBase",
780 // "HomotypicalGroup"
781 // }, "testIsDeletableWithChildren");
782 // } catch (FileNotFoundException e) {
783 // e.printStackTrace();
785 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(fieldUnitUuid
);
786 // sub derivates (DerivedUnit, DnaSample)
787 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(derivedUnitUuid
);
788 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(dnaSampleUuid
);
791 DerivationEvent fieldUnitToDerivedUnitEvent
= fieldUnit
.getDerivationEvents().iterator().next();
792 DerivationEvent derivedUnitToDnaSampleEvent
= derivedUnit
.getDerivationEvents().iterator().next();
794 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
796 DeleteResult deleteResult
= null;
797 // check deletion of DnaSample
798 deleteResult
= occurrenceService
.isDeletable(dnaSample
.getUuid(), config
);
799 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
801 // check deletion of Specimen
802 deleteResult
= occurrenceService
.isDeletable(derivedUnit
.getUuid(), config
);
803 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
804 assertTrue(deleteResult
.toString(), deleteResult
.getRelatedObjects().contains(derivedUnitToDnaSampleEvent
));
806 // check deletion of fieldUnit
807 deleteResult
= occurrenceService
.isDeletable(fieldUnit
.getUuid(), config
);
808 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
809 assertTrue(deleteResult
.toString(), deleteResult
.getRelatedObjects().contains(fieldUnitToDerivedUnitEvent
));
811 // check deletion of Specimen
812 config
.setDeleteChildren(true);
813 deleteResult
= occurrenceService
.isDeletable(derivedUnit
.getUuid(), config
);
814 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
815 assertTrue(deleteResult
.toString(), deleteResult
.getRelatedObjects().contains(derivedUnitToDnaSampleEvent
));
817 // check deletion of fieldUnit
818 config
.setDeleteFromDescription(true);
819 deleteResult
= occurrenceService
.isDeletable(fieldUnit
.getUuid(), config
);
820 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
825 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class, value
="OccurrenceServiceTest.testListAssociatedTaxaAndListByAssociatedTaxon.xml")
826 public void testListAssociatedTaxaAndListByAssociatedTaxon(){
827 UUID associatedSpecimenUuid
= UUID
.fromString("6478a387-bc77-4f1b-bfab-671ad786a27e");
828 UUID unassociatedSpecimenUuid
= UUID
.fromString("820e1af6-9bff-4244-97d3-81fd9a49c91c");
829 UUID typeSpecimenUuid
= UUID
.fromString("b6f31b9f-f9e2-4bc7-883e-35bd6a9978b4");
830 UUID taxonUuid
= UUID
.fromString("5613698d-840b-4034-b9b1-1302938e183b");
831 // DerivedUnit typeSpecimen = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
832 // DerivedUnit associatedSpecimen = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
833 // DerivedUnit unassociatedSpecimen = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
834 // typeSpecimen.setUuid(typeSpecimenUuid);
835 // associatedSpecimen.setUuid(associatedSpecimenUuid);
836 // unassociatedSpecimen.setUuid(unassociatedSpecimenUuid);
838 // occurrenceService.save(typeSpecimen);
839 // occurrenceService.save(associatedSpecimen);
840 // occurrenceService.save(unassociatedSpecimen);
842 // BotanicalName name = BotanicalName.PARSED_NAME("Campanula patula");
843 // SpecimenTypeDesignation typeDesignation = SpecimenTypeDesignation.NewInstance();
844 // typeDesignation.setTypeSpecimen(typeSpecimen);
845 // name.addTypeDesignation(typeDesignation, false);
847 // Taxon taxon = Taxon.NewInstance(name, null);
848 // taxon.setUuid(taxonUuid);
849 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
850 //// taxonDescription.setUuid(taxonDescriptionUuid);
852 // taxonDescription.addElement(IndividualsAssociation.NewInstance(associatedSpecimen));
853 // taxon.addDescription(taxonDescription);
855 // taxonService.saveOrUpdate(taxon);
857 // commitAndStartNewTransaction(null);
863 // writeDbUnitDataSetFile(new String[]{
864 // "SpecimenOrObservationBase",
865 // "SpecimenOrObservationBase_DerivationEvent",
866 // "DerivationEvent",
868 // "Sequence_SingleRead",
870 // "AmplificationResult",
871 // "DescriptionElementBase",
872 // "DescriptionBase",
874 // "TypeDesignationBase",
876 // "TaxonName_TypeDesignationBase",
877 // "TeamOrPersonBase",
878 // "HomotypicalGroup"}, "testListAssociatedTaxaAndListByAssociatedTaxon");
879 // } catch (FileNotFoundException e) {
880 // e.printStackTrace();
882 //check initial state
883 SpecimenOrObservationBase typeSpecimen
= occurrenceService
.load(typeSpecimenUuid
);
884 SpecimenOrObservationBase associatedSpecimen
= occurrenceService
.load(associatedSpecimenUuid
);
885 SpecimenOrObservationBase unassociatedSpecimen
= occurrenceService
.load(unassociatedSpecimenUuid
);
886 Taxon taxon
= (Taxon
) taxonService
.load(taxonUuid
);
888 assertNotNull(typeSpecimen
);
889 assertNotNull(associatedSpecimen
);
890 assertNotNull(unassociatedSpecimen
);
891 assertNotNull(taxon
);
893 //check association (IndividualsAssociations + TypeDesignations) specimen -> taxon (name)
895 //unassociated specimen
896 java
.util
.Collection
<TaxonBase
<?
>> associatedTaxa
= occurrenceService
.listAssociatedTaxa(unassociatedSpecimen
, null, null, null, null);
897 assertNotNull(associatedTaxa
);
898 assertTrue(associatedTaxa
.isEmpty());
901 associatedTaxa
= occurrenceService
.listAssociatedTaxa(typeSpecimen
, null, null, null, null);
902 assertNotNull(associatedTaxa
);
903 assertEquals(1, associatedTaxa
.size());
904 assertEquals(taxon
, associatedTaxa
.iterator().next());
906 //associated specimen
907 associatedTaxa
= occurrenceService
.listAssociatedTaxa(associatedSpecimen
, null, null, null, null);
908 assertNotNull(associatedTaxa
);
909 assertEquals(1, associatedTaxa
.size());
910 assertEquals(taxon
, associatedTaxa
.iterator().next());
913 //check association (IndividualsAssociations + TypeDesignations) taxon (name) -> specimen
914 List
<DerivedUnit
> byAssociatedTaxon
= occurrenceService
.listByAssociatedTaxon(DerivedUnit
.class, null, taxon
, null, null, null, null, null);
915 assertNotNull(byAssociatedTaxon
);
916 assertEquals(2, byAssociatedTaxon
.size());
917 assertTrue(byAssociatedTaxon
.contains(associatedSpecimen
));
918 assertTrue(byAssociatedTaxon
.contains(typeSpecimen
));
919 assertTrue(!byAssociatedTaxon
.contains(unassociatedSpecimen
));
924 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testFindOcurrences.xml")
925 public void testFindOccurrences() {
926 UUID derivedUnit1Uuid
= UUID
.fromString("843bc8c9-c0fe-4735-bf40-82f1996dcefb");
927 UUID derivedUnit2Uuid
= UUID
.fromString("40cd9cb1-7c74-4e7d-a1f8-8a1e0314e940");
928 UUID dnaSampleUuid
= UUID
.fromString("364969a6-2457-4e2e-ae1e-29a6fcaa741a");
929 UUID dnaSampleWithSequenceUuid
= UUID
.fromString("571d4e9a-0736-4da3-ad4a-a2df427a1f01");
930 UUID tissueUuid
= UUID
.fromString("b608613c-1b5a-4882-8b14-d643b6fc5998");
932 UUID taxonUuid
= UUID
.fromString("dfca7629-8a60-4d51-998d-371897f725e9");
934 // DerivedUnit derivedUnit =
935 // DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
936 // derivedUnit.setTitleCache("testUnit1");
937 // derivedUnit.setAccessionNumber("ACC1");
938 // DerivedUnit derivedUnit2 =
939 // DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
940 // derivedUnit2.setTitleCache("testUnit2");
941 // derivedUnit2.setBarcode("ACC2");
942 // DerivedUnit dnaSample =
943 // DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
944 // dnaSample.setTitleCache("dna");
945 // dnaSample.setCatalogNumber("ACC1");
946 // DerivedUnit tissue =
947 // DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
948 // tissue.setTitleCache("tissue");
950 // DerivationEvent.NewSimpleInstance(derivedUnit, dnaSample,
951 // DerivationEventType.DNA_EXTRACTION());
953 // derivedUnit.setUuid(derivedUnit1Uuid);
954 // derivedUnit2.setUuid(derivedUnit2Uuid);
955 // dnaSample.setUuid(dnaSampleUuid);
956 // tissue.setUuid(tissueUuid);
958 // occurrenceService.save(derivedUnit);
959 // occurrenceService.save(derivedUnit2);
960 // occurrenceService.save(dnaSample);
961 // occurrenceService.save(tissue);
964 // Taxon.NewInstance(BotanicalName.PARSED_NAME("Campanula patual"),
966 // taxon.setUuid(taxonUuid);
967 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
968 // taxonDescription.setUuid(UUID.fromString("272d4d28-662c-468e-94d8-16993fab91ba"));
970 // taxonDescription.addElement(IndividualsAssociation.NewInstance(derivedUnit));
971 // taxonDescription.addElement(IndividualsAssociation.NewInstance(tissue));
972 // taxon.addDescription(taxonDescription);
973 // taxonService.saveOrUpdate(taxon);
975 // commitAndStartNewTransaction(null);
982 // writeDbUnitDataSetFile(new String[] {
983 // "SpecimenOrObservationBase",
984 // "SpecimenOrObservationBase_DerivationEvent",
985 // "DerivationEvent",
986 // "DescriptionElementBase",
987 // "DescriptionBase",
989 // "TypeDesignationBase",
991 // "TaxonName_TypeDesignationBase",
992 // "HomotypicalGroup",
993 // "TeamOrPersonBase"
994 // }, "testFindOcurrences");
995 // } catch (FileNotFoundException e) {
996 // e.printStackTrace();
999 SpecimenOrObservationBase derivedUnit1
= occurrenceService
.load(derivedUnit1Uuid
);
1000 SpecimenOrObservationBase derivedUnit2
= occurrenceService
.load(derivedUnit2Uuid
);
1001 SpecimenOrObservationBase tissue
= occurrenceService
.load(tissueUuid
);
1002 SpecimenOrObservationBase dnaSample
= occurrenceService
.load(dnaSampleUuid
);
1003 SpecimenOrObservationBase dnaSampleWithSequence
= occurrenceService
.load(dnaSampleWithSequenceUuid
);
1004 Taxon taxon
= (Taxon
) taxonService
.load(taxonUuid
);
1006 assertNotNull(derivedUnit1
);
1007 assertNotNull(derivedUnit2
);
1008 assertNotNull(tissue
);
1009 assertNotNull(dnaSample
);
1010 assertNotNull(taxon
);
1012 // wildcard search => all derivates
1013 FindOccurrencesConfigurator config
= new FindOccurrencesConfigurator();
1014 config
.setTitleSearchString("*");
1015 assertEquals(5, occurrenceService
.countOccurrences(config
));
1016 List
<SpecimenOrObservationBase
> allDerivates
= occurrenceService
.findByTitle(config
).getRecords();
1017 assertEquals(5, allDerivates
.size());
1018 assertTrue(allDerivates
.contains(derivedUnit1
));
1019 assertTrue(allDerivates
.contains(derivedUnit2
));
1020 assertTrue(allDerivates
.contains(tissue
));
1021 assertTrue(allDerivates
.contains(dnaSample
));
1023 // queryString search => 2 derivates
1024 config
= new FindOccurrencesConfigurator();
1025 config
.setTitleSearchString("test*");
1026 // config.setClazz(SpecimenOrObservationBase.class);
1027 assertEquals(2, occurrenceService
.countOccurrences(config
));
1028 List
<SpecimenOrObservationBase
> queryStringDerivates
= occurrenceService
.findByTitle(config
).getRecords();
1029 assertEquals(2, queryStringDerivates
.size());
1030 assertTrue(queryStringDerivates
.contains(derivedUnit1
));
1031 assertTrue(queryStringDerivates
.contains(derivedUnit2
));
1033 // class search => 4 results
1034 config
= new FindOccurrencesConfigurator();
1035 config
.setClazz(SpecimenOrObservationBase
.class);
1036 assertEquals(5, occurrenceService
.countOccurrences(config
));
1037 List
<SpecimenOrObservationBase
> specimenOrObservationBases
= occurrenceService
.findByTitle(config
).getRecords();
1038 assertEquals(5, specimenOrObservationBases
.size());
1040 // class search => 0 results
1041 config
= new FindOccurrencesConfigurator();
1042 config
.setClazz(FieldUnit
.class);
1043 assertEquals(0, occurrenceService
.countOccurrences(config
));
1044 List
<SpecimenOrObservationBase
> fieldUnits
= occurrenceService
.findByTitle(config
).getRecords();
1045 assertEquals(0, fieldUnits
.size());
1047 // class search => 4 results
1048 config
= new FindOccurrencesConfigurator();
1049 config
.setClazz(DerivedUnit
.class);
1050 assertEquals(5, occurrenceService
.countOccurrences(config
));
1051 List
<SpecimenOrObservationBase
> derivedUnits
= occurrenceService
.findByTitle(config
).getRecords();
1052 assertEquals(5, derivedUnits
.size());
1053 assertTrue(derivedUnits
.contains(derivedUnit1
));
1054 assertTrue(derivedUnits
.contains(derivedUnit2
));
1055 assertTrue(derivedUnits
.contains(tissue
));
1056 assertTrue(derivedUnits
.contains(dnaSample
));
1058 // significant identifier search
1059 config
= new FindOccurrencesConfigurator();
1060 config
.setClazz(DerivedUnit
.class);
1061 config
.setSignificantIdentifier("ACC1");
1062 assertEquals(2, occurrenceService
.countOccurrences(config
));
1063 List
<SpecimenOrObservationBase
> accessionedUnits
= occurrenceService
.findByTitle(config
).getRecords();
1064 assertEquals(2, accessionedUnits
.size());
1065 assertTrue(accessionedUnits
.contains(derivedUnit1
));
1066 assertFalse(accessionedUnits
.contains(derivedUnit2
));
1067 assertFalse(accessionedUnits
.contains(tissue
));
1068 assertTrue(accessionedUnits
.contains(dnaSample
));
1070 config
= new FindOccurrencesConfigurator();
1071 config
.setClazz(DerivedUnit
.class);
1072 config
.setSignificantIdentifier("ACC2");
1073 assertEquals(1, occurrenceService
.countOccurrences(config
));
1074 List
<SpecimenOrObservationBase
> barcodedUnits
= occurrenceService
.findByTitle(config
).getRecords();
1075 assertEquals(1, barcodedUnits
.size());
1076 assertFalse(barcodedUnits
.contains(derivedUnit1
));
1077 assertTrue(barcodedUnits
.contains(derivedUnit2
));
1078 assertFalse(barcodedUnits
.contains(tissue
));
1079 assertFalse(barcodedUnits
.contains(dnaSample
));
1081 // recordBasis search => 1 Fossil
1082 config
= new FindOccurrencesConfigurator();
1083 config
.setSpecimenType(SpecimenOrObservationType
.Fossil
);
1084 assertEquals(1, occurrenceService
.countOccurrences(config
));
1085 List
<SpecimenOrObservationBase
> fossils
= occurrenceService
.findByTitle(config
).getRecords();
1086 assertEquals(1, fossils
.size());
1087 assertTrue(fossils
.contains(derivedUnit1
));
1089 // taxon determination search => 2 associated specimens
1090 config
= new FindOccurrencesConfigurator();
1091 config
.setClazz(DerivedUnit
.class);
1092 config
.setAssociatedTaxonUuid(taxon
.getUuid());
1093 assertEquals(2, occurrenceService
.countOccurrences(config
));
1094 List
<SpecimenOrObservationBase
> associatedSpecimens
= occurrenceService
.findByTitle(config
).getRecords();
1095 assertEquals(2, associatedSpecimens
.size());
1096 assertTrue(associatedSpecimens
.contains(derivedUnit1
));
1097 assertTrue(associatedSpecimens
.contains(tissue
));
1099 // taxon determination search (indirectly associated) => 3 associated
1101 config
= new FindOccurrencesConfigurator();
1102 config
.setClazz(DerivedUnit
.class);
1103 config
.setAssociatedTaxonUuid(taxon
.getUuid());
1104 config
.setRetrieveIndirectlyAssociatedSpecimens(true);
1105 assertEquals(3, occurrenceService
.countOccurrences(config
));
1106 List
<SpecimenOrObservationBase
> indirectlyAssociatedSpecimens
= occurrenceService
.findByTitle(config
)
1108 assertEquals(3, indirectlyAssociatedSpecimens
.size());
1109 assertTrue(indirectlyAssociatedSpecimens
.contains(derivedUnit1
));
1110 assertTrue(indirectlyAssociatedSpecimens
.contains(dnaSample
));
1111 assertTrue(indirectlyAssociatedSpecimens
.contains(tissue
));
1113 // taxon association search
1114 config
= new FindOccurrencesConfigurator();
1115 config
.setClazz(SpecimenOrObservationBase
.class);
1116 config
.setAssociatedTaxonUuid(taxon
.getUuid());
1117 assertEquals(2, occurrenceService
.countOccurrences(config
));
1118 List
<SpecimenOrObservationBase
> specimensOrObservations
= occurrenceService
.findByTitle(config
).getRecords();
1119 assertEquals(2, specimensOrObservations
.size());
1120 assertTrue(specimensOrObservations
.contains(tissue
));
1121 assertTrue(specimensOrObservations
.contains(derivedUnit1
));
1123 //test assignment status
1125 config
= new FindOccurrencesConfigurator();
1126 config
.setAssignmentStatus(AssignmentStatus
.ALL_SPECIMENS
);
1127 assertEquals(5, occurrenceService
.countOccurrences(config
));
1128 List
<SpecimenOrObservationBase
> allSpecimens
= occurrenceService
.findByTitle(config
).getRecords();
1129 assertEquals(5, allSpecimens
.size());
1130 assertTrue(allSpecimens
.contains(derivedUnit1
));
1131 assertTrue(allSpecimens
.contains(derivedUnit2
));
1132 assertTrue(allSpecimens
.contains(tissue
));
1133 assertTrue(allSpecimens
.contains(dnaSample
));
1136 config
= new FindOccurrencesConfigurator();
1137 config
.setAssignmentStatus(AssignmentStatus
.ASSIGNED_SPECIMENS
);
1138 assertEquals(2, occurrenceService
.countOccurrences(config
));
1139 List
<SpecimenOrObservationBase
> assignedSpecimens
= occurrenceService
.findByTitle(config
).getRecords();
1140 assertEquals(2, assignedSpecimens
.size());
1141 assertTrue(assignedSpecimens
.contains(derivedUnit1
));
1142 assertTrue(assignedSpecimens
.contains(tissue
));
1144 //unassigned specimen
1145 config
= new FindOccurrencesConfigurator();
1146 config
.setAssignmentStatus(AssignmentStatus
.UNASSIGNED_SPECIMENS
);
1147 assertEquals(3, occurrenceService
.countOccurrences(config
));
1148 List
<SpecimenOrObservationBase
> unAssignedSpecimens
= occurrenceService
.findByTitle(config
).getRecords();
1149 assertEquals(3, unAssignedSpecimens
.size());
1150 assertTrue(unAssignedSpecimens
.contains(derivedUnit2
));
1151 assertTrue(unAssignedSpecimens
.contains(dnaSample
));
1153 //ignore assignment status because taxon uuid is set
1154 config
= new FindOccurrencesConfigurator();
1155 config
.setAssociatedTaxonUuid(taxon
.getUuid());
1156 config
.setAssignmentStatus(AssignmentStatus
.UNASSIGNED_SPECIMENS
);
1157 assertEquals(2, occurrenceService
.countOccurrences(config
));
1158 List
<SpecimenOrObservationBase
> ignoreAssignmentStatusSpecimens
= occurrenceService
.findByTitle(config
).getRecords();
1159 assertEquals(2, ignoreAssignmentStatusSpecimens
.size());
1160 assertTrue(ignoreAssignmentStatusSpecimens
.contains(derivedUnit1
));
1161 assertTrue(ignoreAssignmentStatusSpecimens
.contains(tissue
));
1165 List
<DerivedUnit
> findByAccessionNumber
= occurrenceService
.findByAccessionNumber("ACC_DNA", 10, 1, null, null);
1167 assertEquals(1, findByAccessionNumber
.size());
1168 // assertTrue(findByAccessionNumber.contains(derivedUnit1));
1169 assertTrue(findByAccessionNumber
.contains(dnaSampleWithSequence
));
1175 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
1176 public void testListUuidAndTitleCacheByAssociatedTaxon() {
1177 UUID taxonNodeUuid
= UUID
.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
1179 * Structure is as follows:
1181 * Taxon ----IndividualsAssociation---> DnaSample
1182 * Taxon ----TypeDesignation---> Fossil
1183 * Taxon ----Determination ---> PreservedSpecimenA
1185 * Taxon ---> Taxon Name ----Determination ---> PreservedSpecimenB
1187 * Taxon ---> Synonym ---> SynonymName ----Determination---> PreservedSpecimenC
1189 * Orphan Name (not associated with any taxon) ----Determination ---> PreservedSpecimenD
1193 UUID derivedUnitDeterminationTaxonUuid
= UUID
.fromString("941b8b22-1925-4b91-8ff8-97114499bb22");
1194 UUID derivedUnitDeterminationNameUuid
= UUID
.fromString("0cdc7a57-6f55-45c8-b3e5-523748c381e7");
1195 UUID derivedUnitDeterminationSynonymNameUuid
= UUID
.fromString("d940a940-8caf-4a52-b1d8-ba4aad7ddae2");
1196 UUID derivedUnitDeterminationOrphanNameUuid
= UUID
.fromString("587b7297-7d59-4f59-8ef3-c7a559cadeca");
1197 UUID tissueUuidNoAssociationUuid
= UUID
.fromString("93e94260-5107-4b2c-9ce4-da9e1a4e7cb9");
1198 UUID dnaSampleUuidIndividualsAssociationUuid
= UUID
.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
1199 UUID fossilTypeDesignationUuid
= UUID
.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
1200 UUID taxonUuid
= UUID
.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
1203 * search for taxon node
1204 * should retrieve all specimens associated via
1205 * - type designations (fossil)
1206 * - individuals associations (dnaSample)
1207 * - determinations on
1208 * - taxon (specimenA)
1209 * - taxon name (specimenA, specimenB)
1211 FindOccurrencesConfigurator config
= new FindOccurrencesConfigurator();
1212 config
.setAssociatedTaxonUuid(taxonUuid
);
1213 Collection
<SpecimenNodeWrapper
> specimens
= occurrenceService
1214 .listUuidAndTitleCacheByAssociatedTaxon(Collections
.singletonList(taxonNodeUuid
), null, null);
1215 List
<UUID
> uuidList
= specimens
.stream().map(specimen
->
1216 specimen
.getUuidAndTitleCache().getUuid()).collect(Collectors
.toList());
1217 assertTrue(uuidList
.contains(derivedUnitDeterminationNameUuid
));
1218 assertTrue(uuidList
.contains(derivedUnitDeterminationTaxonUuid
));
1219 assertFalse(uuidList
.contains(derivedUnitDeterminationSynonymNameUuid
));
1220 assertTrue(uuidList
.contains(dnaSampleUuidIndividualsAssociationUuid
));
1221 assertTrue(uuidList
.contains(fossilTypeDesignationUuid
));
1222 assertFalse(uuidList
.contains(tissueUuidNoAssociationUuid
));
1223 assertFalse(uuidList
.contains(derivedUnitDeterminationOrphanNameUuid
));
1224 assertEquals("Wrong number of associated specimens", 4, specimens
.size());
1228 * This will test the retrieval of specimens that are in any way associated
1229 * with a taxon resp. taxon name via type designation, determination event
1230 * or individuals associations. It will also consider synonym relationships.
1233 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
1234 public void testAllKindsOfSpecimenAssociations() {
1237 * Structure is as follows:
1239 * Taxon ----IndividualsAssociation---> DnaSample
1240 * Taxon ----TypeDesignation---> Fossil
1241 * Taxon ----Determination ---> PreservedSpecimenA
1243 * Taxon ---> Taxon Name ----Determination ---> PreservedSpecimenB
1245 * Taxon ---> Synonym ---> SynonymName ----Determination---> PreservedSpecimenC
1247 * Orphan Name (not associated with any taxon) ----Determination ---> PreservedSpecimenD
1251 UUID derivedUnitDeterminationTaxonUuid
= UUID
.fromString("941b8b22-1925-4b91-8ff8-97114499bb22");
1252 UUID derivedUnitDeterminationNameUuid
= UUID
.fromString("0cdc7a57-6f55-45c8-b3e5-523748c381e7");
1254 UUID derivedUnitDeterminationSynonymUuid
= UUID
.fromString("8eb94a7d-c802-49a7-bc10-c26de20a52c2");
1255 UUID derivedUnitDeterminationSynonymNameUuid
= UUID
.fromString("d940a940-8caf-4a52-b1d8-ba4aad7ddae2");
1257 UUID derivedUnitDeterminationOrphanNameUuid
= UUID
.fromString("587b7297-7d59-4f59-8ef3-c7a559cadeca");
1259 UUID tissueUuidNoAssociationUuid
= UUID
.fromString("93e94260-5107-4b2c-9ce4-da9e1a4e7cb9");
1260 UUID dnaSampleUuidIndividualsAssociationUuid
= UUID
.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
1261 UUID fossilTypeDesignationUuid
= UUID
.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
1263 UUID taxonUuid
= UUID
.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
1264 UUID synoymUuid
= UUID
.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
1266 UUID taxonNameUuid
= UUID
.fromString("e59b95c0-9ad6-48be-af62-a982ba72b917");
1267 UUID synonymNameUuid
= UUID
.fromString("39f04b2a-b8bd-46e8-9102-ab665c64ec8e");
1268 UUID orphanNameUuid
= UUID
.fromString("d8e56365-3ad9-4b0e-88bf-acaaab223a9b");
1271 DerivedUnit derivedUnitDeterminationTaxon
= (DerivedUnit
) occurrenceService
.load(derivedUnitDeterminationTaxonUuid
);
1272 DerivedUnit derivedUnitDeterminationName
= (DerivedUnit
) occurrenceService
.load(derivedUnitDeterminationNameUuid
);
1273 DerivedUnit derivedUnitDeterminationSynonym
= (DerivedUnit
) occurrenceService
.load(derivedUnitDeterminationSynonymUuid
);
1274 DerivedUnit derivedUnitDeterminationSynonymName
= (DerivedUnit
) occurrenceService
.load(derivedUnitDeterminationSynonymNameUuid
);
1275 DerivedUnit derivedUnitDeterminationOrphanName
= (DerivedUnit
) occurrenceService
.load(derivedUnitDeterminationOrphanNameUuid
);
1276 DerivedUnit tissueUuidNoAssociation
= (DerivedUnit
) occurrenceService
.load(tissueUuidNoAssociationUuid
);
1277 DnaSample dnaSampleUuidIndividualsAssociation
= (DnaSample
) occurrenceService
.load(dnaSampleUuidIndividualsAssociationUuid
);
1278 DerivedUnit fossilTypeDesignation
= (DerivedUnit
) occurrenceService
.load(fossilTypeDesignationUuid
);
1279 Taxon taxon
= (Taxon
) taxonService
.load(taxonUuid
);
1280 Synonym synonym
= (Synonym
) taxonService
.load(synoymUuid
);
1281 TaxonName taxonName
= nameService
.load(taxonNameUuid
);
1282 TaxonName synonymName
= nameService
.load(synonymNameUuid
);
1283 TaxonName orphanName
= nameService
.load(orphanNameUuid
);
1285 //check initial state
1286 assertNotNull(derivedUnitDeterminationTaxon
);
1287 assertNotNull(derivedUnitDeterminationName
);
1288 assertNotNull(derivedUnitDeterminationSynonym
);
1289 assertNotNull(derivedUnitDeterminationSynonymName
);
1290 assertNotNull(derivedUnitDeterminationOrphanName
);
1291 assertNotNull(tissueUuidNoAssociation
);
1292 assertNotNull(dnaSampleUuidIndividualsAssociation
);
1293 assertNotNull(fossilTypeDesignation
);
1294 assertNotNull(taxon
);
1295 assertNotNull(synonym
);
1296 assertNotNull(taxonName
);
1297 assertNotNull(synonymName
);
1298 assertNotNull(orphanName
);
1302 * should retrieve all specimens associated via
1303 * - type designations (fossil)
1304 * - individuals associations (dnaSample)
1305 * - determinations on
1306 * - taxon (specimenA)
1307 * - taxon name (specimenA, specimenB)
1308 * - synonym names (specimenC)
1310 FindOccurrencesConfigurator config
= new FindOccurrencesConfigurator();
1311 config
.setAssociatedTaxonUuid(taxonUuid
);
1312 List
<SpecimenOrObservationBase
> specimens
= occurrenceService
.findByTitle(config
).getRecords();
1313 assertTrue(specimens
.contains(derivedUnitDeterminationName
));
1314 assertTrue(specimens
.contains(derivedUnitDeterminationTaxon
));
1315 assertTrue(specimens
.contains(derivedUnitDeterminationSynonymName
));
1316 assertTrue(specimens
.contains(dnaSampleUuidIndividualsAssociation
));
1317 assertTrue(specimens
.contains(fossilTypeDesignation
));
1318 assertTrue(!specimens
.contains(tissueUuidNoAssociation
));
1319 assertTrue(!specimens
.contains(derivedUnitDeterminationOrphanName
));
1320 assertEquals("Wrong number of associated specimens", 5, specimens
.size());
1323 * search for taxon name
1324 * should retrieve all specimens associated via
1325 * - determinations on
1326 * - taxon name (specimenA, specimenB)
1328 config
= new FindOccurrencesConfigurator();
1329 config
.setAssociatedTaxonNameUuid(taxonNameUuid
);
1330 specimens
= occurrenceService
.findByTitle(config
).getRecords();
1331 assertTrue(specimens
.contains(derivedUnitDeterminationName
));
1332 assertTrue(specimens
.contains(derivedUnitDeterminationTaxon
));
1333 assertTrue(!specimens
.contains(derivedUnitDeterminationSynonymName
));
1334 assertTrue(!specimens
.contains(dnaSampleUuidIndividualsAssociation
));
1335 assertTrue(!specimens
.contains(fossilTypeDesignation
));
1336 assertTrue(!specimens
.contains(tissueUuidNoAssociation
));
1337 assertTrue(!specimens
.contains(derivedUnitDeterminationOrphanName
));
1338 assertEquals("Wrong number of associated specimens", 2, specimens
.size());
1341 * search for synonym name
1342 * should retrieve all specimens associated via
1343 * - determinations on
1344 * - synonym names (specimenC)
1346 config
= new FindOccurrencesConfigurator();
1347 config
.setAssociatedTaxonNameUuid(synonymNameUuid
);
1348 specimens
= occurrenceService
.findByTitle(config
).getRecords();
1349 assertTrue(!specimens
.contains(derivedUnitDeterminationName
));
1350 assertTrue(!specimens
.contains(derivedUnitDeterminationTaxon
));
1351 assertTrue(specimens
.contains(derivedUnitDeterminationSynonymName
));
1352 assertTrue(!specimens
.contains(dnaSampleUuidIndividualsAssociation
));
1353 assertTrue(!specimens
.contains(fossilTypeDesignation
));
1354 assertTrue(!specimens
.contains(tissueUuidNoAssociation
));
1355 assertTrue(!specimens
.contains(derivedUnitDeterminationOrphanName
));
1356 assertEquals("Wrong number of associated specimens", 1, specimens
.size());
1359 * search for orphan name
1360 * should retrieve all specimens associated via
1361 * - determinations on
1362 * - taxon name (specimenD)
1364 config
= new FindOccurrencesConfigurator();
1365 config
.setAssociatedTaxonNameUuid(orphanNameUuid
);
1366 specimens
= occurrenceService
.findByTitle(config
).getRecords();
1367 assertTrue(!specimens
.contains(derivedUnitDeterminationName
));
1368 assertTrue(!specimens
.contains(derivedUnitDeterminationTaxon
));
1369 assertTrue(!specimens
.contains(derivedUnitDeterminationSynonymName
));
1370 assertTrue(!specimens
.contains(dnaSampleUuidIndividualsAssociation
));
1371 assertTrue(!specimens
.contains(fossilTypeDesignation
));
1372 assertTrue(!specimens
.contains(tissueUuidNoAssociation
));
1373 assertTrue(specimens
.contains(derivedUnitDeterminationOrphanName
));
1374 assertEquals("Wrong number of associated specimens", 1, specimens
.size());
1377 // //determination: taxon
1378 // DerivedUnit derivedUnitDeterminationTaxon = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1379 // derivedUnitDeterminationTaxon.setTitleCache("Derived Unit determined as taxon");
1380 // //determination: taxon name
1381 // DerivedUnit derivedUnitDeterminationName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1382 // derivedUnitDeterminationName.setTitleCache("Derived Unit determined as name");
1383 // //determination: synonym
1384 // DerivedUnit derivedUnitDeterminationSynonym = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1385 // derivedUnitDeterminationSynonym.setTitleCache("Derived Unit determined as synonym");
1386 // //determination: synonym name
1387 // DerivedUnit derivedUnitDeterminationSynonymName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1388 // derivedUnitDeterminationSynonymName.setTitleCache("Derived Unit determined as synonym name");
1389 // //determination: orphan name
1390 // DerivedUnit derivedUnitDeterminationOrphanName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1391 // derivedUnitDeterminationOrphanName.setTitleCache("Derived Unit determined as orphan name");
1393 // DerivedUnit tissueUuidNoAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
1394 // tissueUuidNoAssociation.setTitleCache("tissue sample no association");
1395 // //individuals association with taxon
1396 // DerivedUnit dnaSampleUuidIndividualsAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
1397 // dnaSampleUuidIndividualsAssociation.setTitleCache("dna associated via IndividualsAssociation");
1398 // //type specimen of taxon
1399 // DerivedUnit fossilTypeDesignation = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
1400 // fossilTypeDesignation.setTitleCache("Fossil with type designation");
1402 // derivedUnitDeterminationTaxon.setUuid(derivedUnitDeterminationTaxonUuid);
1403 // derivedUnitDeterminationName.setUuid(derivedUnitDeterminationNameUuid);
1404 // derivedUnitDeterminationSynonym.setUuid(derivedUnitDeterminationSynonymUuid);
1405 // derivedUnitDeterminationSynonymName.setUuid(derivedUnitDeterminationSynonymNameUuid);
1406 // derivedUnitDeterminationOrphanName.setUuid(derivedUnitDeterminationOrphanNameUuid);
1407 // tissueUuidNoAssociation.setUuid(tissueUuidNoAssociationUuid);
1408 // dnaSampleUuidIndividualsAssociation.setUuid(dnaSampleUuidIndividualsAssociationUuid);
1409 // fossilTypeDesignation.setUuid(fossilTypeDesignationUuid);
1411 // occurrenceService.save(derivedUnitDeterminationTaxon);
1412 // occurrenceService.save(derivedUnitDeterminationName);
1413 // occurrenceService.save(derivedUnitDeterminationSynonym);
1414 // occurrenceService.save(derivedUnitDeterminationSynonymName);
1415 // occurrenceService.save(derivedUnitDeterminationOrphanName);
1416 // occurrenceService.save(tissueUuidNoAssociation);
1417 // occurrenceService.save(dnaSampleUuidIndividualsAssociation);
1418 // occurrenceService.save(fossilTypeDesignation);
1421 // TaxonName taxonName = TaxonNameFactory.PARSED_BOTANICAL("Campanula patual");
1422 // TaxonName synonymName = TaxonNameFactory.PARSED_BOTANICAL("Syno nyma");
1423 // TaxonName orphanName = TaxonNameFactory.PARSED_BOTANICAL("Orphanus lonelia");
1424 // taxonName.setUuid(taxonNameUuid);
1425 // synonymName.setUuid(synonymNameUuid);
1426 // orphanName.setUuid(orphanNameUuid);
1429 // Taxon taxon = Taxon.NewInstance(taxonName, null);
1430 // taxon.setUuid(taxonUuid);
1432 // Classification classification = Classification.NewInstance("Test Classification");
1433 // TaxonNode taxonNode = classification.addChildTaxon(taxon, null, null);
1434 // taxonNode.setUuid(taxonNodeUuid);
1437 // Synonym synonym = Synonym.NewInstance(synonymName, null);
1438 // synonym.setUuid(synoymUuid);
1439 // taxon.addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());
1441 // //IndividualsAssociation
1442 // TaxonDescription taxonDescription = TaxonDescription.NewInstance();
1443 // IndividualsAssociation association = IndividualsAssociation.NewInstance(dnaSampleUuidIndividualsAssociation);
1444 // association.setFeature(Feature.SPECIMEN());
1445 // taxonDescription.addElement(association);
1446 // taxon.addDescription(taxonDescription);
1448 // //DETERMINATION EVENTS
1449 // DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
1450 // DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
1451 // // DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1452 // DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
1453 // DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
1455 // //type designation
1456 // SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
1457 // specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
1458 // taxonName.addTypeDesignation(specimenTypeDesignation, false);
1460 // classificationService.save(classification);
1461 // taxonService.saveOrUpdate(taxon);
1462 // taxonNodeService.save(taxonNode);
1464 // commitAndStartNewTransaction(null);
1467 // endTransaction();
1471 // writeDbUnitDataSetFile(new String[] {
1472 // "SpecimenOrObservationBase",
1473 // "SpecimenOrObservationBase_DerivationEvent",
1474 // "DerivationEvent",
1475 // "DescriptionElementBase",
1476 // "DescriptionBase",
1479 // "Classification",
1480 // "TypeDesignationBase",
1482 // "TaxonName_TypeDesignationBase",
1483 // "HomotypicalGroup",
1484 // "TeamOrPersonBase",
1485 // "LanguageString",
1486 // "DeterminationEvent"
1487 // }, "testAllKindsOfSpecimenAssociations");
1488 // } catch (FileNotFoundException e) {
1489 // e.printStackTrace();
1496 @DataSet(loadStrategy
= CleanSweepInsertLoadStrategy
.class, value
= "OccurrenceServiceTest.testDnaSampleDesignation.xml")
1497 public void testDnaSampleDesignation(){
1498 DefinedTerm sampleDesignationTermType
= (DefinedTerm
) termService
.load(UUID
.fromString("fadeba12-1be3-4bc7-9ff5-361b088d86fc"));
1500 UUID dnaSampleUuid
= UUID
.fromString("4bee91b9-23d8-438b-8569-6d6aaa5b6587");
1501 DnaSample dnaSample
= HibernateProxyHelper
.deproxy(occurrenceService
.load(dnaSampleUuid
), DnaSample
.class);
1502 assertEquals(1, dnaSample
.getIdentifiers().size());
1503 Identifier
<?
> identifier
= dnaSample
.getIdentifiers().iterator().next();
1504 assertEquals("NK 2088", identifier
.getIdentifier());
1505 assertEquals(sampleDesignationTermType
, identifier
.getType());
1507 //change identifier, save and reload
1508 identifier
.setIdentifier("WB10");
1509 occurrenceService
.saveOrUpdate(dnaSample
);
1510 SpecimenOrObservationBase
<?
> dnaSampleReloaded
= occurrenceService
.load(dnaSampleUuid
);
1511 assertEquals(1, dnaSample
.getIdentifiers().size());
1512 Identifier
<?
> identifierReloaded
= dnaSample
.getIdentifiers().iterator().next();
1513 assertEquals("WB10", identifierReloaded
.getIdentifier());
1514 assertEquals(sampleDesignationTermType
, identifierReloaded
.getType());
1517 // DefinedTerm sampleDesignationTermType = (DefinedTerm) termService.load(UUID.fromString("fadeba12-1be3-4bc7-9ff5-361b088d86fc"));
1519 // UUID dnaSampleUuid = UUID.fromString("4bee91b9-23d8-438b-8569-6d6aaa5b6587");
1520 // DerivedUnit dnaSample = DnaSample.NewInstance();
1521 // dnaSample.setUuid(dnaSampleUuid);
1522 // Identifier.NewInstance(dnaSample, "NK 2088", sampleDesignationTermType);
1524 // occurrenceService.save(dnaSample);
1526 // commitAndStartNewTransaction(null);
1529 // endTransaction();
1533 // writeDbUnitDataSetFile(new String[] {
1534 // "SpecimenOrObservationBase",
1536 // "SpecimenOrObservationBase_Identifier"
1537 // }, "testDnaSampleDesignation");
1538 // } catch (FileNotFoundException e) {
1539 // e.printStackTrace();
1544 public void createTestDataSet() throws FileNotFoundException
{
1546 UUID derivedUnitDeterminationTaxonUuid
= UUID
.fromString("941b8b22-1925-4b91-8ff8-97114499bb22");
1547 UUID derivedUnitDeterminationNameUuid
= UUID
.fromString("0cdc7a57-6f55-45c8-b3e5-523748c381e7");
1549 UUID derivedUnitDeterminationSynonymUuid
= UUID
.fromString("8eb94a7d-c802-49a7-bc10-c26de20a52c2");
1550 UUID derivedUnitDeterminationSynonymNameUuid
= UUID
.fromString("d940a940-8caf-4a52-b1d8-ba4aad7ddae2");
1552 UUID derivedUnitDeterminationOrphanNameUuid
= UUID
.fromString("587b7297-7d59-4f59-8ef3-c7a559cadeca");
1554 UUID tissueUuidNoAssociationUuid
= UUID
.fromString("93e94260-5107-4b2c-9ce4-da9e1a4e7cb9");
1555 UUID dnaSampleUuidIndividualsAssociationUuid
= UUID
.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
1556 UUID fossilTypeDesignationUuid
= UUID
.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
1558 UUID taxonNodeUuid
= UUID
.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
1559 UUID taxonUuid
= UUID
.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
1560 UUID synoymUuid
= UUID
.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
1562 UUID taxonNameUuid
= UUID
.fromString("e59b95c0-9ad6-48be-af62-a982ba72b917");
1563 UUID synonymNameUuid
= UUID
.fromString("39f04b2a-b8bd-46e8-9102-ab665c64ec8e");
1564 UUID orphanNameUuid
= UUID
.fromString("d8e56365-3ad9-4b0e-88bf-acaaab223a9b");
1567 //determination: taxon
1568 DerivedUnit derivedUnitDeterminationTaxon
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
1569 derivedUnitDeterminationTaxon
.setTitleCache("Derived Unit determined as taxon");
1570 //determination: taxon name
1571 DerivedUnit derivedUnitDeterminationName
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
1572 derivedUnitDeterminationName
.setTitleCache("Derived Unit determined as name");
1573 //determination: synonym
1574 DerivedUnit derivedUnitDeterminationSynonym
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
1575 derivedUnitDeterminationSynonym
.setTitleCache("Derived Unit determined as synonym");
1576 //determination: synonym name
1577 DerivedUnit derivedUnitDeterminationSynonymName
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
1578 derivedUnitDeterminationSynonymName
.setTitleCache("Derived Unit determined as synonym name");
1579 //determination: orphan name
1580 DerivedUnit derivedUnitDeterminationOrphanName
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.PreservedSpecimen
);
1581 derivedUnitDeterminationOrphanName
.setTitleCache("Derived Unit determined as orphan name");
1583 DerivedUnit tissueUuidNoAssociation
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.TissueSample
);
1584 tissueUuidNoAssociation
.setTitleCache("tissue sample no association");
1585 //individuals association with taxon
1586 DerivedUnit dnaSampleUuidIndividualsAssociation
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.DnaSample
);
1587 dnaSampleUuidIndividualsAssociation
.setTitleCache("dna associated via IndividualsAssociation");
1588 //type specimen of taxon
1589 DerivedUnit fossilTypeDesignation
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.Fossil
);
1590 fossilTypeDesignation
.setTitleCache("Fossil with type designation");
1592 derivedUnitDeterminationTaxon
.setUuid(derivedUnitDeterminationTaxonUuid
);
1593 derivedUnitDeterminationName
.setUuid(derivedUnitDeterminationNameUuid
);
1594 derivedUnitDeterminationSynonym
.setUuid(derivedUnitDeterminationSynonymUuid
);
1595 derivedUnitDeterminationSynonymName
.setUuid(derivedUnitDeterminationSynonymNameUuid
);
1596 derivedUnitDeterminationOrphanName
.setUuid(derivedUnitDeterminationOrphanNameUuid
);
1597 tissueUuidNoAssociation
.setUuid(tissueUuidNoAssociationUuid
);
1598 dnaSampleUuidIndividualsAssociation
.setUuid(dnaSampleUuidIndividualsAssociationUuid
);
1599 fossilTypeDesignation
.setUuid(fossilTypeDesignationUuid
);
1601 occurrenceService
.save(derivedUnitDeterminationTaxon
);
1602 occurrenceService
.save(derivedUnitDeterminationName
);
1603 occurrenceService
.save(derivedUnitDeterminationSynonym
);
1604 occurrenceService
.save(derivedUnitDeterminationSynonymName
);
1605 occurrenceService
.save(derivedUnitDeterminationOrphanName
);
1606 occurrenceService
.save(tissueUuidNoAssociation
);
1607 occurrenceService
.save(dnaSampleUuidIndividualsAssociation
);
1608 occurrenceService
.save(fossilTypeDesignation
);
1611 TaxonName taxonName
= TaxonNameFactory
.PARSED_BOTANICAL("Campanula patual");
1612 TaxonName synonymName
= TaxonNameFactory
.PARSED_BOTANICAL("Syno nyma");
1613 TaxonName orphanName
= TaxonNameFactory
.PARSED_BOTANICAL("Orphanus lonelia");
1614 taxonName
.setUuid(taxonNameUuid
);
1615 synonymName
.setUuid(synonymNameUuid
);
1616 orphanName
.setUuid(orphanNameUuid
);
1619 Taxon taxon
= Taxon
.NewInstance(taxonName
, null);
1620 taxon
.setUuid(taxonUuid
);
1622 Classification classification
= Classification
.NewInstance("Test Classification");
1623 TaxonNode taxonNode
= classification
.addChildTaxon(taxon
, null, null);
1624 taxonNode
.setUuid(taxonNodeUuid
);
1627 Synonym synonym
= Synonym
.NewInstance(synonymName
, null);
1628 synonym
.setUuid(synoymUuid
);
1629 taxon
.addSynonym(synonym
, SynonymType
.HOMOTYPIC_SYNONYM_OF());
1631 //IndividualsAssociation
1632 TaxonDescription taxonDescription
= TaxonDescription
.NewInstance();
1633 IndividualsAssociation association
= IndividualsAssociation
.NewInstance(dnaSampleUuidIndividualsAssociation
);
1634 association
.setFeature(Feature
.SPECIMEN());
1635 taxonDescription
.addElement(association
);
1636 taxon
.addDescription(taxonDescription
);
1638 //DETERMINATION EVENTS
1639 DeterminationEvent
.NewInstance(taxon
, derivedUnitDeterminationTaxon
);
1640 DeterminationEvent
.NewInstance(taxonName
, derivedUnitDeterminationName
);
1641 // DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1642 DeterminationEvent
.NewInstance(synonymName
, derivedUnitDeterminationSynonymName
);
1643 DeterminationEvent
.NewInstance(orphanName
, derivedUnitDeterminationOrphanName
);
1646 SpecimenTypeDesignation specimenTypeDesignation
= SpecimenTypeDesignation
.NewInstance();
1647 specimenTypeDesignation
.setTypeSpecimen(fossilTypeDesignation
);
1648 taxonName
.addTypeDesignation(specimenTypeDesignation
, false);
1650 classificationService
.saveOrUpdate(classification
);
1651 taxonService
.saveOrUpdate(taxon
);
1652 taxonNodeService
.saveOrUpdate(taxonNode
);
1654 commitAndStartNewTransaction(null);
1661 writeDbUnitDataSetFile(new String
[] {
1662 "SpecimenOrObservationBase",
1663 "SpecimenOrObservationBase_DerivationEvent",
1665 "DescriptionElementBase",
1670 "TypeDesignationBase",
1672 "TaxonName_TypeDesignationBase",
1676 "DeterminationEvent"
1677 }, "testAllKindsOfSpecimenAssociations");
1678 } catch (FileNotFoundException e
) {
1679 e
.printStackTrace();