Index: lams_tool_preview/.classpath =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/.classpath (.../.classpath) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/.classpath (.../.classpath) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -2,7 +2,6 @@ - @@ -27,5 +26,6 @@ + Index: lams_tool_preview/.externalToolBuilders/SASS_lams_tool_preview.launch =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/.externalToolBuilders/SASS_lams_tool_preview.launch (.../SASS_lams_tool_preview.launch) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/.externalToolBuilders/SASS_lams_tool_preview.launch (.../SASS_lams_tool_preview.launch) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -5,6 +5,12 @@ + + + + + + Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewDAOHibernate.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewDAOHibernate.java (.../PeerreviewDAOHibernate.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewDAOHibernate.java (.../PeerreviewDAOHibernate.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -50,6 +50,7 @@ + " LEFT JOIN tl_laprev11_user u ON u.session_uid = s.uid " + " GROUP BY session_id"; + @SuppressWarnings("rawtypes") @Override public Peerreview getByContentId(Long contentId) { List list = find(GET_RESOURCE_BY_CONTENTID, contentId); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewSessionDAOHibernate.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewSessionDAOHibernate.java (.../PeerreviewSessionDAOHibernate.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewSessionDAOHibernate.java (.../PeerreviewSessionDAOHibernate.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -37,6 +37,7 @@ + " as p where p.peerreview.contentId=?"; @Override + @SuppressWarnings("rawtypes") public PeerreviewSession getSessionBySessionId(Long sessionId) { List list = find(FIND_BY_SESSION_ID, sessionId); if (list == null || list.size() == 0) { @@ -45,6 +46,7 @@ return (PeerreviewSession) list.get(0); } + @SuppressWarnings("unchecked") @Override public List getByContentId(Long toolContentId) { return find(FIND_BY_CONTENT_ID, toolContentId); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/dao/hibernate/PeerreviewUserDAOHibernate.java (.../PeerreviewUserDAOHibernate.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -60,7 +60,8 @@ + " AS u WHERE u.session.sessionId=?"; @Override - public PeerreviewUser getUserByUserIDAndSessionID(Long userID, Long sessionId) { + @SuppressWarnings("rawtypes") + public PeerreviewUser getUserByUserIDAndSessionID(Long userID, Long sessionId) { List list = find(FIND_BY_USER_ID_SESSION_ID, new Object[] { userID, sessionId }); if (list == null || list.size() == 0) { return null; @@ -74,21 +75,24 @@ } @Override - public PeerreviewUser getUserByUserIDAndContentID(Long userId, Long contentId) { + @SuppressWarnings("rawtypes") + public PeerreviewUser getUserByUserIDAndContentID(Long userId, Long contentId) { List list = find(FIND_BY_USER_ID_CONTENT_ID, new Object[] { userId, contentId }); if (list == null || list.size() == 0) { return null; } return (PeerreviewUser) list.get(0); } + @SuppressWarnings("unchecked") @Override public List getBySessionID(Long sessionId) { return find(FIND_BY_SESSION_ID, sessionId); } @Override - public int getCountUsersBySession(final Long toolSessionId, final Long excludeUserId) { + @SuppressWarnings("rawtypes") + public int getCountUsersBySession(final Long toolSessionId, final Long excludeUserId) { List list = find(GET_COUNT_USERS_FOR_SESSION_EXCLUDE_USER, new Object[] { toolSessionId, excludeUserId }); if (list == null || list.size() == 0) { @@ -98,7 +102,8 @@ } @Override - public int getCountUsersBySession(final Long toolSessionId) { + @SuppressWarnings("rawtypes") + public int getCountUsersBySession(final Long toolSessionId) { List list = find(GET_COUNT_USERS_FOR_SESSION, new Object[] { toolSessionId }); if (list == null || list.size() == 0) { @@ -223,6 +228,7 @@ + " LEFT JOIN ( SELECT item_id, comment, user_id FROM lams_rating_comment " + " WHERE rating_criteria_id = :ratingCriteriaId AND (item_id = :itemId || item_id = rating_criteria_id) ) rc ON rc.user_id = user.user_id " + " WHERE r.rating IS NOT NULL OR rc.comment IS NOT NULL"; + @SuppressWarnings("unchecked") @Override public List getDetailedRatingsComments(Long toolContentId, Long toolSessionId, Long criteriaId, Long itemId ) { Query query = getSession().createSQLQuery(SELECT_ALL_RATINGS_COMMENTS_LEFT_FOR_ITEM) @@ -242,6 +248,7 @@ + " FROM lams_rating_comment r " + " WHERE r.rating_criteria_id = :ratingCriteriaId " + " GROUP BY r.item_id ) rating ON user.user_id = rating.item_id "; + @SuppressWarnings("unchecked") @Override public List getCommentsCounts(Long toolContentId, Long toolSessionId, RatingCriteria criteria, Integer page, Integer size, int sorting, String searchString, @@ -342,6 +349,7 @@ } + @SuppressWarnings("unchecked") @Override public List getPagedUsers(Long toolSessionId, Integer page, Integer size, int sorting, String searchString) { Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java (.../PeerreviewSession.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/model/PeerreviewSession.java (.../PeerreviewSession.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -25,8 +25,6 @@ import java.util.Date; -import org.apache.log4j.Logger; - /** * Peerreview Session * @@ -37,7 +35,7 @@ */ public class PeerreviewSession { - private static Logger log = Logger.getLogger(PeerreviewSession.class); +// private static Logger log = Logger.getLogger(PeerreviewSession.class); private Long uid; private Long sessionId; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewApplicationException.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewApplicationException.java (.../PeerreviewApplicationException.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewApplicationException.java (.../PeerreviewApplicationException.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -25,6 +25,8 @@ public class PeerreviewApplicationException extends Exception { + private static final long serialVersionUID = 5380954540582297042L; + public PeerreviewApplicationException() { super(); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -289,8 +289,6 @@ return false; } - // long start = System.currentTimeMillis(); - PeerreviewSession session = getPeerreviewSessionBySessionId(toolSessionId); int numberPotentialLearners = toolService.getCountUsersForActivity(toolSessionId); int numberActualLearners = peerreviewUserDao.getCountUsersBySession(toolSessionId); @@ -299,9 +297,9 @@ numUsersCreated = peerreviewUserDao.createUsersForSession(session); } - // log.debug("Peer Review UserCreateThread " + toolSessionId + ": numUsersCreated "+numUsersCreated+" took: - // " - // + (System.currentTimeMillis() - start) + "ms."); + if ( log.isDebugEnabled() ) { + log.debug("Peer Review UserCreateThread " + toolSessionId + ": numUsersCreated "+numUsersCreated); + } creatingUsersForSessionIds.remove(toolSessionId); return true; @@ -499,7 +497,6 @@ } @Override - @SuppressWarnings("unchecked") public LinkedHashMap exportTeamReportSpreadsheet(Long toolContentId) { Peerreview peerreview = peerreviewDao.getByContentId(toolContentId); @@ -535,28 +532,26 @@ // ***************************************************************************** private Peerreview getDefaultPeerreview() throws PeerreviewApplicationException { - Long defaultPeerreviewId = getToolDefaultContentIdBySignature(PeerreviewConstants.TOOL_SIGNATURE); + Long defaultPeerreviewId = new Long( + toolService.getToolDefaultContentIdBySignature(PeerreviewConstants.TOOL_SIGNATURE)); + if (defaultPeerreviewId.equals(0L)) { + String error = new StringBuilder("Could not retrieve default content id for this tool ") + .append(PeerreviewConstants.TOOL_SIGNATURE).toString(); + log.error(error); + throw new PeerreviewApplicationException(error); + } Peerreview defaultPeerreview = getPeerreviewByContentId(defaultPeerreviewId); if (defaultPeerreview == null) { - String error = messageService.getMessage("error.msg.default.content.not.find"); + String error = new StringBuilder("Could not retrieve default content id for this tool ") + .append(PeerreviewConstants.TOOL_SIGNATURE).append(" Looking for id ").append(defaultPeerreviewId) + .toString(); log.error(error); throw new PeerreviewApplicationException(error); } return defaultPeerreview; } - private Long getToolDefaultContentIdBySignature(String toolSignature) throws PeerreviewApplicationException { - Long contentId = null; - contentId = new Long(toolService.getToolDefaultContentIdBySignature(toolSignature)); - if (contentId == null) { - String error = messageService.getMessage("error.msg.default.content.not.find"); - log.error(error); - throw new PeerreviewApplicationException(error); - } - return contentId; - } - // ******************************************************************************* // ToolContentManager, ToolSessionManager methods // ******************************************************************************* @@ -725,7 +720,6 @@ } @Override - @SuppressWarnings("unchecked") public void removeLearnerContent(Long toolContentId, Integer userId) throws ToolException { if (log.isDebugEnabled()) { log.debug("Removing Peerreview content for user ID " + userId + " and toolContentId " + toolContentId); @@ -856,6 +850,7 @@ return null; } + @SuppressWarnings("rawtypes") @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { @@ -893,7 +888,8 @@ } @Override - public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { + @SuppressWarnings("rawtypes") + public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return null; } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/UploadPeerreviewFileException.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/UploadPeerreviewFileException.java (.../UploadPeerreviewFileException.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/UploadPeerreviewFileException.java (.../UploadPeerreviewFileException.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -25,6 +25,8 @@ public class UploadPeerreviewFileException extends Exception { + private static final long serialVersionUID = -8545363794555290145L; + public UploadPeerreviewFileException() { super(); Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java (.../EmailAnalysisBuilder.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/util/EmailAnalysisBuilder.java (.../EmailAnalysisBuilder.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -287,12 +287,13 @@ * does a lot of processing that is not needed for the SPA/SAPA calculations so getting the raw data * avoids that processing. */ + @SuppressWarnings("unchecked") private HashMap> processRawRatingData() { Collection criteriaIds = new ArrayList(); for ( RatingCriteria criteria : criteriaForCriteriaTable ) { criteriaIds.add(criteria.getRatingCriteriaId()); } - List rawRatingsForSession = ratingService.getRatingsByCriteriasAndItems(criteriaIds, learnerDataMap.keySet()); + List rawRatingsForSession = ratingService.getRatingsByCriteriasAndItems(criteriaIds, learnerDataMap.keySet()); HashMap> tally = new HashMap>(); for ( Object obj : rawRatingsForSession ) { Rating rating = (Rating) obj; Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/AuthoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/ClearSessionAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/LearningAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/MonitoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/action/TblMonitoringAction.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/AuthoringController.java =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/AuthoringController.java (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/AuthoringController.java (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,239 @@ +/**************************************************************** + * 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 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.peerreview.web.controller; + +import java.lang.reflect.InvocationTargetException; +import java.sql.Timestamp; +import java.util.Date; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.authoring.web.AuthoringConstants; +import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; +import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; +import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; +import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; +import org.lamsfoundation.lams.tool.peerreview.web.form.PeerreviewForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; + +/** + * @author Steve.Ni + */ +@Controller +@RequestMapping("/authoring") +public class AuthoringController { + + private static Logger log = Logger.getLogger(AuthoringController.class); + private static final String START_PATH = "/pages/authoring/start"; + private static final String AUTHORING_PATH = "/pages/authoring/authoring"; + + @Autowired + @Qualifier("peerreviewService") + private IPeerreviewService service; + + @RequestMapping("/start") + public String start(@ModelAttribute PeerreviewForm peerreviewForm, HttpServletRequest request, HttpSession session) + throws ServletException { + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + return doStart(peerreviewForm, request, session); + } + + @RequestMapping("/defineLater") + public String defineLater(@ModelAttribute PeerreviewForm peerreviewForm, HttpServletRequest request, + HttpSession session) throws ServletException { + // update define later flag to true + Long contentId = new Long(WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID)); + Peerreview peerreview = service.getPeerreviewByContentId(contentId); + + peerreview.setDefineLater(true); + service.saveOrUpdatePeerreview(peerreview); + + //audit log the teacher has started editing activity in monitor + service.auditLogStartEditingActivityInMonitor(contentId); + + request.setAttribute(AttributeNames.ATTR_MODE, ToolAccessMode.TEACHER.toString()); + return doStart(peerreviewForm, request, session); + } + + /** + * Read peerreview data from database and put them into HttpSession. It will + * redirect to init.do directly after this method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item + * lost when user "refresh page", + * + * @throws ServletException + */ + private String doStart(PeerreviewForm peerreviewForm, HttpServletRequest request, HttpSession session) + throws ServletException { + + Peerreview peerreview = null; + + // save toolContentID into HTTPSession + Long contentId = new Long(WebUtil.readLongParam(request, PeerreviewConstants.PARAM_TOOL_CONTENT_ID)); + + // Get contentFolderID and save to form. + String contentFolderID = WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID); + peerreviewForm.setContentFolderID(contentFolderID); + + // initial Session Map + SessionMap sessionMap = new SessionMap(); + session.setAttribute(sessionMap.getSessionID(), sessionMap); + peerreviewForm.setSessionMapID(sessionMap.getSessionID()); + + try { + peerreview = service.getPeerreviewByContentId(contentId); + // if peerreview does not exist, try to use default content instead. + if (peerreview == null) { + peerreview = service.getDefaultContent(contentId); + } + + peerreviewForm.setPeerreview(peerreview); + } catch (Exception e) { + AuthoringController.log.error(e); + throw new ServletException(e); + } + + // get rating criterias from DB + List ratingCriterias = service.getRatingCriterias(contentId); + sessionMap.put(AttributeNames.ATTR_RATING_CRITERIAS, ratingCriterias); + + sessionMap.put(PeerreviewConstants.ATTR_PEERREVIEW_FORM, peerreviewForm); + session.setAttribute(AttributeNames.PARAM_NOTIFY_CLOSE_URL, + request.getParameter(AttributeNames.PARAM_NOTIFY_CLOSE_URL)); + + return START_PATH; + } + + /** + * Display same entire authoring page content from HttpSession variable. + * + * @throws ServletException + */ + @RequestMapping("/init") + @SuppressWarnings("unchecked") + public String initPage(@ModelAttribute PeerreviewForm peerreviewForm, HttpServletRequest request, + HttpSession session) throws ServletException { + String sessionMapID = WebUtil.readStrParam(request, PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + PeerreviewForm existForm = (PeerreviewForm) sessionMap.get(PeerreviewConstants.ATTR_PEERREVIEW_FORM); + + try { + PropertyUtils.copyProperties(peerreviewForm, existForm); + } catch (Exception e) { + throw new ServletException(e); + } + + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + return AUTHORING_PATH; + } + + /** + * This method will persist all information in this authoring page, include + * all peer review item, information etc. + * + * @throws NoSuchMethodException + * @throws InvocationTargetException + * @throws IllegalAccessException + */ + @SuppressWarnings("unchecked") + @RequestMapping("/update") + public String updateContent(@ModelAttribute PeerreviewForm peerreviewForm, HttpServletRequest request, + HttpSession session) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { + + // get back sessionMAP + SessionMap sessionMap = (SessionMap) session + .getAttribute(peerreviewForm.getSessionMapID()); + + ToolAccessMode mode = WebUtil.readToolAccessModeAuthorDefaulted(request); + request.setAttribute(AttributeNames.ATTR_MODE, mode.toString()); + + Peerreview peerreview = peerreviewForm.getPeerreview(); + + // **********************************Get Peerreview PO********************* + Peerreview peerreviewPO = service.getPeerreviewByContentId(peerreviewForm.getPeerreview().getContentId()); + if (peerreviewPO == null) { + // new Peerreview, create it + peerreviewPO = peerreview; + peerreviewPO.setCreated(new Timestamp(new Date().getTime())); + peerreviewPO.setUpdated(new Timestamp(new Date().getTime())); + + } else { + Long uid = peerreviewPO.getUid(); + PropertyUtils.copyProperties(peerreviewPO, peerreview); + // get back UID + peerreviewPO.setUid(uid); + + // if it's a teacher - change define later status + if (mode.isTeacher()) { + peerreviewPO.setDefineLater(false); + } + + peerreviewPO.setUpdated(new Timestamp(new Date().getTime())); + } + + // *******************************Handle user******************* + // get back login user DTO + UserDTO user = (UserDTO) session.getAttribute(AttributeNames.USER); + PeerreviewUser peerreviewUser = service.getUserByIDAndContent(new Long(user.getUserID().intValue()), + peerreviewForm.getPeerreview().getContentId()); + if (peerreviewUser == null) { + peerreviewUser = new PeerreviewUser(user, peerreviewPO); + } + + peerreviewPO.setCreatedBy(peerreviewUser); + + // finally persist peerreviewPO + service.saveOrUpdatePeerreview(peerreviewPO); + + // ************************* Handle rating criterias ******************* + Long contentId = peerreview.getContentId(); + List oldCriterias = (List) sessionMap.get(AttributeNames.ATTR_RATING_CRITERIAS); + service.saveRatingCriterias(request, oldCriterias, contentId); + + peerreviewForm.setPeerreview(peerreviewPO); + + request.setAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG, Boolean.TRUE); + return AUTHORING_PATH; + } + +} Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/ClearSessionController.java =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/ClearSessionController.java (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/ClearSessionController.java (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,62 @@ +/**************************************************************** + * 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.peerreview.web.controller; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.lamsfoundation.lams.authoring.web.AuthoringConstants; +import org.lamsfoundation.lams.authoring.web.LamsAuthoringFinishController; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.WebApplicationContext; + +/** + * This class give a chance to clear HttpSession when user save/close authoring page. + * @author Steve.Ni + */ +@Controller +public class ClearSessionController extends LamsAuthoringFinishController { + + @Autowired + private WebApplicationContext applicationContext; + + @RequestMapping("/clearsession") + public void execute(HttpServletRequest request, HttpServletResponse response) throws IOException { + super.execute(request, response, applicationContext); + } + + @Override + public void clearSession(String customiseSessionID, HttpSession session, ToolAccessMode mode) { + session.removeAttribute(AuthoringConstants.LAMS_AUTHORING_SUCCESS_FLAG); + if (mode.isAuthor()) { + session.removeAttribute(customiseSessionID); + } + } +} \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/LearningController.java (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,881 @@ +/**************************************************************** + * 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.peerreview.web.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.learning.web.bean.ActivityPositionDTO; +import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; +import org.lamsfoundation.lams.notebook.model.NotebookEntry; +import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; +import org.lamsfoundation.lams.rating.dto.StyledCriteriaRatingDTO; +import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; +import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; +import org.lamsfoundation.lams.tool.peerreview.model.PeerreviewUser; +import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; +import org.lamsfoundation.lams.tool.peerreview.service.PeerreviewApplicationException; +import org.lamsfoundation.lams.tool.peerreview.web.form.ReflectionForm; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.WebApplicationContext; + +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * @author Steve.Ni + */ +@Controller +@RequestMapping("/learning") +public class LearningController { + + private static Logger log = Logger.getLogger(LearningController.class); + + private static final String LEARNING_SUCCESS_PATH = "/pages/learning/learning"; + private static final String HIDDEN_USER_PATH = "/pages/learning/learningHiddenUser"; + private static final String DEFINE_LATER_PATH = "/pages/learning/definelater"; + private static final String SHOW_RESULTS_PATH = "/learning/showResults.do"; + private static final String NEW_REFLECTION_PATH = "/learning/newReflection.do"; + private static final String FINISH_PATH = "/pages/learning/finish"; + private static final String SHOW_RESULTS_PAGE_PATH = "/pages/learning/results"; + private static final String NOTEBOOK_PATH = "/pages/learning/notebook"; + + @Autowired + @Qualifier("peerreviewService") + private IPeerreviewService service; + + @Autowired + private WebApplicationContext applicationContext; + + /** + * Read peerreview data from database and put them into HttpSession. It will redirect to init.do directly after this + * method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * + * @throws IOException + * @throws ServletException + * + */ + @RequestMapping("/start") + public String start(HttpServletRequest request, HttpSession session) throws IOException, ServletException { + + // initial Session Map + SessionMap sessionMap = new SessionMap(); + session.setAttribute(sessionMap.getSessionID(), sessionMap); + + // save toolContentID into HTTPSession + ToolAccessMode mode = WebUtil.readToolAccessModeParam(request, AttributeNames.PARAM_MODE, true); + + Long sessionId = new Long(request.getParameter(AttributeNames.PARAM_TOOL_SESSION_ID)); + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); + sessionMap.put(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); + + // If user already exists go straight to the normal screen, otherwise go to a refresh screen + // until the user is created. The user will be created by the UserCreateThread(), which should + // always be run as even if this user exists, others may have been added to the lesson/group + // and need to be included for this user. If it is an update, the user won't see them this time + // but they will if they choose to refresh the activity. + PeerreviewUser user = null; + if (mode != null && mode.isTeacher()) { + // monitoring mode - user is specified in URL + // peerreviewUser may be null if the user was force completed. + long userId = WebUtil.readLongParam(request, AttributeNames.PARAM_USER_ID, false); + user = service.getUserByIDAndSession(userId, sessionId); + if (user == null) { + log.error(new StringBuilder( + "Unable to find specified user for peerreview activity. Screens are likely to fail. SessionId=") + .append(sessionId).append(" UserId=").append(userId).toString()); + } + } else { + UserDTO userDTO = (UserDTO) session.getAttribute(AttributeNames.USER); + user = service.getUserByIDAndSession(new Long(userDTO.getUserID().intValue()), sessionId); + } + + try { + Thread t = new Thread(new UserCreateThread(sessionId, service)); + t.start(); + } catch (Throwable e) { + throw new IOException(e); + } + + // goto refresh screen TODO create a specialised page + if (user == null) { + request.setAttribute(PeerreviewConstants.ATTR_CREATING_USERS, "true"); + return DEFINE_LATER_PATH; + + //in case user is hidden by the monitor - show him learningHiddenUser.jsp page + } else if (user.isHidden()) { + return HIDDEN_USER_PATH; + + // goto standard screen + } else { + sessionMap.put(AttributeNames.ATTR_MODE, mode); + sessionMap.put(PeerreviewConstants.ATTR_USER, user); + return startRating(request, session, sessionMap, sessionId, user, mode, null, null); + } + + } + + /** + * Same as start but doesn't create a new session map. + * + * @throws IOException + * @throws ServletException + * + */ + @RequestMapping("/refresh") + @SuppressWarnings("unchecked") + public String refresh(HttpServletRequest request, HttpSession session) throws IOException, ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, sessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId", true); + RatingCriteria criteria = criteriaId != null ? service.getCriteriaByCriteriaId(criteriaId) : null; + + return startRating(request, session, sessionMap, sessionId, user, mode, criteria, null); + + } + + private class UserCreateThread implements Runnable { + private Long toolSessionId; + private IPeerreviewService service; + + private Logger log = Logger.getLogger(UserCreateThread.class); + + public UserCreateThread(Long toolSessionId, IPeerreviewService service) { + this.toolSessionId = toolSessionId; + this.service = service; + } + + @Override + public void run() { + try { + service.createUsersFromLesson(toolSessionId); + } catch (Throwable e) { + String message = e.getMessage() != null ? e.getMessage() : e.getClass().getName(); + this.log.error( + "Exception thrown creating Peer Review users for session " + toolSessionId + ": " + message, e); + e.printStackTrace(); + } + } + } // end Thread class + + /** + * Read peerreview data from database and put them into HttpSession. It will redirect to init.do directly after this + * method run successfully. + * + * This method will avoid read database again and lost un-saved resouce item lost when user "refresh page", + * + * @throws IOException + * @throws ServletException + * + */ + private String startRating(HttpServletRequest request, HttpSession session, SessionMap sessionMap, + Long sessionId, PeerreviewUser user, ToolAccessMode mode, RatingCriteria currentCriteria, Boolean next) + throws IOException, ServletException { + + Peerreview peerreview = service.getPeerreviewBySessionId(sessionId); + + // get notebook entry + String entryText = new String(); + NotebookEntry notebookEntry = service.getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + PeerreviewConstants.TOOL_SIGNATURE, user.getUserId().intValue()); + if (notebookEntry != null) { + entryText = notebookEntry.getEntry(); + } + + // basic information + sessionMap.put(PeerreviewConstants.ATTR_PEERREVIEW, peerreview); + sessionMap.put(PeerreviewConstants.ATTR_TITLE, peerreview.getTitle()); + sessionMap.put(PeerreviewConstants.ATTR_RESOURCE_INSTRUCTION, peerreview.getInstructions()); + sessionMap.put(PeerreviewConstants.ATTR_LOCK_ON_FINISH, peerreview.getLockWhenFinished()); + + // reflection information + sessionMap.put(PeerreviewConstants.ATTR_REFLECTION_ON, peerreview.isReflectOnActivity()); + sessionMap.put(PeerreviewConstants.ATTR_REFLECTION_INSTRUCTION, peerreview.getReflectInstructions()); + sessionMap.put(PeerreviewConstants.ATTR_REFLECTION_ENTRY, entryText); + + // add define later support + if (peerreview.isDefineLater()) { + return DEFINE_LATER_PATH; + } + + // set contentInUse flag to true! + peerreview.setContentInUse(true); + peerreview.setDefineLater(false); + service.saveOrUpdatePeerreview(peerreview); + + ActivityPositionDTO activityPosition = LearningWebUtil.putActivityPositionInRequestByToolSessionId(sessionId, + request, applicationContext.getServletContext()); + sessionMap.put(AttributeNames.ATTR_ACTIVITY_POSITION, activityPosition); + + //markUser as not Finished if it's redo + boolean isRedo = WebUtil.readBooleanParam(request, "isRedo", false); + if (!mode.isTeacher() && !peerreview.getLockWhenFinished() && isRedo && user.isSessionFinished()) { + user.setSessionFinished(false); + service.updateUser(user); + } + + RatingCriteria newCriteria = null; + if (!user.isSessionFinished()) { + // mark user as finished if there are not any criterias or we have processed the last one. + List criterias = service.getCriteriasByToolContentId(peerreview.getContentId()); + + if (criterias.size() > 0) { + if (currentCriteria == null) { + // get the first one + newCriteria = criterias.get(0); + } else if (next == null) { + // reload the current one + newCriteria = currentCriteria; + } else if (next) { + // get the next one + for (RatingCriteria toCheck : criterias) { + if (toCheck.getOrderId() > currentCriteria.getOrderId()) { + newCriteria = toCheck; + break; + } + } + } else { + // get the previous one + RatingCriteria prev = null; + for (RatingCriteria toCheck : criterias) { + if (toCheck.getOrderId() == currentCriteria.getOrderId()) { + newCriteria = prev != null ? prev : currentCriteria; + break; + } else { + prev = toCheck; + } + } + + } + } + + if (newCriteria == null) { + user.setSessionFinished(true); + service.updateUser(user); + } else { + // work out the step details. + int numCriteria = criterias.size(); + request.setAttribute("numCriteria", numCriteria); + + int stepNum = 1; + for (RatingCriteria toCheck : criterias) { + if (newCriteria.getRatingCriteriaId() == toCheck.getRatingCriteriaId()) + break; + stepNum++; + } + request.setAttribute("stepNumber", stepNum); + } + + } + + sessionMap.put("isDisabled", + peerreview.getLockWhenFinished() && user.isSessionFinished() || (mode != null) && mode.isTeacher()); + sessionMap.put(PeerreviewConstants.ATTR_USER_FINISHED, user.isSessionFinished()); + sessionMap.put("isSessionCompleted", user.getSession().getStatus() == PeerreviewConstants.COMPLETED); + +// TODO add parameters and fix redirects + // finally, work out which page to go to! + if (user.isSessionFinished()) { + String redirect; + if (peerreview.isShowRatingsLeftForUser() || peerreview.isShowRatingsLeftByUser() + || entryText.length() > 0) { + redirect = SHOW_RESULTS_PATH; + // redirect.addParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + return redirect; + } else if (peerreview.isReflectOnActivity()) { + // do reflection + redirect = NEW_REFLECTION_PATH; + // redirect.addParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + return redirect; + } else { + // finish + return finish(request, session); + } + } else { + return doEdit(request, sessionMap, sessionId, peerreview, newCriteria); + } + + } + + /** + * Displays page with user's ratings left for others and ratings others left for him. + */ + @RequestMapping("/showResults") + @SuppressWarnings("unchecked") + public String showResults(HttpServletRequest request, HttpSession session) { + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + Peerreview peerreview = (Peerreview) sessionMap.get(PeerreviewConstants.ATTR_PEERREVIEW); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + + //markUserFinished if it hasn't been done previously + if (!mode.isTeacher() && !user.isSessionFinished()) { + service.markUserFinished(sessionId, user.getUserId()); + sessionMap.put(PeerreviewConstants.ATTR_USER_FINISHED, true); + } + + // ratings left by and by the user + List ratingCriterias = service.getRatingCriterias(peerreview.getContentId()); + List allUsersDtos = peerreview.isShowRatingsLeftByUser() + ? new ArrayList(ratingCriterias.size()) + : null; + List currentUserDtos = peerreview.isShowRatingsLeftForUser() + ? new ArrayList(ratingCriterias.size()) + : null; + + for (RatingCriteria criteria : ratingCriterias) { + boolean showAllUsers = peerreview.isSelfReview() || criteria.isRankingStyleRating() + || criteria.isHedgeStyleRating() || (mode != null && mode.isTeacher()); + + int sorting = (criteria.isStarStyleRating() || criteria.isHedgeStyleRating()) + ? PeerreviewConstants.SORT_BY_AVERAGE_RESULT_DESC + : PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; + + if (allUsersDtos != null) + allUsersDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, + criteria, user.getUserId(), false, sorting, null, showAllUsers, true)); + + if (currentUserDtos != null) + currentUserDtos.add(service.getUsersRatingsCommentsByCriteriaIdDTO(peerreview.getContentId(), sessionId, + criteria, user.getUserId(), false, sorting, null, showAllUsers, false)); + + } + + if (allUsersDtos != null) + request.setAttribute("allCriteriaRatings", allUsersDtos); + + if (currentUserDtos != null) + request.setAttribute("userRatings", currentUserDtos); + + int[] numPossibleRatings = service.getNumberPossibleRatings(peerreview.getContentId(), sessionId, + user.getUserId()); + request.setAttribute("numberRatings", numPossibleRatings[0]); + request.setAttribute("numberPotentialRatings", numPossibleRatings[1]); + + // check whether finish lock is enabled + sessionMap.put(PeerreviewConstants.ATTR_FINISH_LOCK, peerreview.getLockWhenFinished()); + + // store how many items are rated + int countRatedUsers = service.getCountItemsRatedByUser(peerreview.getContentId(), user.getUserId().intValue()); + sessionMap.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedUsers); + + return SHOW_RESULTS_PAGE_PATH; + } + + /** + * Gets a paged set of data for stars or comments. These are directly saved to the database, not through + * LearnerAction like Ranking and Hedging. + */ + @RequestMapping("/getUsers") + @ResponseBody + @SuppressWarnings("unchecked") + public String getUsers(HttpServletRequest request, HttpServletResponse response, HttpSession session) { + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + Peerreview peerreview = (Peerreview) sessionMap.get(PeerreviewConstants.ATTR_PEERREVIEW); + + Long toolContentId = WebUtil.readLongParam(request, "toolContentId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + Long userId = WebUtil.readLongParam(request, "userId"); + + // paging parameters of tablesorter + int size = WebUtil.readIntParam(request, "size"); + int page = WebUtil.readIntParam(request, "page"); + Integer isSort1 = WebUtil.readIntParam(request, "column[0]", true); + + int sorting = PeerreviewConstants.SORT_BY_NO; + if (isSort1 != null && isSort1.equals(0)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } else if (isSort1 != null && isSort1.equals(1)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + ObjectNode responsedata = JsonNodeFactory.instance.objectNode(); + responsedata.put("total_rows", + service.getCountUsersBySession(toolSessionId, peerreview.isSelfReview() ? -1 : userId)); + responsedata.set("rows", + service.getUsersRatingsCommentsByCriteriaIdJSON(toolContentId, toolSessionId, criteria, userId, page, + size, sorting, null, peerreview.isSelfReview(), true, peerreview.getMaximumRatesPerUser() > 0)); + responsedata.put("countRatedItems", service.getCountItemsRatedByUserByCriteria(criteriaId, userId.intValue())); + + response.setContentType("application/json;charset=UTF-8"); + return responsedata.toString(); + } + + /** + * Edit / View an indiviual criteria. + * + * @throws IOException + * @throws ServletException + * + */ + @RequestMapping("/edit") + @SuppressWarnings("unchecked") + public String edit(HttpServletRequest request, HttpSession session) throws IOException, ServletException { + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + return doEdit(request, sessionMap, toolSessionId, peerreview, criteria); + } + + private String doEdit(HttpServletRequest request, SessionMap sessionMap, Long toolSessionId, + Peerreview peerreview, RatingCriteria criteria) throws ServletException { + + Long toolContentId = peerreview.getContentId(); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + + if ((peerreview.getLockWhenFinished() && user.isSessionFinished()) || (mode != null && mode.isTeacher())) { + log.error("Unable to edit ranking/mark for criteria " + criteria.getRatingCriteriaId() + + " as either the mode is teacher or the user is finished. ToolSessionId " + toolSessionId + + " User " + user + " mode " + mode); + throw new ServletException( + "Unable to edit ranking/mark as either the mode is teacher or the user is finished."); + + } + + Long userId = (mode != null && mode.isTeacher()) ? -1 : user.getUserId(); + + StyledCriteriaRatingDTO dto = service.getUsersRatingsCommentsByCriteriaIdDTO(toolContentId, toolSessionId, + criteria, userId, (criteria.isCommentRating() || criteria.isStarStyleRating()), + PeerreviewConstants.SORT_BY_USERNAME_ASC, null, peerreview.isSelfReview(), true); + + // Send the number of users to rate in rateAll, or send 0. Do not want to modify the criteria min/max as it is originally + // a Hibernate object and don't want to risk updating it in the db. Need to send a flag so why not make flag double as the + // runtime min/max value while leaving min/max as the original criteria definition. + int rateAllUsers = 0; + if ((criteria.isRankingStyleRating() && criteria.getMaxRating() == RatingCriteria.RATING_RANK_ALL) + || (criteria.isStarStyleRating() && criteria.getMinimumRates() == RatingCriteria.RATING_RANK_ALL) + || (criteria.isCommentRating() && criteria.getMinimumRates() == RatingCriteria.RATING_RANK_ALL)) { + rateAllUsers = service.getCountUsersBySession(toolSessionId, peerreview.isSelfReview() ? -1 : userId); + } else if ((criteria.isStarStyleRating() || criteria.isCommentRating()) + && (peerreview.getMinimumRates() > 0 || peerreview.getMaximumRates() > 0) + && (dto.getRatingCriteria().getMinimumRates() == 0 && dto.getRatingCriteria().getMaximumRates() == 0)) { + // override the min/max for stars based on old settings if needed (original Peer Review kept one setting for all criteria ) + // does not matter if this change gets persisted to database. + criteria.setMinimumRates(peerreview.getMinimumRates()); + criteria.setMaximumRates(peerreview.getMaximumRates()); + } + + int countRatedUsers = service.getCountItemsRatedByUserByCriteria(criteria.getRatingCriteriaId(), + user.getUserId().intValue()); + request.setAttribute(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedUsers); + request.setAttribute("rateAllUsers", rateAllUsers); + request.setAttribute("criteriaRatings", dto); + return LEARNING_SUCCESS_PATH; + } + + /** + * Same as submitRankingHedging but doesn't update the records. + * + * @throws IOException + * @throws ServletException + * + */ + @RequestMapping("/nextPrev") + @SuppressWarnings("unchecked") + public String nextPrev(HttpServletRequest request, HttpSession session) throws IOException, ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, toolSessionId); + + Boolean next = WebUtil.readBooleanParam(request, "next"); + + // goto standard screen + return startRating(request, session, sessionMap, toolSessionId, user, mode, criteria, next); + } + + /** + * Submit any comments not already submitted and go back to the main learning screen. + */ + /** + * Submit the ranking / hedging data and go back to the main learning screen. + * + * @throws IOException + * @throws ServletException + * @throws JSONException + * + */ + @RequestMapping("/submitComments") + @SuppressWarnings("unchecked") + public String submitComments(HttpServletRequest request, HttpSession session) throws IOException, ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + saveComments(request, toolSessionId, peerreview, user, criteria); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, toolSessionId); + + int countRatedItems = service.getCountItemsRatedByUserByCriteria(criteriaId, user.getUserId().intValue()); + sessionMap.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedItems); + + boolean valid = true; + if (criteria.getMaxRating() == RatingCriteria.RATING_RANK_ALL) { + valid = (countRatedItems == service.getCountUsersBySession(toolSessionId, + peerreview.isSelfReview() ? -1 : user.getUserId())); + } else { + valid = (criteria.getMinimumRates() <= countRatedItems); + } + + if (!valid) { + request.setAttribute("notcomplete", true); + return doEdit(request, sessionMap, toolSessionId, peerreview, criteria); + } + + Boolean next = WebUtil.readBooleanParam(request, "next"); + + // goto standard screen + return startRating(request, session, sessionMap, toolSessionId, user, mode, criteria, next); + } + + private int saveComments(HttpServletRequest request, Long toolSessionId, Peerreview peerreview, PeerreviewUser user, + RatingCriteria criteria) throws IOException, ServletException { + int countCommentsSaved = 0; + if (!(peerreview.getLockWhenFinished() && user.isSessionFinished())) { + + Integer userId = user.getUserId().intValue(); + for (String key : request.getParameterMap().keySet()) { + if (key.startsWith("comment-textarea-")) { + String itemIdString = key.substring(17); + Long itemId = new Long(itemIdString); + String comment = request.getParameter(key); + if (comment != null) { + countCommentsSaved++; + // save the comment to the database. + if (comment.length() > 0) + service.commentItem(criteria, toolSessionId, userId, itemId, comment); + } + } + } + } + return countCommentsSaved; + } + + @RequestMapping("/submitCommentsAjax") + @ResponseBody + @SuppressWarnings("unchecked") + public String submitCommentsAjax(HttpServletRequest request, HttpServletResponse response, HttpSession session) + throws IOException, ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + int countCommentsSaved = saveComments(request, toolSessionId, peerreview, user, criteria); + + ObjectNode responsedata = JsonNodeFactory.instance.objectNode(); + int countRatedQuestions = service.getCountItemsRatedByUserByCriteria(criteriaId, user.getUserId().intValue()); + responsedata.put(AttributeNames.ATTR_COUNT_RATED_ITEMS, countRatedQuestions); + responsedata.put("countCommentsSaved", countCommentsSaved); + response.setContentType("application/json;charset=utf-8"); + return responsedata.toString(); + } + + /** + * Submit the ranking / hedging data and go back to the main learning screen. + * + * @throws IOException + * @throws ServletException + * + */ + @RequestMapping("/submitRankingHedging") + @SuppressWarnings("unchecked") + public String submitRankingHedging(HttpServletRequest request, HttpServletResponse response, HttpSession session) + throws IOException, ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + + ToolAccessMode mode = (ToolAccessMode) sessionMap.get(AttributeNames.ATTR_MODE); + PeerreviewUser user = (PeerreviewUser) sessionMap.get(PeerreviewConstants.ATTR_USER); + Long toolSessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + Peerreview peerreview = service.getPeerreviewBySessionId(toolSessionId); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + if (!(peerreview.getLockWhenFinished() && user.isSessionFinished())) { + + Integer userId = user.getUserId().intValue(); + Map ratings = new HashMap(); + boolean valid = false; + + if (criteria.isHedgeStyleRating()) { + int totalMark = 0; + // mark1 contains the mark for itemid 1 + for (String key : request.getParameterMap().keySet()) { + if (key.startsWith("mark")) { + String itemIdString = key.substring(4); + Long itemId = new Long(itemIdString); + Long value = WebUtil.readLongParam(request, key); + if (value > 0) { + ratings.put(itemId, value.floatValue()); + } + totalMark += value; + } + } + valid = (totalMark == criteria.getMaxRating()); + } else if (criteria.isRankingStyleRating()) { + // rank1 contains the itemid for the learner ranked first. + for (String key : request.getParameterMap().keySet()) { + if (key.startsWith("rank")) { + String valueString = key.substring(4); + Long value = new Long(valueString); + Long itemId = WebUtil.readLongParam(request, key, true); + if (itemId != null) { + ratings.put(itemId, value.floatValue()); + } + } + } + valid = (ratings.size() == criteria.getMaxRating() || (ratings.size() >= service + .getCountUsersBySession(toolSessionId, peerreview.isSelfReview() ? -1 : user.getUserId()))); + } + + service.rateItems(criteria, toolSessionId, userId, ratings); + if (!valid) { + request.setAttribute("notcomplete", true); + return doEdit(request, sessionMap, toolSessionId, peerreview, criteria); + } + + if (criteria.isHedgeStyleRating() && criteria.isCommentsEnabled()) { + String justify = request.getParameter("justify"); + if (justify != null && justify.length() > 0) + service.commentItem(criteria, toolSessionId, userId, criteria.getRatingCriteriaId(), justify); + } + + } + + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + request.setAttribute(AttributeNames.ATTR_MODE, mode); + request.setAttribute(PeerreviewConstants.PARAM_TOOL_SESSION_ID, toolSessionId); + + Boolean next = WebUtil.readBooleanParam(request, "next"); + + // goto standard screen + return startRating(request, session, sessionMap, toolSessionId, user, mode, criteria, next); + } + + /** + * Finish learning session. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/finish") + @SuppressWarnings("unchecked") + public String finish(HttpServletRequest request, HttpSession session) { + + // get back SessionMap + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + + // get mode and ToolSessionID from sessionMAP + Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + return doFinish(request, sessionId, session); + } + + private String doFinish(HttpServletRequest request, Long sessionId, HttpSession ss) { + // get sessionId from HttpServletRequest + String nextActivityUrl = null; + try { + UserDTO user = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userID = new Long(user.getUserID().longValue()); + + nextActivityUrl = service.finishToolSession(sessionId, userID); + request.setAttribute(PeerreviewConstants.ATTR_NEXT_ACTIVITY_URL, nextActivityUrl); + } catch (PeerreviewApplicationException e) { + LearningController.log.error("Failed get next activity url:" + e.getMessage()); + } + + return FINISH_PATH; + } + + /** + * Display empty reflection form. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/newReflection") + @SuppressWarnings("unchecked") + public String newReflection(@ModelAttribute ReflectionForm refForm, HttpServletRequest request, + HttpServletResponse response, HttpSession session) { + + // get session value + String sessionMapID = WebUtil.readStrParam(request, PeerreviewConstants.ATTR_SESSION_MAP_ID); + + UserDTO user = (UserDTO) session.getAttribute(AttributeNames.USER); + + refForm.setUserID(user.getUserID()); + refForm.setSessionMapID(sessionMapID); + + // get the existing reflection entry + SessionMap map = (SessionMap) session.getAttribute(sessionMapID); + Long toolSessionID = (Long) map.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + NotebookEntry entry = service.getEntry(toolSessionID, CoreNotebookConstants.NOTEBOOK_TOOL, + PeerreviewConstants.TOOL_SIGNATURE, user.getUserID()); + + if (entry != null) { + refForm.setEntryText(entry.getEntry()); + } + + return NOTEBOOK_PATH; + } + + /** + * Submit reflection form input database. + * + * @param mapping + * @param form + * @param request + * @param response + * @return + */ + @RequestMapping("/submitReflection") + @SuppressWarnings("unchecked") + public String submitReflection(@ModelAttribute ReflectionForm form, HttpServletRequest request, + HttpServletResponse response, HttpSession session) { + ReflectionForm refForm = (ReflectionForm) form; + Integer userId = refForm.getUserID(); + + String sessionMapID = WebUtil.readStrParam(request, PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) session.getAttribute(sessionMapID); + Long sessionId = (Long) sessionMap.get(PeerreviewConstants.PARAM_TOOL_SESSION_ID); + + // check for existing notebook entry + NotebookEntry entry = service.getEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + PeerreviewConstants.TOOL_SIGNATURE, userId); + + if (entry == null) { + // create new entry + service.createNotebookEntry(sessionId, CoreNotebookConstants.NOTEBOOK_TOOL, + PeerreviewConstants.TOOL_SIGNATURE, userId, refForm.getEntryText()); + } else { + // update existing entry + entry.setEntry(refForm.getEntryText()); + entry.setLastModified(new Date()); + service.updateEntry(entry); + } + + return finish(request, session); + } + +} Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/MonitoringController.java (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,668 @@ +/**************************************************************** + * 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.peerreview.web.controller; + +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.TimeZone; + +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; +import org.lamsfoundation.lams.tool.peerreview.dto.EmailPreviewDTO; +import org.lamsfoundation.lams.tool.peerreview.dto.GroupSummary; +import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; +import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; +import org.lamsfoundation.lams.util.DateUtil; +import org.lamsfoundation.lams.util.ExcelCell; +import org.lamsfoundation.lams.util.ExcelUtil; +import org.lamsfoundation.lams.util.FileUtil; +import org.lamsfoundation.lams.util.JsonUtil; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.util.HtmlUtils; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; + +@Controller +@RequestMapping("/monitoring") +public class MonitoringController { + public static Logger log = Logger.getLogger(MonitoringController.class); + + private static final String MONITORING_PATH = "/pages/monitoring/monitoring"; + private static final String CRITERIA_PATH = "/pages/monitoring/criteria"; + private static final String STATISTICS_PATH = "/pages/monitoring/statisticpart"; + private static final String REFLECTIONS_PATH = "/pages/monitoring/reflections"; + private static final String EMAIL_PREVIEW_PATH = "pages/monitoring/emailpreview"; + private static final String MANAGE_USERS_PATH = "/pages/monitoring/manageUsers"; + + @Autowired + @Qualifier("peerreviewService") + private IPeerreviewService service; + +// private void addTab(HttpServletRequest request) { +// request.setAttribute("initialTabId", WebUtil.readLongParam(request, AttributeNames.PARAM_CURRENT_TAB, true)); +// } + + @RequestMapping("/summary") + public String summary(HttpServletRequest request, + HttpServletResponse response) { + // initial Session Map + SessionMap sessionMap = new SessionMap<>(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + // save contentFolderID into session + sessionMap.put(AttributeNames.PARAM_CONTENT_FOLDER_ID, + WebUtil.readStrParam(request, AttributeNames.PARAM_CONTENT_FOLDER_ID)); + + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + List groupList = service.getGroupSummaries(contentId); + + Peerreview peerreview = service.getPeerreviewByContentId(contentId); + + // cache into sessionMap + sessionMap.put(PeerreviewConstants.ATTR_SUMMARY_LIST, groupList); + sessionMap.put(PeerreviewConstants.PAGE_EDITABLE, peerreview.isContentInUse()); + sessionMap.put(PeerreviewConstants.ATTR_PEERREVIEW, peerreview); + sessionMap.put(PeerreviewConstants.ATTR_TOOL_CONTENT_ID, contentId); + sessionMap.put(PeerreviewConstants.ATTR_IS_GROUPED_ACTIVITY, service.isGroupedActivity(contentId)); + + List criterias = service.getRatingCriterias(contentId); + request.setAttribute(PeerreviewConstants.ATTR_CRITERIAS, criterias); + return MONITORING_PATH; + } + + @RequestMapping("/criteria") + @SuppressWarnings("unchecked") + public String criteria(HttpServletRequest request, + HttpServletResponse response) { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + sessionMap.remove("emailPreviewDTO"); // clear any old cached emails + + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + request.setAttribute("criteria", criteria); + request.setAttribute("toolSessionId", toolSessionId); + return CRITERIA_PATH; + } + + /** + * Refreshes user list. + */ + @RequestMapping("/getUsers") + @ResponseBody + public String getUsers(HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException { + + Long toolContentId = WebUtil.readLongParam(request, "toolContentId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_PAGE) - 1; + int size = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SIDX, true); + + int sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_DESC; + if (criteria.isRankingStyleRating()) { + sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; + } else if (criteria.isCommentRating()) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } + + if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_NAME)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } + } else if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_RATING)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_AVERAGE_RESULT_ASC; + } + } + + String searchString = WebUtil.readStrParam(request, "itemDescription", true); + + // in case of monitoring we show all results. in case of learning - don't show results from the current user + Long dummyUserId = -1L; + + ObjectNode responseData = JsonNodeFactory.instance.objectNode(); + int numUsersInSession = service.getCountUsersBySession(toolSessionId, dummyUserId); + responseData.put("page", page + 1); + responseData.put("total", Math.ceil((float) numUsersInSession / size)); + responseData.put("records", numUsersInSession); + + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + + String emailResultsText = service.getLocalisedMessage("button.preview.results", null); + if (criteria.isCommentRating()) { + // special db lookup just for this - gets the user's & how many comments left for them + List rawRows = service.getCommentsCounts(toolContentId, toolSessionId, criteria, page, size, + sorting, searchString); + + for (int i = 0; i < rawRows.size(); i++) { + Object[] rawRow = rawRows.get(i); + ObjectNode cell = JsonNodeFactory.instance.objectNode(); + cell.put("itemId", (Long) rawRow[0]); + cell.put("itemDescription", (String) rawRow[2]); + cell.put("itemDescription2", (String) rawRow[3]); + + Number numCommentsNumber = (Number) rawRow[1]; + int numComments = numCommentsNumber != null ? numCommentsNumber.intValue() : 0; + if (numComments > 0) { + cell.put("rating", service.getLocalisedMessage("label.monitoring.num.of.comments", + new Object[] { numComments })); + cell.put("email", generatePreviewButton(toolSessionId, rawRow[0], emailResultsText)); + } else { + cell.put("rating", ""); + cell.put("email", ""); + } + + ObjectNode row = JsonNodeFactory.instance.objectNode(); + row.put("id", "" + rawRow[0]); + row.set("cell", cell); + rows.add(row); + } + } else { + // all other styles can use the "normal" routine and munge the JSON to suit jqgrid + ArrayNode rawRows = service.getUsersRatingsCommentsByCriteriaIdJSON(toolContentId, toolSessionId, criteria, + dummyUserId, page, size, sorting, searchString, true, true, false); + for (JsonNode rawNode : rawRows) { + ObjectNode rawRow = (ObjectNode) rawNode; + String averageRating = JsonUtil.optString(rawRow, "averageRating"); + Object numberOfVotes = rawRow.get("numberOfVotes"); + + if (averageRating != null && averageRating.length() > 0) { + if (criteria.isStarStyleRating()) { + String starString = "
"; + starString += "
"; + starString += "
"; + starString += "
"; + String msg = service.getLocalisedMessage("label.average.rating", + new Object[] { averageRating, numberOfVotes }); + starString += msg; + starString += "
"; + rawRow.put("rating", starString); + rawRow.put("email", generatePreviewButton(toolSessionId, JsonUtil.optLong(rawRow, "itemId"), + emailResultsText)); + } else { + rawRow.put("rating", averageRating); + rawRow.put("email", generatePreviewButton(toolSessionId, JsonUtil.optLong(rawRow, "itemId"), + emailResultsText)); + } + } + ObjectNode row = JsonNodeFactory.instance.objectNode(); + row.put("id", "" + rawRow.get("itemId")); + row.set("cell", rawRow); + rows.add(row); + } + } + responseData.set("rows", rows); + + res.setContentType("application/json;charset=utf-8"); + return responseData.toString(); + } + + private String generatePreviewButton(Object toolSessionId, Object userId, String emailResultsText) { + return new StringBuilder("").toString(); + } + + @RequestMapping("/getSubgridData") + @ResponseBody + public String getSubgridData(HttpServletRequest request, + HttpServletResponse response) throws IOException { + + Long itemId = WebUtil.readLongParam(request, "itemId"); + Long toolContentId = WebUtil.readLongParam(request, "toolContentId"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Long criteriaId = WebUtil.readLongParam(request, "criteriaId"); + + // ratings left by others for this user + List ratings = service.getDetailedRatingsComments(toolContentId, toolSessionId, criteriaId, itemId); + RatingCriteria criteria = service.getCriteriaByCriteriaId(criteriaId); + String title = HtmlUtils.htmlEscape(criteria.getTitle()); + + // processed data from db is userId, comment, rating, first_name, escaped( firstname + last_name) + // if no rating or comment, then the entries will be null and not an empty string + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + int i = 0; + + for (Object[] ratingDetails : ratings) { + if (ratingDetails[2] != null) { + ArrayNode userData = JsonNodeFactory.instance.arrayNode(); + userData.add(i); + userData.add(JsonUtil.readObject(ratingDetails[4])); + userData.add(JsonUtil.readObject(ratingDetails[2])); + userData.add(title); + + ObjectNode userRow = JsonNodeFactory.instance.objectNode(); + userRow.put("id", i++); + userRow.set("cell", userData); + + rows.add(userRow); + } + } + + if (criteria.isCommentsEnabled()) { + for (Object[] ratingDetails : ratings) { + + // Show comment if comment has been left by user. Exclude the special case where it is a hedging rating + // and the rating is not null - otherwise we end up putting the justification comment against entries that were not rated. + String comment = (String) ratingDetails[1]; + if (comment != null && (!criteria.isHedgeStyleRating() + || (criteria.isHedgeStyleRating() && ratingDetails[2] != null))) { + ArrayNode userData = JsonNodeFactory.instance.arrayNode(); + userData.add(i); + userData.add(JsonUtil.readObject(ratingDetails[4])); + String commentText = HtmlUtils.htmlEscape(comment); + commentText = StringUtils.replace(commentText, "<BR>", "
"); + userData.add(commentText); + userData.add("Comments"); + + ObjectNode userRow = JsonNodeFactory.instance.objectNode(); + userRow.put("id", i++); + userRow.set("cell", userData); + + rows.add(userRow); + } + } + } + + ObjectNode responseJSON = JsonNodeFactory.instance.objectNode(); + responseJSON.put("total", 1); + responseJSON.put("page", 1); + responseJSON.put("records", rows.size()); + responseJSON.set("rows", rows); + + response.setContentType("application/json;charset=utf-8"); + return responseJSON.toString(); + } + + @RequestMapping("/statistic") + public String statistic(HttpServletRequest request, + HttpServletResponse response) { + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + Long toolContentId = WebUtil.readLongParam(request, PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + request.setAttribute("summaryList", service.getStatistics(toolContentId)); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMapID); + return STATISTICS_PATH; + } + + @RequestMapping("/reflections") + @SuppressWarnings("unchecked") + public String reflections(HttpServletRequest request, + HttpServletResponse response) { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + sessionMap.remove("emailPreviewDTO"); // clear any old cached emails + + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + request.setAttribute("toolSessionId", toolSessionId); + + return REFLECTIONS_PATH; + } + + @RequestMapping("/getReflections") + @ResponseBody + @SuppressWarnings("unchecked") + public String getReflections(HttpServletRequest request, + HttpServletResponse response) throws IOException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + sessionMap.remove("emailPreviewDTO"); // clear any old cached emails + + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_PAGE) - 1; + int size = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SIDX, true); + + int sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + + if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_NAME)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } + } else if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_NOTEBOOK)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_NOTEBOOK_ENTRY_ASC; + } + } + + String searchString = WebUtil.readStrParam(request, "itemDescription", true); + + // setting date format to ISO8601 for jquery.timeago + DateFormat dateFormatterTimeAgo = new SimpleDateFormat(DateUtil.ISO8601_FORMAT); + dateFormatterTimeAgo.setTimeZone(TimeZone.getTimeZone("GMT")); + + int sessionUserCount = service.getCountUsersBySession(toolSessionId, -1L); + + ObjectNode responcedata = JsonNodeFactory.instance.objectNode(); + responcedata.put("page", page + 1); + responcedata.put("total", Math.ceil((float) sessionUserCount / size)); + responcedata.put("records", sessionUserCount); + + List nbEntryList = service.getUserNotebookEntriesForTablesorter(toolSessionId, page, size, sorting, + searchString); + + // processed data from db is user.user_id, user.first_name, escaped( first_name + last_name), notebook entry, notebook date + // if no rating or comment, then the entries will be null and not an empty string + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + int i = 0; + + for (Object[] nbEntry : nbEntryList) { + ArrayNode userData = JsonNodeFactory.instance.arrayNode(); + userData.add(JsonUtil.readObject(nbEntry[0])); + + Date entryTime = (Date) nbEntry[4]; + if (entryTime == null) { + userData.add((String) nbEntry[2]); + } else { + StringBuilder nameField = new StringBuilder((String) nbEntry[2]).append("
") + .append(""); + userData.add(nameField.toString()); + } + + userData.add(HtmlUtils.htmlEscape((String) nbEntry[3])); + + ObjectNode userRow = JsonNodeFactory.instance.objectNode(); + userRow.put("id", i++); + userRow.set("cell", userData); + + rows.add(userRow); + } + + responcedata.set("rows", rows); + + response.setContentType("application/json;charset=utf-8"); + return responcedata.toString(); + } + + @RequestMapping("/previewResultsToUser") + @SuppressWarnings("unchecked") + public String previewResultsToUser(HttpServletRequest request, + HttpServletResponse response) throws IOException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + sessionMap.remove("emailPreviewDTO"); // clear any old cached emails + + Long contentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + // only supports single user + Long userId = WebUtil.readLongParam(request, PeerreviewConstants.PARAM_USERID); + String emailHTML = service.generateEmailReportToUser(contentId, toolSessionId, userId); + EmailPreviewDTO dto = new EmailPreviewDTO(emailHTML, toolSessionId, userId); + sessionMap.put("emailPreviewDTO", dto); + return EMAIL_PREVIEW_PATH; + } + + @RequestMapping("/sendPreviewedResultsToUser") + @ResponseBody + @SuppressWarnings("unchecked") + public String sendPreviewedResultsToUser(HttpServletRequest request, + HttpServletResponse response) throws IOException { + // if we regenerate the results, it is more work for the server and the results may change. if we want to + // just send what the monitor already sees, get it back from the sessionMap, check that it should be the + // same email (ie check the parameters) and if all good then send. + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + + EmailPreviewDTO previewDTO = (EmailPreviewDTO) sessionMap.get("emailPreviewDTO"); + Long contentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + Long dateTimeStamp = WebUtil.readLongParam(request, "dateTimeStamp"); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + Long userId = WebUtil.readLongParam(request, "userID"); + + if (previewDTO == null || !dateTimeStamp.equals(previewDTO.getDateTimeStamp()) + || !toolSessionId.equals(previewDTO.getToolSessionId()) + || !userId.equals(previewDTO.getLearnerUserId())) { + log.error( + "Unable to send preview as requested parameters to not matched the catched parameters. Email text in session does not match the requested email. Cached preview: " + + previewDTO); + sessionMap.remove("emailPreviewDTO"); // Cached email removed so it can't be resent. + response.setContentType("text/html;charset=utf-8"); + return service.getLocalisedMessage("label.email.send.failed.preview.wrong", new Object[] {}); + } + + // Use the details from the DTO, so that if somehow something has got stuff up (and the above check has not picked + // up the issue, make sure you use the user id originally associated with this email. + int numEmailsSent = service.emailReportToUser(contentId, previewDTO.getToolSessionId(), + previewDTO.getLearnerUserId(), previewDTO.getEmailHTML()); + sessionMap.remove("emailPreviewDTO"); // Cached email removed so it can't be resent. + response.setContentType("text/html;charset=utf-8"); + return service.getLocalisedMessage("msg.results.sent", new Object[] { numEmailsSent }); + } + + @RequestMapping("/sendResultsToSessionUsers") + @ResponseBody + @SuppressWarnings("unchecked") + public String sendResultsToSessionUsers(HttpServletRequest request, + HttpServletResponse response) throws IOException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + sessionMap.remove("emailPreviewDTO"); // clear any old cached emails + + Long contentId = (Long) sessionMap.get(PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + int numEmailsSent = service.emailReportToSessionUsers(contentId, toolSessionId); + + response.setContentType("text/html;charset=utf-8"); + return service.getLocalisedMessage("msg.results.sent", new Object[] { numEmailsSent }); + } + + /** + * Exports Team Report into Excel spreadsheet. + * + * @throws ServletException + * @throws IOException + */ + @RequestMapping("/exportTeamReport") + @ResponseBody + public String exportTeamReport(HttpServletRequest request, + HttpServletResponse response) throws ServletException { + + Long toolContentId = WebUtil.readLongParam(request, PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + + Peerreview peerreview = service.getPeerreviewByContentId(toolContentId); + if (peerreview == null) { + log.warn("Did not find Peer Review with toolContentId: " + toolContentId + " export content"); + return null; + } + + String fileName = peerreview.getTitle().replaceAll(" ", "_") + ".xlsx"; + + try { + fileName = FileUtil.encodeFilenameForDownload(request, fileName); + + if (log.isDebugEnabled()) { + log.debug("Exporting to a spreadsheet for toolContentId: " + toolContentId + "filename " + fileName); + } + + response.setContentType("application/x-download"); + response.setHeader("Content-Disposition", "attachment;filename=" + fileName); + ServletOutputStream out = response.getOutputStream(); + + LinkedHashMap dataToExport = service.exportTeamReportSpreadsheet(toolContentId); + + // set cookie that will tell JS script that export has been finished + String downloadTokenValue = WebUtil.readStrParam(request, "downloadTokenValue"); + Cookie fileDownloadTokenCookie = new Cookie("fileDownloadToken", downloadTokenValue); + fileDownloadTokenCookie.setPath("/"); + response.addCookie(fileDownloadTokenCookie); + + ExcelUtil.createExcel(out, dataToExport, "Exported on:", true); + + } catch (IOException e) { + log.error("exportTeamReportExcelSpreadsheet i/o error occured: " + e.getMessage(), e); + throw new ServletException(e); + } + + return null; + } + + @RequestMapping("/manageUsers") + @SuppressWarnings("unchecked") + public String manageUsers(HttpServletRequest request, + HttpServletResponse response) throws ServletException { + + String sessionMapID = request.getParameter(PeerreviewConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + + return MANAGE_USERS_PATH; + } + + /** + * Gets a paged set of data for stars or comments. These are directly saved to the database, not through + * LearnerAction like Ranking and Hedging. + */ + @RequestMapping("/getManagedUsers") + @ResponseBody + public String getManageUsers(HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException { + + Long toolSessionId = WebUtil.readLongParam(request, "toolSessionId"); + + // Getting the params passed in from the jqGrid + int page = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_PAGE) - 1; + int size = WebUtil.readIntParam(request, PeerreviewConstants.PARAM_ROWS); + String sortOrder = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SORD); + String sortBy = WebUtil.readStrParam(request, PeerreviewConstants.PARAM_SIDX, true); + + int sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + if (sortBy != null && sortBy.equals(PeerreviewConstants.PARAM_SORT_USER_NAME)) { + if (sortOrder != null && sortOrder.equals(PeerreviewConstants.SORT_DESC)) { + sorting = PeerreviewConstants.SORT_BY_USERNAME_DESC; + } else { + sorting = PeerreviewConstants.SORT_BY_USERNAME_ASC; + } + } + String searchString = WebUtil.readStrParam(request, "userName", true); + + ObjectNode responcedata = JsonNodeFactory.instance.objectNode(); + + int numUsersInSession = service.getCountUsersBySession(toolSessionId); + responcedata.put("page", page + 1); + responcedata.put("total", Math.ceil((float) numUsersInSession / size)); + responcedata.put("records", numUsersInSession); + + // gets the user + List rawRows = service.getPagedUsers(toolSessionId, page, size, sorting, searchString); + ArrayNode rows = JsonNodeFactory.instance.arrayNode(); + for (int i = 0; i < rawRows.size(); i++) { + Object[] rawRow = rawRows.get(i); + ObjectNode cell = JsonNodeFactory.instance.objectNode(); + cell.put("hidden", !(Boolean) rawRow[1]); + cell.put("userUid", (Integer) rawRow[0]); + cell.put("userName", (String) rawRow[2]); + + ObjectNode row = JsonNodeFactory.instance.objectNode(); + row.put("id", "" + rawRow[0]); + row.set("cell", cell); + rows.add(row); + } + responcedata.set("rows", rows); + + res.setContentType("application/json;charset=utf-8"); + return responcedata.toString(); + } + + @RequestMapping("/setUserHidden") + @ResponseBody + public String setUserHidden(HttpServletRequest request, + HttpServletResponse response) { + + Long toolContentId = WebUtil.readLongParam(request, PeerreviewConstants.ATTR_TOOL_CONTENT_ID); + Long userUid = WebUtil.readLongParam(request, "userUid"); + boolean isHidden = !WebUtil.readBooleanParam(request, "hidden"); + + service.setUserHidden(toolContentId, userUid, isHidden); + return ""; + } + + +} Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/TblMonitoringController.java =================================================================== diff -u --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/TblMonitoringController.java (revision 0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/controller/TblMonitoringController.java (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,58 @@ +package org.lamsfoundation.lams.tool.peerreview.web.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.lamsfoundation.lams.rating.model.RatingCriteria; +import org.lamsfoundation.lams.tool.peerreview.PeerreviewConstants; +import org.lamsfoundation.lams.tool.peerreview.dto.GroupSummary; +import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; +import org.lamsfoundation.lams.tool.peerreview.service.IPeerreviewService; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.lamsfoundation.lams.web.util.SessionMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/tblmonitoring") +public class TblMonitoringController { + + @Autowired + @Qualifier("peerreviewService") + private IPeerreviewService peerreviewService; + + /** + * Shows tra page + */ + @RequestMapping("/peerreview") + public String peerreview(HttpServletRequest request) { + + // initial Session Map + SessionMap sessionMap = new SessionMap(); + request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); + request.setAttribute(PeerreviewConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + + Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + List groupList = peerreviewService.getGroupSummaries(contentId); + + Peerreview peerreview = peerreviewService.getPeerreviewByContentId(contentId); + + // cache into sessionMap + sessionMap.put(PeerreviewConstants.ATTR_SUMMARY_LIST, groupList); + sessionMap.put(PeerreviewConstants.PAGE_EDITABLE, peerreview.isContentInUse()); + sessionMap.put(PeerreviewConstants.ATTR_PEERREVIEW, peerreview); + sessionMap.put(PeerreviewConstants.ATTR_TOOL_CONTENT_ID, contentId); + sessionMap.put(PeerreviewConstants.ATTR_IS_GROUPED_ACTIVITY, peerreviewService.isGroupedActivity(contentId)); + sessionMap.put("tblMonitoring", true); + + List criterias = peerreviewService.getRatingCriterias(contentId); + request.setAttribute(PeerreviewConstants.ATTR_CRITERIAS, criterias); + + return "/pages/monitoring/summary"; + } + +} \ No newline at end of file Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/PeerreviewForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/PeerreviewForm.java (.../PeerreviewForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/PeerreviewForm.java (.../PeerreviewForm.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -23,12 +23,7 @@ package org.lamsfoundation.lams.tool.peerreview.web.form; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.apache.struts.action.ActionForm; -import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.tool.peerreview.model.Peerreview; /** @@ -39,7 +34,7 @@ * * User: Andrey Balan */ -public class PeerreviewForm extends ActionForm { +public class PeerreviewForm { private static final long serialVersionUID = 3599879328307492312L; private static Logger logger = Logger.getLogger(PeerreviewForm.class.getName()); @@ -65,17 +60,18 @@ } } - @Override - public void reset(ActionMapping mapping, HttpServletRequest request) { - String param = mapping.getParameter(); - // if it is start page, all data read out from database or current session - // so need not reset checkbox to refresh value! - if (!StringUtils.equals(param, "start") && !StringUtils.equals(param, "initPage")) { - peerreview.setLockWhenFinished(false); - peerreview.setDefineLater(false); - peerreview.setReflectOnActivity(false); - } - } + // TODO is this used? +// @Override +// public void reset(ActionMapping mapping, HttpServletRequest request) { +// String param = mapping.getParameter(); +// // if it is start page, all data read out from database or current session +// // so need not reset checkbox to refresh value! +// if (!StringUtils.equals(param, "start") && !StringUtils.equals(param, "initPage")) { +// peerreview.setLockWhenFinished(false); +// peerreview.setDefineLater(false); +// peerreview.setReflectOnActivity(false); +// } +// } public int getCurrentTab() { return currentTab; Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/ReflectionForm.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/ReflectionForm.java (.../ReflectionForm.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/web/form/ReflectionForm.java (.../ReflectionForm.java) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -24,19 +24,15 @@ package org.lamsfoundation.lams.tool.peerreview.web.form; -import org.apache.log4j.Logger; -import org.apache.struts.validator.ValidatorForm; - /** * * Reflection Form. * * * */ -public class ReflectionForm extends ValidatorForm { +public class ReflectionForm { private static final long serialVersionUID = -9054365604649146735L; - private static Logger logger = Logger.getLogger(ReflectionForm.class.getName()); private Integer userID; private String sessionMapID; Index: lams_tool_preview/web/WEB-INF/spring-servlet.xml =================================================================== diff -u --- lams_tool_preview/web/WEB-INF/spring-servlet.xml (revision 0) +++ lams_tool_preview/web/WEB-INF/spring-servlet.xml (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/struts-config.xml'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_preview/web/WEB-INF/tags/AuthoringButton.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/AuthoringButton.tag (.../AuthoringButton.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/AuthoringButton.tag (.../AuthoringButton.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -32,7 +32,7 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ attribute name="formID" required="true" rtexprvalue="true" %> @@ -123,11 +123,11 @@ } \ No newline at end of file Index: lams_tool_preview/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag (.../AuthoringRatingAllStyleCriteria.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/AuthoringRatingAllStyleCriteria.tag (.../AuthoringRatingAllStyleCriteria.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -8,7 +8,7 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/AuthoringRatingCriteria.tag (.../AuthoringRatingCriteria.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -8,7 +8,7 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> @@ -284,42 +284,42 @@ - - + + - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + - - + + - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +
Index: lams_tool_preview/web/WEB-INF/tags/CommentsAuthor.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/CommentsAuthor.tag (.../CommentsAuthor.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/CommentsAuthor.tag (.../CommentsAuthor.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -1,5 +1,5 @@ <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-html" prefix="html"%> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-fmt" prefix="fmt"%> <%@ taglib uri="tags-lams" prefix="lams"%> @@ -42,23 +42,23 @@
-     -   +     +  
Index: lams_tool_preview/web/WEB-INF/tags/Page.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/Page.tag (.../Page.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/Page.tag (.../Page.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -4,6 +4,7 @@ <%@ taglib uri="tags-lams" prefix="lams"%> <%@ attribute name="type" required="true" rtexprvalue="true"%> +<%@ attribute name="formID" required="false" rtexprvalue="true"%> <%@ attribute name="style" required="false" rtexprvalue="true"%> <%@ attribute name="title" required="false" rtexprvalue="true"%> <%@ attribute name="titleHelpURL" required="false" rtexprvalue="true"%> @@ -88,8 +89,8 @@ - - + + ${toolForm.toolSessionID} @@ -137,12 +138,12 @@ function restartLesson(){ if (confirm(restartLessonConfirmation)) { - window.location.href = LEARNING_URL + 'learner.do?method=restartLesson&lessonID=' + lessonId; + window.location.href = LEARNING_URL + 'learner/restartLesson.do?lessonID=' + lessonId; } } function viewNotebookEntries(){ - openPopUp(LEARNING_URL + "notebook.do?method=viewAll&lessonID=" + lessonId, + openPopUp(LEARNING_URL + "notebook/viewAll.do?lessonID=" + lessonId, "Notebook", 648,1152, "no"); @@ -244,9 +245,8 @@ if ( lessonId != "" || toolSessionId != "" ) { $.ajax({ - url : LEARNING_URL + 'learner.do', + url : LEARNING_URL + 'learner/getLessonDetails.do', data : { - 'method' : 'getLessonDetails', 'lessonID' : lessonId, 'toolSessionID' : toolSessionId, }, Index: lams_tool_preview/web/WEB-INF/tags/Rating.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/Rating.tag (.../Rating.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/Rating.tag (.../Rating.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -8,7 +8,7 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_preview/web/WEB-INF/tags/StyledRating.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/StyledRating.tag (.../StyledRating.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -8,7 +8,7 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams"%> <%@ taglib uri="tags-function" prefix="fn" %> Index: lams_tool_preview/web/WEB-INF/tags/TabBody.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/TabBody.tag (.../TabBody.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/TabBody.tag (.../TabBody.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -34,7 +34,6 @@ <%@ attribute name="titleKey" required="false" rtexprvalue="true"%> <%@ attribute name="page" required="false" rtexprvalue="true"%> <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-bean" prefix="bean"%> Index: lams_tool_preview/web/WEB-INF/tags/TabBodyArea.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/TabBodyArea.tag (.../TabBodyArea.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/TabBodyArea.tag (.../TabBodyArea.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -30,7 +30,6 @@ %> <%@ taglib uri="tags-core" prefix="c"%> -<%@ taglib uri="tags-bean" prefix="bean"%>
Index: lams_tool_preview/web/WEB-INF/tags/TextSearch.tag =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tags/TextSearch.tag (.../TextSearch.tag) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tags/TextSearch.tag (.../TextSearch.tag) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -32,12 +32,11 @@ <%@ tag body-content="scriptless" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> -<%@ taglib uri="tags-html" prefix="html" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <%@ taglib uri="tags-lams" prefix="lams" %> <%-- Required attributes --%> <%@ attribute name="sessionMapID" required="true" rtexprvalue="true" %> -<%@ attribute name="wrapInFormTag" required="true" rtexprvalue="true" %> <%-- Optional attributes --%> <%@ attribute name="action" required="false" rtexprvalue="true" %> @@ -53,10 +52,10 @@ <%-- Default value for message key --%> - + - + @@ -85,52 +84,40 @@ - -
- - -

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

+ + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
\ No newline at end of file Index: lams_tool_preview/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -212,191 +212,6 @@ - - STRUTS-textarea - org.lamsfoundation.lams.web.tag.MultiLinesTextareaTag - empty - - accesskey - false - true - - - alt - false - true - - - altKey - false - true - - - bundle - false - true - - - cols - false - true - - - disabled - false - true - - - errorKey - false - true - - - errorStyle - false - true - - - errorStyleClass - false - true - - - errorStyleId - false - true - - - index - false - true - - - indexed - false - true - - - name - false - true - - - onblur - false - true - - - onchange - false - true - - - onclick - false - true - - - ondblclick - false - true - - - onfocus - false - true - - - onkeydown - false - true - - - onkeypress - false - true - - - onkeyup - false - true - - - onmousedown - false - true - - - onmousemove - false - true - - - onmouseout - false - true - - - onmouseover - false - true - - - onmouseup - false - true - - - property - true - true - - - readonly - false - true - - - rows - false - true - - - style - false - true - - - styleClass - false - true - - - styleId - false - true - - - tabindex - false - true - - - title - false - true - - - titleKey - false - true - - - value - false - true - - Small portrait of a user Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-bean-el.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-bean.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-html-el.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-html.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-logic-el.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-logic.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-nested.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-tiles-el.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/tlds/struts/struts-tiles.tld'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1042117ad93a6a9f93d8b1c8be7e718b7efd383f refers to a dead (removed) revision in file `lams_tool_preview/web/WEB-INF/validation.xml'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_tool_preview/web/WEB-INF/web.xml =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/WEB-INF/web.xml (.../web.xml) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/WEB-INF/web.xml (.../web.xml) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -72,24 +72,10 @@ - action - org.apache.struts.action.ActionServlet - - config - /WEB-INF/struts-config.xml - - - debug - 999 - - - detail - 2 - - - validate - true - + spring + + org.springframework.web.servlet.DispatcherServlet + 1 @@ -121,7 +107,7 @@ - action + spring *.do @@ -151,41 +137,6 @@ - - - - tags-bean - /WEB-INF/tlds/struts/struts-bean.tld - - - tags-html - /WEB-INF/tlds/struts/struts-html.tld - - - tags-logic - /WEB-INF/tlds/struts/struts-logic.tld - - - tags-tiles - /WEB-INF/tlds/struts/struts-tiles.tld - - - tags-bean-el - /WEB-INF/tlds/struts/struts-bean-el.tld - - - tags-html-el - /WEB-INF/tlds/struts/struts-html-el.tld - - - tags-logic-el - /WEB-INF/tlds/struts/struts-logic-el.tld - - - tags-tiles-el - /WEB-INF/tlds/struts/struts-tiles-el.tld - - Index: lams_tool_preview/web/common/messages.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/common/messages.jsp (.../messages.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/common/messages.jsp (.../messages.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -1,8 +1,9 @@ <%-- Error Messages --%> - - - - - - - + + + + +
+
+
+
Index: lams_tool_preview/web/common/taglibs.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/common/taglibs.jsp (.../taglibs.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/common/taglibs.jsp (.../taglibs.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -1,11 +1,8 @@ <%@ page language="java" errorPage="/error.jsp" pageEncoding="UTF-8" contentType="text/html;charset=utf-8" %> -<%@ taglib uri="tags-bean" prefix="bean" %> -<%@ taglib uri="tags-html" prefix="html" %> -<%@ taglib uri="tags-logic" prefix="logic" %> <%@ taglib uri="tags-function" prefix="fn" %> <%@ taglib uri="tags-core" prefix="c" %> <%@ taglib uri="tags-fmt" prefix="fmt" %> <%@ taglib uri="tags-xml" prefix="x" %> <%@ taglib uri="tags-lams" prefix="lams" %> +<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %> - Index: lams_tool_preview/web/pages/authoring/advance.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/authoring/advance.jsp (.../advance.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -1,49 +1,48 @@ <%@ include file="/common/taglibs.jsp"%> -
- - + + - - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - + + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +
-
-
-
-
@@ -53,16 +52,16 @@
-
-
- +
Index: lams_tool_preview/web/pages/authoring/authoring.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/authoring/authoring.jsp (.../authoring.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -30,14 +30,13 @@ - - - - - - - - + + + + + + + @@ -68,16 +67,21 @@ cancelConfirmMsgKey="authoring.msg.cancel.save" accessMode="author" --%> - + + - + Index: lams_tool_preview/web/pages/authoring/basic.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/authoring/basic.jsp (.../basic.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -1,15 +1,15 @@ <%@ include file="/common/taglibs.jsp"%> - +
- +
- +
Index: lams_tool_preview/web/pages/authoring/start.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/authoring/start.jsp (.../start.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/authoring/start.jsp (.../start.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -4,13 +4,13 @@ <%@ include file="/common/taglibs.jsp" %> - - - - + + + + Index: lams_tool_preview/web/pages/learning/hedging.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/hedging.jsp (.../hedging.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/hedging.jsp (.../hedging.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -77,7 +77,7 @@ } -
" method="post" id="editForm"> + " method="post" id="editForm"> Index: lams_tool_preview/web/pages/learning/learningHiddenUser.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/learningHiddenUser.jsp (.../learningHiddenUser.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/learningHiddenUser.jsp (.../learningHiddenUser.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -44,9 +44,9 @@ - + - +
Index: lams_tool_preview/web/pages/learning/notebook.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/notebook.jsp (.../notebook.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/notebook.jsp (.../notebook.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -23,9 +23,9 @@ - - - + + + @@ -35,15 +35,15 @@

- +
-
+ Index: lams_tool_preview/web/pages/learning/notebookdisplay.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/notebookdisplay.jsp (.../notebookdisplay.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/notebookdisplay.jsp (.../notebookdisplay.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -23,9 +23,9 @@ - + - +
Index: lams_tool_preview/web/pages/learning/rankall.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/rankall.jsp (.../rankall.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/rankall.jsp (.../rankall.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -124,7 +124,7 @@ - " method="get" id="editForm"> + " method="get" id="editForm">
Index: lams_tool_preview/web/pages/learning/ranking.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/ranking.jsp (.../ranking.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/ranking.jsp (.../ranking.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -135,7 +135,7 @@ - " method="get" id="editForm"> + " method="get" id="editForm"> Index: lams_tool_preview/web/pages/learning/results.jsp =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r1042117ad93a6a9f93d8b1c8be7e718b7efd383f --- lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_preview/web/pages/learning/results.jsp (.../results.jsp) (revision 1042117ad93a6a9f93d8b1c8be7e718b7efd383f) @@ -20,7 +20,7 @@ - + - - + +