Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java =================================================================== diff -u -r6f2921676dc2b18ab8f8471a40d95e5db1ffa92c -rfb96ff9dba9dfa8cf9646fddcca425851075c80a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision 6f2921676dc2b18ab8f8471a40d95e5db1ffa92c) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/util/ForumConstants.java (.../ForumConstants.java) (revision fb96ff9dba9dfa8cf9646fddcca425851075c80a) @@ -83,5 +83,7 @@ public static final String ATTR_FORUM_INSTRCUTION = "instruction"; public static final String FORUM_TITLE = "forum_title"; + + public static final String ATTR_TOOL_CONTENT_TOPICS = "ToolContentTopicList"; } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/ExportServlet.java =================================================================== diff -u -rcc9e4f5a2ded59de3f23baa5dda20c7867df1888 -rfb96ff9dba9dfa8cf9646fddcca425851075c80a --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/ExportServlet.java (.../ExportServlet.java) (revision cc9e4f5a2ded59de3f23baa5dda20c7867df1888) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/ExportServlet.java (.../ExportServlet.java) (revision fb96ff9dba9dfa8cf9646fddcca425851075c80a) @@ -26,10 +26,11 @@ package org.lamsfoundation.lams.tool.forum.web.actions; import java.util.ArrayList; -import java.util.HashMap; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.TreeMap; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -39,22 +40,43 @@ import org.apache.log4j.Logger; import org.lamsfoundation.lams.tool.ToolAccessMode; 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.service.ForumServiceProxy; import org.lamsfoundation.lams.tool.forum.service.IForumService; +import org.lamsfoundation.lams.tool.forum.util.ForumConstants; +import org.lamsfoundation.lams.tool.forum.util.ForumToolContentHandler; import org.lamsfoundation.lams.web.servlet.AbstractExportPortfolioServlet; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; public class ExportServlet extends AbstractExportPortfolioServlet { private static final long serialVersionUID = -4529093489007108143L; private static Logger logger = Logger.getLogger(ExportServlet.class); private final String FILENAME = "forum_main.html"; + ForumToolContentHandler handler; + private class StringComparator implements Comparator{ + public int compare(String o1, String o2) { + if(o1 != null && o2 != null){ + int c = o1.compareTo(o2); + //to ensure String does not overlap even they have duplicated name. + return c==0?1:c; + }else if(o1 != null) + return 1; + else + return -1; + } + } public String doExport(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { + + request.setAttribute(AttributeNames.PARAM_MODE, mode); if (StringUtils.equals(mode,ToolAccessMode.LEARNER.toString())){ learner(request,response,directoryName,cookies); }else if (StringUtils.equals(mode,ToolAccessMode.TEACHER.toString())){ @@ -87,12 +109,24 @@ throw new ForumException(error); } - List topicList = forumService.getAllTopicsFromSession(toolSessionID); - Map topicsByUser = getTopicsSortedByAuthor(topicList); - request.getSession().setAttribute("report",topicsByUser); + // get root topic list and its children topics + List msgDtoList = getSessionTopicList(toolSessionID, directoryName, forumService); + ForumToolSession session = forumService.getSessionBySessionId(toolSessionID); + + //put all message into Map. Key is session name, value is list of all topics in this session. + Map sessionTopicMap = new TreeMap(); + sessionTopicMap.put(session.getSessionName(), msgDtoList); + + request.setAttribute(ForumConstants.ATTR_TOOL_CONTENT_TOPICS, msgDtoList); + request.getSession().setAttribute(ForumConstants.AUTHORING_TOPIC_THREAD,msgDtoList); + + //set forum title + request.setAttribute(ForumConstants.FORUM_TITLE, session.getForum().getTitle()); + } + - public void teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) + public void teacher(HttpServletRequest request, HttpServletResponse response, String directoryName, Cookie[] cookies) { IForumService forumService = ForumServiceProxy.getForumService(getServletContext()); @@ -115,31 +149,52 @@ //return FileDetailsDTO list according to the given sessionID List sessionList = forumService.getSessionsByContentId(toolContentID); Iterator iter = sessionList.iterator(); - Map topicsByUser = new HashMap(); + //put all message into Map. Key is session name, value is list of all topics in this session. + Map> topicsByUser = new TreeMap>(new StringComparator()); while(iter.hasNext()){ ForumToolSession session = (ForumToolSession) iter.next(); - List topicList = forumService.getAllTopicsFromSession(session.getSessionId()); - topicsByUser.putAll(getTopicsSortedByAuthor(topicList)); + List sessionMsgDTO = getSessionTopicList(session.getSessionId(), directoryName, forumService); + topicsByUser.put(session.getSessionName(),sessionMsgDTO); } - request.getSession().setAttribute("report",topicsByUser); + request.getSession().setAttribute(ForumConstants.ATTR_TOOL_CONTENT_TOPICS,topicsByUser); } + /** - * @param topicList + * Get all topics with their children message for a special ToolSessionID. + * @param toolSessionID + * @param directoryName + * @param forumService * @return */ - private Map getTopicsSortedByAuthor(List topicList) { - Map topicsByUser = new HashMap(); - Iterator iter = topicList.iterator(); - while(iter.hasNext()){ - MessageDTO dto = (MessageDTO) iter.next(); - dto.getMessage().getReport(); - List list = (List) topicsByUser.get(dto.getMessage().getCreatedBy()); - if(list == null){ - list = new ArrayList(); - topicsByUser.put(dto.getMessage().getCreatedBy(),list); + private List getSessionTopicList(Long toolSessionID, String directoryName, IForumService forumService) { + List rootTopics = forumService.getRootTopics(toolSessionID); + List msgDtoList = new ArrayList(); + for(MessageDTO msgDto : rootTopics){ + List topics = forumService.getTopicThread(msgDto.getMessage().getUid()); + //check attachement, if it has, save it into local directory. + for(MessageDTO topic:topics){ + if(topic.getHasAttachment()){ + Iterator iter = topic.getMessage().getAttachments().iterator(); + while(iter.hasNext()){ + Attachment att = (Attachment) iter.next(); + try { + handler = getToolContentHandler(); + handler.saveFile(att.getFileUuid(), directoryName); + } catch (Exception e) { + logger.equals("Export forum topic attachment failed: " + e.toString()); + } + } + } } - list.add(dto); + msgDtoList.addAll(topics); } - return topicsByUser; + return msgDtoList; } + private ForumToolContentHandler getToolContentHandler() { + if ( handler == null ) { + WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext()); + handler = (ForumToolContentHandler) wac.getBean("forumToolContentHandler"); + } + return handler; + } } Index: lams_tool_forum/web/jsps/export/exportportfolio.jsp =================================================================== diff -u -r5b6a17732f3cc14cf5005aa71d92e553e21c60b0 -rfb96ff9dba9dfa8cf9646fddcca425851075c80a --- lams_tool_forum/web/jsps/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision 5b6a17732f3cc14cf5005aa71d92e553e21c60b0) +++ lams_tool_forum/web/jsps/export/exportportfolio.jsp (.../exportportfolio.jsp) (revision fb96ff9dba9dfa8cf9646fddcca425851075c80a) @@ -8,129 +8,98 @@ -
+

+ ${forum_title} +

-

-
+
-
+
-
- - -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - +

+ +

+ + + Message from ${sessionName}: + + + + +
em;"> +
- - - , - - , - -
- - - -
- - - - -
- - - - - - -
+ + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + <%-- display mark for teacher --%> + + +
+ + + + + + + + +
+ + + + - + + + +
+ + + + + + +
+ + + + + -
- - - -
- - - - - - - - - - -
- - - - - - - - - - -
-
-
+ - -
-
+ + ${msgDto.message.report.mark} + + + + + + + + + + +
- -
+ - +
- +