Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== diff -u -r61e7bbf20d65e2ecb5e50f3154e52264003defa1 -r2dd947ef3812e8d41a9e4be552f54e71ecd1558a --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 61e7bbf20d65e2ecb5e50f3154e52264003defa1) +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -612,4 +612,13 @@ jboss.cache:service=TreeCache + + + + + + + + + Index: lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java =================================================================== diff -u -r01f01d212f372e108737f01781312ce6b03e7e5b -r2dd947ef3812e8d41a9e4be552f54e71ecd1558a --- lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java (.../IBaseDAO.java) (revision 01f01d212f372e108737f01781312ce6b03e7e5b) +++ lams_common/src/java/org/lamsfoundation/lams/dao/IBaseDAO.java (.../IBaseDAO.java) (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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 =================================================================== diff -u -r01f01d212f372e108737f01781312ce6b03e7e5b -r2dd947ef3812e8d41a9e4be552f54e71ecd1558a --- lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java (.../BaseDAO.java) (revision 01f01d212f372e108737f01781312ce6b03e7e5b) +++ lams_common/src/java/org/lamsfoundation/lams/dao/hibernate/BaseDAO.java (.../BaseDAO.java) (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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 =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/statistics/dto/GroupStatisticsDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/statistics/dto/GroupStatisticsDTO.java (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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 =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/statistics/dto/StatisticsDTO.java (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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 =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/IStatisticsService.java (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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 =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/statistics/service/StatisticsService.java (revision 2dd947ef3812e8d41a9e4be552f54e71ecd1558a) @@ -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; + } +}