Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Attachment.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Forum.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/ForumCondition.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/ForumConfigItem.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/ForumReport.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/ForumToolSession.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/ForumUser.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Message.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/MessageRating.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/MessageSeq.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/conf/hibernate/mappings/org/lamsfoundation/lams/tool/forum/persistence/Timestamp.hbm.xml'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/ForumConstants.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/ForumConstants.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/ForumConstants.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,219 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum; + +import java.util.regex.Pattern; + +/** + * User: conradb Date: 14/06/2005 Time: 10:33:00 + */ +public interface ForumConstants { + public static final String TOOL_SIGNATURE = "lafrum11"; + + public static final int SORT_BY_NO = 0; + public static final int SORT_BY_USER_NAME_ASC = 1; + public static final int SORT_BY_USER_NAME_DESC = 2; + public static final int SORT_BY_LAST_POSTING_ASC = 3; + public static final int SORT_BY_LAST_POSTING_DESC = 4; + public static final int SORT_BY_NUMBER_OF_POSTS_ASC = 5; + public static final int SORT_BY_NUMBER_OF_POSTS_DESC = 6; + public static final int SORT_BY_MARKED_ASC = 7; + public static final int SORT_BY_MARKED_DESC = 8; + + // See LDEV652 + // For old style (Fiona's description): The oldest topic is at the top, does not depends the reply date etc. + // For new style (Ernie's early desc): Most current popular forum used style: latest topics + // should be at the top, reply date will descide the order etc. + public static final boolean OLD_FORUM_STYLE = true; + + public static final int STATUS_CONTENT_COPYED = 1; + + public static final int SESSION_STATUS_FINISHED = 1; + + public final static String FORUM_SERVICE = "forumService"; + + public final static String CONTENT_HANDLER = "toolContentHandler"; + + public static final String AUTHORING_DTO = "authoring"; + + public static final String AUTHORING_TOPICS_LIST = "topicList"; + + public static final String AUTHORING_TOPICS_INDEX = "topicIndex"; + + public static final String AUTHORING_TOPIC_THREAD = "topicThread"; + + public static final String AUTHORING_TOPIC = "topic"; + + public static final String AUTHORING_FORUM = "forum"; + + public static final String DEFAULT_TITLE = "Forum"; + + // TODO:hard code!!! need to read from config + public static final String TOOL_URL_BASE = "/lams/tool/lafrum11/"; + + public static final String ATTR_FORUM_ID = "forum_id"; + + public static final String ATTR_FORUM_UID = "forumUid"; + + public static final String ATTR_ALLOW_EDIT = "allowEdit"; + + public static final String ATTR_ALLOW_UPLOAD = "allowUpload"; + + public static final String ATTR_ALLOW_NEW_TOPICS = "allowNewTopics"; + + public static final String ATTR_ALLOW_RICH_EDITOR = "allowRichEditor"; + + public static final String ATTR_ALLOW_RATE_MESSAGES = "allowRateMessages"; + + public static final String ATTR_ALLOW_ANONYMOUS = "allowAnonym"; + + public static final String ATTR_MINIMUM_RATE = "minimumRate"; + + public static final String ATTR_MAXIMUM_RATE = "maximumRate"; + + public static final String ATTR_MIN_CHARACTERS = "minCharacters"; + + public static final String ATTR_MAX_CHARACTERS = "maxCharacters"; + + public static final String ATTR_LOCK_WHEN_FINISHED = "lockedWhenFinished"; + + public static final String TOPIC_DELETED_ATTACHMENT_LIST = "topicDeletedAttachmentList"; + + public static final String DELETED_AUTHORING_TOPICS_LIST = "deletedAuthoringTopicList"; + + public static final String USER_UID = "userUid"; + + public static final String ATTR_FINISHED_LOCK = "finishedLock"; + + public static final String ATTR_USER_FINISHED = "userFinished"; + + public static final String ATTR_UPLOAD_MAX_FILE_SIZE = "uploadMaxFileSize"; + + public static final String ATTR_SESSION_DTOS = "sessionDtos"; + + // for submission deadline + + public static final String ATTR_SUBMISSION_DEADLINE = "submissionDeadline"; + + public static final String ATTR_SUBMISSION_DEADLINE_DATESTRING = "submissionDateString"; + + public static final String ATTR_IS_SUBMISSION_DEADLINE_PASSED = "isSubmissionDeadlinePassed"; + + // used in monitoring + public static final String TITLE = "title"; + + public static final String INSTRUCTIONS = "instructions"; + + public static final String PAGE_EDITABLE = "isPageEditable"; + + public static final String ATTR_ROOT_TOPIC_UID = "rootUid"; + + public static final String ATTR_FORUM_TITLE = "title"; + + public static final String ATTR_FORUM_INSTRCUTION = "instruction"; + + public static final String ATTR_TOOL_CONTENT_TOPICS = "ToolContentTopicList"; + + public static final String ATTR_TOPIC = "topic"; + + public static final String ATTR_USER = "user"; + + public static final String ATTR_USER_UID = "userUid"; + + public static final String ATTR_USER_ID = "userId"; + + public static final String ATTR_PORTRAIT_ID = "portraitId"; + + public static final String ATTR_MESSAGES = "messages"; + + public static final String PARAM_UPDATE_MODE = "updateMode"; + + public static final String ATTR_NO_MORE_POSTS = "noMorePosts"; + + public static final String ATTR_NUM_OF_POSTS = "numOfPosts"; + + public static final String ATTR_NO_MORE_RATINGSS = "noMoreRatings"; + + public static final String ATTR_NUM_OF_RATINGS = "numOfRatings"; + + public static final String ATTR_IS_MIN_RATINGS_COMPLETED = "isMinRatingsCompleted"; + + public static final String ATTR_SESSION_MAP_ID = "sessionMapID"; + + public static final String ATTR_PARENT_TOPIC_ID = "parentID"; + + // used when replying message LDEV-1305 + public static final String ATTR_ORIGINAL_MESSAGE = "originalMessage"; + + public static final String ATTR_TOPIC_ID = "topicID"; + + public static final String ATTR_REFLECTION_ON = "reflectOn"; + + public static final String ATTR_REFLECTION_INSTRUCTION = "reflectInstructions"; + + public static final String DELETED_ATTACHMENT_LIST = "deletedAttachmentList"; + + public static final String ATTR_REFLECTION_ENTRY = "reflectEntry"; + + public static final String ATTR_MINIMUM_REPLY = "minimumReply"; + + public static final String ATTR_MAXIMUM_REPLY = "maximumReply"; + + public static final String MARK_UPDATE_FROM_USER = "listMarks"; + + public static final String MARK_UPDATE_FROM_FORUM = "viewForum"; + + public static final String ATTR_HIDE_REFLECTION = "hideReflection"; + + public static final String EVENT_NAME_NOTIFY_LEARNERS_ON_MARK_RELEASE = "notify_learners_on_mark_release"; + + // for condition management + public static final String ATTR_CONDITION_SET = "conditionList"; + public static final String PARAM_ORDER_ID = "orderId"; + public static final String ATTR_DELETED_CONDITION_LIST = "deletedConditionList"; + + public static final String TOPIC_DATE_TO_ANSWERS_DEFINITION_NAME = "topic.name.to.answers.output.definition.forum"; + public static final String ALL_USERS_ANSWERS_DEFINITION_NAME = "all.users.answers.definition.forum"; + public final static String LEARNER_NUM_POSTS_DEFINITION_NAME = "learner.number.of.posts"; + + public static final String ANSWERS_SEPARATOR = "

"; + // a forward key + public static final String SUCCESS = "success"; + + public static final String WORD_REGEX = "\\w+"; + + public static final short SUBJECT_WORD_COUNT = 3; + + public static final int PATTERN_MATCHING_OPTIONS = Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE + | Pattern.MULTILINE; + + // for paging long topics & inlining reply + public static final String PAGE_LAST_ID = "pageLastId"; + public static final String PAGE_SIZE = "size"; + public static final int DEFAULT_PAGE_SIZE = 50; + public static final String ATTR_MESS_ID = "messageUid"; + public static final String ATTR_THREAD_ID = "threadUid"; + public static final String ATTR_NO_MORE_PAGES = "noMorePages"; +} \ No newline at end of file Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IAttachmentDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IAttachmentDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IAttachmentDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,10 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.Attachment; + +public interface IAttachmentDAO extends IBaseDAO { + + Attachment getById(Long attachmentId); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,29 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; + +public interface IForumDAO extends IBaseDAO { + + void saveOrUpdate(Forum forum); + + Forum getById(Long forumId); + + /** + * NOTE: before call this method, must be sure delete all messages in this forum. Example code like this: + * + *
+     * 
+     * messageDao.deleteForumMessage(forum.getUuid());
+     * 
+     * 
+ * + * @param forum + */ + void delete(Forum forum); + + Forum getByContentId(Long contentID); + + void deleteCondition(ForumCondition condition); +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumToolSessionDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumToolSessionDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumToolSessionDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,20 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; + +public interface IForumToolSessionDAO extends IBaseDAO { + + ForumToolSession getBySessionId(Long sessionId); + + void saveOrUpdate(ForumToolSession session); + + List getByContentId(Long contentID); + + void delete(Long sessionId); + + void delete(ForumToolSession session); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumUserDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumUserDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IForumUserDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,28 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; + +public interface IForumUserDAO extends IBaseDAO { + + List getBySessionId(Long sessionID); + + void save(ForumUser forumUser); + + ForumUser getByUserIdAndSessionId(Long userId, Long sessionId); + + ForumUser getByUserId(Long userId); + + ForumUser getByUid(Long userUid); + + int getCountUsersBySession(Long sessionId, String searchString); + + List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, + boolean getNotebookEntries, ICoreNotebookService coreNotebookService, + IUserManagementService userManagementService); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,76 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.Message; + +public interface IMessageDAO extends IBaseDAO { + + void saveOrUpdate(Message message); + + void update(Message message); + + Message getByIdForUpdate(Long messageId); + + Message getById(Long messageId); + + /** + * Get all root (first level) topics in a special Session. + * + * @param sessionId + * @return + */ + List getRootTopics(Long sessionId); + + /** + * Get all message posted by author role in a special forum. + * + * @param forumUid + * @return + */ + List getTopicsFromAuthor(Long forumUid); + + void delete(Long uid); + + /** + * Get all children message from the given parent topic ID. + * + * @param parentId + * @return + */ + List getChildrenTopics(Long parentId); + + /** + * Get all messages according to special user and session. + * + * @param userUid + * @param sessionId + * @return + */ + List getByUserAndSession(Long userUid, Long sessionId); + + /** + * Get all messages according to special session. + * + * @param sessionId + * @return + */ + List getBySession(Long sessionId); + + /** + * Return how many post from this user and session. DOES NOT include posts from author. + * + * @param userID + * @param sessionId + * @return + */ + int getTopicsNum(Long userID, Long sessionId); + + /** Get the create date of the first message left by this user in the session and the last + * message left. + * @param userUid + * @return + */ + Object[] getDateRangeOfMessages(Long userUid); +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageRatingDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageRatingDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageRatingDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,54 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; +import org.lamsfoundation.lams.tool.forum.model.MessageRating; + +public interface IMessageRatingDAO extends IBaseDAO { + + /** + * Return responseRating by the given imageUid and userId. + * + * @param messageId + * @param userId + * @return + */ + MessageRating getRatingByMessageAndUser(Long messageId, Long userId); + + /** + * Return list of responseRating by the the given imageUid. + * + * @param messageId + * @param userId + * @return + */ + List getRatingsByMessage(Long messageId); + + /** + * Returns rating statistics by particular message + * + * @param messageId + * @return + */ + AverageRatingDTO getAverageRatingDTOByMessage(Long messageId); + + /** + * Return total number of posts done by current user in this forum activity + * + * @param userUid + * @param forumUid + * @return + */ + int getNumOfRatingsByUserAndForum(Long userUid, Long forumUid); + + /** + * Generic method to save an object - handles both update and insert. + * + * @param o + * the object to save + */ + void saveObject(Object o); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageSeqDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageSeqDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/IMessageSeqDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,38 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import java.util.Date; +import java.util.List; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; + +public interface IMessageSeqDAO extends IBaseDAO { + + MessageSeq getById(Long messageSeqId); + + MessageSeq getByMessageId(Long messageId); + + List getThreadByThreadId(final Long threadMessageId); + + List getNextThreadByThreadId(final Long rootTopicId, final Long previousThreadMessageId); + + List getCompleteTopic(Long rootTopicId); + + MessageSeq getByTopicId(Long messageId); + + void save(MessageSeq msgSeq); + + void deleteByTopicId(Long topicUid); + + int getNumOfPostsByTopic(Long userID, Long topicID); + + /** + * Get number of messages newer than specified date. + * + * @param rootMessageId + * @param userId + * @return + */ + int getNumOfPostsNewerThan(Long rootMessageId, Date date); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/ITimestampDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/ITimestampDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/ITimestampDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,25 @@ +package org.lamsfoundation.lams.tool.forum.dao; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.tool.forum.model.Timestamp; + +public interface ITimestampDAO extends IBaseDAO { + + /** + * Save timestamp. + * + * @param timestamp + * @return + */ + void saveOrUpdate(Timestamp timestamp); + + /** + * Get timestamp. + * + * @param messageId + * @param forumUserId + * @return + */ + Timestamp getTimestamp(Long messageId, Long forumUserId); + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/AttachmentDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/AttachmentDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/AttachmentDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,45 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IAttachmentDAO; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.springframework.stereotype.Repository; + +/** + * User: conradb + * Date: 7/06/2005 + * Time: 12:23:49 + */ +@Repository +public class AttachmentDao extends LAMSBaseDAO implements IAttachmentDAO { + + @Override + public Attachment getById(final Long attachmentId) { + Attachment entity = (Attachment) getSession().get(Attachment.class, attachmentId); + return entity; + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,78 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.List; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IForumDAO; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.springframework.stereotype.Repository; + +/** + * ForumDao + * + * @author conradb + * + * + */ +@Repository +public class ForumDao extends LAMSBaseDAO implements IForumDAO { + private static final String FIND_FORUM_BY_CONTENTID = "from Forum forum where forum.contentId=?"; + + @Override + public void saveOrUpdate(Forum forum) { + forum.updateModificationData(); + this.getSession().saveOrUpdate(forum); + } + + @Override + public Forum getById(Long forumId) { + return (Forum) getSession().get(Forum.class, forumId); + } + + @Override + public void delete(Forum forum) { + this.getSession().delete(forum); + } + + @Override + public Forum getByContentId(Long contentID) { + List list = doFind(ForumDao.FIND_FORUM_BY_CONTENTID, contentID); + if (list != null && list.size() > 0) { + return (Forum) list.get(0); + } else { + return null; + } + } + + @Override + public void deleteCondition(ForumCondition condition) { + if (condition != null && condition.getConditionId() != null) { + this.getSession().delete(condition); + } + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumToolSessionDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumToolSessionDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumToolSessionDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,74 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.List; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IForumToolSessionDAO; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.springframework.stereotype.Repository; + +@Repository +public class ForumToolSessionDao extends LAMSBaseDAO implements IForumToolSessionDAO { + + private static final String SQL_QUERY_FIND_BY_SESSION_ID = "from " + ForumToolSession.class.getName() + + " where session_id=?"; + private static final String SQL_QUERY_FIND_BY_CONTENT_ID = "select s from " + Forum.class.getName() + " as f, " + + ForumToolSession.class.getName() + " as s" + " where f.contentId=? and s.forum.uid=f.uid"; + + @Override + public ForumToolSession getBySessionId(Long sessionId) { + List list = this.doFind(SQL_QUERY_FIND_BY_SESSION_ID, sessionId); + if (list == null || list.isEmpty()) { + return null; + } + return (ForumToolSession) list.get(0); + } + + @Override + public void saveOrUpdate(ForumToolSession session) { + this.getSession().saveOrUpdate(session); + } + + @Override + public List getByContentId(Long contentID) { + List list = this.doFind(SQL_QUERY_FIND_BY_CONTENT_ID, contentID); + return list; + } + + @Override + public void delete(Long sessionId) { + ForumToolSession session = getBySessionId(sessionId); + this.getSession().delete(session); + } + + @Override + public void delete(ForumToolSession session) { + this.getSession().delete(session); + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumUserDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumUserDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/ForumUserDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,221 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.List; + +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; +import org.hibernate.SQLQuery; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.forum.ForumConstants; +import org.lamsfoundation.lams.tool.forum.dao.IForumUserDAO; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.springframework.stereotype.Repository; + +@Repository +public class ForumUserDao extends LAMSBaseDAO implements IForumUserDAO { + + private static final String SQL_QUERY_FIND_BY_USER_ID_SESSION_ID = "from " + ForumUser.class.getName() + " as f" + + " where user_id=? and f.session.sessionId=?"; + + private static final String SQL_QUERY_FIND_BY_USER_ID = "from " + ForumUser.class.getName() + " as f" + + " where user_id=? and session_id is null"; + + private static final String SQL_QUERY_FIND_BY_SESSION_ID = "from " + ForumUser.class.getName() + " as f " + + " where f.session.sessionId=?"; + + @Override + public List getBySessionId(Long sessionID) { + return this.doFind(SQL_QUERY_FIND_BY_SESSION_ID, sessionID); + } + + @Override + public void save(ForumUser forumUser) { + this.getSession().save(forumUser); + } + + @Override + public ForumUser getByUserIdAndSessionId(Long userId, Long sessionId) { + List list = this.doFind(SQL_QUERY_FIND_BY_USER_ID_SESSION_ID, new Object[] { userId, sessionId }); + + if (list == null || list.isEmpty()) { + return null; + } + + return (ForumUser) list.get(0); + } + + @Override + public ForumUser getByUserId(Long userId) { + List list = this.doFind(SQL_QUERY_FIND_BY_USER_ID, userId); + + if (list == null || list.isEmpty()) { + return null; + } + + return (ForumUser) list.get(0); + } + + @Override + public ForumUser getByUid(Long userUid) { + return (ForumUser) this.getSession().get(ForumUser.class, userUid); + } + + @Override + @SuppressWarnings("unchecked") + /** + * Will return List<[ForumUser, String], [ForumUser, String], ... , [ForumUser, String]> + * where the String is the notebook entry. No notebook entries needed? Will return "null" in their place. + */ + public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, + String searchString, boolean getNotebookEntries, ICoreNotebookService coreNotebookService, + IUserManagementService userManagementService) { + String sortingOrder; + boolean sortOnMessage; + switch (sorting) { + case ForumConstants.SORT_BY_USER_NAME_ASC: + sortingOrder = "user.last_name ASC, user.first_name ASC"; + sortOnMessage = false; + break; + case ForumConstants.SORT_BY_USER_NAME_DESC: + sortingOrder = "user.last_name DESC, user.first_name DESC"; + sortOnMessage = false; + break; + case ForumConstants.SORT_BY_LAST_POSTING_ASC: + sortingOrder = " MAX(message.update_date) ASC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_LAST_POSTING_DESC: + sortingOrder = " MAX(message.update_date) DESC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_NUMBER_OF_POSTS_ASC: + sortingOrder = " COUNT(message.uid) ASC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_NUMBER_OF_POSTS_DESC: + sortingOrder = " COUNT(message.uid) DESC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_MARKED_ASC: + sortingOrder = " AVG(report.mark) ASC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_MARKED_DESC: + sortingOrder = " AVG(report.mark) DESC"; + sortOnMessage = true; + break; + case ForumConstants.SORT_BY_NO: + default: + sortingOrder = "user.uid"; + sortOnMessage = false; + } + + // If the session uses notebook, then get the SQL to join across to get the entries + String[] notebookEntryStrings = null; + if (getNotebookEntries) { + notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings(sessionId.toString(), + ForumConstants.TOOL_SIGNATURE, "user.user_id"); + } + + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + + // Basic select for the user records + StringBuilder queryText = new StringBuilder(); + + queryText.append("SELECT user.* "); + queryText.append(notebookEntryStrings != null ? notebookEntryStrings[0] : ", NULL notebookEntry"); + queryText.append(portraitStrings[0]); + queryText.append(" FROM tl_lafrum11_forum_user user "); + queryText.append(portraitStrings[1]); + queryText.append( + " JOIN tl_lafrum11_tool_session session ON user.session_id = session.uid and session.session_id = :sessionId"); + + if (sortOnMessage) { + queryText.append(" LEFT JOIN tl_lafrum11_message message ON message.create_by = user.uid"); + if (sorting == ForumConstants.SORT_BY_MARKED_ASC || sorting == ForumConstants.SORT_BY_MARKED_DESC) { + queryText.append(" LEFT JOIN tl_lafrum11_report report ON report.uid = message.report_id"); + } + } + + // If filtering by name add a name based where clause (LDEV-3779: must come before the Notebook JOIN statement) + buildNameSearch(queryText, searchString); + + // If using notebook, add the notebook join + if (notebookEntryStrings != null) { + queryText.append(notebookEntryStrings[1]); + } + + if (sortOnMessage) { + queryText.append(" GROUP BY user.user_id"); + } + + // Now specify the sort based on the switch statement above. + queryText.append(" ORDER BY " + sortingOrder); + + SQLQuery query = getSession().createSQLQuery(queryText.toString()); + query.addEntity("user", ForumUser.class).addScalar("notebookEntry", StringType.INSTANCE) + .addScalar("portraitId", IntegerType.INSTANCE) + .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size); + return query.list(); + + } + + private void buildNameSearch(StringBuilder queryText, String searchString) { + if (!StringUtils.isBlank(searchString)) { + String[] tokens = searchString.trim().split("\\s+"); + for (String token : tokens) { + String escToken = StringEscapeUtils.escapeSql(token); + queryText.append(" AND (user.first_name LIKE '%").append(escToken) + .append("%' OR user.last_name LIKE '%").append(escToken).append("%' OR user.login_name LIKE '%") + .append(escToken).append("%')"); + } + } + } + + @Override + @SuppressWarnings("rawtypes") + public int getCountUsersBySession(final Long sessionId, String searchString) { + + StringBuilder queryText = new StringBuilder("SELECT count(*) FROM tl_lafrum11_forum_user user "); + queryText.append( + " JOIN tl_lafrum11_tool_session session ON user.session_id = session.uid and session.session_id = :sessionId"); + buildNameSearch(queryText, searchString); + + List list = getSession().createSQLQuery(queryText.toString()).setLong("sessionId", sessionId.longValue()) + .list(); + if (list == null || list.size() == 0) { + return 0; + } + return ((Number) list.get(0)).intValue(); + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,135 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.List; + +import org.hibernate.LockOptions; +import org.hibernate.SQLQuery; +import org.hibernate.type.StringType; +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageDAO; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; +import org.springframework.stereotype.Repository; + +/** + * @author conradb + */ +@Repository +public class MessageDao extends LAMSBaseDAO implements IMessageDAO { + 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() + " m where m.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_DATES_BY_USER_SESSION = "SELECT MIN(create_date) start_date, MAX(create_date) end_date " + + " FROM tl_lafrum11_message WHERE create_by = :userUid"; + + @Override + public void saveOrUpdate(Message message) { + this.getSession().saveOrUpdate(message); + } + + @Override + public void update(Message message) { + this.getSession().saveOrUpdate(message); + } + + @Override + public Message getByIdForUpdate(Long messageId) { + return (Message) getSession().get(Message.class, messageId, LockOptions.UPGRADE); + } + + @Override + public Message getById(Long messageId) { + return (Message) getSession().get(Message.class, messageId); + } + + @Override + public List getRootTopics(Long sessionId) { + return (List) this.doFind(SQL_QUERY_FIND_ROOT_TOPICS, sessionId); + } + + @Override + public List getTopicsFromAuthor(Long forumUid) { + return (List) this.doFind(SQL_QUERY_FIND_TOPICS_FROM_AUTHOR, forumUid); + } + + @Override + public void delete(Long uid) { + Message msg = getById(uid); + if (msg != null) { + this.getSession().delete(msg); + } + } + + @Override + public List getChildrenTopics(Long parentId) { + return (List) this.doFind(SQL_QUERY_FIND_CHILDREN, parentId); + } + + @Override + public List getByUserAndSession(Long userUid, Long sessionId) { + return (List) this.doFind(SQL_QUERY_BY_USER_SESSION, new Object[] { userUid, sessionId }); + } + + @Override + public List getBySession(Long sessionId) { + return (List) this.doFind(SQL_QUERY_BY_SESSION, sessionId); + } + + @Override + public int getTopicsNum(Long userID, Long sessionId) { + List list = this.doFind(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; + } + } + + @Override + public Object[] getDateRangeOfMessages(Long userUid) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid); + Object[] values = (Object[]) query.list().get(0); + return values; + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageRatingDAO.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageRatingDAO.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageRatingDAO.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,98 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.text.NumberFormat; +import java.util.List; +import java.util.Locale; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageRatingDAO; +import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; +import org.lamsfoundation.lams.tool.forum.model.MessageRating; +import org.springframework.stereotype.Repository; + +/** + * DAO interface for MessageRating.. + * + * @author Andrey Balan + * @see org.lamsfoundation.lams.tool.forum.model.MessageRating + */ +@Repository +public class MessageRatingDAO extends LAMSBaseDAO implements IMessageRatingDAO { + + private static final String FIND_BY_MESSAGE_AND_USER = "from " + MessageRating.class.getName() + + " as r where r.user.userId = ? and r.message.uid=?"; + + private static final String FIND_BY_MESSAGE_ID = "from " + MessageRating.class.getName() + + " as r where r.message.uid=?"; + + private static final String FIND_AVERAGE_RATING_BY_MESSAGE = "SELECT AVG(r.rating), COUNT(*) from " + + MessageRating.class.getName() + " as r where r.message.uid=?"; + + private static final String FIND_COUNT_RATING_BY_USER_AND_FORUM = "SELECT COUNT(*) from " + + MessageRating.class.getName() + " as r where r.user.uid = ? and r.message.forum.uid=?"; + + @Override + public MessageRating getRatingByMessageAndUser(Long messageId, Long userId) { + List list = doFind(FIND_BY_MESSAGE_AND_USER, new Object[] { userId, messageId }); + if (list == null || list.size() == 0) { + return null; + } + return (MessageRating) list.get(0); + } + + @Override + @SuppressWarnings("unchecked") + public List getRatingsByMessage(Long messageId) { + return (List) doFind(FIND_BY_MESSAGE_ID, messageId); + } + + @Override + @SuppressWarnings("unchecked") + public AverageRatingDTO getAverageRatingDTOByMessage(Long messageId) { + List list = (List) doFind(FIND_AVERAGE_RATING_BY_MESSAGE, new Object[] { messageId }); + Object[] results = list.get(0); + + Object averageRatingObj = (results[0] == null) ? 0 : results[0]; + NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); + numberFormat.setMaximumFractionDigits(1); + String averageRating = numberFormat.format(averageRatingObj); + + String numberOfVotes = (results[1] == null) ? "0" : String.valueOf(results[1]); + return new AverageRatingDTO(averageRating, numberOfVotes); + } + + @Override + public int getNumOfRatingsByUserAndForum(Long userUid, Long forumUid) { + List list = this.doFind(FIND_COUNT_RATING_BY_USER_AND_FORUM, new Object[] { userUid, forumUid }); + 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/dao/hibernate/MessageSeqDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageSeqDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/MessageSeqDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,151 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.Date; +import java.util.List; + +import org.apache.log4j.Logger; +import org.hibernate.Query; +import org.hibernate.criterion.Restrictions; +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageSeqDAO; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; +import org.springframework.stereotype.Repository; + +@Repository +public class MessageSeqDao extends LAMSBaseDAO implements IMessageSeqDAO { + private static final String SQL_QUERY_FIND_TOPIC_ID = "from " + MessageSeq.class.getName() + + " where message_uid = ?"; + private static final String SQL_QUERY_FIND_NEXT_THREAD_TOP = "from " + MessageSeq.class.getName() + + " where root_message_uid = :rootTopicId and message.uid > :previousThreadMessageId and message_level = 1"; + private static final String SQL_QUERY_FIND_NEXT_THREAD_MESSAGES = "from " + MessageSeq.class.getName() + + " where root_message_uid = ? and thread_message_uid = ? and message_level > 1"; + private static final String SQL_QUERY_GET_COMPLETE_THREAD = "from " + MessageSeq.class.getName() + + " where thread_message_uid = ?"; + private static final String SQL_QUERY_GET_SEQ_BY_MESSAGE = "from " + MessageSeq.class.getName() + + " where message_uid = ?"; + + 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 > ?"; + + private static final Logger log = Logger.getLogger(MessageSeqDao.class); + + @Override + public MessageSeq getById(Long messageSeqId) { + return (MessageSeq) find(MessageSeq.class, messageSeqId); + } + + @Override + public MessageSeq getByMessageId(Long messageId) { + List list = doFind(SQL_QUERY_GET_SEQ_BY_MESSAGE, messageId); + if (list != null) { + if (list.size() > 1) { + log.warn("Looking up message seq by message id=" + messageId + ". More than one message seq found!" + + list.toString()); + } + return (MessageSeq) list.get(0); + } else { + return null; + } + } + + @Override + public List getThreadByThreadId(final Long threadMessageId) { + return doFind(SQL_QUERY_GET_COMPLETE_THREAD, new Object[] { threadMessageId }); + } + + @Override + public List getNextThreadByThreadId(final Long rootTopicId, final Long previousThreadMessageId) { + Query queryObject = getSession().createQuery(SQL_QUERY_FIND_NEXT_THREAD_TOP) + .setParameter("rootTopicId", rootTopicId) + .setParameter("previousThreadMessageId", previousThreadMessageId).setMaxResults(1); + List list = queryObject.list(); + if (list != null && list.size() > 0) { + MessageSeq threadTop = ((MessageSeq) list.get(0)); + List all = doFind(SQL_QUERY_FIND_NEXT_THREAD_MESSAGES, + new Object[] { rootTopicId, threadTop.getMessage().getUid() }); + all.add(threadTop); + return all; + } + return list; + } + + @Override + public List getCompleteTopic(Long rootTopicId) { + return getSession().createCriteria(MessageSeq.class).add(Restrictions.eq("rootMessage.uid", rootTopicId)) + .list(); + } + + @Override + public MessageSeq getByTopicId(Long messageId) { + List list = doFind(SQL_QUERY_FIND_TOPIC_ID, messageId); + if (list == null || list.isEmpty()) { + return null; + } + return (MessageSeq) list.get(0); + } + + @Override + public void save(MessageSeq msgSeq) { + getSession().save(msgSeq); + } + + @Override + public void deleteByTopicId(Long topicUid) { + MessageSeq seq = getByTopicId(topicUid); + if (seq != null) { + getSession().delete(seq); + } + } + + @Override + public int getNumOfPostsByTopic(Long userID, Long topicID) { + List list = doFind(SQL_QUERY_NUM_POSTS_BY_TOPIC, new Object[] { userID, topicID }); + if (list != null && list.size() > 0) { + return ((Number) list.get(0)).intValue(); + } else { + return 0; + } + } + + @Override + public int getNumOfPostsNewerThan(Long rootMessageId, Date date) { + + // user views forum not the first time + List messages = doFind(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/dao/hibernate/TimestampDao.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/TimestampDao.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dao/hibernate/TimestampDao.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,59 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.dao.hibernate; + +import java.util.List; + +import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; +import org.lamsfoundation.lams.tool.forum.dao.ITimestampDAO; +import org.lamsfoundation.lams.tool.forum.model.Timestamp; +import org.springframework.stereotype.Repository; + +/** + * TimestampDao + * + * @author ruslan + */ +@Repository +public class TimestampDao extends LAMSBaseDAO implements ITimestampDAO { + + private static final String GET_TIMESTAMP_BY_MESSAGE_AND_USER = " FROM " + Timestamp.class.getName() + + " ts WHERE ts.message.uid = ? AND ts.forumUser.uid = ? "; + + public void saveOrUpdate(Timestamp timestamp) { + this.getSession().saveOrUpdate(timestamp); + } + + @Override + public Timestamp getTimestamp(Long messageId, Long forumUserId) { + List timestampList = this.doFind(GET_TIMESTAMP_BY_MESSAGE_AND_USER, new Object[] { messageId, forumUserId }); + if (timestampList != null && timestampList.size() > 0) { + return (Timestamp) (timestampList.get(0)); + } else { + return null; + } + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/ForumConditionDTO.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/ForumConditionDTO.java (.../ForumConditionDTO.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/ForumConditionDTO.java (.../ForumConditionDTO.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -27,8 +27,8 @@ import java.util.TreeSet; import org.lamsfoundation.lams.learningdesign.dto.TextSearchConditionDTO; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.tool.forum.util.ConditionTopicComparator; public class ForumConditionDTO extends TextSearchConditionDTO { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java (.../MessageDTO.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/MessageDTO.java (.../MessageDTO.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -29,8 +29,8 @@ import java.util.Iterator; import java.util.List; -import org.lamsfoundation.lams.tool.forum.persistence.ForumReport; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.ForumReport; +import org.lamsfoundation.lams.tool.forum.model.Message; public class MessageDTO { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/SessionDTO.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/SessionDTO.java (.../SessionDTO.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/SessionDTO.java (.../SessionDTO.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -26,8 +26,8 @@ import java.util.List; import java.util.Map; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; /** * @author Anthony Sukkar Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/UserDTO.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/UserDTO.java (.../UserDTO.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/dto/UserDTO.java (.../UserDTO.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,6 +1,6 @@ package org.lamsfoundation.lams.tool.forum.dto; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; public class UserDTO { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/forumApplicationContext.xml =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/forumApplicationContext.xml (.../forumApplicationContext.xml) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/forumApplicationContext.xml (.../forumApplicationContext.xml) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -17,53 +17,53 @@ - + + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.ForumUserDao"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.AttachmentDao"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.MessageDao"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.TimestampDao"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.MessageSeqDao"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.MessageRatingDAO"> + class="org.lamsfoundation.lams.tool.forum.dao.hibernate.ForumToolSessionDao"> @@ -152,9 +152,6 @@ - - false - Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Attachment.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Attachment.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Attachment.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,190 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.log4j.Logger; + +/** + * @author conradb + * + * A Wrapper class for uploaded files. An Attachment cannot exist independently + * and must belong to a Forum. + */ +@Entity +@Table(name = "tl_lafrum11_attachment") +public class Attachment implements Cloneable, Comparable { + private static final Logger log = Logger.getLogger(Attachment.class); + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column(name = "file_uuid") + private Long fileUuid; + + @Column(name = "file_version_id") + private Long fileVersionId; + + @Column(name = "file_type") + private String fileType; + + @Column(name = "file_name") + private String fileName; + + @Column(name = "create_date") + private Date created; + + @ManyToOne + @JoinColumn(name = "message_uid") + private Message message; + + //Default contruction method + public Attachment() { + + } + +// ********************************************************** + // Function method for Attachment +// ********************************************************** + @Override + public Object clone() { + Object obj = null; + try { + obj = super.clone(); + ((Attachment) obj).setUid(null); + } catch (CloneNotSupportedException e) { + log.error("When clone " + Attachment.class + " failed"); + } + + return obj; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Attachment)) { + return false; + } + + final Attachment genericEntity = (Attachment) o; + + return new EqualsBuilder().append(this.uid, genericEntity.uid) + .append(this.fileVersionId, genericEntity.fileVersionId).append(this.fileName, genericEntity.fileName) + .append(this.fileType, genericEntity.fileType).append(this.created, genericEntity.created).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(uid).append(fileVersionId).append(fileName).append(fileType).append(created) + .toHashCode(); + } + +// ********************************************************** + // get/set methods +// ********************************************************** + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + public Long getFileVersionId() { + return fileVersionId; + } + + public void setFileVersionId(Long version) { + this.fileVersionId = version; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String type) { + this.fileType = type; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String name) { + this.fileName = name; + } + + public Long getFileUuid() { + return fileUuid; + } + + public void setFileUuid(Long uuid) { + this.fileUuid = uuid; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Message getMessage() { + return message; + } + + public void setMessage(Message message) { + this.message = message; + } + + + @Override + public int compareTo(Attachment o) { + if (o == null) { + return 1; + } + if (this.getUid() != null && o.getUid() != null) { + return (int) (this.getUid() - o.getUid()); + } else { + return this.getUid() == null ? -1 : 1; + } + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Forum.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Forum.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Forum.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,699 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToMany; +import javax.persistence.OneToOne; +import javax.persistence.OrderBy; +import javax.persistence.Table; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.learningdesign.TextSearchConditionComparator; + +/** + * Forum + * + * @author conradb + */ +@Entity +@Table(name = "tl_lafrum11_forum") +public class Forum implements Cloneable { + + private static final Logger log = Logger.getLogger(Forum.class); + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + // tool contentID + @Column(name = "content_id") + private Long contentId; + + @Column + private String title; + + @Column(name = "lock_on_finished") + private boolean lockWhenFinished; + + @Column(name = "allow_anonym") + private boolean allowAnonym; + + @Column(name = "allow_edit") + private boolean allowEdit; + + @Column(name = "allow_new_topic") + private boolean allowNewTopic; + + @Column(name = "allow_upload") + private boolean allowUpload; + + @Column(name = "allow_rate_messages") + private boolean allowRateMessages; + + @Column(name = "maximum_reply") + private int maximumReply; + + @Column(name = "minimum_reply") + private int minimumReply; + + @Column(name = "maximum_rate") + private int maximumRate; + + @Column(name = "minimum_rate") + private int minimumRate; + + @Column(name = "allow_rich_editor") + private boolean allowRichEditor; + + @Column + private String instructions; + + @Column(name = "define_later") + private boolean defineLater; + + @Column(name = "content_in_use") + private boolean contentInUse; + + @Column(name = "create_date") + private Date created; + + @Column(name = "update_date") + private Date updated; + + /* TODO: I don't think this is going to work as the create_by column is in this table and hibernate will expect it in the user table. + * Probably need to revert to a hacked many - to - one + * @ManyToOne + * @JoinColumn(name = "create_by") + */ + @OneToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "create_by") + private ForumUser createdBy; + + // TODO why doesn't this have cascades. Why do we remove the messages manually? + @OneToMany(mappedBy = "forum") + @OrderBy("created DESC") + private Set messages; + + @Column(name = "min_characters") + private int minCharacters; + + @Column(name = "limited_input_flag") + private boolean limitedMinCharacters; + + @Column(name = "limited_of_chars") + private int maxCharacters; + + @Column(name = "limited_min_characters") + private boolean limitedMaxCharacters; + + @Column(name = "reflect_on_activity") + private boolean reflectOnActivity; + + @Column(name = "reflect_instructions") + private String reflectInstructions; + + @Column(name = "mark_release_notify") + private boolean notifyLearnersOnMarkRelease; + + @Column(name = "notify_learners_on_forum_posting") + private boolean notifyLearnersOnForumPosting; + + @Column(name = "notify_teachers_on_forum_posting") + private boolean notifyTeachersOnForumPosting; + + @Column(name = "submission_deadline") + private Date submissionDeadline; + + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "content_uid") + private Set conditions; + + /** + * Default construction method. + * + */ + public Forum() { + messages = new HashSet(); + conditions = new TreeSet(new TextSearchConditionComparator()); + } + + // ********************************************************** + // Function method for Forum + // ********************************************************** + @Override + public Object clone() { + + Forum forum = null; + try { + forum = (Forum) super.clone(); + forum.setUid(null); + // clone message + if (messages != null) { + Iterator iter = messages.iterator(); + Set set = new HashSet(); + while (iter.hasNext()) { + set.add(Message.newInstance((Message) iter.next())); + } + forum.messages = set; + } + if (getConditions() != null) { + Set conditionsCopy = new TreeSet(new TextSearchConditionComparator()); + for (ForumCondition condition : getConditions()) { + conditionsCopy.add(condition.clone(forum)); + } + forum.setConditions(conditionsCopy); + } + + } catch (CloneNotSupportedException e) { + Forum.log.error("When clone " + Forum.class + " failed"); + } + + return forum; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Forum)) { + return false; + } + + final Forum genericEntity = (Forum) o; + + return new EqualsBuilder().append(uid, genericEntity.uid).append(title, genericEntity.title) + .append(instructions, genericEntity.instructions).append(created, genericEntity.created) + .append(updated, genericEntity.updated).append(createdBy, genericEntity.createdBy).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(uid).append(title).append(instructions).append(created).append(updated) + .append(createdBy).toHashCode(); + } + + // ********************************************************** + // get/set methods + // ********************************************************** + /** + * Returns the object's creation date + * + * @return date + * + */ + public Date getCreated() { + return created; + } + + /** + * Sets the object's creation date + * + * @param created + */ + public void setCreated(Date created) { + this.created = created; + } + + /** + * Returns the object's date of last update + * + * @return date updated + * + */ + public Date getUpdated() { + return updated; + } + + /** + * Sets the object's date of last update + * + * @param updated + */ + public void setUpdated(Date updated) { + this.updated = updated; + } + + /** + * @return Returns the userid of the user who created the Forum. + * + * + * + */ + public ForumUser getCreatedBy() { + return createdBy; + } + + /** + * @param createdBy + * The userid of the user who created this Forum. + */ + public void setCreatedBy(ForumUser createdBy) { + this.createdBy = createdBy; + } + + /** + * + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * @return Returns the title. + * + * + * + */ + public String getTitle() { + return title; + } + + /** + * @param title + * The title to set. + */ + public void setTitle(String title) { + this.title = title; + } + + /** + * @return Returns the allowAnonym. + * + * + * + */ + public boolean getAllowAnonym() { + return allowAnonym; + } + + /** + * @param allowAnonym + * The allowAnonym to set. + * + */ + public void setAllowAnonym(boolean allowAnnomity) { + allowAnonym = allowAnnomity; + } + + /** + * @return Returns the lockWhenFinish. + * + * + * + */ + public boolean getLockWhenFinished() { + return lockWhenFinished; + } + + /** + * @param lockWhenFinished + * Set to true to lock the forum for finished users. + */ + public void setLockWhenFinished(boolean lockWhenFinished) { + this.lockWhenFinished = lockWhenFinished; + } + + /** + * @return Returns the instructions set by the teacher. + * + * + */ + public String getInstructions() { + return instructions; + } + + public void setInstructions(String instructions) { + this.instructions = instructions; + } + + /** + * NOTE: The reason that relation don't use save-update to persist message is MessageSeq table need save a record as + * well. + * + * + * + * + * + * @return + */ + public Set getMessages() { + return messages; + } + + public void setMessages(Set messages) { + this.messages = messages; + } + + /** + * Updates the modification data for this entity. + */ + public void updateModificationData() { + + long now = System.currentTimeMillis(); + if (created == null) { + this.setCreated(new Date(now)); + } + this.setUpdated(new Date(now)); + } + + /** + * + * @return + */ + public boolean isContentInUse() { + return contentInUse; + } + + public void setContentInUse(boolean contentInUse) { + this.contentInUse = contentInUse; + } + + /** + * + * @return + */ + public boolean isDefineLater() { + return defineLater; + } + + public void setDefineLater(boolean defineLater) { + this.defineLater = defineLater; + } + + /** + * + * @return + */ + public Long getContentId() { + return contentId; + } + + public void setContentId(Long contentId) { + this.contentId = contentId; + } + + /** + * + * @return + */ + public boolean isAllowEdit() { + return allowEdit; + } + + public void setAllowEdit(boolean allowEdit) { + this.allowEdit = allowEdit; + } + + /** + * + * @return + */ + public boolean isAllowRichEditor() { + return allowRichEditor; + } + + public void setAllowRichEditor(boolean allowRichEditor) { + this.allowRichEditor = allowRichEditor; + } + + public static Forum newInstance(Forum fromContent, Long contentId) { + Forum toContent = new Forum(); + toContent = (Forum) fromContent.clone(); + toContent.setContentId(contentId); + + Set topics = toContent.getMessages(); + if (topics != null) { + Iterator iter = topics.iterator(); + while (iter.hasNext()) { + Message msg = (Message) iter.next(); + // clear message forum so that they can be saved when persistent happens + msg.setForum(null); + } + } + + return toContent; + } + + /** + * + * @return + */ + public int getMinCharacters() { + return minCharacters; + } + + public void setMinCharacters(int minCharacters) { + this.minCharacters = minCharacters; + } + + /** + * + * @return + */ + public boolean isLimitedMinCharacters() { + return limitedMinCharacters; + } + + public void setLimitedMinCharacters(boolean limitedMinCharacters) { + this.limitedMinCharacters = limitedMinCharacters; + } + + /** + * + * @return + */ + public int getMaxCharacters() { + return maxCharacters; + } + + public void setMaxCharacters(int maxCharacters) { + this.maxCharacters = maxCharacters; + } + + /** + * + * @return + */ + public boolean isLimitedMaxCharacters() { + return limitedMaxCharacters; + } + + public void setLimitedMaxCharacters(boolean limitedMaxCharacters) { + this.limitedMaxCharacters = limitedMaxCharacters; + } + + /** + * + * @return + */ + public boolean isAllowNewTopic() { + return allowNewTopic; + } + + public void setAllowNewTopic(boolean allowNewTopic) { + this.allowNewTopic = allowNewTopic; + } + + /** + * + * @return + */ + public boolean isAllowUpload() { + return allowUpload; + } + + public void setAllowUpload(boolean allowUpload) { + this.allowUpload = allowUpload; + } + + /** + * + * @return + */ + public boolean isAllowRateMessages() { + return allowRateMessages; + } + + public void setAllowRateMessages(boolean allowRateMessages) { + this.allowRateMessages = allowRateMessages; + } + + /** + * + * @return + */ + public int getMaximumReply() { + return maximumReply; + } + + public void setMaximumReply(int maximumReply) { + this.maximumReply = maximumReply; + } + + /** + * + * @return + */ + public int getMinimumReply() { + return minimumReply; + } + + public void setMinimumReply(int minimumReply) { + this.minimumReply = minimumReply; + } + + /** + * + * @return + */ + public String getReflectInstructions() { + return reflectInstructions; + } + + public void setReflectInstructions(String reflectInstructions) { + this.reflectInstructions = reflectInstructions; + } + + /** + * + * @return + */ + public boolean isReflectOnActivity() { + return reflectOnActivity; + } + + public void setReflectOnActivity(boolean reflectOnActivity) { + this.reflectOnActivity = reflectOnActivity; + } + + /** + * + * @return + */ + public boolean isNotifyLearnersOnForumPosting() { + return notifyLearnersOnForumPosting; + } + + public void setNotifyLearnersOnForumPosting(boolean notifyLearnersOnForumPosting) { + this.notifyLearnersOnForumPosting = notifyLearnersOnForumPosting; + } + + /** + * + * @return + */ + public boolean isNotifyTeachersOnForumPosting() { + return notifyTeachersOnForumPosting; + } + + public void setNotifyTeachersOnForumPosting(boolean notifyTeachersOnForumPosting) { + this.notifyTeachersOnForumPosting = notifyTeachersOnForumPosting; + } + + /** + * + * @return + */ + public boolean isNotifyLearnersOnMarkRelease() { + return notifyLearnersOnMarkRelease; + } + + public void setNotifyLearnersOnMarkRelease(boolean notifyLearnersOnMarkRelease) { + this.notifyLearnersOnMarkRelease = notifyLearnersOnMarkRelease; + } + + /** + * + * sort="org.lamsfoundation.lams.learningdesign.TextSearchConditionComparator" + * + * + * + */ + public Set getConditions() { + return conditions; + } + + public void setConditions(Set conditions) { + this.conditions = conditions; + } + + /** + * + * @return date submissionDeadline + */ + public Date getSubmissionDeadline() { + return submissionDeadline; + } + + public void setSubmissionDeadline(Date submissionDeadline) { + this.submissionDeadline = submissionDeadline; + } + + /** + * + * @return + */ + public int getMaximumRate() { + return maximumRate; + } + + public void setMaximumRate(int maximumRate) { + this.maximumRate = maximumRate; + } + + /** + * + * @return + */ + public int getMinimumRate() { + return minimumRate; + } + + public void setMinimumRate(int minimumRate) { + this.minimumRate = minimumRate; + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumCondition.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumCondition.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumCondition.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,246 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.persistence.Entity; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; + +import org.hibernate.annotations.Cascade; +import org.hibernate.annotations.CascadeType; +import org.lamsfoundation.lams.learningdesign.BranchCondition; +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.learningdesign.TextSearchCondition; +import org.lamsfoundation.lams.tool.OutputType; +import org.lamsfoundation.lams.tool.ToolOutput; +import org.lamsfoundation.lams.tool.ToolOutputFormatException; +import org.lamsfoundation.lams.tool.ToolOutputValue; +import org.lamsfoundation.lams.tool.forum.dto.ForumConditionDTO; +import org.lamsfoundation.lams.tool.forum.util.ConditionTopicComparator; +import org.lamsfoundation.lams.util.WebUtil; + +/** + * A text search condition with a set of topics on answers to which the search should be performed. + * + * + * @author Marcin Cieslak + * + */ +@Entity +@Table(name = "tl_lafrum11_conditions") +public class ForumCondition extends TextSearchCondition { + /** + * Topics linked to this condition. Answers to them will be scanned for the words that make the condition's + * parameters. + */ + @ManyToMany + @Cascade({ CascadeType.SAVE_UPDATE }) + @JoinTable(name = "tl_lafrum11_condition_topics", joinColumns = @JoinColumn(name = "condition_id"), inverseJoinColumns = @JoinColumn(name = "topic_uid")) + @OrderBy("uid ASC") + private Set topics; + + public ForumCondition() { + this.topics = new TreeSet(new ConditionTopicComparator()); + } + + public ForumCondition(ForumConditionDTO conditionDTO) { + super(conditionDTO); + this.topics = new TreeSet(new ConditionTopicComparator()); + for (Message topic : conditionDTO.getTopics()) { + Message topicCopy = new Message(); + topicCopy.setCreated(topic.getCreated()); + topicCopy.setSubject(topic.getSubject()); + topics.add(topicCopy); + } + } + + public ForumCondition(Long conditionId, Integer conditionUIID, Integer orderId, String name, String displayName, + String allWords, String phrase, String anyWords, String excludedWords, Set questions) { + super(conditionId, conditionUIID, orderId, name, displayName, BranchCondition.OUTPUT_TYPE_COMPLEX, null, null, + null, allWords, phrase, anyWords, excludedWords); + setTopics(questions); + } + + @Override + public boolean isMet(ToolOutput output) throws ToolOutputFormatException { + boolean result = false; + if (output != null) { + ToolOutputValue value = output.getValue(); + if (value != null) { + if (OutputType.OUTPUT_COMPLEX.equals(value.getType())) { + // the condition "knows" it's a map of "topic creation date" -> "all learner's answers to that + // topic" + Map> messages = (Map>) value.getValue(); + result = true; + + /* + * We want to check if for each topic all answer don't contain excluded words and at least one + * answer contains the desired (all, any, phrase) words. That is why we check all, any and phrase + * conditions using the "matches" method, but we check excluded words manually. + */ + parseConditionStrings(); + List excludedWordsCopy = getExcludedWordsCondition(); + setExcludedWordsCondition(null); + + for (Message topic : getTopics()) { + boolean singleTopicResult = false; + Set answers = messages.get(topic.getCreated()); + if (answers == null) { + singleTopicResult = getAllWordsCondition() == null && getAnyWordsCondition() == null + && getPhraseCondition() == null; + } else { + for (String answer : answers) { + answer = WebUtil.removeHTMLtags(answer); + if (!singleTopicResult) { + singleTopicResult = matches(answer); + } + if (matchExcludedWordsOnly(excludedWordsCopy, answer)) { + singleTopicResult = false; + break; + } + } + } + + result &= singleTopicResult; + // if at least one topic does not satisfy the condition, there + // is no need to look further + if (!result) { + break; + } + } + } else { + throw new ToolOutputFormatException("Forum tool produced a non-complex tool output."); + } + } + } + return result; + } + + public Set getTopics() { + return topics; + } + + public void setTopics(Set questions) { + topics = questions; + } + + /** + * Notice that the original topics are assigned to the copy. + */ + @Override + public Object clone() { + Set topicsCopy = new TreeSet(new ConditionTopicComparator()); + topicsCopy.addAll(topics); + return new ForumCondition(null, null, orderId, name, displayName, allWords, phrase, anyWords, excludedWords, + topicsCopy); + } + + /** + * Notice that topics are copied with very little information and then they are assigned to the cloned object. This + * method is used when assigning BranchActivityEntry needs, so only basic information (in fact, only creation date) + * is needed. Also, there should be no link to Forum content. + */ + @Override + public ForumCondition clone(int uiidOffset) { + Integer newConditionUIID = LearningDesign.addOffset(conditionUIID, uiidOffset); + Set topicsCopy = new TreeSet(new ConditionTopicComparator()); + + for (Message topic : getTopics()) { + Message topicCopy = new Message(); + topicCopy.setCreated(topic.getCreated()); + topicCopy.setSubject(topic.getSubject()); + topicsCopy.add(topicCopy); + } + return new ForumCondition(null, newConditionUIID, orderId, name, displayName, allWords, phrase, anyWords, + excludedWords, topicsCopy); + } + + /** + * Notice that topics from the cloned (and not the original) tool content are assigned to the cloned condition. This + * method is used for cloning tool content. + */ + public ForumCondition clone(Forum forum) { + + Set topicsCopy = new TreeSet(new ConditionTopicComparator()); + for (Message conditionTopic : getTopics()) { + for (Message contentTopic : forum.getMessages()) { + if (contentTopic.getIsAuthored() && contentTopic.getCreated().equals(conditionTopic.getCreated())) { + topicsCopy.add(contentTopic); + } + } + } + + return new ForumCondition(null, null, orderId, name, displayName, allWords, phrase, anyWords, excludedWords, + topicsCopy); + } + + /** + * The condition must be bound with at least one topic. + */ + @Override + protected boolean isValid() { + return getTopics() != null && !getTopics().isEmpty(); + } + + /** + * It filters the given text in order to find any of the unwanted words. + * + * @param excludedWords + * words to search for + * @param textToMatch + * string to be filtered + * @return true if at least one of the words from the list is found in the text + */ + private boolean matchExcludedWordsOnly(List excludedWords, String textToMatch) { + if (textToMatch == null || excludedWords == null) { + return false; + } + StringBuilder stringPattern = new StringBuilder(); + for (String excludedWord : excludedWords) { + stringPattern.append("(?:").append(TextSearchCondition.NON_WORD_DELIMITER_REGEX) + .append(Pattern.quote(excludedWord)).append(TextSearchCondition.NON_WORD_DELIMITER_REGEX) + .append(")|"); + } + stringPattern.deleteCharAt(stringPattern.length() - 1); + Pattern regexPattern = Pattern.compile(stringPattern.toString(), TextSearchCondition.PATTERN_MATCHING_OPTIONS); + Matcher matcher = regexPattern.matcher(textToMatch); + return matcher.find(); + } + + @Override + public ForumConditionDTO getBranchConditionDTO(Integer toolActivityUIID) { + return new ForumConditionDTO(this, toolActivityUIID); + } +} \ No newline at end of file Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumConfigItem.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumConfigItem.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumConfigItem.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,74 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.forum.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "tl_lafrum11_configuration") +public class ForumConfigItem implements java.io.Serializable { + + private static final long serialVersionUID = 1618184711102211756L; + + public static final String KEY_KEEP_LEARNER_CONTENT = "keepLearnerContent"; + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "config_key") + private String configKey; + + @Column(name = "config_value") + private String configValue; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getConfigKey() { + return configKey; + } + + public void setConfigKey(String configKey) { + this.configKey = configKey; + } + + public String getConfigValue() { + return configValue; + } + + public void setConfigValue(String configValue) { + this.configValue = configValue; + } +} \ No newline at end of file Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumReport.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumReport.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumReport.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,82 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ +package org.lamsfoundation.lams.tool.forum.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "tl_lafrum11_report") +public class ForumReport { + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column + private Float mark; + + @Column + private String comment; + + /** + * + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * + * @return + */ + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + /** + * + * @return + */ + public Float getMark() { + return mark; + } + + public void setMark(Float mark) { + this.mark = mark; + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumToolSession.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumToolSession.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumToolSession.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,199 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.apache.log4j.Logger; + +/** + * @author Steve.Ni + */ +@Entity +@Table(name = "tl_lafrum11_tool_session") +public class ForumToolSession implements Cloneable { + + private static Logger log = Logger.getLogger(ForumToolSession.class); + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column(name = "session_id") + private Long sessionId; + + @Column(name = "session_name") + private String sessionName; + + @ManyToOne + @JoinColumn(name = "forum_uid") + private Forum forum; + + @Column(name = "session_start_date") + private Date sessionStartDate; + + @Column(name = "session_end_date") + private Date sessionEndDate; + + @Column(name = "mark_released") + private boolean markReleased; + +//content topics copyed (1) or not (0) + @Column + private int status; + +// ********************************************************** + // Function method for ForumToolSession +// ********************************************************** + @Override + public Object clone() { + + ForumToolSession session = null; + try { + session = (ForumToolSession) super.clone(); + + } catch (CloneNotSupportedException e) { + log.error("When clone " + ForumToolSession.class + " failed"); + } + return session; + } + +// ********************************************************** + // Get/Set methods +// ********************************************************** + /** + * + * @return Returns the learnerID. + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uuid) { + this.uid = uuid; + } + + /** + * + * @return + */ + public Date getSessionEndDate() { + return sessionEndDate; + } + + public void setSessionEndDate(Date sessionEndDate) { + this.sessionEndDate = sessionEndDate; + } + + /** + * + * + * @return + */ + public Date getSessionStartDate() { + return sessionStartDate; + } + + public void setSessionStartDate(Date sessionStartDate) { + this.sessionStartDate = sessionStartDate; + } + + /** + * + * @return + */ + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + /** + * + * + * @return + */ + public Forum getForum() { + return forum; + } + + public void setForum(Forum forum) { + this.forum = forum; + } + + /** + * + * @return + */ + public Long getSessionId() { + return sessionId; + } + + public void setSessionId(Long sessionId) { + this.sessionId = sessionId; + } + + /** + * + * @return Returns the session name + */ + public String getSessionName() { + return sessionName; + } + + /** + * + * @param sessionName + * The session name to set. + */ + public void setSessionName(String sessionName) { + this.sessionName = sessionName; + } + + /** + * + * @return Returns the mark released flag + */ + public boolean isMarkReleased() { + return markReleased; + } + + public void setMarkReleased(boolean markReleased) { + this.markReleased = markReleased; + } +} \ No newline at end of file Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumUser.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumUser.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/ForumUser.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,237 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; + +/** + * @author Steve.Ni + */ +@Entity +@Table(name = "tl_lafrum11_forum_user") +public class ForumUser implements Serializable, Cloneable { + + private static final long serialVersionUID = -7043502180037866257L; + private static Logger log = Logger.getLogger(ForumUser.class); + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column(name = "user_id") + private Long userId; + + @Column(name = "first_name") + private String firstName; + + @Column(name = "last_name") + private String lastName; + + @Column(name = "login_name") + private String loginName; + + @Column(name = "session_finished") + private boolean sessionFinished; + + @ManyToOne + @JoinColumn(name = "session_id") + private ForumToolSession session; + + public ForumUser() { + } + + /** Create the user based on the DTO in the session */ + public ForumUser(UserDTO user, ForumToolSession session) { + this.userId = new Long(user.getUserID().intValue()); + this.firstName = user.getFirstName(); + this.lastName = user.getLastName(); + this.loginName = user.getLogin(); + this.session = session; + this.sessionFinished = false; + } + + /** Create the user based on the details in the JSON call - used for authoring so no session exists. */ + public ForumUser(Long userId, String firstName, String lastName, String loginName) { + this.userId = userId; + this.firstName = firstName; + this.lastName = lastName; + this.loginName = loginName; + this.session = null; + this.sessionFinished = false; + } + + // ********************************************************** + // Function method for ForumUser + // ********************************************************** + /* + * (non-Javadoc) + * + * @see java.lang.Object#clone() + */ + @Override + public Object clone() { + + Object obj = null; + try { + obj = super.clone(); + } catch (CloneNotSupportedException e) { + log.error("When clone " + ForumUser.class + " failed"); + } + return obj; + } + + // ********************************************************** + // Get/Set methods + // ********************************************************** + /** + * + * @return Returns the uid. + */ + public Long getUid() { + return uid; + } + + /** + * @param uid + * The uid to set. + */ + public void setUid(Long userID) { + this.uid = userID; + } + + /** + * + * @return Returns the userId. + */ + public Long getUserId() { + return userId; + } + + /** + * @param userId + * The userId to set. + */ + public void setUserId(Long userID) { + this.userId = userID; + } + + /** + * + * @return + */ + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + /** + * + * @return + */ + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + /** + * + * @return + */ + public ForumToolSession getSession() { + return session; + } + + public void setSession(ForumToolSession session) { + this.session = session; + } + + /** + * + * @return + */ + public String getLoginName() { + return loginName; + } + + public void setLoginName(String loginName) { + this.loginName = loginName; + } + + /** + * + * @return + */ + public boolean isSessionFinished() { + return sessionFinished; + } + + public void setSessionFinished(boolean sessionFinished) { + this.sessionFinished = sessionFinished; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof ForumUser)) { + return false; + } + + final ForumUser user = (ForumUser) obj; + + return new EqualsBuilder().append(this.uid, user.uid).append(this.firstName, user.firstName) + .append(this.lastName, user.lastName).append(this.loginName, user.loginName).isEquals(); + + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(uid).append(firstName).append(lastName).append(loginName).toHashCode(); + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Message.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Message.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Message.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,594 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.TreeSet; + +import javax.persistence.CascadeType; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.Table; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.log4j.Logger; + +/** + * @author conradb + */ +@Entity +@Table(name = "tl_lafrum11_message") +public class Message implements Cloneable { + + private static Logger log = Logger.getLogger(Message.class); + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column + private String subject; + + @Column + private String body; + + @Column(name = "sequence_id") + private int sequenceId; + + @Column(name = "is_authored") + private boolean isAuthored; + + @Column(name = "is_anonymous") + private boolean isAnonymous; + + @Column(name = "is_monitor") + private boolean isMonitor; + + @Column(name = "create_date") + private Date created; + + @Column(name = "update_date") + private Date updated; + + @Column(name = "last_reply_date") + private Date lastReplyDate; + + @Column(name = "reply_number") + private int replyNumber; + + @Column(name = "hide_flag") + private boolean hideFlag; + + @ManyToOne + @JoinColumn(name = "parent_uid") + private Message parent; + + @ManyToOne + @JoinColumn(name = "forum_session_uid") + private ForumToolSession toolSession; + + @ManyToOne + @JoinColumn(name = "forum_uid") + private Forum forum; + + @ManyToOne + @JoinColumn(name = "create_by") + private ForumUser createdBy; + + @ManyToOne + @JoinColumn(name = "modified_by") + private ForumUser modifiedBy; + + @OneToMany(mappedBy = "message", + cascade = CascadeType.ALL, + orphanRemoval = true, + fetch = FetchType.EAGER) + private Set attachments; + + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "report_id") + private ForumReport report; + + @OneToMany(fetch = FetchType.EAGER) + @JoinColumn(name = "authored_parent_uid") + private Set sessionClones; + + public Message() { + attachments = new TreeSet(); + sessionClones = new HashSet(); + } + + // ********************************************************** + // Function method for Message + // ********************************************************** + public static Message newInstance(Message fromMsg) { + Message toMsg = new Message(); + toMsg = (Message) fromMsg.clone(); + return toMsg; + } + + /** + * This method DOES NOT deep clone Forum to avoid dead loop in clone. + */ + @Override + public Object clone() { + + Message msg = null; + 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(); + // clone attachment + if (attachments != null) { + Iterator iter = attachments.iterator(); + Set set = new TreeSet(); + while (iter.hasNext()) { + Attachment file = (Attachment) iter.next(); + Attachment newFile = (Attachment) file.clone(); + // use common file node in repository + set.add(newFile); + } + msg.attachments = set; + } + // do not clone the tool session data as cloning should be creating a "fresh" copy + msg.sessionClones = new HashSet(); + } catch (CloneNotSupportedException e) { + log.error("When clone " + Forum.class + " failed"); + } + + return msg; + } + + public Object updateClone(Message clone) { + + clone.setBody(this.getBody()); + clone.setForum(this.getForum()); + clone.setSequenceId(this.getSequenceId()); + clone.setHideFlag(this.isHideFlag()); + clone.setIsAnonymous(this.isAnonymous); + clone.setIsMonitor(this.isMonitor); + clone.setIsAuthored(this.getIsAuthored()); + clone.setLastReplyDate(this.getLastReplyDate()); + clone.setModifiedBy(clone.getModifiedBy()); + clone.setReplyNumber(this.getReplyNumber()); + clone.setReport(this.getReport()); + clone.setSubject(this.getSubject()); + clone.setUpdated(clone.getUpdated()); + + // 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(); + while (iter.hasNext()) { + Attachment file = (Attachment) iter.next(); + Attachment newFile = (Attachment) file.clone(); + clone.getAttachments().add(newFile); + } + } + + return clone; + } + + /** + * Updates the modification data for this entity. + */ + public void updateModificationData() { + long now = System.currentTimeMillis(); + if (created == null) { + this.setCreated(new Date(now)); + } + this.setUpdated(new Date(now)); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof Message)) { + return false; + } + + Message genericEntity = (Message) o; + + // uses same attributes to determine equality as + // ConditionTopicComparator.compare() + 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(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(uid).append(subject).append(body).append(created).append(updated) + .append(createdBy).append(modifiedBy).toHashCode(); + } + + // ********************************************************** + // get/set methods + // ********************************************************** + /** + * Returns the object's creation date + * + * @return date + * + */ + public Date getCreated() { + return created; + } + + /** + * Sets the object's creation date + * + * @param created + */ + public void setCreated(Date created) { + this.created = created; + } + + /** + * Returns this topic last reply date + * + * @return date + * + */ + public Date getLastReplyDate() { + return lastReplyDate; + } + + public void setLastReplyDate(Date lastPostDate) { + this.lastReplyDate = lastPostDate; + } + + /** + * Returns the object's date of last update + * + * @return date updated + * + */ + public Date getUpdated() { + return updated; + } + + /** + * Sets the object's date of last update + * + * @param updated + */ + public void setUpdated(Date updated) { + this.updated = updated; + } + + /** + * @return Returns the userid of the user who created the Forum. + * + * + * + */ + public ForumUser getCreatedBy() { + return createdBy; + } + + /** + * @param createdBy + * The userid of the user who created this Forum. + */ + public void setCreatedBy(ForumUser createdBy) { + this.createdBy = createdBy; + } + + /** + * + * + * @return Returns the userid of the user who modified the posting. + */ + public ForumUser getModifiedBy() { + return modifiedBy; + } + + /** + * @param modifiedBy + * The userid of the user who modified the posting. + */ + public void setModifiedBy(ForumUser modifiedBy) { + this.modifiedBy = modifiedBy; + } + + /** + * + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uuid) { + this.uid = uuid; + } + + /** + * @return Returns the subject of the Message. + * + * + * + */ + public String getSubject() { + return subject; + } + + /** + * @param subject + * The subject of the Message to be set. + */ + public void setSubject(String subject) { + this.subject = subject; + } + + /** + * @return Returns the body of the Message. + * + * + * + */ + public String getBody() { + return body; + } + + /** + * @param body + * The body of the Message to set. + */ + public void setBody(String body) { + this.body = body; + } + + /** + * Returns Message sequence number. + * + * @return Message sequence number + * + * + */ + public int getSequenceId() { + return sequenceId; + } + + /** + * Sets Message sequence number. + * + * @param sequenceId + * Message sequence number + */ + public void setSequenceId(int sequenceId) { + this.sequenceId = sequenceId; + } + + /** + * @return Returns true if the Message was an Authored Message. + * + * + * + */ + public boolean getIsAuthored() { + return isAuthored; + } + + /** + * @param isAuthored + * Set isAuthored to true if Message was authored otherwise set to false. + */ + public void setIsAuthored(boolean isAuthored) { + this.isAuthored = isAuthored; + } + + /** + * @return Returns whether the Message should be shown as an Annonymous message. + * + * + * + */ + public boolean getIsAnonymous() { + return isAnonymous; + } + + /** + * @param isAnonymous + * Indicates that the Message is to be shown as an Annonymous message when set to true. + */ + public void setIsAnonymous(boolean isAnonymous) { + this.isAnonymous = isAnonymous; + } + + /** + * @return Returns whether the Message should be shown as a teacher/tutor message created in monitoring + * + * + * + */ + public boolean getIsMonitor() { + return isMonitor; + } + + /** + * @param isAnonymous + * Indicates whether the Message should be shown as a teacher/tutor message created in monitoring + */ + public void setIsMonitor(boolean isMonitor) { + this.isMonitor = isMonitor; + } + + /** + * Gets the toolSession + * + * + * + * + */ + public ForumToolSession getToolSession() { + return toolSession; + } + + /** + * @param toolSession + * The toolSession that this Message belongs to + */ + public void setToolSession(ForumToolSession session) { + this.toolSession = session; + } + + /** + * @param parent + * The parent of this Message + */ + public void setParent(Message parent) { + this.parent = parent; + } + + /** + * + * @return + */ + public Message getParent() { + return parent; + } + + /** + * @return a set of Attachments to this Message. + * + * + * + * + * + */ + public Set getAttachments() { + return attachments; + } + + /* + * @param attachments The attachments to set. + */ + public void setAttachments(Set attachments) { + this.attachments = attachments; + } + + /** + * + * @return + */ + public Forum getForum() { + return forum; + } + + public void setForum(Forum forum) { + this.forum = forum; + } + + /** + * + * @return + */ + public int getReplyNumber() { + return replyNumber; + } + + public void setReplyNumber(int replyNumber) { + this.replyNumber = replyNumber; + } + + /** + * + * @return + */ + public boolean isHideFlag() { + return hideFlag; + } + + public void setHideFlag(boolean hideFlag) { + this.hideFlag = hideFlag; + } + + /** + * + * @return + */ + public ForumReport getReport() { + return report; + } + + public void setReport(ForumReport report) { + this.report = report; + } + + /** + * @return the set of all messages cloned from this message. + */ + public Set getSessionClones() { + return sessionClones; + } + + /* + * @param sessionClones The sessionClones to set. + */ + public void setSessionClones(Set sessionClones) { + this.sessionClones = sessionClones; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("uid", uid).append("subject", subject).append("body", body).toString(); + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageRating.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageRating.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageRating.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,145 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.io.Serializable; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; + +/** + * MessageRating + * + * @author Andrey Balan + */ +@Entity +@Table(name = "tl_lafrum11_message_rating") +public class MessageRating implements Serializable { + + private static final long serialVersionUID = 3500933985590642242L; + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @Column + private float rating; + + @ManyToOne + @JoinColumn(name = "user_id") + private ForumUser user; + + @ManyToOne + @JoinColumn(name = "message_id") + private Message message; + + // ********************************************************** + // Function methods for ResponseRating + // ********************************************************** + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof MessageRating)) { + return false; + } + + final MessageRating genericEntity = (MessageRating) o; + + return new EqualsBuilder().append(this.uid, genericEntity.uid).append(this.rating, genericEntity.rating) + .append(this.user, genericEntity.user).isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(uid).append(rating).append(user).toHashCode(); + } + + // ********************************************************** + // Get/Set methods + // ********************************************************** + + /** + * + * @return Returns the log Uid. + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * Returns user rated this message. + * + * + * @return + */ + public ForumUser getUser() { + return user; + } + + public void setUser(ForumUser user) { + this.user = user; + } + + /** + * + * @return + */ + public float getRating() { + return rating; + } + + public void setRating(float rating) { + this.rating = rating; + } + + /** + * + * @return + */ + public Message getMessage() { + return message; + } + + public void setMessage(Message message) { + this.message = message; + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageSeq.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageSeq.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/MessageSeq.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,122 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + + +package org.lamsfoundation.lams.tool.forum.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * @author Steve.Ni + * + */ +@Entity +@Table(name = "tl_lafrum11_message_seq") +public class MessageSeq { + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @ManyToOne + @JoinColumn(name = "root_message_uid") + private Message rootMessage; + + @ManyToOne + @JoinColumn(name = "message_uid") + private Message message; + + @ManyToOne + @JoinColumn(name = "thread_message_uid") + private Message threadMessage; + + @Column(name = "message_level") + private short messageLevel; + + /** + * + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * + * + */ + public Message getRootMessage() { + return rootMessage; + } + + public void setRootMessage(Message rootTopicUid) { + this.rootMessage = rootTopicUid; + } + + /** + * + * + */ + public Message getMessage() { + return message; + } + + public void setMessage(Message topicUid) { + this.message = topicUid; + } + + /** + * + * + */ + public Message getThreadMessage() { + return threadMessage; + } + + public void setThreadMessage(Message threadTopMessageUid) { + this.threadMessage = threadTopMessageUid; + } + + /** + * + */ + public short getMessageLevel() { + return messageLevel; + } + + public void setMessageLevel(short topicLevel) { + this.messageLevel = topicLevel; + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Timestamp.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Timestamp.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/model/Timestamp.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,133 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +/** + * Forum + * + * @author ruslan + */ +@Entity +@Table(name = "tl_lafrum11_timestamp") +public class Timestamp implements Cloneable { + + @Id + @Column + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long uid; + + @ManyToOne + @JoinColumn(name = "forum_user_uid") + private ForumUser forumUser; + + @ManyToOne + @JoinColumn(name = "message_uid") + private Message message; + + @Column(name = "timestamp_date") + private Date timestamp; + + /** + * Default construction method. + * + */ + public Timestamp() { + } + + // ********************************************************** + // get/set methods + // ********************************************************** + /** + * + */ + public Long getUid() { + return uid; + } + + public void setUid(Long uid) { + this.uid = uid; + } + + /** + * Returns the user's timestamp + * + * @return timestamp + * + */ + public Date getTimestamp() { + return timestamp; + } + + /** + * Sets the user's timestamp + * + * @param timestamp + */ + public void setTimestamp(Date timestamp) { + this.timestamp = timestamp; + } + + /** + * @return Returns the user of the user who saved the timestamp + * + * + * + */ + public ForumUser getForumUser() { + return forumUser; + } + + /** + * @param userid + * The userid of the user who saved the timestamp + */ + public void setForumUser(ForumUser forumUser) { + this.forumUser = forumUser; + } + + /** + * + * + */ + public Message getMessage() { + return message; + } + + public void setMessage(Message message) { + this.message = message; + } + +} Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Attachment.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Forum.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumCondition.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumConfigItem.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumException.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumReport.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumToolSession.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ForumUser.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IAttachmentDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumToolSessionDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IForumUserDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageRatingDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageSeqDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/ITimestampDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageRating.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/MessageSeq.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/PersistenceException.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Timestamp.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/AttachmentDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumToolSessionDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/ForumUserDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageRatingDAO.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageSeqDao.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/TimestampDao.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumImportContentVersionFilter.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumImportContentVersionFilter.java (.../ForumImportContentVersionFilter.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumImportContentVersionFilter.java (.../ForumImportContentVersionFilter.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -24,7 +24,7 @@ package org.lamsfoundation.lams.tool.forum.service; import org.lamsfoundation.lams.learningdesign.service.ToolContentVersionFilter; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; +import org.lamsfoundation.lams.tool.forum.model.Forum; /** * Import filter class for different version of Forum content. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java (.../ForumOutputFactory.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumOutputFactory.java (.../ForumOutputFactory.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -37,13 +37,13 @@ import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.forum.ForumConstants; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; /** * Creates the output definitions for forum. Currently it provides two types of output - an user answers represented by Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -rfc69f6fff973cdb61ddd1213e226a671e1ca1905 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision fc69f6fff973cdb61ddd1213e226a671e1ca1905) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -70,32 +70,32 @@ import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.forum.ForumConstants; +import org.lamsfoundation.lams.tool.forum.dao.IAttachmentDAO; +import org.lamsfoundation.lams.tool.forum.dao.IForumDAO; +import org.lamsfoundation.lams.tool.forum.dao.IForumToolSessionDAO; +import org.lamsfoundation.lams.tool.forum.dao.IForumUserDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageRatingDAO; +import org.lamsfoundation.lams.tool.forum.dao.IMessageSeqDAO; +import org.lamsfoundation.lams.tool.forum.dao.ITimestampDAO; import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.ForumConfigItem; -import org.lamsfoundation.lams.tool.forum.persistence.ForumException; -import org.lamsfoundation.lams.tool.forum.persistence.ForumReport; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.IAttachmentDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IForumDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IForumToolSessionDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IForumUserDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IMessageDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IMessageRatingDAO; -import org.lamsfoundation.lams.tool.forum.persistence.IMessageSeqDAO; -import org.lamsfoundation.lams.tool.forum.persistence.ITimestampDAO; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.persistence.MessageRating; -import org.lamsfoundation.lams.tool.forum.persistence.MessageSeq; -import org.lamsfoundation.lams.tool.forum.persistence.PersistenceException; -import org.lamsfoundation.lams.tool.forum.persistence.Timestamp; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.ForumConfigItem; +import org.lamsfoundation.lams.tool.forum.model.ForumReport; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; +import org.lamsfoundation.lams.tool.forum.model.MessageRating; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; +import org.lamsfoundation.lams.tool.forum.model.Timestamp; import org.lamsfoundation.lams.tool.forum.util.DateComparator; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; +import org.lamsfoundation.lams.tool.forum.util.ForumException; import org.lamsfoundation.lams.tool.forum.util.MessageDtoComparator; +import org.lamsfoundation.lams.tool.forum.util.PersistenceException; import org.lamsfoundation.lams.tool.forum.util.TopicComparator; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; Fisheye: Tag b71c9cb2f96eb891545d32aaca8904051d1e00d5 refers to a dead (removed) revision in file `lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumServiceProxy.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java =================================================================== diff -u -rfc69f6fff973cdb61ddd1213e226a671e1ca1905 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision fc69f6fff973cdb61ddd1213e226a671e1ca1905) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/IForumService.java (.../IForumService.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -29,17 +29,19 @@ import org.lamsfoundation.lams.events.IEventNotificationService; import org.lamsfoundation.lams.logevent.service.ILogEventService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.tool.exception.DataMissingException; +import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.ForumConfigItem; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.persistence.MessageSeq; -import org.lamsfoundation.lams.tool.forum.persistence.PersistenceException; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.ForumConfigItem; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; +import org.lamsfoundation.lams.tool.forum.util.PersistenceException; import org.springframework.web.multipart.MultipartFile; /** @@ -299,6 +301,9 @@ */ List getAllTopicsFromSession(Long sessionID); + /** From ToolSessionManager interface */ + String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException; + // ************************************************************************************ // User Method // ************************************************************************************ Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/AttachmentComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/AttachmentComparator.java (.../AttachmentComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/AttachmentComparator.java (.../AttachmentComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -25,7 +25,7 @@ import java.util.Comparator; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Attachment; /** * Attachment comparator by unique id, hence should be the order saved in the database. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ConditionTopicComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ConditionTopicComparator.java (.../ConditionTopicComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ConditionTopicComparator.java (.../ConditionTopicComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -28,7 +28,7 @@ import java.util.Comparator; import org.apache.commons.lang.builder.EqualsBuilder; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.Message; /** * For finding topic order in Forum conditions. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/DateComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/DateComparator.java (.../DateComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/DateComparator.java (.../DateComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -25,7 +25,7 @@ package org.lamsfoundation.lams.tool.forum.util; -import static org.lamsfoundation.lams.tool.forum.util.ForumConstants.OLD_FORUM_STYLE; +import static org.lamsfoundation.lams.tool.forum.ForumConstants.OLD_FORUM_STYLE; import java.util.Comparator; import java.util.Date; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumException.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumException.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumException.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,57 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.util; + +/** + * User: conradb + * Date: 14/06/2005 + * Time: 12:33:12 + */ +public class ForumException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -7408922611270822369L; + + public ForumException(String message) { + super(message); + } + + public ForumException(String message, Throwable cause) { + super(message, cause); + } + + public ForumException() { + super(); + + } + + public ForumException(Throwable cause) { + super(cause); + + } + +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumUserComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumUserComparator.java (.../ForumUserComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumUserComparator.java (.../ForumUserComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -25,7 +25,7 @@ import java.util.Comparator; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; public class ForumUserComparator implements Comparator { @Override Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumWebUtils.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumWebUtils.java (.../ForumWebUtils.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumWebUtils.java (.../ForumWebUtils.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -28,8 +28,7 @@ import org.apache.commons.lang.StringUtils; import org.lamsfoundation.lams.tool.ToolAccessMode; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumException; +import org.lamsfoundation.lams.tool.forum.model.Forum; import org.lamsfoundation.lams.web.util.AttributeNames; /** Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageComparator.java (.../MessageComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/MessageComparator.java (.../MessageComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -25,7 +25,7 @@ import java.util.Comparator; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.Message; /** * Message comparator by sequence ID. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/PersistenceException.java =================================================================== diff -u --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/PersistenceException.java (revision 0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/PersistenceException.java (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -0,0 +1,43 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.forum.util; + +/** + * User: conradb + * Date: 6/06/2005 + * Time: 10:51:43 + */ +public class PersistenceException extends RuntimeException { + + private static final long serialVersionUID = 3903937111808861090L; + + public PersistenceException(String message) { + super(message); + } + + public PersistenceException(String message, Throwable cause) { + super(message, cause); + } +} Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/TopicComparator.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/TopicComparator.java (.../TopicComparator.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/TopicComparator.java (.../TopicComparator.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -25,13 +25,13 @@ package org.lamsfoundation.lams.tool.forum.util; -import static org.lamsfoundation.lams.tool.forum.util.ForumConstants.OLD_FORUM_STYLE; +import static org.lamsfoundation.lams.tool.forum.ForumConstants.OLD_FORUM_STYLE; import java.util.Comparator; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.persistence.MessageSeq; +import org.lamsfoundation.lams.tool.forum.model.Message; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; /** * This class implementaion java.util.Comparator interface. It can sort meesage according to Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AdminController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AdminController.java (.../AdminController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AdminController.java (.../AdminController.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -24,7 +24,7 @@ import javax.servlet.http.HttpServletRequest; -import org.lamsfoundation.lams.tool.forum.persistence.ForumConfigItem; +import org.lamsfoundation.lams.tool.forum.model.ForumConfigItem; import org.lamsfoundation.lams.tool.forum.service.IForumService; import org.lamsfoundation.lams.tool.forum.web.forms.AdminForm; import org.springframework.beans.factory.annotation.Autowired; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringConditionController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringConditionController.java (.../AuthoringConditionController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringConditionController.java (.../AuthoringConditionController.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -36,12 +36,12 @@ import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.lamsfoundation.lams.learningdesign.TextSearchConditionComparator; +import org.lamsfoundation.lams.tool.forum.ForumConstants; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.tool.forum.service.IForumService; import org.lamsfoundation.lams.tool.forum.util.ConditionTopicComparator; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.lamsfoundation.lams.tool.forum.util.MessageDtoComparator; import org.lamsfoundation.lams.tool.forum.web.forms.ForumConditionForm; import org.lamsfoundation.lams.util.MessageService; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringController.java =================================================================== diff -u -rfc69f6fff973cdb61ddd1213e226a671e1ca1905 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringController.java (.../AuthoringController.java) (revision fc69f6fff973cdb61ddd1213e226a671e1ca1905) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/AuthoringController.java (.../AuthoringController.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -47,18 +47,18 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.learningdesign.TextSearchConditionComparator; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.forum.ForumConstants; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.persistence.PersistenceException; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.tool.forum.service.IForumService; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.lamsfoundation.lams.tool.forum.util.MessageComparator; import org.lamsfoundation.lams.tool.forum.util.MessageDtoComparator; +import org.lamsfoundation.lams.tool.forum.util.PersistenceException; import org.lamsfoundation.lams.tool.forum.web.forms.ForumForm; import org.lamsfoundation.lams.tool.forum.web.forms.ForumPedagogicalPlannerForm; import org.lamsfoundation.lams.tool.forum.web.forms.MessageForm; @@ -76,7 +76,7 @@ import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.multipart.MultipartFile; /** * @author Steve.Ni @@ -417,16 +417,14 @@ message.setModifiedBy(forumUser); // set attachment of this topic - Set attSet = null; + Set attSet = null; if (messageForm.getAttachmentFile() != null && !StringUtils.isEmpty(messageForm.getAttachmentFile().getOriginalFilename())) { - Attachment att = forumService.uploadAttachment(messageForm.getAttachmentFile()); - // only allow one attachment, so replace whatever - attSet = new HashSet(); - attSet.add(att); + attSet = setupAttachmentSet(messageForm.getAttachmentFile(), message); } message.setAttachments(attSet); + // LDEV-4696 no longer needed - cannot edit in monitoring once a session is created. // create clones of this topic (appropriate only for editing in monitoring) Forum forum = (Forum) sessionMap.get(ForumConstants.AUTHORING_FORUM); if (forum != null) { @@ -558,9 +556,7 @@ if (messageForm.getAttachmentFile() != null && !StringUtils.isEmpty(messageForm.getAttachmentFile().getOriginalFilename())) { Attachment att = forumService.uploadAttachment(messageForm.getAttachmentFile()); - // only allow one attachment, so replace whatever - Set attSet = new HashSet(); - attSet.add(att); + Set attSet = setupAttachmentSet(messageForm.getAttachmentFile(), newMsg.getMessage()); newMsg.setHasAttachment(true); newMsg.getMessage().setAttachments(attSet); } else if (!messageForm.isHasAttachment()) { @@ -578,6 +574,15 @@ return "jsps/authoring/message/topiclist"; } + /* only allow one attachment, so replace whatever */ + private Set setupAttachmentSet(MultipartFile attachmentFile, Message msg) { + Attachment att = forumService.uploadAttachment(attachmentFile); + Set attSet = new HashSet(); + attSet.add(att); + att.setMessage(msg); + return attSet; + } + /** * Remove message attachment. */ Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/LearningController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/LearningController.java (.../LearningController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/LearningController.java (.../LearningController.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -43,22 +43,20 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.tool.ToolAccessMode; -import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.forum.ForumConstants; import org.lamsfoundation.lams.tool.forum.dto.AverageRatingDTO; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumException; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.Message; -import org.lamsfoundation.lams.tool.forum.persistence.MessageSeq; -import org.lamsfoundation.lams.tool.forum.persistence.PersistenceException; -import org.lamsfoundation.lams.tool.forum.service.ForumServiceProxy; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; +import org.lamsfoundation.lams.tool.forum.model.MessageSeq; import org.lamsfoundation.lams.tool.forum.service.IForumService; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; +import org.lamsfoundation.lams.tool.forum.util.ForumException; +import org.lamsfoundation.lams.tool.forum.util.PersistenceException; import org.lamsfoundation.lams.tool.forum.web.forms.MessageForm; import org.lamsfoundation.lams.tool.forum.web.forms.ReflectionForm; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -319,9 +317,7 @@ // finish current session for user forumService.finishUserSession(getCurrentUser(request, sessionId)); - ToolSessionManager sessionMgrService = ForumServiceProxy - .getToolSessionManager(applicationContext.getServletContext()); - nextActivityUrl = sessionMgrService.leaveToolSession(sessionId, userID); + nextActivityUrl = forumService.leaveToolSession(sessionId, userID); response.sendRedirect(nextActivityUrl); } catch (DataMissingException e) { throw new ForumException(e); @@ -1075,18 +1071,19 @@ && !StringUtils.isBlank(messageForm.getAttachmentFile().getOriginalFilename())) { Attachment att = forumService.uploadAttachment(messageForm.getAttachmentFile()); - Set attSet = message.getAttachments(); + Set attSet = message.getAttachments(); if (attSet == null) { - attSet = new HashSet(); + attSet = new HashSet(); } // only allow one attachment, so replace whatever attSet.clear(); attSet.add(att); + att.setMessage(message); message.setAttachments(attSet); } else if (!messageForm.isHasAttachment()) { // user already called deleteAttachment in AJAX call if (message.getAttachments() != null) { - Set atts = message.getAttachments(); + Set atts = message.getAttachments(); atts.clear(); message.setAttachments(atts); } else { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/MonitoringController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/MonitoringController.java (.../MonitoringController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/controller/MonitoringController.java (.../MonitoringController.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -50,15 +50,15 @@ import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.lamsfoundation.lams.tool.forum.ForumConstants; import org.lamsfoundation.lams.tool.forum.dto.MessageDTO; import org.lamsfoundation.lams.tool.forum.dto.SessionDTO; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.ForumReport; -import org.lamsfoundation.lams.tool.forum.persistence.ForumToolSession; -import org.lamsfoundation.lams.tool.forum.persistence.ForumUser; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.ForumReport; +import org.lamsfoundation.lams.tool.forum.model.ForumToolSession; +import org.lamsfoundation.lams.tool.forum.model.ForumUser; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.tool.forum.service.IForumService; -import org.lamsfoundation.lams.tool.forum.util.ForumConstants; import org.lamsfoundation.lams.tool.forum.util.ForumUserComparator; import org.lamsfoundation.lams.tool.forum.util.ForumWebUtils; import org.lamsfoundation.lams.tool.forum.util.MessageDTOByDateComparator; @@ -287,7 +287,7 @@ } if (userAndReflection.length > 2 && userAndReflection[2] != null) { - responseRow.put(ForumConstants.ATTR_PORTRAIT_ID, (String) userAndReflection[2]); + responseRow.put(ForumConstants.ATTR_PORTRAIT_ID, (Integer)userAndReflection[2]); } rows.add(responseRow); Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumConditionForm.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumConditionForm.java (.../ForumConditionForm.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumConditionForm.java (.../ForumConditionForm.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -24,8 +24,8 @@ import java.util.Map; -import org.lamsfoundation.lams.tool.forum.persistence.ForumCondition; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.ForumCondition; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.web.form.TextSearchForm; /** Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumForm.java =================================================================== diff -u -re062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumForm.java (.../ForumForm.java) (revision e062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumForm.java (.../ForumForm.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; +import org.lamsfoundation.lams.tool.forum.model.Forum; /** * Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumPedagogicalPlannerForm.java =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumPedagogicalPlannerForm.java (.../ForumPedagogicalPlannerForm.java) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/ForumPedagogicalPlannerForm.java (.../ForumPedagogicalPlannerForm.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -29,8 +29,8 @@ import org.apache.commons.lang.StringUtils; import org.lamsfoundation.lams.planner.PedagogicalPlannerActivitySpringForm; -import org.lamsfoundation.lams.tool.forum.persistence.Forum; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.Forum; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.tool.forum.util.MessageComparator; import org.lamsfoundation.lams.util.MessageService; import org.springframework.beans.factory.annotation.Autowired; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/MessageForm.java =================================================================== diff -u -rc9ee204be2fbc37ed1fd4c7eb8267bc103d98a24 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/MessageForm.java (.../MessageForm.java) (revision c9ee204be2fbc37ed1fd4c7eb8267bc103d98a24) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/forms/MessageForm.java (.../MessageForm.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -27,8 +27,8 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.tool.forum.persistence.Attachment; -import org.lamsfoundation.lams.tool.forum.persistence.Message; +import org.lamsfoundation.lams.tool.forum.model.Attachment; +import org.lamsfoundation.lams.tool.forum.model.Message; import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.FileValidatorUtil; import org.lamsfoundation.lams.util.MessageService; Index: lams_tool_forum/web/jsps/authoring/authoring.jsp =================================================================== diff -u -raced7ba6c1e7c5a9a50d3f64d8cdd96dd7e76194 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/authoring/authoring.jsp (.../authoring.jsp) (revision aced7ba6c1e7c5a9a50d3f64d8cdd96dd7e76194) +++ lams_tool_forum/web/jsps/authoring/authoring.jsp (.../authoring.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,6 +1,6 @@ <%@ include file="/common/taglibs.jsp"%> -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> Index: lams_tool_forum/web/jsps/learning/message/msgview.jsp =================================================================== diff -u -re062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/learning/message/msgview.jsp (.../msgview.jsp) (revision e062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf) +++ lams_tool_forum/web/jsps/learning/message/msgview.jsp (.../msgview.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,4 +1,4 @@ -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> <%@ include file="/common/taglibs.jsp"%> <%-- msgDto, messageUid, msgLevel needs to be in the session elsewhere --%> Index: lams_tool_forum/web/jsps/learning/message/topiclist.jsp =================================================================== diff -u -re062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/learning/message/topiclist.jsp (.../topiclist.jsp) (revision e062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf) +++ lams_tool_forum/web/jsps/learning/message/topiclist.jsp (.../topiclist.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,4 +1,4 @@ -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> <%@ include file="/common/taglibs.jsp"%> Index: lams_tool_forum/web/jsps/learning/message/topicview.jsp =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/learning/message/topicview.jsp (.../topicview.jsp) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/web/jsps/learning/message/topicview.jsp (.../topicview.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,4 +1,4 @@ -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> <%@ include file="/common/taglibs.jsp"%> Index: lams_tool_forum/web/jsps/learning/viewtopic.jsp =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/learning/viewtopic.jsp (.../viewtopic.jsp) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_tool_forum/web/jsps/learning/viewtopic.jsp (.../viewtopic.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -1,6 +1,6 @@ -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> <%@ include file="/common/taglibs.jsp"%> Index: lams_tool_forum/web/jsps/monitoring/monitoring.jsp =================================================================== diff -u -re062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_forum/web/jsps/monitoring/monitoring.jsp (.../monitoring.jsp) (revision e062c5aeec4bd7e7f970ae5e907e8a7e59edaeaf) +++ lams_tool_forum/web/jsps/monitoring/monitoring.jsp (.../monitoring.jsp) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -2,7 +2,7 @@ <%@ include file="/common/taglibs.jsp"%> -<%@ page import="org.lamsfoundation.lams.tool.forum.util.ForumConstants"%> +<%@ page import="org.lamsfoundation.lams.tool.forum.ForumConstants"%> <fmt:message key="activity.title" /> Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardContent.java =================================================================== diff -u -r711e4127d79bb67af04a3b7a01155cc395171da5 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardContent.java (.../NoticeboardContent.java) (revision 711e4127d79bb67af04a3b7a01155cc395171da5) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardContent.java (.../NoticeboardContent.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -105,6 +105,7 @@ /** default constructor */ public NoticeboardContent() { + this.nbSessions = new HashSet(); } /** full constructor */ @@ -125,6 +126,7 @@ this.allowComments = allowComments; this.commentsLikeAndDislike = commentsLikeAndDislike; this.allowAnonymous = allowAnonymous; + this.nbSessions = new HashSet(); } /** @@ -245,9 +247,6 @@ } public Set getNbSessions() { - if (this.nbSessions == null) { - setNbSessions(new HashSet()); - } return nbSessions; } Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardSession.java =================================================================== diff -u -r711e4127d79bb67af04a3b7a01155cc395171da5 -rb71c9cb2f96eb891545d32aaca8904051d1e00d5 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardSession.java (.../NoticeboardSession.java) (revision 711e4127d79bb67af04a3b7a01155cc395171da5) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/model/NoticeboardSession.java (.../NoticeboardSession.java) (revision b71c9cb2f96eb891545d32aaca8904051d1e00d5) @@ -100,7 +100,7 @@ /** default constructor */ public NoticeboardSession() { - + this.nbUsers = new HashSet(); } /** full constructor */ @@ -113,6 +113,7 @@ this.sessionStartDate = sessionStartDate; this.sessionEndDate = sessionEndDate; this.sessionStatus = sessionStatus; + this.nbUsers = new HashSet(); } /** @@ -135,19 +136,22 @@ this.nbContent = nbContent; this.sessionStartDate = new Date(System.currentTimeMillis()); this.sessionStatus = NoticeboardSession.INCOMPLETE; + this.nbUsers = new HashSet(); } public NoticeboardSession(Long nbSessionId, String nbSessionName) { this.nbSessionId = nbSessionId; this.nbSessionName = nbSessionName; this.sessionStartDate = new Date(System.currentTimeMillis()); this.sessionStatus = NoticeboardSession.INCOMPLETE; + this.nbUsers = new HashSet(); } public NoticeboardSession(Long nbSessionId) { this.nbSessionId = nbSessionId; this.sessionStartDate = new Date(System.currentTimeMillis()); this.sessionStatus = NoticeboardSession.INCOMPLETE; + this.nbUsers = new HashSet(); } public NoticeboardContent getNbContent() { @@ -207,10 +211,6 @@ } public Set getNbUsers() { - if (this.nbUsers == null) { - setNbUsers(new HashSet()); - } - return nbUsers; }