Skip to content
Snippets Groups Projects
Commit 28402fc4 authored by srosse's avatar srosse
Browse files

OO-1346: use a query to load a specific message to prevent...

OO-1346: use a query to load a specific message to prevent EntityNotFoundException if the message was deleted
parent 9ac56100
No related branches found
No related tags found
No related merge requests found
...@@ -81,6 +81,7 @@ import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter; ...@@ -81,6 +81,7 @@ import org.olat.core.util.vfs.filters.VFSItemExcludePrefixFilter;
import org.olat.user.DisplayPortraitController; import org.olat.user.DisplayPortraitController;
import org.olat.user.UserInfoMainController; import org.olat.user.UserInfoMainController;
import org.olat.user.UserManager; import org.olat.user.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
/** /**
* *
...@@ -119,12 +120,15 @@ public class FilterForUserController extends BasicController { ...@@ -119,12 +120,15 @@ public class FilterForUserController extends BasicController {
private final OLATResourceable forumOres; private final OLATResourceable forumOres;
private final String thumbMapper; private final String thumbMapper;
@Autowired
private ForumManager forumManager;
public FilterForUserController(UserRequest ureq, WindowControl wControl, Forum forum) { public FilterForUserController(UserRequest ureq, WindowControl wControl, Forum forum) {
super(ureq, wControl); super(ureq, wControl);
this.forum = forum; this.forum = forum;
msgs = ForumManager.getInstance().getMessagesByForum(forum); msgs = forumManager.getMessagesByForum(forum);
forumOres = OresHelper.createOLATResourceableInstance(Forum.class,forum.getKey()); forumOres = OresHelper.createOLATResourceableInstance(Forum.class,forum.getKey());
mainVC = createVelocityContainer("filter_for_user"); mainVC = createVelocityContainer("filter_for_user");
...@@ -300,7 +304,7 @@ public class FilterForUserController extends BasicController { ...@@ -300,7 +304,7 @@ public class FilterForUserController extends BasicController {
Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command); Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command);
Long messageId = (Long) messageMap.get("id"); Long messageId = (Long) messageMap.get("id");
Message selectedMessage = ForumManager.getInstance().findMessage(messageId); Message selectedMessage = forumManager.loadMessage(messageId);
if (selectedMessage != null) { if (selectedMessage != null) {
if (command.startsWith("open_in_thread_")) { if (command.startsWith("open_in_thread_")) {
fireEvent(ureq, new OpenMessageInThreadEvent(selectedMessage)); fireEvent(ureq, new OpenMessageInThreadEvent(selectedMessage));
......
...@@ -330,7 +330,7 @@ public class ForumController extends BasicController implements GenericEventList ...@@ -330,7 +330,7 @@ public class ForumController extends BasicController implements GenericEventList
Long resId = ores.getResourceableId(); Long resId = ores.getResourceableId();
if (resId.longValue() != 0) { if (resId.longValue() != 0) {
if (isLogDebugEnabled()) logDebug("messageId=" , ores.getResourceableId().toString()); if (isLogDebugEnabled()) logDebug("messageId=" , ores.getResourceableId().toString());
currentMsg = fm.findMessage(ores.getResourceableId()); currentMsg = fm.loadMessage(ores.getResourceableId());
if (currentMsg != null) { if (currentMsg != null) {
showThreadView(ureq, currentMsg, null); showThreadView(ureq, currentMsg, null);
scrollToCurrentMessage(); scrollToCurrentMessage();
...@@ -399,7 +399,7 @@ public class ForumController extends BasicController implements GenericEventList ...@@ -399,7 +399,7 @@ public class ForumController extends BasicController implements GenericEventList
Long resId = entries.get(0).getOLATResourceable().getResourceableId(); Long resId = entries.get(0).getOLATResourceable().getResourceableId();
if (resId.longValue() != 0) { if (resId.longValue() != 0) {
currentMsg = fm.findMessage(resId); currentMsg = fm.loadMessage(resId);
if (currentMsg != null) { if (currentMsg != null) {
showThreadView(ureq, currentMsg, null); showThreadView(ureq, currentMsg, null);
scrollToCurrentMessage(); scrollToCurrentMessage();
...@@ -472,7 +472,7 @@ public class ForumController extends BasicController implements GenericEventList ...@@ -472,7 +472,7 @@ public class ForumController extends BasicController implements GenericEventList
Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command); Map<String, Object> messageMap = getMessageMapFromCommand(ureq.getIdentity(), command);
Long messageId = (Long) messageMap.get("id"); Long messageId = (Long) messageMap.get("id");
Message updatedMessage = fm.findMessage(messageId); Message updatedMessage = fm.loadMessage(messageId);
if (updatedMessage!=null) { if (updatedMessage!=null) {
currentMsg = updatedMessage; currentMsg = updatedMessage;
// now dispatch the commands // now dispatch the commands
...@@ -584,7 +584,7 @@ public class ForumController extends BasicController implements GenericEventList ...@@ -584,7 +584,7 @@ public class ForumController extends BasicController implements GenericEventList
msgEditCtr.persistTempUploadedFiles(currentMsg); msgEditCtr.persistTempUploadedFiles(currentMsg);
} else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_EDITMSG)){ } else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_EDITMSG)){
// edit done -> save // edit done -> save
Message updatedMessage = fm.findMessage(currentMsg.getKey()); Message updatedMessage = fm.loadMessage(currentMsg.getKey());
if(updatedMessage!=null) { if(updatedMessage!=null) {
doEditMessage(ureq); doEditMessage(ureq);
//file persisting is done already, as a msg-key was known during edit. //file persisting is done already, as a msg-key was known during edit.
...@@ -593,7 +593,7 @@ public class ForumController extends BasicController implements GenericEventList ...@@ -593,7 +593,7 @@ public class ForumController extends BasicController implements GenericEventList
} }
} else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_REPLYMSG)){ } else if (msgEditCtr.getLastEditModus().equals(MessageEditController.EDITMODE_REPLYMSG)){
// reply done -> save // reply done -> save
Message updatedMessage = fm.findMessage(currentMsg.getKey()); Message updatedMessage = fm.loadMessage(currentMsg.getKey());
if(updatedMessage!=null) { if(updatedMessage!=null) {
doReplyMessage(ureq); doReplyMessage(ureq);
msgEditCtr.persistTempUploadedFiles(currentMsg); msgEditCtr.persistTempUploadedFiles(currentMsg);
......
...@@ -395,13 +395,13 @@ public class ForumManager extends BasicManager { ...@@ -395,13 +395,13 @@ public class ForumManager extends BasicManager {
* @return the message with the given messageKey * @return the message with the given messageKey
*/ */
public Message loadMessage(Long messageKey) { public Message loadMessage(Long messageKey) {
Message msg = doloadMessage(messageKey); StringBuilder sb = new StringBuilder();
return msg; 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)
private Message doloadMessage(Long messageKey) { .setParameter("messageKey", messageKey)
Message msg = DBFactory.getInstance().loadObject(MessageImpl.class, messageKey); .getResultList();
return msg; return messages == null || messages.isEmpty() ? null : messages.get(0);
} }
private void saveMessage(Message m) { private void saveMessage(Message m) {
...@@ -576,10 +576,6 @@ public class ForumManager extends BasicManager { ...@@ -576,10 +576,6 @@ public class ForumManager extends BasicManager {
return fContainer; return fContainer;
} }
public Message findMessage(Long messageId) {
return DBFactory.getInstance().findObject(MessageImpl.class, messageId);
}
/** /**
* Splits the current thread starting from the current message. * Splits the current thread starting from the current message.
* It updates the messages of the selected subthread by setting the Parent and the Threadtop. * It updates the messages of the selected subthread by setting the Parent and the Threadtop.
...@@ -710,7 +706,7 @@ public class ForumManager extends BasicManager { ...@@ -710,7 +706,7 @@ public class ForumManager extends BasicManager {
*/ */
public void markAsRead(Identity identity,Message msg) { public void markAsRead(Identity identity,Message msg) {
//Check if the message was not already deleted //Check if the message was not already deleted
Message retrievedMessage = findMessage(msg.getKey()); Message retrievedMessage = loadMessage(msg.getKey());
if(retrievedMessage!=null) { if(retrievedMessage!=null) {
ReadMessageImpl readMessage = new ReadMessageImpl(); ReadMessageImpl readMessage = new ReadMessageImpl();
readMessage.setIdentity(identity); readMessage.setIdentity(identity);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment