Project

General

Profile

Download (16.9 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2014 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
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.
9
*/
10
package eu.etaxonomy.cdm.api.service;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertTrue;
16

    
17
import java.io.FileNotFoundException;
18
import java.util.UUID;
19

    
20
import org.apache.log4j.Logger;
21
import org.junit.Ignore;
22
import org.junit.Test;
23
import org.unitils.dbunit.annotation.DataSet;
24
import org.unitils.spring.annotation.SpringBeanByType;
25

    
26
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
27
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
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;
39

    
40
/**
41
 * @author pplitzner
42
 * @date 31.03.2014
43
 *
44
 */
45
public class OccurrenceServiceDeepDeleteTest extends CdmTransactionalIntegrationTest {
46

    
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

    
52
    @SuppressWarnings("unused")
53
    private static final Logger logger = Logger.getLogger(OccurrenceServiceDeepDeleteTest.class);
54

    
55
    @SpringBeanByType
56
    private IOccurrenceService occurrenceService;
57

    
58
    @SpringBeanByType
59
    private ISequenceService sequenceService;
60

    
61
    @Test
62
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceTest.testDeleteDerivateHierarchyStepByStep.xml")
63
    public void testDeepDelete_FieldUnit(){
64

    
65

    
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);
71

    
72
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
73
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
74

    
75
        //check initial state
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());
83

    
84
        //delete field unit
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));
91
    }
92

    
93
    @Test
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);
101

    
102
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(DERIVED_UNIT_UUID);
103
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
104

    
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());
113

    
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));
121
    }
122

    
123
    @Test
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);
131

    
132
        DnaSample dnaSample = (DnaSample) occurrenceService.load(DNA_SAMPLE_UUID);
133

    
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());
142

    
143
        //delete dna sample
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));
150
    }
151

    
152
    @Test
153
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_FieldUnitWithSiblingDerivatives.xml")
154
    public void testDeepDelete_FieldUnitWithSiblingDerivatives(){
155
        String assertMessage = "Incorrect number of specimens after deletion.";
156
        DeleteResult deleteResult = null;
157
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
158
        config.setDeleteChildren(true);
159

    
160
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(FIELD_UNIT_UUID);
161

    
162
        //check initial state
163
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
164
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
165
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
166
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
167

    
168
        //delete field unit
169
        deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
170
        assertTrue(deleteResult.toString(), deleteResult.isOk());
171
        assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
172
        assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
173
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
174
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
175
    }
176

    
177

    
178
    @Test
179
    @DataSet(value="OccurrenceServiceDeepDeleteTest.testDeleteStepByStep.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
180
    public void testDeleteDerivateHierarchyStepByStep(){
181
        UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
182
        UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
183
        UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
184
        UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
185
        UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
186

    
187
        String assertMessage = "Incorrect number of specimens after deletion.";
188
        DeleteResult deleteResult = null;
189
        SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
190

    
191
        FieldUnit fieldUnit = (FieldUnit) occurrenceService.load(fieldUnitUuid);
192
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(derivedUnitUuid);
193
        DerivedUnit tissueSample = (DerivedUnit) occurrenceService.load(tissueSampleUuid);
194
        DnaSample dnaSample = (DnaSample) occurrenceService.load(dnaSampleUuid);
195
        Sequence consensusSequence = sequenceService.load(sequenceUuid);
196

    
197
        //check initial state
198
        assertNotNull(fieldUnit);
199
        assertNotNull(derivedUnit);
200
        assertNotNull(tissueSample);
201
        assertNotNull(dnaSample);
202
        assertNotNull(consensusSequence);
203

    
204
        assertEquals(assertMessage, 4, occurrenceService.count(SpecimenOrObservationBase.class));
205
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
206
        assertEquals(assertMessage, 3, occurrenceService.count(DerivedUnit.class));
207
        assertEquals(assertMessage, 1, occurrenceService.count(DnaSample.class));
208
        assertEquals("incorrect number of amplification results", 1, dnaSample.getAmplificationResults().size());
209
        assertEquals("number of sequences incorrect", 1, dnaSample.getSequences().size());
210
        assertEquals("incorrect number of single reads", 1, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
211
        assertEquals("incorrect number of single reads", 1, consensusSequence.getSingleReads().size());
212
        assertEquals(consensusSequence.getSingleReads().iterator().next(), dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next());
213

    
214
        //delete sequence -> should fail
215
        deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
216
        assertFalse(deleteResult.toString(), deleteResult.isOk());
217

    
218
        //allow deletion of molecular data
219
        config.setDeleteMolecularData(true);
220

    
221
        SingleRead singleRead = dnaSample.getAmplificationResults().iterator().next().getSingleReads().iterator().next();
222
        deleteResult = occurrenceService.deleteSingleRead(singleRead, consensusSequence);
223
        assertTrue(deleteResult.toString(), deleteResult.isOk());
224
        assertEquals("incorrect number of single reads", 0, dnaSample.getAmplificationResults().iterator().next().getSingleReads().size());
225
        assertEquals("incorrect number of single reads", 0, consensusSequence.getSingleReads().size());
226

    
227
        //delete sequence
228
        deleteResult = occurrenceService.deleteDerivateHierarchy(consensusSequence, config);
229
        assertTrue(deleteResult.toString(), deleteResult.isOk());
230
        assertEquals("number of sequences incorrect", 0, dnaSample.getSequences().size());
231

    
232

    
233
        //delete dna sample
234
        deleteResult = occurrenceService.deleteDerivateHierarchy(dnaSample, config);
235
        assertTrue(deleteResult.toString(), deleteResult.isOk());
236
        assertEquals(assertMessage, 3, occurrenceService.count(SpecimenOrObservationBase.class));
237
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
238
        assertEquals(assertMessage, 2, occurrenceService.count(DerivedUnit.class));
239
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
240

    
241
        //delete tissue sample
242
        deleteResult = occurrenceService.deleteDerivateHierarchy(tissueSample, config);
243
        assertTrue(deleteResult.toString(), deleteResult.isOk());
244
        assertEquals(assertMessage, 2, occurrenceService.count(SpecimenOrObservationBase.class));
245
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
246
        assertEquals(assertMessage, 1, occurrenceService.count(DerivedUnit.class));
247
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
248

    
249
        //delete derived unit
250
        deleteResult = occurrenceService.deleteDerivateHierarchy(derivedUnit, config);
251
        assertTrue(deleteResult.toString(), deleteResult.isOk());
252
        assertEquals(assertMessage, 1, occurrenceService.count(SpecimenOrObservationBase.class));
253
        assertEquals(assertMessage, 1, occurrenceService.count(FieldUnit.class));
254
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
255
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
256

    
257
        //delete field unit
258
        deleteResult = occurrenceService.deleteDerivateHierarchy(fieldUnit, config);
259

    
260
        assertTrue(deleteResult.toString(), deleteResult.isOk());
261
        assertEquals(assertMessage, 0, occurrenceService.count(SpecimenOrObservationBase.class));
262
        assertEquals(assertMessage, 0, occurrenceService.count(FieldUnit.class));
263
        assertEquals(assertMessage, 0, occurrenceService.count(DerivedUnit.class));
264
        assertEquals(assertMessage, 0, occurrenceService.count(DnaSample.class));
265
    }
266

    
267
    @Override
268
    @Test
269
    @Ignore
270
    public void createTestDataSet() throws FileNotFoundException {
271
//        UUID fieldUnitUuid = UUID.fromString("4d91a9bc-2af7-40f8-b6e6-545305301807");
272
//        UUID derivedUnitUuid = UUID.fromString("f9c57904-e512-4927-90ad-f3833cdef967");
273
//        UUID tissueSampleUuid = UUID.fromString("14b92fce-1236-455b-ba46-2a7e35d9230e");
274
//        UUID dnaSampleUuid = UUID.fromString("60c31688-edec-4796-aa2f-28a7ea12256b");
275
//        UUID sequenceUuid = UUID.fromString("24804b67-d6f7-48e5-811a-e7240230d305");
276

    
277
        //how the XML was generated
278
        FieldUnit fieldUnit = FieldUnit.NewInstance();
279
        fieldUnit.setUuid(FIELD_UNIT_UUID);
280
        //sub derivates (DerivedUnit, DnaSample)
281
        DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
282
        derivedUnit.setUuid(DERIVED_UNIT_UUID);
283
        DnaSample dnaSample = (DnaSample) DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
284
        dnaSample.setUuid(DNA_SAMPLE_UUID);
285

    
286
        //derivation events
287
        DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.ACCESSIONING());
288
        DerivationEvent.NewSimpleInstance(fieldUnit, dnaSample, DerivationEventType.DNA_EXTRACTION());
289

    
290
        occurrenceService.save(fieldUnit);
291
        occurrenceService.save(derivedUnit);
292
        occurrenceService.save(dnaSample);
293

    
294
        commitAndStartNewTransaction(null);
295

    
296
        setComplete();
297
        endTransaction();
298

    
299
        try {
300
            writeDbUnitDataSetFile(new String[] {
301
                    "SpecimenOrObservationBase",
302
                    "SpecimenOrObservationBase_DerivationEvent",
303
                    "DerivationEvent",
304
                    "Sequence",
305
                    "SingleRead",
306
                    "SingleReadAlignment",
307
                    "Amplification",
308
                    "AmplificationResult",
309
                    "DescriptionElementBase",
310
                    "DescriptionBase",
311
                    "TaxonBase",
312
                    "TypeDesignationBase",
313
                    "TaxonNameBase",
314
                    "TaxonNameBase_TypeDesignationBase",
315
                    "HomotypicalGroup"
316
            }, "testDeepDelete_FieldUnitWithSiblingDerivatives");
317
        } catch (FileNotFoundException e) {
318
            e.printStackTrace();
319
        }
320
    }
321
}
(14-14/31)