Revision 8f5a9520
Added by Katja Luther about 6 years ago
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java | ||
---|---|---|
1306 | 1306 |
FieldUnit fieldUnit = HibernateProxyHelper.deproxy(specimen, FieldUnit.class); |
1307 | 1307 |
GatheringEvent event = fieldUnit.getGatheringEvent(); |
1308 | 1308 |
fieldUnit.setGatheringEvent(null); |
1309 |
|
|
1309 |
if (event != null){ |
|
1310 |
DeleteResult result = eventService.isDeletable(event.getUuid(), null); |
|
1311 |
if (result.isOk()){ |
|
1312 |
eventService.delete(event); |
|
1313 |
} |
|
1314 |
} |
|
1310 | 1315 |
|
1311 | 1316 |
} |
1312 | 1317 |
deleteResult.includeResult(delete(specimen)); |
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceDeepDeleteTest.java | ||
---|---|---|
22 | 22 |
|
23 | 23 |
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator; |
24 | 24 |
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; |
25 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
|
25 | 26 |
import eu.etaxonomy.cdm.model.molecular.DnaSample; |
26 | 27 |
import eu.etaxonomy.cdm.model.molecular.Sequence; |
27 | 28 |
import eu.etaxonomy.cdm.model.molecular.SingleRead; |
28 | 29 |
import eu.etaxonomy.cdm.model.molecular.SingleReadAlignment; |
30 |
import eu.etaxonomy.cdm.model.name.NomenclaturalCode; |
|
31 |
import eu.etaxonomy.cdm.model.name.Rank; |
|
32 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; |
|
33 |
import eu.etaxonomy.cdm.model.name.TaxonName; |
|
34 |
import eu.etaxonomy.cdm.model.name.TypeDesignationBase; |
|
29 | 35 |
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; |
30 | 36 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
31 | 37 |
import eu.etaxonomy.cdm.model.occurrence.FieldUnit; |
38 |
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent; |
|
32 | 39 |
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; |
33 | 40 |
import eu.etaxonomy.cdm.persistence.dao.molecular.ISingleReadDao; |
34 | 41 |
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest; |
... | ... | |
45 | 52 |
private final UUID DERIVED_UNIT_UUID = UUID.fromString("448be6e7-f19c-4a10-9a0a-97aa005f817d"); |
46 | 53 |
private final UUID DNA_SAMPLE_UUID = UUID.fromString("bee4212b-aff1-484e-845f-065c7d6216af"); |
47 | 54 |
private final UUID SEQUENCE_UUID = UUID.fromString("0b867369-de8c-4837-a708-5b7d9f6091be"); |
55 |
private final UUID FIELD_UNIT2_UUID = UUID.fromString("ae798108-6483-4d09-900f-7f849c43bcc9"); |
|
48 | 56 |
|
49 | 57 |
@SuppressWarnings("unused") |
50 | 58 |
private static final Logger logger = Logger.getLogger(OccurrenceServiceDeepDeleteTest.class); |
... | ... | |
61 | 69 |
@SpringBeanByType |
62 | 70 |
private ISequenceService sequenceService; |
63 | 71 |
|
72 |
@SpringBeanByType |
|
73 |
private INameService nameService; |
|
74 |
|
|
75 |
|
|
64 | 76 |
@Test |
65 | 77 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml") |
66 | 78 |
public void testDeepDelete_FieldUnit(){ |
... | ... | |
73 | 85 |
config.setDeleteChildren(true); |
74 | 86 |
|
75 | 87 |
FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID); |
88 |
GatheringEvent gatheringEvent = GatheringEvent.NewInstance(); |
|
89 |
fieldUnit.setGatheringEvent(gatheringEvent); |
|
90 |
FieldUnit fieldUnit2 = (FieldUnit) occurrenceService.load(FIELD_UNIT2_UUID); |
|
91 |
fieldUnit2.setGatheringEvent(gatheringEvent); |
|
76 | 92 |
DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID); |
77 | 93 |
|
94 |
//check initial state |
|
95 |
assertEquals(assertMessage, 6, occurrenceService.count(SpecimenOrObservationBase.class)); |
|
96 |
assertEquals(assertMessage, 4, eventService.count(DerivationEvent.class)); |
|
97 |
assertEquals(assertMessage, 2, occurrenceService.count(FieldUnit.class)); |
|
98 |
assertEquals(assertMessage, 4, occurrenceService.count(DerivedUnit.class)); |
|
99 |
assertEquals(assertMessage, 2, occurrenceService.count(DnaSample.class)); |
|
100 |
assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size()); |
|
101 |
assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size()); |
|
102 |
assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size()); |
|
103 |
assertEquals("incorrect number of gathering events", 1, eventService.count(GatheringEvent.class)); |
|
104 |
//delete field unit |
|
105 |
deleteResult = occurrenceService.delete(fieldUnit, config); |
|
106 |
assertTrue(deleteResult.toString(), deleteResult.isOk()); |
|
107 |
assertEquals(assertMessage, 2, eventService.count(DerivationEvent.class)); |
|
108 |
assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class)); |
|
109 |
assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class)); |
|
110 |
assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class)); |
|
111 |
assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class)); |
|
112 |
assertEquals("incorrect number of gathering events", 1, eventService.count(GatheringEvent.class)); |
|
113 |
|
|
114 |
|
|
115 |
deleteResult = occurrenceService.delete(fieldUnit2, config); |
|
116 |
assertEquals(assertMessage, 0, eventService.count(GatheringEvent.class)); |
|
117 |
} |
|
118 |
|
|
119 |
@Test |
|
120 |
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml") |
|
121 |
public void testDeepDelete_FieldUnitWithTypeDesignation(){ |
|
122 |
|
|
123 |
|
|
124 |
String assertMessage = "Incorrect number of specimens after deletion."; |
|
125 |
DeleteResult deleteResult = null; |
|
126 |
SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator(); |
|
127 |
config.setDeleteMolecularData(true); |
|
128 |
config.setDeleteChildren(true); |
|
129 |
config.setDeleteFromTypeDesignation(true); |
|
130 |
|
|
131 |
FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID); |
|
132 |
DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID); |
|
133 |
TaxonName name = TaxonName.NewInstance(NomenclaturalCode.ICNAFP, Rank.SPECIES(), "Test", null, "test", null, null, null, null, null); |
|
134 |
SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance(); |
|
135 |
specimenTypeDesignation.setTypeSpecimen(dnaSample); |
|
136 |
name.addTypeDesignation(specimenTypeDesignation, false); |
|
137 |
nameService.save(name); |
|
138 |
Pager<TypeDesignationBase> typeDesignations = nameService.getTypeDesignations(name, null, 100, 0); |
|
139 |
Long oldCount= typeDesignations.getCount(); |
|
78 | 140 |
//check initial state |
79 | 141 |
assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class)); |
80 | 142 |
assertEquals(assertMessage, 2, eventService.count(DerivationEvent.class)); |
... | ... | |
93 | 155 |
assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class)); |
94 | 156 |
assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class)); |
95 | 157 |
assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class)); |
158 |
typeDesignations = nameService.getTypeDesignations(name, null, 100, 0); |
|
159 |
Long afterDeleteCount= typeDesignations.getCount(); |
|
160 |
assertTrue(oldCount > afterDeleteCount); |
|
96 | 161 |
} |
97 | 162 |
|
98 | 163 |
@Test |
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml | ||
---|---|---|
10 | 10 |
<SEQUENCE ID="5000" CREATED="2014-12-12 07:45:32.0" UUID="0b867369-de8c-4837-a708-5b7d9f6091be" UPDATED="2014-12-12 07:45:32.841" BARCODESEQUENCEPART_LENGTH="[null]" BARCODESEQUENCEPART_STRING="[null]" BOLDPROCESSID="[null]" CONSENSUSSEQUENCE_LENGTH="5" CONSENSUSSEQUENCE_STRING="ATTCG" GENETICACCESSIONNUMBER="[null]" HAPLOTYPE="[null]" ISBARCODE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CONTIGFILE_ID="[null]" DNASAMPLE_ID="5002" DNAMARKER_ID="[null]"/> |
11 | 11 |
<SINGLEREAD ID="5000" CREATED="2014-12-12 07:45:32.0" UUID="99a6ae0e-da91-4b88-89b1-68fc77c98ccf" UPDATED="2014-12-12 07:45:32.841" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" DIRECTION="[null]" SEQUENCE_LENGTH="[null]" SEQUENCE_STRING="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" AMPLIFICATIONRESULT_ID="5000" MATERIALORMETHOD_ID="[null]" PHEROGRAM_ID="[null]" PRIMER_ID="[null]"/> |
12 | 12 |
<AMPLIFICATIONRESULT ID="5000" CREATED="2014-12-12 07:45:32.0" UUID="971c0c4f-868f-41c9-a84f-c041cc378eb9" UPDATED="2014-12-12 07:45:32.84" SUCCESSTEXT="[null]" SUCCESSFUL="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLONING_ID="[null]" DNASAMPLE_ID="5002" AMPLIFICATION_ID="[null]" GELPHOTO_ID="[null]"/> |
13 |
<SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" ID="5003" CREATED="2014-12-12 07:45:32.0" UUID="ae798108-6483-4d09-900f-7f849c43bcc9" UPDATED="[null]" RECORDBASIS="FU" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="-title cache generation not implemented-" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/> |
|
14 |
<SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5004" CREATED="2014-12-12 07:45:32.0" UUID="93fdcf99-af42-41dc-9e8d-ced93ad5188b" UPDATED="2014-12-12 07:45:32.838" RECORDBASIS="FS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="class eu.etaxonomy.cdm.model.occurrence.DerivedUnit: 448be6e7-f19c-4a10-9a0a-97aa005f817d" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="5003" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/> |
|
15 |
<SPECIMENOROBSERVATIONBASE DTYPE="DnaSample" ID="5005" CREATED="2014-12-12 07:45:32.0" UUID="753a9363-7373-4022-98ab-061a6c8f7f10" UPDATED="2014-12-12 07:45:32.839" RECORDBASIS="DS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="-title cache generation not implemented-" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="5004" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/> |
|
16 |
<SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT ORIGINALS_ID="5003" DERIVATIONEVENTS_ID="5002"/> |
|
17 |
<SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT ORIGINALS_ID="5004" DERIVATIONEVENTS_ID="5003"/> |
|
18 |
<DERIVATIONEVENT ID="5002" CREATED="2014-12-12 07:45:32.0" UUID="4576df35-d37a-40b3-8d7a-f95319e4c789" UPDATED="2014-12-12 07:45:32.837" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" INSTITUTION_ID="[null]" TYPE_ID="2004"/> |
|
19 |
<DERIVATIONEVENT ID="5003" CREATED="2014-12-12 07:45:32.0" UUID="959b1e61-aee9-42c7-b600-11d6b2fbc065" UPDATED="2014-12-12 07:45:32.838" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" INSTITUTION_ID="[null]" TYPE_ID="2001"/> |
|
20 |
<SEQUENCE ID="5001" CREATED="2014-12-12 07:45:32.0" UUID="112b188d-a27f-4cbf-8dca-06b181c96e85" UPDATED="2014-12-12 07:45:32.841" BARCODESEQUENCEPART_LENGTH="[null]" BARCODESEQUENCEPART_STRING="[null]" BOLDPROCESSID="[null]" CONSENSUSSEQUENCE_LENGTH="5" CONSENSUSSEQUENCE_STRING="ATTCG" GENETICACCESSIONNUMBER="[null]" HAPLOTYPE="[null]" ISBARCODE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CONTIGFILE_ID="[null]" DNASAMPLE_ID="5005" DNAMARKER_ID="[null]"/> |
|
21 |
<SINGLEREAD ID="5001" CREATED="2014-12-12 07:45:32.0" UUID="95627568-e707-483d-b8af-201bde71e7ae" UPDATED="2014-12-12 07:45:32.841" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" DIRECTION="[null]" SEQUENCE_LENGTH="[null]" SEQUENCE_STRING="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" AMPLIFICATIONRESULT_ID="5001" MATERIALORMETHOD_ID="[null]" PHEROGRAM_ID="[null]" PRIMER_ID="[null]"/> |
|
22 |
<AMPLIFICATIONRESULT ID="5001" CREATED="2014-12-12 07:45:32.0" UUID="b865023f-aa73-4be1-9e16-f2c90b50b052" UPDATED="2014-12-12 07:45:32.84" SUCCESSTEXT="[null]" SUCCESSFUL="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLONING_ID="[null]" DNASAMPLE_ID="5005" AMPLIFICATION_ID="[null]" GELPHOTO_ID="[null]"/> |
|
13 | 23 |
</dataset> |
Also available in: Unified diff
fix delete and tests of specimen with typedesignations and gathering events