From 39ec4e4f3f97ed390e176b73581b12f2d0bd357d Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 23 Feb 2016 17:34:50 +0100 Subject: [PATCH] OO-1593: allow to delete QTI resource --- .../manager/AssessmentTestSessionDAO.java | 34 ++++++++++++++----- .../handlers/QTI21AssessmentTestHandler.java | 5 +++ .../manager/AssessmentEntryDAO.java | 13 ++++--- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java index 0c9f6d6d3da..030c7efc41c 100644 --- a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java +++ b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java @@ -120,15 +120,33 @@ public class AssessmentTestSessionDAO { } - public void deleteUserTestSessions(RepositoryEntryRef testEntry) { - String q = "select session from qtiassessmenttestsession session where session.testEntry.key=:testEntryKey"; - List<AssessmentTestSession> sessions = dbInstance.getCurrentEntityManager() - .createQuery(q, AssessmentTestSession.class) + public int deleteUserTestSessions(RepositoryEntryRef testEntry) { + StringBuilder responseSb = new StringBuilder(); + responseSb.append("delete from qtiassessmentresponse response where") + .append(" response.assessmentItemSession.key in (") + .append(" select itemSession from qtiassessmentitemsession itemSession, qtiassessmenttestsession session ") + .append(" where itemSession.assessmentTestSession.key=session.key and session.testEntry.key=:testEntryKey") + .append(" )"); + int responses = dbInstance.getCurrentEntityManager() + .createQuery(responseSb.toString()) .setParameter("testEntryKey", testEntry.getKey()) - .getResultList(); - for(AssessmentTestSession session:sessions) { - dbInstance.getCurrentEntityManager().remove(session); - } + .executeUpdate(); + StringBuilder itemSb = new StringBuilder(); + itemSb.append("delete from qtiassessmentitemsession itemSession") + .append(" where itemSession.assessmentTestSession.key in(") + .append(" select session.key from qtiassessmenttestsession session where session.testEntry.key=:testEntryKey") + .append(" )"); + int itemSessions = dbInstance.getCurrentEntityManager() + .createQuery(itemSb.toString()) + .setParameter("testEntryKey", testEntry.getKey()) + .executeUpdate(); + + String q = "delete from qtiassessmenttestsession session where session.testEntry.key=:testEntryKey"; + int sessions = dbInstance.getCurrentEntityManager() + .createQuery(q) + .setParameter("testEntryKey", testEntry.getKey()) + .executeUpdate(); + return itemSessions + sessions + responses; } } 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 e031010d124..07aa44fdac4 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 @@ -78,6 +78,7 @@ import org.olat.ims.qti21.ui.AssessmentTestDisplayController; import org.olat.ims.qti21.ui.InMemoryOutcomesListener; 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; @@ -116,6 +117,9 @@ public class QTI21AssessmentTestHandler extends FileHandler { private RepositoryService repositoryService; @Autowired private QTI21QPoolServiceProvider qpoolServiceProvider; + + @Autowired + private AssessmentEntryDAO assessmentEntryDAO; @Autowired private AssessmentTestSessionDAO assessmentTestSessionDao; @@ -368,6 +372,7 @@ public class QTI21AssessmentTestHandler extends FileHandler { public boolean cleanupOnDelete(RepositoryEntry entry, OLATResourceable res) { boolean clean = super.cleanupOnDelete(entry, res); assessmentTestSessionDao.deleteUserTestSessions(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 321db32cb7f..ac9a2f4122c 100644 --- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java +++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java @@ -183,11 +183,14 @@ public class AssessmentEntryDAO { .setParameter("groupKey", assessedGroup.getKey()) .setParameter("subIdent", subIdent) .getResultList(); - } - - - - + public int deleteEntryForReferenceEntry(RepositoryEntry entry) { + StringBuilder sb = new StringBuilder(); + sb.append("delete from assessmententry data where data.referenceEntry.key=:referenceKey"); + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .setParameter("referenceKey", entry.getKey()) + .executeUpdate(); + } } -- GitLab