Index: lams_tool_scratchie/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rb1e97a18addd1ba2a621863bedea01ee8223b34b -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision b1e97a18addd1ba2a621863bedea01ee8223b34b) +++ lams_tool_scratchie/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -202,6 +202,12 @@ label.waiting.for.leader.submit.burning.questions =Time limit set by teacher is expired. Please wait until a group leader submits burning questions. label.authoring.advanced.shuffle.items =Shuffle questions label.summary.downloaded =Excel file downloaded. +label.number.groups.finished=Number of Groups Finished +label.graph.help=In the graph(s) below, click on a bar in the graph and then use your mouse wheel to zoom in and out of the graph. Once you zoom in, the grey selection in the bottom graph can be dragged left or right to show a different set of marks. +label.lowest.mark=Lowest Mark: +label.highest.mark=Highest Mark: +label.marks=Marks +label.number.groups.in.mark.range=Number of Groups in Mark Range +label.average.mark =Average mark - #======= End labels: Exported 196 labels for en AU ===== Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java (.../ScratchieSessionDAO.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/ScratchieSessionDAO.java (.../ScratchieSessionDAO.java) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -42,5 +42,10 @@ void delete(ScratchieSession session); void deleteBySessionId(Long toolSessionId); + + List getRawLeaderMarksByToolContentId(Long toolContentId); + Object[] getStatsMarksForLeaders(Long toolContentId); + + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java (.../ScratchieSessionDAOHibernate.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dao/hibernate/ScratchieSessionDAOHibernate.java (.../ScratchieSessionDAOHibernate.java) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -28,6 +28,10 @@ import java.util.Set; import java.util.TreeSet; +import org.hibernate.Query; +import org.hibernate.SQLQuery; +import org.hibernate.type.FloatType; +import org.hibernate.type.IntegerType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.scratchie.dao.ScratchieSessionDAO; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieSession; @@ -42,6 +46,15 @@ private static final String FIND_BY_CONTENT_ID = "from " + ScratchieSession.class.getName() + " as p where p.scratchie.contentId=? order by p.sessionName asc"; + private static final String LOAD_MARKS = "SELECT mark FROM tl_lascrt11_session session " + + " JOIN tl_lascrt11_scratchie scratchie ON session.scratchie_uid = scratchie.uid " + + " WHERE session.scratching_finished = 1 AND scratchie.content_id = :toolContentId"; + private static final String FIND_MARK_STATS = "SELECT MIN(mark) min_grade, AVG(mark) avg_grade, MAX(mark) max_grade, COUNT(mark) num_complete " + + " FROM tl_lascrt11_session session " + + " JOIN tl_lascrt11_scratchie scratchie ON session.scratchie_uid = scratchie.uid " + + " WHERE session.scratching_finished = 1 AND scratchie.content_id = :toolContentId"; + + @SuppressWarnings("rawtypes") @Override public ScratchieSession getSessionBySessionId(Long sessionId) { List list = doFind(FIND_BY_SESSION_ID, sessionId); @@ -71,5 +84,33 @@ public void deleteBySessionId(Long toolSessionId) { this.removeObject(ScratchieSession.class, toolSessionId); } + + @SuppressWarnings("unchecked") + @Override + public List getRawLeaderMarksByToolContentId(Long toolContentId) { + SQLQuery query = getSession().createSQLQuery(LOAD_MARKS); + query.setLong("toolContentId", toolContentId); + List list = query.list(); + return list; + } + + @Override + public Object[] getStatsMarksForLeaders(Long toolContentId) { + Query query = getSession().createSQLQuery(FIND_MARK_STATS) + .addScalar("min_grade", FloatType.INSTANCE) + .addScalar("avg_grade", FloatType.INSTANCE) + .addScalar("max_grade", FloatType.INSTANCE) + .addScalar("num_complete", IntegerType.INSTANCE); + query.setLong("toolContentId", toolContentId); + @SuppressWarnings("rawtypes") + List list = query.list(); + if ((list == null) || (list.size() == 0)) { + return null; + } else { + return (Object[]) list.get(0); + } + } + + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java =================================================================== diff -u --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java (revision 0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/dto/LeaderResultsDTO.java (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -0,0 +1,82 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + + +package org.lamsfoundation.lams.tool.scratchie.dto; + +public class LeaderResultsDTO { + + private Long contentId; + private int numberGroupsLeaderFinished; + private String minMark; + private String maxMark; + private String avgMark; + + public LeaderResultsDTO() { + } + + public LeaderResultsDTO(Long contentId) { + this.contentId = contentId; + } + + public Long getContentId() { + return contentId; + } + + public void setContentId(Long contentId) { + this.contentId = contentId; + } + + public int getNumberGroupsLeaderFinished() { + return numberGroupsLeaderFinished; + } + + public void setNumberGroupsLeaderFinished(int numberGroupsLeaderFinished) { + this.numberGroupsLeaderFinished = numberGroupsLeaderFinished; + } + + public String getAvgMark() { + return avgMark; + } + + public void setAvgMark(String avgMark) { + this.avgMark = avgMark; + } + + public String getMinMark() { + return minMark; + } + + public void setMinMark(String minMark) { + this.minMark = minMark; + } + + public String getMaxMark() { + return maxMark; + } + + public void setMaxMark(String maxMark) { + this.maxMark = maxMark; + } + +} Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r2abc3485dc2d24ea02044a64271f3ee0d3b8c11b -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 2abc3485dc2d24ea02044a64271f3ee0d3b8c11b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; +import org.lamsfoundation.lams.tool.scratchie.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; @@ -369,4 +370,11 @@ ScratchieConfigItem getConfigItem(String key); void saveOrUpdateScratchieConfigItem(ScratchieConfigItem item); + + /** Get the raw marks for display in a graph in monitoring */ + List getMarksArray(Long contentId); + + /** Get the statistics such as average, max, min for the marks. Used in monitoring */ + LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId); + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r2abc3485dc2d24ea02044a64271f3ee0d3b8c11b -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 2abc3485dc2d24ea02044a64271f3ee0d3b8c11b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -38,6 +38,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.SortedMap; @@ -82,6 +83,7 @@ import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; +import org.lamsfoundation.lams.tool.scratchie.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; @@ -102,6 +104,7 @@ import org.lamsfoundation.lams.util.ExcelCell; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.NumberUtil; import org.lamsfoundation.lams.util.audit.IAuditService; import org.quartz.JobBuilder; import org.quartz.JobDetail; @@ -1585,6 +1588,24 @@ return dataToExport; } + @Override + public List getMarksArray(Long toolContentId) { + return scratchieSessionDao.getRawLeaderMarksByToolContentId(toolContentId); + } + + @Override + public LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId) { + LeaderResultsDTO newDto = new LeaderResultsDTO(contentId); + Object[] markStats = scratchieSessionDao.getStatsMarksForLeaders(contentId); + if ( markStats != null ) { + newDto.setMinMark(markStats[0] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[0], (Locale)null, 2) : "0.00"); + newDto.setAvgMark(markStats[1] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[1], (Locale)null, 2) : "0.00"); + newDto.setMaxMark(markStats[2] != null ? NumberUtil.formatLocalisedNumber((Float)markStats[2], (Locale)null, 2) : "0.00"); + newDto.setNumberGroupsLeaderFinished((Integer)markStats[3]); + } + return newDto; + } + // ***************************************************************************** // private methods // ***************************************************************************** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java =================================================================== diff -u -ra474e56b95d31ca6b549367c5adc8a99acf5ac5d -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision a474e56b95d31ca6b549367c5adc8a99acf5ac5d) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -45,9 +45,12 @@ import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.apache.tomcat.util.json.JSONException; +import org.apache.tomcat.util.json.JSONObject; import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; +import org.lamsfoundation.lams.tool.scratchie.dto.LeaderResultsDTO; import org.lamsfoundation.lams.tool.scratchie.dto.ReflectDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieAnswer; @@ -73,7 +76,7 @@ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, - HttpServletResponse response) throws IOException, ServletException { + HttpServletResponse response) throws IOException, ServletException, JSONException { String param = mapping.getParameter(); request.setAttribute("initialTabId", WebUtil.readLongParam(request, AttributeNames.PARAM_CURRENT_TAB, true)); @@ -93,6 +96,12 @@ if (param.equals("exportExcel")) { return exportExcel(mapping, form, request, response); } + if (param.equals("getMarkChartData")) { + return getMarkChartData(mapping, form, request, response); + } + if (param.equals("statistic")) { + return statistic(mapping, form, request, response); + } return mapping.findForward(ScratchieConstants.ERROR); } @@ -269,6 +278,54 @@ return null; } + /** + * Get the mark summary with data arranged in bands. Can be displayed graphically or in a table. + */ + private ActionForward getMarkChartData(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse res) throws IOException, ServletException, JSONException { + + initializeScratchieService(); + String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + + Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); + List results = null; + + if ( scratchie != null ) { + results = service.getMarksArray(scratchie.getContentId()); + } + + JSONObject responseJSON = new JSONObject(); + if ( results != null ) + responseJSON.put("data", results); + else + responseJSON.put("data", new Float[0]); + + res.setContentType("application/json;charset=utf-8"); + res.getWriter().write(responseJSON.toString()); + return null; + + } + + private ActionForward statistic(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) { + + initializeScratchieService(); + String sessionMapID = request.getParameter(ScratchieConstants.ATTR_SESSION_MAP_ID); + SessionMap sessionMap = (SessionMap) request.getSession() + .getAttribute(sessionMapID); + request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + + Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); + if ( scratchie != null ) { + LeaderResultsDTO leaderDto = service.getLeaderResultsDTOForLeaders(scratchie.getContentId()); + sessionMap.put("leaderDto", leaderDto); + } + return mapping.findForward(ScratchieConstants.SUCCESS); + } + // ************************************************************************************* // Private method // ************************************************************************************* Index: lams_tool_scratchie/web/WEB-INF/struts-config.xml =================================================================== diff -u -rbeb150b1b726c122ccc5af1ba95083105f9948b8 -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision beb150b1b726c122ccc5af1ba95083105f9948b8) +++ lams_tool_scratchie/web/WEB-INF/struts-config.xml (.../struts-config.xml) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -296,6 +296,16 @@ type="org.lamsfoundation.lams.tool.scratchie.web.action.MonitoringAction" parameter="exportExcel" > + + + + + + + @@ -30,6 +31,10 @@ + + + + + - + Index: lams_tool_scratchie/web/pages/monitoring/parts/statisticpart.jsp =================================================================== diff -u --- lams_tool_scratchie/web/pages/monitoring/parts/statisticpart.jsp (revision 0) +++ lams_tool_scratchie/web/pages/monitoring/parts/statisticpart.jsp (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -0,0 +1,69 @@ +<%@ include file="/common/taglibs.jsp"%> + + + + + + + + + + + + + + + + +

+ +
+
+ + + + + + + + + + + + + + +
+ : + + + + : + + +
+ + + + + + + +
+
+
+
+
+
+
+ +
+
+ Index: lams_tool_scratchie/web/pages/monitoring/statistic.jsp =================================================================== diff -u -r9e9c0664745d48fdd504952bb279e5b840675758 -r911eb9cfa3db76d9b0f495f76833dc82545bee9d --- lams_tool_scratchie/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 9e9c0664745d48fdd504952bb279e5b840675758) +++ lams_tool_scratchie/web/pages/monitoring/statistic.jsp (.../statistic.jsp) (revision 911eb9cfa3db76d9b0f495f76833dc82545bee9d) @@ -1,60 +1,5 @@ <%@ include file="/common/taglibs.jsp"%> - - - - - - - - - - - - - - -
-
- - ${summary.sessionName} - -
- - - - - - - - - - - - - - - - -
- # - - - - -
- ${status.index + 1} - - - - - - - ${summary.mark} - -
- - -
-
- -
- +
+<%-- Do not include anything to start with as we do not want to display the charts yet. +--%> +
\ No newline at end of file