Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/StatisticsAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/StatisticsAction.java,v diff -u -r1.1 -r1.2 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/StatisticsAction.java 11 Aug 2009 03:24:04 -0000 1.1 +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/action/StatisticsAction.java 11 Aug 2009 04:44:23 -0000 1.2 @@ -22,32 +22,38 @@ */ package org.lamsfoundation.lams.admin.web.action; +import java.util.Map; + import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lamsfoundation.lams.admin.service.AdminServiceProxy; +import org.lamsfoundation.lams.statistics.dto.GroupStatisticsDTO; import org.lamsfoundation.lams.statistics.dto.StatisticsDTO; import org.lamsfoundation.lams.statistics.service.IStatisticsService; import org.lamsfoundation.lams.usermanagement.Role; +import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.web.action.LamsDispatchAction; /** * @author Luke Foxton * * Gives the overall statistics for a LAMS server * - * @struts.action path="/statistics" validate="false" + * @struts.action path="/statistics" parameter="method" name="statistics" + * input=".statistics" scope="request" validate="false" * @struts.action-forward name="success" path=".statistics" + * @struts.action-forward name="groupStats" path="/groupStatistics.jsp" * @struts.action-forward name="error" path=".error" */ -public class StatisticsAction extends Action { +public class StatisticsAction extends LamsDispatchAction { private static IStatisticsService statisticsService; - public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { // check permission if (!request.isUserInRole(Role.SYSADMIN)) { @@ -59,11 +65,35 @@ if (statisticsService == null) { statisticsService = AdminServiceProxy.getStatisticsService(getServlet().getServletContext()); } - + StatisticsDTO stats = statisticsService.getOverallStatistics(); + Map groupMap = statisticsService.getGroupMap(); + request.setAttribute("statisticsDTO", stats); + request.setAttribute("groupMap", groupMap); return mapping.findForward("success"); } + public ActionForward groupStats(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + + Integer orgId = WebUtil.readIntParam(request, "orgId"); + + // check permission + if (!request.isUserInRole(Role.SYSADMIN)) { + request.setAttribute("errorName", "RegisterAction"); + request.setAttribute("errorMessage", AdminServiceProxy.getMessageService(getServlet().getServletContext()).getMessage("error.authorisation")); + return mapping.findForward("error"); + } + + if (statisticsService == null) { + statisticsService = AdminServiceProxy.getStatisticsService(getServlet().getServletContext()); + } + + GroupStatisticsDTO groupStats = statisticsService.getGroupStatisticsDTO(orgId); + + request.setAttribute("groupStatisticsDTO", groupStats); + return mapping.findForward("groupStats"); + } + } Index: lams_admin/web/groupStatistics.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_admin/web/groupStatistics.jsp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_admin/web/groupStatistics.jsp 11 Aug 2009 04:44:23 -0000 1.1 @@ -0,0 +1,57 @@ +<%@ include file="/taglibs.jsp"%> + +

${groupStatisticsDTO.name}

+ + + + + + + + + + + + + + + + + + + + + + +
${groupStatisticsDTO.totalUsers}
${groupStatisticsDTO.lessons}
${groupStatisticsDTO.monitors}
${groupStatisticsDTO.authors}
${groupStatisticsDTO.learners}
+ + +
+ +

${subGroupStatisticsDTO.name}

+ + + + + + + + + + + + + + + + + + + + + + +
${subGroupStatisticsDTO.totalUsers}
${subGroupStatisticsDTO.lessons}
${subGroupStatisticsDTO.monitors}
${subGroupStatisticsDTO.authors}
${subGroupStatisticsDTO.learners}
+
+
Index: lams_admin/web/statistics.jsp =================================================================== RCS file: /usr/local/cvsroot/lams_admin/web/statistics.jsp,v diff -u -r1.1 -r1.2 --- lams_admin/web/statistics.jsp 11 Aug 2009 03:24:04 -0000 1.1 +++ lams_admin/web/statistics.jsp 11 Aug 2009 04:44:23 -0000 1.2 @@ -1,5 +1,23 @@ <%@ include file="/taglibs.jsp"%> + + + +

@@ -70,101 +88,13 @@

- -

${groupStatisticDTO.name}

- - - - - - - - - - - - - - - - - - - - - - -
- - - ${groupStatisticDTO.totalUsers} -
- - - ${groupStatisticDTO.lessons} -
- - - ${groupStatisticDTO.monitors} -
- - - ${groupStatisticDTO.authors} -
- - - ${groupStatisticDTO.learners} -
- - -
- - -

${subGroupStatisticDTO.name}

- - - - - - - - - - - - - - - - - - - - - - -
- - - ${subGroupStatisticDTO.totalUsers} -
- - - ${subGroupStatisticDTO.lessons} -
- - - ${subGroupStatisticDTO.monitors} -
- - - ${subGroupStatisticDTO.authors} -
- - - ${subGroupStatisticDTO.learners} -
-
-
-
+ + +
+ +
+ Index: lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java 11 Aug 2009 03:23:46 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java 11 Aug 2009 04:44:23 -0000 1.2 @@ -6,83 +6,74 @@ * Class representing the overall statistics for the server * * @author lfoxton - * + * */ public class StatisticsDTO { - - private long users; - private long groups; - private long subGroups; - private long sequences; - private long lessons; - private long activities; - private long completedActivities; - - ArrayList groupStatistics; - - public StatisticsDTO() {} - public long getUsers() { - return users; - } + private long users; + private long groups; + private long subGroups; + private long sequences; + private long lessons; + private long activities; + private long completedActivities; - public void setUsers(long users) { - this.users = users; - } + public StatisticsDTO() { + } - public long getGroups() { - return groups; - } + public long getUsers() { + return users; + } - public void setGroups(long groups) { - this.groups = groups; - } + public void setUsers(long users) { + this.users = users; + } - public long getSubGroups() { - return subGroups; - } + public long getGroups() { + return groups; + } - public void setSubGroups(long subGroups) { - this.subGroups = subGroups; - } + public void setGroups(long groups) { + this.groups = groups; + } - public long getSequences() { - return sequences; - } + public long getSubGroups() { + return subGroups; + } - public void setSequences(long sequences) { - this.sequences = sequences; - } + public void setSubGroups(long subGroups) { + this.subGroups = subGroups; + } - public long getLessons() { - return lessons; - } + public long getSequences() { + return sequences; + } - public void setLessons(long lessons) { - this.lessons = lessons; - } + public void setSequences(long sequences) { + this.sequences = sequences; + } - public long getActivities() { - return activities; - } + public long getLessons() { + return lessons; + } - public void setActivities(long activities) { - this.activities = activities; - } + public void setLessons(long lessons) { + this.lessons = lessons; + } - public long getCompletedActivities() { - return completedActivities; - } + public long getActivities() { + return activities; + } - public void setCompletedActivities(long completedActivities) { - this.completedActivities = completedActivities; - } + public void setActivities(long activities) { + this.activities = activities; + } - public ArrayList getGroupStatistics() { - return groupStatistics; - } + public long getCompletedActivities() { + return completedActivities; + } - public void setGroupStatistics(ArrayList groupStatistics) { - this.groupStatistics = groupStatistics; - } + public void setCompletedActivities(long completedActivities) { + this.completedActivities = completedActivities; + } } Index: lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java 11 Aug 2009 03:23:46 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java 11 Aug 2009 04:44:23 -0000 1.2 @@ -1,8 +1,29 @@ package org.lamsfoundation.lams.statistics.service; +import java.util.Map; + +import org.lamsfoundation.lams.statistics.dto.GroupStatisticsDTO; import org.lamsfoundation.lams.statistics.dto.StatisticsDTO; public interface IStatisticsService { + /** + * Get the overall statistics for the server + * @return + */ public StatisticsDTO getOverallStatistics(); + + /** + * Get the statistics for the specified group + * @param orgId + * @return + * @throws Exception + */ + public GroupStatisticsDTO getGroupStatisticsDTO(Integer orgId) throws Exception; + + /** + * Get a map of orgname,orgid for the drop down menu + * @return + */ + public Map getGroupMap(); } Index: lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java,v diff -u -r1.1 -r1.2 --- lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java 11 Aug 2009 03:23:46 -0000 1.1 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java 11 Aug 2009 04:44:23 -0000 1.2 @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import org.lamsfoundation.lams.dao.IBaseDAO; @@ -23,8 +24,8 @@ private IBaseDAO baseDAO; private IUserManagementService userService; - /** - * Get the overall statistics for the server + /* (non-Javadoc) + * @see org.lamsfoundation.lams.statistics.service.IStatisticsService#getOverallStatistics() */ public StatisticsDTO getOverallStatistics() { @@ -46,46 +47,62 @@ statisticsDTO.setLessons(baseDAO.countAll(Lesson.class)); statisticsDTO.setSequences(baseDAO.countAll(LearningDesign.class)); statisticsDTO.setUsers(baseDAO.countAll(User.class)); + return statisticsDTO; - // Getting the stats for all the groups and sub-groups - ArrayList groupStatsList = new ArrayList(); - List groups = (List) userService.findByProperty(Organisation.class, "organisationType.organisationTypeId", - OrganisationType.COURSE_TYPE); - if (groups != null) { - for (Organisation group : groups) { - GroupStatisticsDTO groupStats = new GroupStatisticsDTO(); - groupStats.setName(group.getName()); - groupStats.setLessons(group.getLessons().size()); - groupStats.setTotalUsers(userService.getAllUsers(group.getOrganisationId()).size()); - groupStats.setAuthors(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.AUTHOR, false, false).size()); - groupStats.setMonitors(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.MONITOR, false, false).size()); - groupStats.setLearners(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.LEARNER, false, false).size()); + } - Set subGroups = (Set) group.getChildOrganisations(); + /* (non-Javadoc) + * @see org.lamsfoundation.lams.statistics.service.IStatisticsService#getGroupStatisticsDTO(java.lang.Integer) + */ + public GroupStatisticsDTO getGroupStatisticsDTO(Integer orgId) throws Exception { - ArrayList subGroupStatsList = new ArrayList(); - if (subGroups != null) { - for (Organisation subGroup : subGroups) { - GroupStatisticsDTO subGroupStats = new GroupStatisticsDTO(); - subGroupStats.setName(subGroup.getName()); - subGroupStats.setLessons(subGroup.getLessons().size()); - subGroupStats.setTotalUsers(userService.getAllUsers(subGroup.getOrganisationId()).size()); - subGroupStats.setAuthors(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.AUTHOR, false, false).size()); - subGroupStats.setMonitors(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.MONITOR, false, false).size()); - subGroupStats.setLearners(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.LEARNER, false, false).size()); - subGroupStatsList.add(subGroupStats); - } - } - groupStats.setSubGroups(subGroupStatsList); + Organisation group = (Organisation) baseDAO.find(Organisation.class, orgId); + GroupStatisticsDTO groupStats = new GroupStatisticsDTO(); + if (group != null) { - groupStatsList.add(groupStats); + groupStats.setName(group.getName()); + groupStats.setLessons(group.getLessons().size()); + groupStats.setTotalUsers(userService.getAllUsers(group.getOrganisationId()).size()); + groupStats.setAuthors(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.AUTHOR, false, false).size()); + groupStats.setMonitors(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.MONITOR, false, false).size()); + groupStats.setLearners(userService.getUsersFromOrganisationByRole(group.getOrganisationId(), Role.LEARNER, false, false).size()); + + Set subGroups = (Set) group.getChildOrganisations(); + + ArrayList subGroupStatsList = new ArrayList(); + if (subGroups != null) { + for (Organisation subGroup : subGroups) { + GroupStatisticsDTO subGroupStats = new GroupStatisticsDTO(); + subGroupStats.setName(subGroup.getName()); + subGroupStats.setLessons(subGroup.getLessons().size()); + subGroupStats.setTotalUsers(userService.getAllUsers(subGroup.getOrganisationId()).size()); + subGroupStats.setAuthors(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.AUTHOR, false, false).size()); + subGroupStats.setMonitors(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.MONITOR, false, false).size()); + subGroupStats.setLearners(userService.getUsersFromOrganisationByRole(subGroup.getOrganisationId(), Role.LEARNER, false, false).size()); + subGroupStatsList.add(subGroupStats); + } } + groupStats.setSubGroups(subGroupStatsList); + + } else { + throw new Exception("Tried to fetch data for null group with id: " + orgId); } - statisticsDTO.setGroupStatistics(groupStatsList); - return statisticsDTO; - + return groupStats; } + + public Map getGroupMap() { + Map groupMap = new HashMap (); + + List groups = (List)userService.findByProperty(Organisation.class, "organisationType.organisationTypeId", + OrganisationType.COURSE_TYPE); + if (groups != null) { + for (Organisation group : groups) { + groupMap.put(group.getName(), group.getOrganisationId()); + } + } + return groupMap; + } public void setBaseDAO(IBaseDAO baseDAO) { this.baseDAO = baseDAO;