From a2e83c0d69edcf88a753d8ed8add3dda9874d92d Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 29 Nov 2016 12:37:06 +0100 Subject: [PATCH] OO-2390: remove the reference in service, only remove the reference, not the assessment entry --- .../handlers/QTI21AssessmentTestHandler.java | 4 ---- .../assessment/manager/AssessmentEntryDAO.java | 4 ++-- .../manager/RepositoryServiceImpl.java | 2 ++ .../manager/AssessmentEntryDAOTest.java | 16 +++++++++++----- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java b/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java index ab1be66993c..6010b463379 100644 --- a/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java +++ b/src/main/java/org/olat/ims/qti21/repository/handlers/QTI21AssessmentTestHandler.java @@ -86,7 +86,6 @@ import org.olat.ims.qti21.ui.AssessmentTestDisplayController; import org.olat.ims.qti21.ui.QTI21AssessmentDetailsController; import org.olat.ims.qti21.ui.QTI21RuntimeController; import org.olat.ims.qti21.ui.editor.AssessmentTestComposerController; -import org.olat.modules.assessment.manager.AssessmentEntryDAO; import org.olat.modules.qpool.model.QItemList; import org.olat.repository.ErrorList; import org.olat.repository.RepositoryEntry; @@ -127,8 +126,6 @@ public class QTI21AssessmentTestHandler extends FileHandler { @Autowired private QTI21QPoolServiceProvider qpoolServiceProvider; - @Autowired - private AssessmentEntryDAO assessmentEntryDAO; @Autowired private AssessmentTestSessionDAO assessmentTestSessionDao; @@ -462,7 +459,6 @@ public class QTI21AssessmentTestHandler extends FileHandler { public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { boolean clean = super.cleanupOnDelete(entry, res); assessmentTestSessionDao.deleteAllUserTestSessions(entry); - assessmentEntryDAO.deleteEntryForReferenceEntry(entry); return clean; } diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java index 27e497a7dd7..b4192c06797 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -272,9 +272,9 @@ public class AssessmentEntryDAO { * @param entry * @return */ - public int deleteEntryForReferenceEntry(RepositoryEntryRef entry) { + public int removeEntryForReferenceEntry(RepositoryEntryRef entry) { StringBuilder sb = new StringBuilder(); - sb.append("delete from assessmententry data where data.referenceEntry.key=:referenceKey"); + sb.append("update assessmententry data set data.referenceEntry.key=null where data.referenceEntry.key=:referenceKey"); return dbInstance.getCurrentEntityManager() .createQuery(sb.toString()) .setParameter("referenceKey", entry.getKey()) diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java index f0367c455e0..fa679279453 100644 --- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java +++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java @@ -365,6 +365,8 @@ public class RepositoryServiceImpl implements RepositoryService { handler.cleanupOnDelete(entry, resource); dbInstance.commit(); + //nullify the reference + assessmentEntryDao.removeEntryForReferenceEntry(entry); assessmentEntryDao.deleteEntryForRepositoryEntry(entry); dbInstance.commit(); diff --git a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java index a629588bc6c..54dba540b74 100644 --- a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java +++ b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java @@ -340,7 +340,7 @@ public class AssessmentEntryDAOTest extends OlatTestCase { } @Test - public void deleteEntryForReferenceEntry() { + public void removeEntryForReferenceEntry() { Identity assessedIdentity1 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-18"); Identity assessedIdentity2 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-19"); RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry(); @@ -358,18 +358,24 @@ public class AssessmentEntryDAOTest extends OlatTestCase { dbInstance.commitAndCloseSession(); // delete by reference - assessmentEntryDao.deleteEntryForReferenceEntry(refEntry); + int affectedRows = assessmentEntryDao.removeEntryForReferenceEntry(refEntry); dbInstance.commitAndCloseSession(); + Assert.assertEquals(3, affectedRows); //check AssessmentEntry deletedAssessmentEntry1 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment1.getKey()); - Assert.assertNull(deletedAssessmentEntry1); + Assert.assertNotNull(deletedAssessmentEntry1); + Assert.assertNull(deletedAssessmentEntry1.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry2 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment2.getKey()); - Assert.assertNull(deletedAssessmentEntry2); + Assert.assertNotNull(deletedAssessmentEntry2); + Assert.assertNull(deletedAssessmentEntry2.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry3 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment3.getKey()); Assert.assertNotNull(deletedAssessmentEntry3); + Assert.assertNotNull(deletedAssessmentEntry3.getReferenceEntry()); + Assert.assertEquals(entry, deletedAssessmentEntry3.getReferenceEntry()); AssessmentEntry deletedAssessmentEntry4 = assessmentEntryDao.loadAssessmentEntryById(nodeAssessment4.getKey()); - Assert.assertNull(deletedAssessmentEntry4); + Assert.assertNotNull(deletedAssessmentEntry4); + Assert.assertNull(deletedAssessmentEntry4.getReferenceEntry()); } @Test -- GitLab