From 28402fc42f5b4101c345d622868383371c668eb8 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 9 Dec 2014 09:04:16 +0100 Subject: [PATCH] OO-1346: use a query to load a specific message to prevent EntityNotFoundException if the message was deleted --- .../modules/fo/FilterForUserController.java | 8 ++++++-- .../org/olat/modules/fo/ForumController.java | 10 +++++----- .../org/olat/modules/fo/ForumManager.java | 20 ++++++++----------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/olat/modules/fo/FilterForUserController.java b/src/main/java/org/olat/modules/fo/FilterForUserController.java index 08e8c528d5b..26325426c73 100644 --- a/src/main/java/org/olat/modules/fo/FilterForUserController.java +++ b/src/main/java/org/olat/modules/fo/FilterForUserController.java @@ -81,6 +81,7 @@ import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter; import org.olat.user.DisplayPortraitController; import org.olat.user.UserInfoMainController; import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -119,12 +120,15 @@ public class FilterForUserController extends BasicController { private final OLATResourceable forumOres; private final String thumbMapper; + + @Autowired + private ForumManager forumManager; public FilterForUserController(UserRequest ureq, WindowControl wControl, Forum forum) { super(ureq, wControl); this.forum = forum; - msgs = ForumManager.getInstance().getMessagesByForum(forum); + msgs = forumManager.getMessagesByForum(forum); forumOres = OresHelper.createOLATResourceableInstance(Forum.class,forum.getKey()); mainVC = createVelocityContainer("filter_for_user"); @@ -300,7 +304,7 @@ public class FilterForUserController extends BasicController { Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command); Long messageId = (Long) messageMap.get("id"); - Message selectedMessage = ForumManager.getInstance().findMessage(messageId); + Message selectedMessage = forumManager.loadMessage(messageId); if (selectedMessage != null) { if (command.startsWith("open_in_thread_")) { fireEvent(ureq, new OpenMessageInThreadEvent(selectedMessage)); diff --git a/src/main/java/org/olat/modules/fo/ForumController.java b/src/main/java/org/olat/modules/fo/ForumController.java index ee55a1f82a0..63e19f6f82d 100644 --- a/src/main/java/org/olat/modules/fo/ForumController.java +++ b/src/main/java/org/olat/modules/fo/ForumController.java @@ -330,7 +330,7 @@ public class ForumController extends BasicController implements GenericEventList Long resId = ores.getResourceableId(); if (resId.longValue() != 0) { if (isLogDebugEnabled()) logDebug("messageId=" , ores.getResourceableId().toString()); - currentMsg = fm.findMessage(ores.getResourceableId()); + currentMsg = fm.loadMessage(ores.getResourceableId()); if (currentMsg != null) { showThreadView(ureq, currentMsg, null); scrollToCurrentMessage(); @@ -399,7 +399,7 @@ public class ForumController extends BasicController implements GenericEventList Long resId = entries.get(0).getOLATResourceable().getResourceableId(); if (resId.longValue() != 0) { - currentMsg = fm.findMessage(resId); + currentMsg = fm.loadMessage(resId); if (currentMsg != null) { showThreadView(ureq, currentMsg, null); scrollToCurrentMessage(); @@ -472,7 +472,7 @@ public class ForumController extends BasicController implements GenericEventList Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command); Long messageId = (Long) messageMap.get("id"); - Message updatedMessage = fm.findMessage(messageId); + Message updatedMessage = fm.loadMessage(messageId); if (updatedMessage!=null) { currentMsg = updatedMessage; // now dispatch the commands @@ -584,7 +584,7 @@ public class ForumController extends BasicController implements GenericEventList msgEditCtr.persistTempUploadedFiles(currentMsg); } else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_EDITMSG)){ // edit done -> save - Message updatedMessage = fm.findMessage(currentMsg.getKey()); + Message updatedMessage = fm.loadMessage(currentMsg.getKey()); if(updatedMessage!=null) { doEditMessage(ureq); //file persisting is done already, as a msg-key was known during edit. @@ -593,7 +593,7 @@ public class ForumController extends BasicController implements GenericEventList } } else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_REPLYMSG)){ // reply done -> save - Message updatedMessage = fm.findMessage(currentMsg.getKey()); + Message updatedMessage = fm.loadMessage(currentMsg.getKey()); if(updatedMessage!=null) { doReplyMessage(ureq); msgEditCtr.persistTempUploadedFiles(currentMsg); diff --git a/src/main/java/org/olat/modules/fo/ForumManager.java b/src/main/java/org/olat/modules/fo/ForumManager.java index 9123c2a268c..05be5bc980b 100644 --- a/src/main/java/org/olat/modules/fo/ForumManager.java +++ b/src/main/java/org/olat/modules/fo/ForumManager.java @@ -395,13 +395,13 @@ public class ForumManager extends BasicManager { * @return the message with the given messageKey */ public Message loadMessage(Long messageKey) { - Message msg = doloadMessage(messageKey); - return msg; - } - - private Message doloadMessage(Long messageKey) { - Message msg = DBFactory.getInstance().loadObject(MessageImpl.class, messageKey); - return msg; + StringBuilder sb = new StringBuilder(); + sb.append("select msg from ").append(MessageImpl.class.getName()).append(" msg where msg.key=:messageKey"); + List<Message> messages = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Message.class) + .setParameter("messageKey", messageKey) + .getResultList(); + return messages == null || messages.isEmpty() ? null : messages.get(0); } private void saveMessage(Message m) { @@ -576,10 +576,6 @@ public class ForumManager extends BasicManager { return fContainer; } - public Message findMessage(Long messageId) { - return DBFactory.getInstance().findObject(MessageImpl.class, messageId); - } - /** * Splits the current thread starting from the current message. * It updates the messages of the selected subthread by setting the Parent and the Threadtop. @@ -710,7 +706,7 @@ public class ForumManager extends BasicManager { */ public void markAsRead(Identity identity,Message msg) { //Check if the message was not already deleted - Message retrievedMessage = findMessage(msg.getKey()); + Message retrievedMessage = loadMessage(msg.getKey()); if(retrievedMessage!=null) { ReadMessageImpl readMessage = new ReadMessageImpl(); readMessage.setIdentity(identity); -- GitLab