Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/commonContext.xml,v diff -u -r1.83 -r1.84 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 2 Jul 2009 13:06:10 -0000 1.83 +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 11 Aug 2009 03:23:46 -0000 1.84 @@ -612,4 +612,13 @@ jboss.cache:service=TreeCache + + + + + + + + + Index: lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java,v diff -u -r1.9 -r1.10 --- lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java 25 Sep 2006 06:11:05 -0000 1.9 +++ lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java 11 Aug 2009 03:23:46 -0000 1.10 @@ -307,4 +307,18 @@ */ public void initialize(Object proxy); + /** + * Count all rows in a table for a hibernate-mapped class + * @param clazz + * @return + */ + public long countAll(Class clazz); + + /** + * Create a query based on the properties, and count the result + * + * @param properties a map of property names and values + * @return a list of objects which have the same property values + */ + public long countByProperties(Class clazz, Map properties); } Index: lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java,v diff -u -r1.11 -r1.12 --- lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java 25 Sep 2006 06:11:05 -0000 1.11 +++ lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java 11 Aug 2009 03:23:46 -0000 1.12 @@ -346,5 +346,36 @@ public void initialize(Object proxy) { getHibernateTemplate().initialize(proxy); } + + /* (non-Javadoc) + * @see org.lamsfoundation.lams.dao.IBaseDAO#countAll(java.lang.Class) + */ + public long countAll(Class clazz) { + String query = "select count(*) from " + clazz.getSimpleName(); + + List list = getHibernateTemplate().find(query); + + if (list != null && list.size() > 0) { + return (Long)list.get(0); + } else { + return 0; + } + } + + /* (non-Javadoc) + * @see org.lamsfoundation.lams.dao.IBaseDAO#countByProperties(java.lang.Class, java.util.Map) + */ + public long countByProperties(Class clazz, Map properties) { + Qv qv = buildQueryString(clazz,properties,SELECT,EQUAL_TO_WHAT); + String query = "select count(*) " + qv.queryString; + + List list = getHibernateTemplate().find(query,qv.values); + + if (list != null && list.size() > 0) { + return (Long)list.get(0); + } else { + return 0; + } + } } Index: lams_common/src/java/org/lamsfoundation/lams/statistics/dto/GroupStatisticsDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/statistics/dto/GroupStatisticsDTO.java,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/dto/GroupStatisticsDTO.java 11 Aug 2009 03:23:46 -0000 1.1 @@ -0,0 +1,80 @@ +package org.lamsfoundation.lams.statistics.dto; + +import java.util.ArrayList; + +/** + * DTO for group specific statistics + * + * @author lfoxton + * + */ +public class GroupStatisticsDTO { + + private String name; + private long totalUsers; + private long learners; + private long monitors; + private long authors; + private long lessons; + + private ArrayList subGroups; + + public GroupStatisticsDTO () { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getTotalUsers() { + return totalUsers; + } + + public void setTotalUsers(long totalUsers) { + this.totalUsers = totalUsers; + } + + public long getLearners() { + return learners; + } + + public void setLearners(long learners) { + this.learners = learners; + } + + public long getMonitors() { + return monitors; + } + + public void setMonitors(long monitors) { + this.monitors = monitors; + } + + public long getAuthors() { + return authors; + } + + public void setAuthors(long authors) { + this.authors = authors; + } + + public long getLessons() { + return lessons; + } + + public void setLessons(long lessons) { + this.lessons = lessons; + } + + public ArrayList getSubGroups() { + return subGroups; + } + + public void setSubGroups(ArrayList subGroups) { + this.subGroups = subGroups; + } +} 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 --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java 11 Aug 2009 03:23:46 -0000 1.1 @@ -0,0 +1,88 @@ +package org.lamsfoundation.lams.statistics.dto; + +import java.util.ArrayList; + +/** + * 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; + } + + public void setUsers(long users) { + this.users = users; + } + + public long getGroups() { + return groups; + } + + public void setGroups(long groups) { + this.groups = groups; + } + + public long getSubGroups() { + return subGroups; + } + + public void setSubGroups(long subGroups) { + this.subGroups = subGroups; + } + + public long getSequences() { + return sequences; + } + + public void setSequences(long sequences) { + this.sequences = sequences; + } + + public long getLessons() { + return lessons; + } + + public void setLessons(long lessons) { + this.lessons = lessons; + } + + public long getActivities() { + return activities; + } + + public void setActivities(long activities) { + this.activities = activities; + } + + public long getCompletedActivities() { + return completedActivities; + } + + public void setCompletedActivities(long completedActivities) { + this.completedActivities = completedActivities; + } + + public ArrayList getGroupStatistics() { + return groupStatistics; + } + + public void setGroupStatistics(ArrayList groupStatistics) { + this.groupStatistics = groupStatistics; + } +} 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 --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java 11 Aug 2009 03:23:46 -0000 1.1 @@ -0,0 +1,8 @@ +package org.lamsfoundation.lams.statistics.service; + +import org.lamsfoundation.lams.statistics.dto.StatisticsDTO; + +public interface IStatisticsService { + + public StatisticsDTO getOverallStatistics(); +} 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 --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java 11 Aug 2009 03:23:46 -0000 1.1 @@ -0,0 +1,97 @@ +package org.lamsfoundation.lams.statistics.service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +import org.lamsfoundation.lams.dao.IBaseDAO; +import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.lesson.CompletedActivityProgress; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.statistics.dto.GroupStatisticsDTO; +import org.lamsfoundation.lams.statistics.dto.StatisticsDTO; +import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.OrganisationType; +import org.lamsfoundation.lams.usermanagement.Role; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; + +public class StatisticsService implements IStatisticsService { + + private IBaseDAO baseDAO; + private IUserManagementService userService; + + /** + * Get the overall statistics for the server + */ + public StatisticsDTO getOverallStatistics() { + + StatisticsDTO statisticsDTO = new StatisticsDTO(); + + // Counting the organisations + HashMap groupMap = new HashMap(); + groupMap.put("organisationType.organisationTypeId", OrganisationType.COURSE_TYPE); + statisticsDTO.setGroups(baseDAO.countByProperties(Organisation.class, groupMap)); + + // Counting the sub-organisations + HashMap subGroupMap = new HashMap(); + subGroupMap.put("organisationType.organisationTypeId", OrganisationType.CLASS_TYPE); + statisticsDTO.setSubGroups(baseDAO.countByProperties(Organisation.class, subGroupMap)); + + // Getting the rest of the counts + statisticsDTO.setActivities(baseDAO.countAll(Activity.class)); + statisticsDTO.setCompletedActivities(baseDAO.countAll(CompletedActivityProgress.class)); + statisticsDTO.setLessons(baseDAO.countAll(Lesson.class)); + statisticsDTO.setSequences(baseDAO.countAll(LearningDesign.class)); + statisticsDTO.setUsers(baseDAO.countAll(User.class)); + + // 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(); + + 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); + + groupStatsList.add(groupStats); + } + } + statisticsDTO.setGroupStatistics(groupStatsList); + + return statisticsDTO; + + } + + public void setBaseDAO(IBaseDAO baseDAO) { + this.baseDAO = baseDAO; + } + + public void setUserService(IUserManagementService userService) { + this.userService = userService; + } +}