Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java =================================================================== diff -u -r0cae9f7a40ca2fd2c14a2d27f9c016cf7d708882 -r3fca8720f48328a4c5573b2d6d8f7dc89ad9fb45 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 0cae9f7a40ca2fd2c14a2d27f9c016cf7d708882) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 3fca8720f48328a4c5573b2d6d8f7dc89ad9fb45) @@ -92,20 +92,21 @@ try{ msg = (Message) super.clone(); msg.setUid(null); - 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(); - } + //it is not necessary to deep clone following comment fields. //don't deep clone forum to avoid dead loop in clone - if(createdBy != null){ - msg.createdBy = (ForumUser) createdBy.clone(); - } - if(modifiedBy != null) - msg.modifiedBy = (ForumUser) modifiedBy.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(); Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -rb5d42eff472154edcc323444fb26d318a398481c -r3fca8720f48328a4c5573b2d6d8f7dc89ad9fb45 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision b5d42eff472154edcc323444fb26d318a398481c) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 3fca8720f48328a4c5573b2d6d8f7dc89ad9fb45) @@ -338,7 +338,6 @@ log.error("Failed on getting session by given sessionID:" + sessionId); throw new ForumException("Failed on getting session by given sessionID:" + sessionId); } - List topicsFromAuthor = messageDao.getTopicsFromAuthor(session.getForum().getUid()); //sorted by last post date Message msg; @@ -348,11 +347,6 @@ msg = (Message) iter.next(); map.put(msg.getLastReplyDate(),msg); } - iter = topicsFromAuthor.iterator(); - while(iter.hasNext()){ - msg = (Message) iter.next(); - map.put(msg.getLastReplyDate(),msg); - } return MessageDTO.getMessageDTO(new ArrayList(map.values())); } @@ -695,6 +689,34 @@ Forum forum = forumDao.getByContentId(toolContentId); session.setForum(forum); forumToolSessionDao.saveOrUpdate(session); + + //also clone author created topic from this forum tool content!!! + //this can avoid topic record information conflict when multiple sessions are against same tool content + //for example, the reply number maybe various for different sessions. + List topicsFromAuthor = messageDao.getTopicsFromAuthor(session.getForum().getUid()); + + //sorted by last post date + Message msg; + SortedMap map = new TreeMap(new DateComparator()); + Iterator iter = topicsFromAuthor.iterator(); + while(iter.hasNext()){ + msg = (Message) iter.next(); + //Don't copy other session's topic, only from tool content!!!. + if(msg.getToolSession() != null) + continue; + //set this message forum Uid as toContent + if(!msg.getIsAuthored()) + continue; + Message newMsg = (Message) msg.clone(); + //reset some value. + newMsg.setReplyNumber(0); + newMsg.setHideFlag(false); + //it should be new message + newMsg.setUid(null); + //!!! set current session to authored message + newMsg.setToolSession(session); + createRootTopic(toolContentId,null,newMsg); + } } public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException {