+ @Test
+ @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="OccurrenceServiceDeepDeleteTest.testDeepDelete_SingleRead.xml")
+ public void testDeepDelete_SingleRead(){
+ UUID sequenceA1Uuid = UUID.fromString("3db46d26-94ef-4759-aad8-42d0b9aea9b6");
+ UUID sequenceA2Uuid = UUID.fromString("afa3771c-2b9d-46d7-82e0-8b9c050706e3");
+ UUID sequenceB1Uuid = UUID.fromString("d7199db5-708e-470a-a573-9c760dd07cd1");
+ UUID sequenceB2Uuid = UUID.fromString("1cb83575-38ea-4a8c-9418-d87163f425ce");
+ UUID singleReadAUuid = UUID.fromString("82f538a1-2274-4d55-b27b-ed2f004ab5cd");
+ UUID singleReadBUuid = UUID.fromString("fc74199a-89dc-40a0-9cbd-08cebebff4b5");
+
+ //how the XML was generated
+// Sequence sequenceA1 = Sequence.NewInstance("A");
+// Sequence sequenceA2 = Sequence.NewInstance("T");
+// Sequence sequenceB1 = Sequence.NewInstance("C");
+// Sequence sequenceB2 = Sequence.NewInstance("G");
+//
+// SingleRead singleReadA = SingleRead.NewInstance();
+// SingleRead singleReadB = SingleRead.NewInstance();
+//
+// sequenceA1.setUuid(sequenceA1Uuid);
+// sequenceA2.setUuid(sequenceA2Uuid);
+// sequenceB1.setUuid(sequenceB1Uuid);
+// sequenceB1.setUuid(sequenceB2Uuid);
+// singleReadA.setUuid(singleReadAUuid);
+// singleReadB.setUuid(singleReadBUuid);
+//
+// SingleReadAlignment.NewInstance(sequenceA1, singleReadA);
+// SingleReadAlignment.NewInstance(sequenceA2, singleReadA);
+// SingleReadAlignment.NewInstance(sequenceB1, singleReadB);
+// SingleReadAlignment.NewInstance(sequenceB2, singleReadB);
+//
+// sequenceService.save(sequenceA1);
+// sequenceService.save(sequenceA2);
+// sequenceService.save(sequenceB1);
+// sequenceService.save(sequenceB2);
+//
+// commitAndStartNewTransaction(null);
+//
+// setComplete();
+// endTransaction();
+//
+// try {
+// writeDbUnitDataSetFile(new String[] {
+// "SpecimenOrObservationBase",
+// "SpecimenOrObservationBase_DerivationEvent",
+// "DerivationEvent",
+// "Sequence",
+// "SingleRead",
+// "SingleReadAlignment",
+// "Amplification",
+// "AmplificationResult",
+// "DescriptionElementBase",
+// "DescriptionBase",
+// "TaxonBase",
+// "TypeDesignationBase",
+// "TaxonNameBase",
+// "TaxonNameBase_TypeDesignationBase",
+// "HomotypicalGroup"
+// }, "testDeepDelete_SingleRead");
+// } catch (FileNotFoundException e) {
+// e.printStackTrace();
+// }
+
+ DeleteResult deleteResult = null;
+ SpecimenDeleteConfigurator config = new SpecimenDeleteConfigurator();
+ config.setDeleteMolecularData(true);
+ config.setDeleteChildren(true);
+
+ Sequence sequenceA1 = sequenceService.load(sequenceA1Uuid);
+ Sequence sequenceA2 = sequenceService.load(sequenceA2Uuid);
+ Sequence sequenceB1 = sequenceService.load(sequenceB1Uuid);
+ Sequence sequenceB2 = sequenceService.load(sequenceB2Uuid);
+ SingleRead singleReadA = singleReadDao.load(singleReadAUuid);
+ SingleRead singleReadB = singleReadDao.load(singleReadBUuid);
+
+ //check initial state
+ assertNotNull(sequenceA1);
+ assertNotNull(sequenceA2);
+ assertNotNull(sequenceB1);
+ assertNotNull(sequenceB2);
+ assertNotNull(singleReadA);
+ assertNotNull(singleReadB);
+ assertEquals("number of sequences incorrect", 4, sequenceService.count(Sequence.class));
+ assertEquals("incorrect number of single reads", 2, singleReadDao.count());
+
+ //A: delete singleRead
+ //delete singleReadA from sequenceA1 (singleReadA should NOT be deleted)
+ deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA1);
+ assertTrue(deleteResult.toString(), deleteResult.isOk());
+ assertEquals("incorrect number of single reads", 2, singleReadDao.count());
+ assertEquals(0, sequenceA1.getSingleReadAlignments().size());
+ assertNotNull(singleReadDao.load(singleReadAUuid));
+
+ //delete singleReadA from sequenceA2 (singleReadA should be deleted)
+ deleteResult = sequenceService.deleteSingleRead(singleReadA, sequenceA2);
+ assertTrue(deleteResult.toString(), deleteResult.isOk());
+ assertEquals("incorrect number of single reads", 1, singleReadDao.count());
+ assertEquals(0, sequenceA2.getSingleReadAlignments().size());
+ assertTrue(singleReadDao.load(singleReadAUuid)==null);
+
+ //B: delete sequence
+ //delete sequenceB1 (singleReadB should NOT be deleted)
+ deleteResult = sequenceService.delete(sequenceB1Uuid);
+ assertTrue(deleteResult.toString(), deleteResult.isOk());
+ assertEquals("incorrect number of single reads", 1, singleReadDao.count());
+ assertNotNull(singleReadDao.load(singleReadBUuid));
+
+ //delete sequenceB1 (singleReadB should be deleted)
+ deleteResult = sequenceService.delete(sequenceB2Uuid);
+ assertTrue(deleteResult.toString(), deleteResult.isOk());
+ assertEquals("incorrect number of single reads", 0, singleReadDao.count());
+ assertTrue(singleReadDao.load(singleReadBUuid)==null);
+ }
+