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");
51 private final UUID TAXON_UUID
= UUID
.fromString("e93b3840-326c-446e-89f1-a7611f17c0e8");
53 @SuppressWarnings("unused")
54 private static final Logger logger
= Logger
.getLogger(OccurrenceServiceDeepDeleteTest
.class);
57 private IOccurrenceService occurrenceService
;
60 private ISequenceService sequenceService
;
63 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class, value
="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
64 public void testDeepDelete_FieldUnit(){
67 String assertMessage
= "Incorrect number of specimens after deletion.";
68 DeleteResult deleteResult
= null;
69 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
70 config
.setDeleteMolecularData(true);
71 config
.setDeleteChildren(true);
73 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(FIELD_UNIT_UUID
);
74 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
77 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
78 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
79 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
80 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
81 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
82 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
83 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
86 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
87 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
88 assertEquals(assertMessage
, 0, occurrenceService
.count(SpecimenOrObservationBase
.class));
89 assertEquals(assertMessage
, 0, occurrenceService
.count(FieldUnit
.class));
90 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
91 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
95 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
96 public void testDeepDelete_DerivedUnit(){
97 String assertMessage
= "Incorrect number of specimens after deletion.";
98 DeleteResult deleteResult
= null;
99 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
100 config
.setDeleteMolecularData(true);
101 config
.setDeleteChildren(true);
103 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(DERIVED_UNIT_UUID
);
104 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
106 //check initial state
107 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
108 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
109 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
110 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
111 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
112 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
113 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
115 //delete derived unit
116 deleteResult
= occurrenceService
.deleteDerivateHierarchy(derivedUnit
, config
);
117 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
118 assertEquals(assertMessage
, 1, occurrenceService
.count(SpecimenOrObservationBase
.class));
119 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
120 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
121 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
125 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
126 public void testDeepDelete_DnaSample(){
127 String assertMessage
= "Incorrect number of specimens after deletion.";
128 DeleteResult deleteResult
= null;
129 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
130 config
.setDeleteMolecularData(true);
131 config
.setDeleteChildren(true);
133 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
135 //check initial state
136 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
137 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
138 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
139 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
140 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
141 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
142 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
145 deleteResult
= occurrenceService
.deleteDerivateHierarchy(dnaSample
, config
);
146 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
147 assertEquals(assertMessage
, 2, occurrenceService
.count(SpecimenOrObservationBase
.class));
148 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
149 assertEquals(assertMessage
, 1, occurrenceService
.count(DerivedUnit
.class));
150 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
155 @DataSet(loadStrategy
=CleanSweepInsertLoadStrategy
.class)
156 public void testDeleteDerivateHierarchyStepByStep(){
157 String assertMessage
= "Incorrect number of specimens after deletion.";
158 DeleteResult deleteResult
= null;
159 SpecimenDeleteConfigurator config
= new SpecimenDeleteConfigurator();
161 FieldUnit fieldUnit
= (FieldUnit
) occurrenceService
.load(FIELD_UNIT_UUID
);
162 DerivedUnit derivedUnit
= (DerivedUnit
) occurrenceService
.load(DERIVED_UNIT_UUID
);
163 DnaSample dnaSample
= (DnaSample
) occurrenceService
.load(DNA_SAMPLE_UUID
);
164 Sequence consensusSequence
= sequenceService
.load(SEQUENCE_UUID
);
166 //check initial state
167 assertEquals(assertMessage
, 3, occurrenceService
.count(SpecimenOrObservationBase
.class));
168 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
169 assertEquals(assertMessage
, 2, occurrenceService
.count(DerivedUnit
.class));
170 assertEquals(assertMessage
, 1, occurrenceService
.count(DnaSample
.class));
171 assertEquals("incorrect number of amplification results", 1, dnaSample
.getAmplificationResults().size());
172 assertEquals("number of sequences incorrect", 1, dnaSample
.getSequences().size());
173 assertEquals("incorrect number of single reads", 1, dnaSample
.getAmplificationResults().iterator().next().getSingleReads().size());
175 //delete single read -> should fail
176 SingleRead singleRead
= dnaSample
.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
177 deleteResult
= occurrenceService
.deleteDerivateHierarchy(singleRead
, config
);
178 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
179 //delete sequence -> should fail
180 deleteResult
= occurrenceService
.deleteDerivateHierarchy(consensusSequence
, config
);
181 assertFalse(deleteResult
.toString(), deleteResult
.isOk());
183 //allow deletion of molecular data
184 config
.setDeleteMolecularData(true);
186 deleteResult
= occurrenceService
.deleteDerivateHierarchy(singleRead
, config
);
187 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
188 assertTrue(consensusSequence
.getSingleReads().isEmpty());
190 //delete sequence -> should fail
191 deleteResult
= occurrenceService
.deleteDerivateHierarchy(consensusSequence
, config
);
192 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
193 assertEquals("number of sequences incorrect", 0, dnaSample
.getSequences().size());
197 deleteResult
= occurrenceService
.deleteDerivateHierarchy(dnaSample
, config
);
198 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
199 assertEquals(assertMessage
, 2, occurrenceService
.count(SpecimenOrObservationBase
.class));
200 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
201 assertEquals(assertMessage
, 1, occurrenceService
.count(DerivedUnit
.class));
202 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
204 //delete derived unit
205 deleteResult
= occurrenceService
.deleteDerivateHierarchy(derivedUnit
, config
);
206 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
207 assertEquals(assertMessage
, 1, occurrenceService
.count(SpecimenOrObservationBase
.class));
208 assertEquals(assertMessage
, 1, occurrenceService
.count(FieldUnit
.class));
209 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
210 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
213 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
214 deleteResult
= occurrenceService
.deleteDerivateHierarchy(fieldUnit
, config
);
215 assertTrue(deleteResult
.toString(), deleteResult
.isOk());
216 assertEquals(assertMessage
, 0, occurrenceService
.count(SpecimenOrObservationBase
.class));
217 assertEquals(assertMessage
, 0, occurrenceService
.count(FieldUnit
.class));
218 assertEquals(assertMessage
, 0, occurrenceService
.count(DerivedUnit
.class));
219 assertEquals(assertMessage
, 0, occurrenceService
.count(DnaSample
.class));
223 * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
228 public void createTestDataSet() throws FileNotFoundException
{
229 //how the XML was generated
230 FieldUnit fieldUnit
= FieldUnit
.NewInstance();
231 fieldUnit
.setUuid(FIELD_UNIT_UUID
);
232 //sub derivates (DerivedUnit, DnaSample)
233 DerivedUnit derivedUnit
= DerivedUnit
.NewInstance(SpecimenOrObservationType
.Fossil
);
234 derivedUnit
.setUuid(DERIVED_UNIT_UUID
);
235 DnaSample dnaSample
= DnaSample
.NewInstance();
236 dnaSample
.setUuid(DNA_SAMPLE_UUID
);
239 DerivationEvent
.NewSimpleInstance(fieldUnit
, derivedUnit
, DerivationEventType
.ACCESSIONING());
240 DerivationEvent
.NewSimpleInstance(derivedUnit
, dnaSample
, DerivationEventType
.DNA_EXTRACTION());
242 //DNA (Sequence, SingleRead, Amplification)
243 Sequence sequence
= Sequence
.NewInstance(dnaSample
, "ATTCG", 5);
244 sequence
.setUuid(SEQUENCE_UUID
);
245 SingleRead singleRead
= SingleRead
.NewInstance();
246 sequence
.addSingleRead(singleRead
);
247 dnaSample
.addSequence(sequence
);
248 AmplificationResult amplificationResult
= AmplificationResult
.NewInstance(dnaSample
);
249 amplificationResult
.addSingleRead(singleRead
);
250 occurrenceService
.save(fieldUnit
);
251 occurrenceService
.save(derivedUnit
);
252 occurrenceService
.save(dnaSample
);
254 commitAndStartNewTransaction(null);
261 writeDbUnitDataSetFile(new String
[] {
262 "SpecimenOrObservationBase",
263 "SpecimenOrObservationBase_DerivationEvent",
266 "Sequence_SingleRead",
268 "AmplificationResult"
270 } catch (FileNotFoundException e
) {