Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java =================================================================== diff -u -r8a8c14627918cc58fa845c2369937bc482d2f6b9 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java (.../MessageDTO.java) (revision 8a8c14627918cc58fa845c2369937bc482d2f6b9) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java (.../MessageDTO.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -59,7 +59,6 @@ private String attachmentLocalUrl; private int newPostingsNum; - private Date lastTopicDate; /** * Get a MessageDTO instance from a given Message. @@ -233,12 +232,4 @@ public int getNewPostingsNum() { return newPostingsNum; } - - public void setLastTopicDate(Date lastTopicDate) { - this.lastTopicDate = lastTopicDate; - } - - public Date getLastTopicDate() { - return lastTopicDate; - } } Fisheye: Tag 901372af1b71238311d32a55f25ec8ba637bf5ca refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumReportDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java =================================================================== diff -u -r4927ee743a679c87a515436a0cc289b8bbc84ccd -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 4927ee743a679c87a515436a0cc289b8bbc84ccd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -94,21 +94,21 @@ try { msg = (Message) super.clone(); msg.setUid(null); - //it is not necessary to deep clone following comment fields. - //don't deep clone forum to avoid dead loop in clone -// if(parent != null){ -// msg.parent = (Message) parent.clone(); -// //try to keep parent uid, so avoid persistant a new instance in database for parent message -// msg.parent.uid = parent.uid; -// } -// if(toolSession != null){ -// msg.toolSession = (ForumToolSession) toolSession.clone(); -// } -// if(createdBy != null){ -// msg.createdBy = (ForumUser) createdBy.clone(); -// } -// if(modifiedBy != null) -// msg.modifiedBy = (ForumUser) modifiedBy.clone(); + // it is not necessary to deep clone following comment fields. + // don't deep clone forum to avoid dead loop in clone + // if(parent != null){ + // msg.parent = (Message) parent.clone(); + // //try to keep parent uid, so avoid persistant a new instance in database for parent message + // msg.parent.uid = parent.uid; + // } + // if(toolSession != null){ + // msg.toolSession = (ForumToolSession) toolSession.clone(); + // } + // if(createdBy != null){ + // msg.createdBy = (ForumUser) createdBy.clone(); + // } + // if(modifiedBy != null) + // msg.modifiedBy = (ForumUser) modifiedBy.clone(); // clone attachment if (attachments != null) { Iterator iter = attachments.iterator(); @@ -129,7 +129,7 @@ return msg; } - + public Object updateClone(Message clone) { clone.setBody(this.getBody()); @@ -145,8 +145,8 @@ clone.setSubject(this.getSubject()); clone.setToolContentHandler(this.getToolContentHandler()); clone.setUpdated(clone.getUpdated()); - - // Update the attachments. Easiest way is to recopy them - which does NOT copy them in the content repository. + + // Update the attachments. Easiest way is to recopy them - which does NOT copy them in the content repository. clone.getAttachments().clear(); if (attachments != null) { Iterator iter = attachments.iterator(); @@ -170,7 +170,7 @@ } this.setUpdated(new Date(now)); } - + public boolean equals(Object o) { if (this == o) return true; @@ -184,19 +184,18 @@ return new EqualsBuilder() // .append(this.uid,genericEntity.getUid()) .append(this.subject, genericEntity.getSubject()) - .append(this.body,genericEntity.getBody()) - .append(this.replyNumber,genericEntity.getReplyNumber()) - //.append(this.lastReplyDate,genericEntity.lastReplyDate) - //.append(this.created,genericEntity.created) - //.append(this.updated,genericEntity.updated) - .append(this.createdBy,genericEntity.getCreatedBy()) - .append(this.modifiedBy,genericEntity.getModifiedBy()) - .isEquals(); + .append(this.body, genericEntity.getBody()) + .append(this.replyNumber, genericEntity.getReplyNumber()) + // .append(this.lastReplyDate,genericEntity.lastReplyDate) + // .append(this.created,genericEntity.created) + // .append(this.updated,genericEntity.updated) + .append(this.createdBy, genericEntity.getCreatedBy()) + .append(this.modifiedBy, genericEntity.getModifiedBy()).isEquals(); } public int hashCode() { - return new HashCodeBuilder().append(uid).append(subject).append(body).append(created).append(updated).append( - createdBy).append(modifiedBy).toHashCode(); + return new HashCodeBuilder().append(uid).append(subject).append(body).append(created).append(updated) + .append(createdBy).append(modifiedBy).toHashCode(); } // ********************************************************** @@ -419,14 +418,15 @@ public void setParent(Message parent) { this.parent = parent; } + /** * @hibernate.many-to-one column="parent_uid" * @return */ public Message getParent() { - return parent; + return parent; } - + /** * @return a set of Attachments to this Message. * Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageDao.java =================================================================== diff -u -rcd8c61889043c1314d651b9df0956d7e800436de -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageDao.java (.../MessageDao.java) (revision cd8c61889043c1314d651b9df0956d7e800436de) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageDao.java (.../MessageDao.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -21,7 +21,7 @@ * **************************************************************** */ -/* $$Id$$ */ +/* $$Id$$ */ package org.lamsfoundation.lams.tool.forum.persistence; @@ -34,112 +34,107 @@ * @author conradb */ public class MessageDao extends HibernateDaoSupport { - private static final String SQL_QUERY_FIND_ROOT_TOPICS = "from " + Message.class.getName() +" m " - + " where parent_uid is null and m.toolSession.sessionId=?"; - - private static final String SQL_QUERY_FIND_TOPICS_FROM_AUTHOR = "from " + Message.class.getName() - + " where is_authored = true and forum_uid=? order by create_date"; - - private static final String SQL_QUERY_FIND_CHILDREN = "from " + Message.class.getName() - + " where parent_uid=?"; - - private static final String SQL_QUERY_BY_USER_SESSION = "from " + Message.class.getName() + " m " - + " where m.createdBy.uid = ? and m.toolSession.sessionId=?"; - - private static final String SQL_QUERY_BY_SESSION = "from " + Message.class.getName() + " m " - + " where m.toolSession.sessionId=?"; - - private static final String SQL_QUERY_TOPICS_NUMBER_BY_USER_SESSION = "select count(*) from " + Message.class.getName() + " m " - + " where m.createdBy.userId=? and m.toolSession.sessionId=? and m.isAuthored = false"; - - private static final String SQL_QUERY_LAST_TOPIC_DATE_BY_MESSAGE = " select m.updated from " + Message.class.getName() + " m " - + " where m.uid IN (select seq.message.uid FROM " + MessageSeq.class.getName() - + " seq WHERE seq.rootMessage.uid = ?) order by m.updated desc "; - - public void saveOrUpdate(Message message) { - message.updateModificationData(); - - this.getHibernateTemplate().saveOrUpdate(message); - } - - public void update(Message message) { - this.getHibernateTemplate().saveOrUpdate(message); - } + private static final String SQL_QUERY_FIND_ROOT_TOPICS = "from " + Message.class.getName() + " m " + + " where parent_uid is null and m.toolSession.sessionId=?"; - public Message getById(Long messageId) { - return (Message) getHibernateTemplate().get(Message.class,messageId); - } - /** - * Get all root (first level) topics in a special Session. - * @param sessionId - * @return - */ - public List getRootTopics(Long sessionId) { - return this.getHibernateTemplate().find(SQL_QUERY_FIND_ROOT_TOPICS, sessionId); - } - /** - * Get all message posted by author role in a special forum. - * @param forumUid - * @return - */ - public List getTopicsFromAuthor(Long forumUid) { - return this.getHibernateTemplate().find(SQL_QUERY_FIND_TOPICS_FROM_AUTHOR, forumUid); - } + private static final String SQL_QUERY_FIND_TOPICS_FROM_AUTHOR = "from " + Message.class.getName() + + " where is_authored = true and forum_uid=? order by create_date"; - public void delete(Long uid) { - Message msg = getById(uid); - if(msg != null){ - this.getHibernateTemplate().delete(msg); - } + private static final String SQL_QUERY_FIND_CHILDREN = "from " + Message.class.getName() + " where parent=?"; + + private static final String SQL_QUERY_BY_USER_SESSION = "from " + Message.class.getName() + " m " + + " where m.createdBy.uid = ? and m.toolSession.sessionId=?"; + + private static final String SQL_QUERY_BY_SESSION = "from " + Message.class.getName() + " m " + + " where m.toolSession.sessionId=?"; + + private static final String SQL_QUERY_TOPICS_NUMBER_BY_USER_SESSION = "select count(*) from " + + Message.class.getName() + " m " + + " where m.createdBy.userId=? and m.toolSession.sessionId=? and m.isAuthored = false"; + + public void saveOrUpdate(Message message) { + this.getHibernateTemplate().saveOrUpdate(message); + } + + public void update(Message message) { + this.getHibernateTemplate().saveOrUpdate(message); + } + + public Message getById(Long messageId) { + return (Message) getHibernateTemplate().get(Message.class, messageId); + } + + /** + * Get all root (first level) topics in a special Session. + * + * @param sessionId + * @return + */ + public List getRootTopics(Long sessionId) { + return this.getHibernateTemplate().find(SQL_QUERY_FIND_ROOT_TOPICS, sessionId); + } + + /** + * Get all message posted by author role in a special forum. + * + * @param forumUid + * @return + */ + public List getTopicsFromAuthor(Long forumUid) { + return this.getHibernateTemplate().find(SQL_QUERY_FIND_TOPICS_FROM_AUTHOR, forumUid); + } + + public void delete(Long uid) { + Message msg = getById(uid); + if (msg != null) { + this.getHibernateTemplate().delete(msg); } - /** - * Get all children message from the given parent topic ID. - * @param parentId - * @return - */ - public List getChildrenTopics(Long parentId) { - return this.getHibernateTemplate().find(SQL_QUERY_FIND_CHILDREN, parentId); - } - /** - * Get all messages according to special user and session. - * @param userUid - * @param sessionId - * @return - */ - public List getByUserAndSession(Long userUid, Long sessionId) { - return this.getHibernateTemplate().find(SQL_QUERY_BY_USER_SESSION, new Object[]{userUid,sessionId}); - } - /** - * Get all messages according to special session. - * @param sessionId - * @return - */ - public List getBySession(Long sessionId) { - return this.getHibernateTemplate().find(SQL_QUERY_BY_SESSION, sessionId); - } - /** - * Return how many post from this user and session. DOES NOT include posts from author. - * @param userID - * @param sessionId - * @return - */ - public int getTopicsNum(Long userID, Long sessionId) { - List list = this.getHibernateTemplate().find(SQL_QUERY_TOPICS_NUMBER_BY_USER_SESSION,new Object[]{userID,sessionId}); - if(list != null && list.size() > 0) - return ((Number)list.get(0)).intValue(); - else - return 0; - } - /** - * Return date of the last posting in a thread - * @param messageID - * @return - */ - public Date getLastTopicDate(Long messageID) { - List list = this.getHibernateTemplate().find(SQL_QUERY_LAST_TOPIC_DATE_BY_MESSAGE, new Object[]{messageID}); - if(list != null && list.size() > 0) - return ((Date) list.get(0)); - else - return new Date(); - } + } + + /** + * Get all children message from the given parent topic ID. + * + * @param parentId + * @return + */ + public List getChildrenTopics(Long parentId) { + return this.getHibernateTemplate().find(SQL_QUERY_FIND_CHILDREN, parentId); + } + + /** + * Get all messages according to special user and session. + * + * @param userUid + * @param sessionId + * @return + */ + public List getByUserAndSession(Long userUid, Long sessionId) { + return this.getHibernateTemplate().find(SQL_QUERY_BY_USER_SESSION, new Object[] { userUid, sessionId }); + } + + /** + * Get all messages according to special session. + * + * @param sessionId + * @return + */ + public List getBySession(Long sessionId) { + return this.getHibernateTemplate().find(SQL_QUERY_BY_SESSION, sessionId); + } + + /** + * Return how many post from this user and session. DOES NOT include posts from author. + * + * @param userID + * @param sessionId + * @return + */ + public int getTopicsNum(Long userID, Long sessionId) { + List list = this.getHibernateTemplate().find(SQL_QUERY_TOPICS_NUMBER_BY_USER_SESSION, + new Object[] { userID, sessionId }); + if (list != null && list.size() > 0) + return ((Number) list.get(0)).intValue(); + else + return 0; + } } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageSeqDao.java =================================================================== diff -u -racc8d2acf5b6b0002e0c8129947040a779ab4077 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageSeqDao.java (.../MessageSeqDao.java) (revision acc8d2acf5b6b0002e0c8129947040a779ab4077) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageSeqDao.java (.../MessageSeqDao.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -25,6 +25,7 @@ package org.lamsfoundation.lams.tool.forum.persistence; +import java.util.Date; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; @@ -38,15 +39,17 @@ private static final String SQL_QUERY_NUM_POSTS_BY_TOPIC = "select count(*) from " + MessageSeq.class.getName() + " ms where ms.message.createdBy.userId=? and ms.message.isAuthored = false and ms.rootMessage.uid=?"; + private static final String SQL_QUERY_NUM_POSTS_BY_ROOT_MESSAGE_AND_DATE = "SELECT count(*) FROM " + + MessageSeq.class.getName() + " seq WHERE seq.rootMessage.uid = ? AND seq.message.updated > ?"; + public List getTopicThread(Long rootTopicId) { return this.getHibernateTemplate().find(SQL_QUERY_FIND_TOPIC_THREAD, rootTopicId); } public MessageSeq getByTopicId(Long messageId) { List list = this.getHibernateTemplate().find(SQL_QUERY_FIND_TOPIC_ID, messageId); - if (list == null || list.isEmpty()) { + if (list == null || list.isEmpty()) return null; - } return (MessageSeq) list.get(0); } @@ -56,15 +59,33 @@ public void deleteByTopicId(Long topicUid) { MessageSeq seq = getByTopicId(topicUid); - if (seq != null) { + if (seq != null) this.getHibernateTemplate().delete(seq); - } } public int getNumOfPostsByTopic(Long userID, Long topicID) { List list = this.getHibernateTemplate().find(SQL_QUERY_NUM_POSTS_BY_TOPIC, new Object[] { userID, topicID }); - if (list != null && list.size() > 0) { + if (list != null && list.size() > 0) return ((Number) list.get(0)).intValue(); + else + return 0; + } + + /** + * Get number of messages newer than specified date. + * + * @param rootMessageId + * @param userId + * @return + */ + public int getNumOfPostsNewerThan(Long rootMessageId, Date date) { + + // user views forum not the first time + List messages = this.getHibernateTemplate().find(SQL_QUERY_NUM_POSTS_BY_ROOT_MESSAGE_AND_DATE, + new Object[] { rootMessageId, date }); + + if (messages != null && messages.size() > 0) { + return ((Number) messages.get(0)).intValue(); } else { return 0; } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/TimestampDao.java =================================================================== diff -u -rb5af051561cba50d0c72d74c66a19e7e9e403396 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/TimestampDao.java (.../TimestampDao.java) (revision b5af051561cba50d0c72d74c66a19e7e9e403396) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/TimestampDao.java (.../TimestampDao.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -24,6 +24,7 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.forum.persistence; +import java.util.Date; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; @@ -34,18 +35,9 @@ */ public class TimestampDao extends HibernateDaoSupport { - /* 0 if user opens forum first time; otherwise >0 */ - private static final String SQL_QUERY_FIRST_TIME_BY_MESSAGE_USER = - " SELECT count(*) FROM " + Timestamp.class.getName() + " ts WHERE ts.message.uid = ? AND ts.forumUser.uid = ? "; + private static final String GET_TIMESTAMP_BY_MESSAGE_AND_USER = " FROM " + Timestamp.class.getName() + + " ts WHERE ts.message.uid = ? AND ts.forumUser.uid = ? "; - private static final String SQL_QUERY_TIMESTAMP_BY_MESSAGE_USER = - " FROM " + Timestamp.class.getName() + " ts WHERE ts.message.uid = ? AND ts.forumUser.uid = ? "; - - private static final String SQL_QUERY_MESSAGE_NUMBER_BY_MESSAGE_USER = - "SELECT count(*) FROM " + Message.class.getName() + " mes WHERE mes.uid IN (SELECT seq.message.uid FROM " + - MessageSeq.class.getName() + " seq WHERE seq.rootMessage.uid = ?) " + " AND mes.updated > (SELECT ts.timestamp FROM " + - Timestamp.class.getName() + " ts WHERE ts.message.uid = ? AND ts.forumUser.uid = ?)"; - public void delete(Timestamp timestamp) { this.getHibernateTemplate().delete(timestamp); } @@ -68,39 +60,11 @@ * @return */ public Timestamp getTimestamp(Long messageId, Long forumUserId) { - List timestampList = this.getHibernateTemplate().find(SQL_QUERY_TIMESTAMP_BY_MESSAGE_USER, new Object[]{messageId, forumUserId}); + List timestampList = this.getHibernateTemplate().find(GET_TIMESTAMP_BY_MESSAGE_AND_USER, new Object[]{messageId, forumUserId}); if (timestampList != null && timestampList.size() > 0) return (Timestamp) (timestampList.get(0)); else return null; } - /** - * Get number of new postings. - * - * @param messageId - * @param userId - * @return - */ - public int getNewMessagesNum(Long messageId, Long userId) { - List firstTimeList = this.getHibernateTemplate().find(SQL_QUERY_FIRST_TIME_BY_MESSAGE_USER, new Object[]{messageId, userId}); - if (firstTimeList != null && firstTimeList.size() > 0) - { - if (((Number)firstTimeList.get(0)).intValue() > 0) // if not first time - { - List postingsList = this.getHibernateTemplate().find(SQL_QUERY_MESSAGE_NUMBER_BY_MESSAGE_USER, - new Object[]{messageId, messageId, userId}); - - if(postingsList != null && postingsList.size() > 0) - return ((Number)postingsList.get(0)).intValue(); - else - return 0; - } - else - return -1; // user views forum for the first time - } - else - return 0; - } - } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r8a8c14627918cc58fa845c2369937bc482d2f6b9 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 8a8c14627918cc58fa845c2369937bc482d2f6b9) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -87,7 +87,6 @@ import org.lamsfoundation.lams.tool.forum.persistence.ForumDao; import org.lamsfoundation.lams.tool.forum.persistence.ForumException; import org.lamsfoundation.lams.tool.forum.persistence.ForumReport; -import org.lamsfoundation.lams.tool.forum.persistence.ForumReportDAO; import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSessionDao; import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; @@ -142,8 +141,6 @@ private ForumToolSessionDao forumToolSessionDao; - private ForumReportDAO forumReportDAO; - // system level handler and service private ILamsToolService toolService; @@ -168,11 +165,11 @@ private IGradebookService gradebookService; private IEventNotificationService eventNotificationService; - + private ILessonService lessonService; - + private IActivityDAO activityDAO; - + private Random generator = new Random(); // --------------------------------------------------------------------- @@ -248,11 +245,13 @@ while (iter.hasNext()) { Message clone = (Message) iter.next(); message.updateClone(clone); + clone.updateModificationData(); messageDao.saveOrUpdate(clone); } } // create message in database + message.updateModificationData(); messageDao.saveOrUpdate(message); return message; @@ -261,20 +260,20 @@ public Message updateTopic(Message message) throws PersistenceException { // update message + message.updateModificationData(); messageDao.saveOrUpdate(message); - // udate root message's lastReply date if this message - // if this message is root message, then actually, it will update itself lastReplayDate + // udate root message's lastReplyDate MessageSeq msgSeq = messageSeqDao.getByTopicId(message.getUid()); Message root = msgSeq.getRootMessage(); - // update reply date - // messageDao.saveOrUpdate(root); // do not update date of root posting + root.setLastReplyDate(new Date()); + messageDao.saveOrUpdate(root); return message; } - public void updateReport(ForumReport report) { - forumReportDAO.saveObject(report); + public void updateContainedReport(Message message) { + messageDao.saveOrUpdate(message); } public Message updateMessageHideFlag(Long messageId, boolean hideFlag) { @@ -307,7 +306,7 @@ public void deleteTopic(Long topicUid) throws PersistenceException { Message topic = messageDao.getById(topicUid); - + // cascade delete children topic by recursive List children = messageDao.getChildrenTopics(topicUid); if (children != null) { @@ -317,12 +316,12 @@ this.deleteTopic(msg.getUid()); } } - + // recursively delete clones for (Message clone : (Set) topic.getSessionClones()) { this.deleteTopic(clone.getUid()); } - + messageSeqDao.deleteByTopicId(topicUid); messageDao.delete(topicUid); } @@ -339,6 +338,7 @@ // parent sessionID maybe empty if created by author role. So given sessionId is exactly value. ForumToolSession session = getSessionBySessionId(sessionId); replyMessage.setToolSession(session); + replyMessage.updateModificationData(); messageDao.saveOrUpdate(replyMessage); // get root topic and create record in MessageSeq table @@ -354,11 +354,11 @@ msgSeq.setRootMessage(root); messageSeqDao.save(msgSeq); - // update last reply date for root messagegetlas + // update last reply date for root message root.setLastReplyDate(new Date()); // update reply message number for root root.setReplyNumber(root.getReplyNumber() + 1); - // messageDao.saveOrUpdate(root); // do not update the date of root posting + messageDao.saveOrUpdate(root); return replyMessage; } @@ -388,9 +388,9 @@ * repository * * @param uuid - * The uuid of the node to be deleted + * The uuid of the node to be deleted * @param versionID - * The version_id of the node to be deleted. + * The version_id of the node to be deleted. * @throws SubmitFilesException */ public void deleteFromRepository(Long uuid, Long versionID) throws ForumException { @@ -444,7 +444,7 @@ // sort by sequence id Set topicSet = new TreeSet(new MessageDtoComparator()); topicSet.addAll(messageDTOs); - + topicsBySession.clear(); topicsBySession.addAll(topicSet); return topicsBySession; @@ -819,9 +819,9 @@ * Export the XML fragment for the tool's content, along with any files needed for the content. * * @throws DataMissingException - * if no tool content matches the toolSessionId + * if no tool content matches the toolSessionId * @throws ToolException - * if any other error occurs + * if any other error occurs */ public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { @@ -866,7 +866,7 @@ * Import the XML fragment for the tool's content, along with any files needed for the content. * * @throws ToolException - * if any other error occurs + * if any other error occurs */ public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath, String fromVersion, String toVersion) throws ToolException { @@ -1333,14 +1333,6 @@ this.userManagementService = userManagementService; } - public ForumReportDAO getForumReportDAO() { - return forumReportDAO; - } - - public void setForumReportDAO(ForumReportDAO forumReportDAO) { - this.forumReportDAO = forumReportDAO; - } - public ICoreNotebookService getCoreNotebookService() { return coreNotebookService; } @@ -1397,63 +1389,53 @@ * @param userId * @return */ - public int getNewMessagesNum(Long messageId, Long userId) { - return timestampDao.getNewMessagesNum(messageId, userId); + public int getNewMessagesNum(Message message, Long userId) { + + Timestamp timestamp = timestampDao.getTimestamp(message.getUid(), userId); + if (timestamp == null) { + // if first time - show all postings as new, including root message + return message.getReplyNumber() + 1; + } else { + return messageSeqDao.getNumOfPostsNewerThan(message.getUid(), timestamp.getTimestamp()); + } } - /** - * Get last topic date. - * - * @param messageId - * @return - */ - public Date getLastTopicDate(Long messageId) { - return messageDao.getLastTopicDate(messageId); - } - - /** - * Get timestamp. - * - * @param messageId - * @param forumUserId - * @return - */ - public Timestamp getTimestamp(Long MessageId, Long forumUserId) throws PersistenceException { - return timestampDao.getTimestamp(MessageId, forumUserId); - } - - /** - * Save timestamp. - * - * @param timestamp - * @return - */ - public void saveTimestamp(Timestamp timestamp) { + public void saveTimestamp(Long rootTopicId, ForumUser forumUser) { + Timestamp timestamp = timestampDao.getTimestamp(rootTopicId, forumUser.getUid()); + if (timestamp != null) { + timestamp.setTimestamp(new Date()); + } else { + timestamp = new Timestamp(); + timestamp.setMessage(getMessage(rootTopicId)); + timestamp.setTimestamp(new Date()); + timestamp.setForumUser(forumUser); + } timestampDao.saveOrUpdate(timestamp); } - + public void sendNotificationsOnNewPosting(Long forumId, Long sessionId, Message message) { Forum forum = getForum(forumId); ForumUser postAuthor = message.getCreatedBy(); String fullName = postAuthor.getLastName() + " " + postAuthor.getFirstName(); ToolSession toolSession = toolService.getToolSession(sessionId); Long activityId = toolSession.getToolActivity().getActivityId(); ToolActivity activity = (ToolActivity) activityDAO.getActivityByActivityId(activityId, ToolActivity.class); - + if (forum.isNotifyLearnersOnForumPosting()) { List learners = lessonService.getLearnersHaveAttemptedActivity(activity); if (learners != null && !learners.isEmpty()) { ArrayList learnerIds = new ArrayList(); for (User learner : learners) { learnerIds.add(learner.getUserId().longValue()); } - - getEventNotificationService().sendMessage(learnerIds.toArray(new Long[0]), DeliveryMethodMail.getInstance(), + + getEventNotificationService().sendMessage(learnerIds.toArray(new Long[0]), + DeliveryMethodMail.getInstance(), getLocalisedMessage("event.newposting.subject", new Object[] { forum.getTitle() }), getLocalisedMessage("event.newposting.body", new Object[] { fullName, message.getBody() })); } } - + if (forum.isNotifyTeachersOnForumPosting()) { List monitoringUsers = lessonService.getMonitorsByToolSessionId(sessionId); if (monitoringUsers != null && !monitoringUsers.isEmpty()) { @@ -1462,7 +1444,8 @@ monitoringUsersIds.add(monitoringUser.getUserId().longValue()); } - getEventNotificationService().sendMessage(monitoringUsersIds.toArray(new Long[0]), DeliveryMethodMail.getInstance(), + getEventNotificationService().sendMessage(monitoringUsersIds.toArray(new Long[0]), + DeliveryMethodMail.getInstance(), getLocalisedMessage("event.newposting.subject", new Object[] { forum.getTitle() }), getLocalisedMessage("event.newposting.body", new Object[] { fullName, message.getBody() })); } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java =================================================================== diff -u -r8a8c14627918cc58fa845c2369937bc482d2f6b9 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision 8a8c14627918cc58fa845c2369937bc482d2f6b9) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -116,34 +116,17 @@ * @param userId * @return */ - public int getNewMessagesNum(Long messageId, Long userId); + int getNewMessagesNum(Message message, Long userId); /** - * Get last topic date. + * Saves timestamp * - * @param messageId - * @return + * @param rootTopicId + * @param forumUser */ - public Date getLastTopicDate(Long messageId); + void saveTimestamp(Long rootTopicId, ForumUser forumUser); /** - * Get timestamp. - * - * @param messageId - * @param forumUserId - * @return - */ - public Timestamp getTimestamp(Long MessageId, Long forumUserId); - - /** - * Save timestamp. - * - * @param timestamp - * @return - */ - public void saveTimestamp(Timestamp timestamp); - - /** * Create a root topic. * * @param forumId @@ -355,11 +338,11 @@ public ForumUser getUserByID(Long userId); /** - * Update forum message report. + * Update report contained inside specified message. * - * @param report + * @param message specified message */ - public void updateReport(ForumReport report); + void updateContainedReport(Message message); // ************************************************************************************ // Report Method Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java =================================================================== diff -u -r8a8c14627918cc58fa845c2369937bc482d2f6b9 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision 8a8c14627918cc58fa845c2369937bc482d2f6b9) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -258,12 +258,21 @@ } // get all root topic to display on init page - List rootTopics = forumService.getRootTopics(sessionId); + List rootTopics = forumService.getRootTopics(sessionId); if (!forum.isAllowNewTopic()) { // add the number post the learner has made for each topic. - updateNumOfPosts(rootTopics, forumUser); + for (MessageDTO messageDTO : rootTopics) { + int numOfPosts = forumService.getNumOfPostsByTopic(forumUser.getUserId(), messageDTO.getMessage().getUid()); + messageDTO.setNumOfPosts(numOfPosts); + } } request.setAttribute(ForumConstants.AUTHORING_TOPICS_LIST, rootTopics); + + // update new messages number + for (MessageDTO messageDTO : rootTopics) { + int numOfNewPosts = forumService.getNewMessagesNum(messageDTO.getMessage(), forumUser.getUid()); + messageDTO.setNewPostingsNum(numOfNewPosts); + } if (forum.isNotifyLearnersOnMarkRelease()) { forumService.getEventNotificationService().createEvent(ForumConstants.TOOL_SIGNATURE, @@ -277,30 +286,9 @@ IEventNotificationService.PERIODICITY_SINGLE); } - // displaying new postings - for (Iterator iterator = rootTopics.iterator(); iterator.hasNext();) { - MessageDTO messageDTO = (MessageDTO) iterator.next(); - int numOfNewPosts = forumService.getNewMessagesNum(messageDTO.getMessage().getUid(), forumUser.getUid()); - if (numOfNewPosts == -1) { - messageDTO.setNewPostingsNum(messageDTO.getMessage().getReplyNumber() + 1); - } else { - messageDTO.setNewPostingsNum(numOfNewPosts); - } - - messageDTO.setLastTopicDate(forumService.getLastTopicDate(messageDTO.getMessage().getUid())); - } - return mapping.findForward("success"); } - private void updateNumOfPosts(List rootTopics, ForumUser forumUser) { - for (Iterator iterator = rootTopics.iterator(); iterator.hasNext();) { - MessageDTO messageDTO = (MessageDTO) iterator.next(); - int numOfPosts = forumService.getNumOfPostsByTopic(forumUser.getUserId(), messageDTO.getMessage().getUid()); - messageDTO.setNumOfPosts(numOfPosts); - } - } - /** * Learner click "finish" button in forum page, this method will turn on session status flag for this learner. * @@ -484,41 +472,12 @@ sessionMap.put(ForumConstants.ATTR_HIDE_REFLECTION, hideReflection); // Saving or updating user timestamp - saveUserTimestamp(rootTopicId, forumUser); + forumService.saveTimestamp(rootTopicId, forumUser); return mapping.findForward("success"); } /** - * Saving user timestamp - * - * @param toorTopicId - * @param forumUser - * @return - */ - private void saveUserTimestamp(Long rootTopicId, ForumUser forumUser) { - Date curDate = new Date(); - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - try { - curDate = dateFormat.parse(dateFormat.format(new Date())); - } catch (ParseException pe) { - pe.printStackTrace(); - } - - Timestamp timestamp = forumService.getTimestamp(rootTopicId, forumUser.getUid()); - if (timestamp != null) { - timestamp.setTimestamp(curDate); - forumService.saveTimestamp(timestamp); - } else { - timestamp = new Timestamp(); - timestamp.setMessage(forumService.getMessage(rootTopicId)); - timestamp.setTimestamp(curDate); - timestamp.setForumUser(forumUser); - forumService.saveTimestamp(timestamp); - } - } - - /** * Display empty page for a new topic in forum * * @param mapping @@ -581,17 +540,12 @@ request.setAttribute(ForumConstants.AUTHORING_TOPICS_LIST, rootTopics); request.setAttribute(ForumConstants.ATTR_SESSION_MAP_ID, messageForm.getSessionMapID()); - saveUserTimestamp(message.getUid(), forumUser); + forumService.saveTimestamp(message.getUid(), forumUser); + //update new messages number for (MessageDTO messageDTO : rootTopics) { - int numOfNewPosts = forumService.getNewMessagesNum(messageDTO.getMessage().getUid(), forumUser.getUid()); - if (numOfNewPosts == -1) { - messageDTO.setNewPostingsNum(messageDTO.getMessage().getReplyNumber() + 1); - } else { - messageDTO.setNewPostingsNum(numOfNewPosts); - } - - messageDTO.setLastTopicDate(forumService.getLastTopicDate(messageDTO.getMessage().getUid())); + int numOfNewPosts = forumService.getNewMessagesNum(messageDTO.getMessage(), forumUser.getUid()); + messageDTO.setNewPostingsNum(numOfNewPosts); } // notify learners and teachers @@ -701,7 +655,7 @@ sessionMap.remove(ForumConstants.ATTR_ORIGINAL_MESSAGE); // Saving or updating user timestamp - saveUserTimestamp(rootTopicId, forumUser); + forumService.saveTimestamp(rootTopicId, forumUser); // notify learners and teachers Long forumId = (Long) sessionMap.get(ForumConstants.FORUM_ID); @@ -841,7 +795,7 @@ request.setAttribute(ForumConstants.ATTR_SESSION_MAP_ID, messageForm.getSessionMapID()); // Saving or updating user timestamp - saveUserTimestamp(rootTopicId, forumUser); + forumService.saveTimestamp(rootTopicId, forumUser); return mapping.findForward("success"); } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java =================================================================== diff -u -r1201a49ea259a27ba1f79763f898b8d1cdd2fa08 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision 1201a49ea259a27ba1f79763f898b8d1cdd2fa08) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/MonitoringAction.java (.../MonitoringAction.java) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -774,7 +774,7 @@ report.setMark(mark); report.setComment(markForm.getComment()); - forumService.updateTopic(msg); + forumService.updateContainedReport(msg); //echo back to topic list page: it depends which screen is come from: view special user mark, or view all user marks. if (StringUtils.equals(updateMode, ForumConstants.MARK_UPDATE_FROM_SESSION)) { Index: lams_tool_forum/web/jsps/learning/message/topiclist.jsp =================================================================== diff -u -reea99da9ecb3f73e1fc70d6b8d393dafd3b1f1e3 -r901372af1b71238311d32a55f25ec8ba637bf5ca --- lams_tool_forum/web/jsps/learning/message/topiclist.jsp (.../topiclist.jsp) (revision eea99da9ecb3f73e1fc70d6b8d393dafd3b1f1e3) +++ lams_tool_forum/web/jsps/learning/message/topiclist.jsp (.../topiclist.jsp) (revision 901372af1b71238311d32a55f25ec8ba637bf5ca) @@ -62,7 +62,7 @@ - +