3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.service
;
12 import static org
.junit
.Assert
.assertEquals
;
13 import static org
.junit
.Assert
.assertFalse
;
14 import static org
.junit
.Assert
.assertTrue
;
16 import java
.io
.FileNotFoundException
;
17 import java
.util
.UUID
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.junit
.Ignore
;
21 import org
.junit
.Test
;
22 import org
.unitils
.dbunit
.annotation
.DataSet
;
23 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
25 import eu
.etaxonomy
.cdm
.api
.service
.config
.SpecimenDeleteConfigurator
;
26 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.ISequenceService
;
27 import eu
.etaxonomy
.cdm
.model
.molecular
.AmplificationResult
;
28 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
29 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
30 import eu
.etaxonomy
.cdm
.model
.molecular
.SingleRead
;
31 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
32 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
33 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
34 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
35 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
36 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationType
;
37 import eu
.etaxonomy
.cdm
.test
.integration
.CdmTransactionalIntegrationTest
;
38 import eu
.etaxonomy
.cdm
.test
.unitils
.CleanSweepInsertLoadStrategy
;
45 public class OccurrenceServiceDeepDeleteTest
extends CdmTransactionalIntegrationTest
{
47 private final UUID FIELD_UNIT_UUID
= UUID
.fromString("b5f58da5-4442-4001-9d13-33f41518b72a");
48 private final UUID DERIVED_UNIT_UUID
= UUID
.fromString("448be6e7-f19c-4a10-9a0a-97aa005f817d");
49 private final UUID DNA_SAMPLE_UUID
= UUID
.fromString("bee4212b-aff1-484e-845f-065c7d6216af");
50 private final UUID SEQUENCE_UUID
= UUID
.fromString("0b867369-de8c-4837-a708-5b7d9f6091be");
52 @SuppressWarnings("unused")
53 private static final Logger logger
= Logger
.getLogger(OccurrenceServiceDeepDeleteTest
.class);
56 private IOccurrenceService occurrenceService
;
59 private ISequenceService sequenceService
;
62 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class, value
="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
63 public void testDeepDelete_FieldUnit(){
66 String assertMessage
= "Incorrect number of specimens after deletion.";
67 DeleteResult deleteResult
= null;
68 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
69 config
.setDeleteMolecularData(true);
70 config
.setDeleteChildren(true);
72 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(FIELD_UNIT_UUID
);
73 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
76 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
77 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
78 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
79 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
80 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
81 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
82 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
85 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
86 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
87 assertEquals(assertMessage
, 0, occurrenceService
.count(SpecimenOrObservationBase
.class));
88 assertEquals(assertMessage
, 0, occurrenceService
.count(FieldUnit
.class));
89 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
90 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
94 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
95 public void testDeepDelete_DerivedUnit(){
96 String assertMessage
= "Incorrect number of specimens after deletion.";
97 DeleteResult deleteResult
= null;
98 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
99 config
.setDeleteMolecularData(true);
100 config
.setDeleteChildren(true);
102 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(DERIVED_UNIT_UUID
);
103 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
105 //check initial state
106 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
107 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
108 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
109 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
110 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
111 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
112 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
114 //delete derived unit
115 deleteResult
= occurrenceService
.deleteDerivateHierarchy(derivedUnit
, config
);
116 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
117 assertEquals(assertMessage
, 1, occurrenceService
.count(SpecimenOrObservationBase
.class));
118 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
119 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
120 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
124 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
125 public void testDeepDelete_DnaSample(){
126 String assertMessage
= "Incorrect number of specimens after deletion.";
127 DeleteResult deleteResult
= null;
128 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
129 config
.setDeleteMolecularData(true);
130 config
.setDeleteChildren(true);
132 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
134 //check initial state
135 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
136 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
137 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
138 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
139 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
140 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
141 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
144 deleteResult
= occurrenceService
.deleteDerivateHierarchy(dnaSample
, config
);
145 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
146 assertEquals(assertMessage
, 2, occurrenceService
.count(SpecimenOrObservationBase
.class));
147 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
148 assertEquals(assertMessage
, 1, occurrenceService
.count(DerivedUnit
.class));
149 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
154 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
155 public void testDeleteDerivateHierarchyStepByStep(){
156 String assertMessage
= "Incorrect number of specimens after deletion.";
157 DeleteResult deleteResult
= null;
158 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
160 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(FIELD_UNIT_UUID
);
161 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(DERIVED_UNIT_UUID
);
162 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
163 Sequence consensusSequence
= sequenceService
.load(SEQUENCE_UUID
);
165 //check initial state
166 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
167 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
168 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
169 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
170 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
171 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
172 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
174 //delete single read -> should fail
175 SingleRead singleRead
= dnaSample
.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
176 deleteResult
= occurrenceService
.deleteDerivateHierarchy(singleRead
, config
);
177 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
178 //delete sequence -> should fail
179 deleteResult
= occurrenceService
.deleteDerivateHierarchy(consensusSequence
, config
);
180 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
182 //allow deletion of molecular data
183 config
.setDeleteMolecularData(true);
185 deleteResult
= occurrenceService
.deleteDerivateHierarchy(singleRead
, config
);
186 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
187 assertTrue(consensusSequence
.getSingleReads().isEmpty());
189 //delete sequence -> should fail
190 deleteResult
= occurrenceService
.deleteDerivateHierarchy(consensusSequence
, config
);
191 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
192 assertEquals("number of sequences incorrect", 0, dnaSample
.getSequences().size());
196 deleteResult
= occurrenceService
.deleteDerivateHierarchy(dnaSample
, config
);
197 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
198 assertEquals(assertMessage
, 2, occurrenceService
.count(SpecimenOrObservationBase
.class));
199 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
200 assertEquals(assertMessage
, 1, occurrenceService
.count(DerivedUnit
.class));
201 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
203 //delete derived unit
204 deleteResult
= occurrenceService
.deleteDerivateHierarchy(derivedUnit
, config
);
205 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
206 assertEquals(assertMessage
, 1, occurrenceService
.count(SpecimenOrObservationBase
.class));
207 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
208 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
209 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
212 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
213 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
214 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
215 assertEquals(assertMessage
, 0, occurrenceService
.count(SpecimenOrObservationBase
.class));
216 assertEquals(assertMessage
, 0, occurrenceService
.count(FieldUnit
.class));
217 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
218 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
222 * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
227 public void createTestDataSet() throws FileNotFoundException
{
228 //how the XML was generated
229 FieldUnit fieldUnit
= FieldUnit
.NewInstance();
230 fieldUnit
.setUuid(FIELD_UNIT_UUID
);
231 //sub derivates (DerivedUnit, DnaSample)
232 DerivedUnit derivedUnit
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.Fossil
);
233 derivedUnit
.setUuid(DERIVED_UNIT_UUID
);
234 DnaSample dnaSample
= DnaSample
.NewInstance();
235 dnaSample
.setUuid(DNA_SAMPLE_UUID
);
238 DerivationEvent
.NewSimpleInstance(fieldUnit
, derivedUnit
, DerivationEventType
.ACCESSIONING());
239 DerivationEvent
.NewSimpleInstance(derivedUnit
, dnaSample
, DerivationEventType
.DNA_EXTRACTION());
241 //DNA (Sequence, SingleRead, Amplification)
242 Sequence sequence
= Sequence
.NewInstance(dnaSample
, "ATTCG", 5);
243 sequence
.setUuid(SEQUENCE_UUID
);
244 SingleRead singleRead
= SingleRead
.NewInstance();
245 sequence
.addSingleRead(singleRead
);
246 dnaSample
.addSequence(sequence
);
247 AmplificationResult amplificationResult
= AmplificationResult
.NewInstance(dnaSample
);
248 amplificationResult
.addSingleRead(singleRead
);
249 occurrenceService
.save(fieldUnit
);
250 occurrenceService
.save(derivedUnit
);
251 occurrenceService
.save(dnaSample
);
253 commitAndStartNewTransaction(null);
260 writeDbUnitDataSetFile(new String
[] {
261 "SpecimenOrObservationBase",
262 "SpecimenOrObservationBase_DerivationEvent",
265 "Sequence_SingleRead",
267 "AmplificationResult"
269 } catch (FileNotFoundException e
) {