Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Forum.java =================================================================== diff -u -r62402371ee899b9b20c61c988149efbec1cc00bd -r1a5fe7ba5d0193d7c80351af38dd8959ac31d964 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Forum.java (.../Forum.java) (revision 62402371ee899b9b20c61c988149efbec1cc00bd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Forum.java (.../Forum.java) (revision 1a5fe7ba5d0193d7c80351af38dd8959ac31d964) @@ -71,8 +71,9 @@ if(messages != null){ Iterator iter = messages.iterator(); Set set = new HashSet(); - while(iter.hasNext()) - set.add(((Message)iter.next()).clone()); + while(iter.hasNext()){ + set.add(Message.newInstance((Message)iter.next(),toolContentHandler)); + } forum.messages = set; } //clone attachment @@ -81,11 +82,14 @@ Set set = new HashSet(); while(iter.hasNext()){ Attachment file = (Attachment)iter.next(); - //duplicate file node in repository - NodeKey keys = toolContentHandler.copyFile(file.getFileUuid()); - Attachment newFile = (Attachment) file.clone(); - newFile.setFileUuid(keys.getUuid()); - newFile.setFileVersionId(keys.getVersion()); + Attachment newFile = (Attachment) file.clone(); + //if toolContentHandle is null, just clone old file without duplicate it in repository + if(toolContentHandler != null){ + //duplicate file node in repository + NodeKey keys = toolContentHandler.copyFile(file.getFileUuid()); + newFile.setFileUuid(keys.getUuid()); + newFile.setFileVersionId(keys.getVersion()); + } set.add(newFile); } forum.attachments = set; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java =================================================================== diff -u -r62402371ee899b9b20c61c988149efbec1cc00bd -r1a5fe7ba5d0193d7c80351af38dd8959ac31d964 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 62402371ee899b9b20c61c988149efbec1cc00bd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Message.java (.../Message.java) (revision 1a5fe7ba5d0193d7c80351af38dd8959ac31d964) @@ -8,6 +8,10 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; +import org.lamsfoundation.lams.contentrepository.NodeKey; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; +import org.lamsfoundation.lams.tool.forum.util.ForumToolContentHandler; /** * @author conradb @@ -42,13 +46,21 @@ private ForumUser modifiedBy; private Set attachments; private ForumReport report; + + private ForumToolContentHandler toolContentHandler; public Message(){ attachments = new TreeSet(); } // ********************************************************** // Function method for Message // ********************************************************** + public static Message newInstance(Message fromMsg,ForumToolContentHandler toolContentHandler){ + Message toMsg = new Message(); + fromMsg.toolContentHandler = toolContentHandler; + toMsg = (Message) fromMsg.clone(); + return toMsg; + } /** * This method DOES NOT deep clone Forum to avoid dead loop in clone. */ @@ -60,6 +72,8 @@ 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(); @@ -74,12 +88,25 @@ if(attachments != null){ Iterator iter = attachments.iterator(); Set set = new TreeSet(); - while(iter.hasNext()) - set.add(((Attachment)iter.next()).clone()); + while(iter.hasNext()){ + Attachment file = (Attachment)iter.next(); + Attachment newFile = (Attachment) file.clone(); + if(toolContentHandler != null){ + //duplicate file node in repository + NodeKey keys = toolContentHandler.copyFile(file.getFileUuid()); + newFile.setFileUuid(keys.getUuid()); + newFile.setFileVersionId(keys.getVersion()); + } + set.add(newFile); + } msg.attachments = set; } } catch (CloneNotSupportedException e) { log.error("When clone " + Forum.class + " failed"); + } catch (ItemNotFoundException e) { + log.error("When clone " + Forum.class + " failed"); + } catch (RepositoryCheckedException e) { + log.error("When clone " + Forum.class + " failed"); } return msg; Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r62402371ee899b9b20c61c988149efbec1cc00bd -r1a5fe7ba5d0193d7c80351af38dd8959ac31d964 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 62402371ee899b9b20c61c988149efbec1cc00bd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 1a5fe7ba5d0193d7c80351af38dd8959ac31d964) @@ -7,6 +7,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.Map.Entry; @@ -301,8 +302,8 @@ return seq.getRootMessage().getUid(); } - public List getAuthoredTopics(Long forumId) { - List list = messageDao.getAuthoredMessage(forumId); + public List getAuthoredTopics(Long forumUid) { + List list = messageDao.getAuthoredMessage(forumUid); return MessageDTO.getMessageDTO(list); } @@ -441,11 +442,7 @@ throw new ForumException(error); } - //save default content by given ID. - Forum forum = new Forum(); - forum = (Forum) defaultForum.clone(); - - return forum; + return defaultForum; } @@ -463,8 +460,19 @@ fromContent = getDefaultContent(fromContentId); } Forum toContent = Forum.newInstance(fromContent,toContentId,forumToolContentHandler); - forumDao.save(toContent); + + //save topics in this forum + Set topics = toContent.getMessages(); + if(topics != null){ + Iterator iter = topics.iterator(); + while(iter.hasNext()){ + Message msg = (Message) iter.next(); + //set this message forum Uid as toContent + msg.setForum(toContent); + createRootTopic(toContent.getUid(),null,msg); + } + } } @@ -557,7 +565,17 @@ //save default content by given ID. Forum content = new Forum(); content = Forum.newInstance(defaultContent,contentID,forumToolContentHandler); - + //save topics in this forum + Set topics = content.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 content; } //*************************************************************************************************************** Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/AuthoringAction.java =================================================================== diff -u -r62402371ee899b9b20c61c988149efbec1cc00bd -r1a5fe7ba5d0193d7c80351af38dd8959ac31d964 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision 62402371ee899b9b20c61c988149efbec1cc00bd) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/AuthoringAction.java (.../AuthoringAction.java) (revision 1a5fe7ba5d0193d7c80351af38dd8959ac31d964) @@ -144,9 +144,10 @@ forum = forumService.getForumByContentId(contentId); //if forum does not exist, try to use default content instead. if(forum == null){ - forum = forumService.getDefaultContent(contentId); - } - topics = forumService.getAuthoredTopics(contentId); + forum = forumService.getDefaultContent(contentId); + topics = forum.getMessages() != null? new ArrayList(forum.getMessages()):null; + }else + topics = forumService.getAuthoredTopics(forum.getUid()); //initialize attachmentList List attachmentList = getAttachmentList(request); attachmentList.addAll(forum.getAttachments());