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;
+ }
+}