Index: lams_monitoring/.classpath =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/.classpath,v diff -u -r1.7 -r1.8 --- lams_monitoring/.classpath 7 Sep 2005 01:36:24 -0000 1.7 +++ lams_monitoring/.classpath 21 Sep 2007 06:55:03 -0000 1.8 @@ -3,11 +3,13 @@ - + + + Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/Attic/BranchingDTO.java,v diff -u -r1.2 -r1.3 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java 29 Aug 2007 04:00:19 -0000 1.2 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java 21 Sep 2007 06:55:04 -0000 1.3 @@ -22,24 +22,6 @@ private String branchActivityName; private SortedSet branches; - public BranchingDTO(BranchingActivity activity) { - this.branchActivityId = activity.getActivityId(); - this.branchActivityName = activity.getTitle(); - - branches = new TreeSet(); - Iterator iter = activity.getActivities().iterator(); - while (iter.hasNext()) { - SequenceActivity branch = (SequenceActivity) iter.next(); - Set mappingEntries = branch.getBranchEntries(); - SortedSet groups = new TreeSet(); - for ( BranchActivityEntry entry : mappingEntries ) { - Group group = entry.getGroup(); - groups.add(group); - } - branches.add(new BranchDTO(branch, groups)); - } - } - public String toString() { return new ToStringBuilder(this) .append("branchActivityId", branchActivityId) Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java,v diff -u -r1.66 -r1.67 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 4 Jul 2007 08:15:17 -0000 1.66 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java 21 Sep 2007 06:55:04 -0000 1.67 @@ -409,6 +409,15 @@ public Activity getActivityById(Long activityId); /** + * Return an activity object based on the requested id. Where possible, give it the type we want + * so that it can be cast properly. + * + * @param activityId id of the activity. + * @return the requested activity object. + */ + public Activity getActivityById(Long activityId, Class clasz); + + /** * Return an activity object based on the requested id. * @param activityId id of the activity. * @return the requested activity object. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java,v diff -u -r1.116 -r1.117 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 10 Sep 2007 06:11:15 -0000 1.116 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java 21 Sep 2007 06:55:03 -0000 1.117 @@ -1315,6 +1315,14 @@ } /** + * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getActivityById(Long, Class) + */ + public Activity getActivityById(Long activityId, Class clasz) + { + return activityDAO.getActivityByActivityId(activityId, clasz); + } + + /** * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#getGroupingActivityById(Long) */ public GroupingActivity getGroupingActivityById(Long activityID) { Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java =================================================================== RCS file: /usr/local/cvsroot/lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java,v diff -u -r1.6 -r1.7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java 29 Aug 2007 04:00:19 -0000 1.6 +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java 21 Sep 2007 06:55:04 -0000 1.7 @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.learningdesign.BranchActivityEntry; import org.lamsfoundation.lams.learningdesign.SequenceActivity; import org.lamsfoundation.lams.lesson.service.LessonServiceException; +import org.lamsfoundation.lams.monitoring.BranchDTO; import org.lamsfoundation.lams.monitoring.BranchingDTO; import org.lamsfoundation.lams.monitoring.service.IMonitoringService; import org.lamsfoundation.lams.monitoring.service.MonitoringServiceException; @@ -119,13 +120,7 @@ Long lessonId = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); - Activity activity = monitoringService.getActivityById(activityID); - if ( activity == null || !activity.isBranchingActivity() ) { - String error = "Activity is not a branching activity. Activity was "+activity; - log.error(error); - throw new MonitoringServiceException(error); - } - + BranchingActivity activity = (BranchingActivity) monitoringService.getActivityById(activityID, BranchingActivity.class); if ( activity.isChosenBranchingActivity() ) { @@ -136,10 +131,11 @@ request.setAttribute(AttributeNames.PARAM_TITLE, activity.getTitle()); // can we still move users? check each group for tool sessions. - Iterator iter = ((BranchingActivity)activity).getActivities().iterator(); + Iterator iter = activity.getActivities().iterator(); boolean mayMoveUser = true; while (iter.hasNext()) { - SequenceActivity branch = (SequenceActivity) iter.next(); + Activity childActivity = (Activity) iter.next(); + SequenceActivity branch = (SequenceActivity) monitoringService.getActivityById(childActivity.getActivityId(), SequenceActivity.class); Set mappingEntries = branch.getBranchEntries(); for ( BranchActivityEntry entry : mappingEntries ) { mayMoveUser = mayMoveUser && entry.getGroup().mayBeDeleted(); @@ -151,7 +147,7 @@ } else { // go to a view only screen for group based and tool based grouping - return viewBranching((BranchingActivity) activity, lessonId, false, mapping, request); + return viewBranching(activity, lessonId, false, mapping, request, monitoringService); } } @@ -169,14 +165,8 @@ long activityId = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); - Activity activity = monitoringService.getActivityById(activityId); - if ( activity == null || !activity.isBranchingActivity() ) { - String error = "Activity is not a branching activity. Activity was "+activity; - log.error(error); - throw new MonitoringServiceException(error); - } - - return viewBranching((BranchingActivity) activity, lessonId, true, mapping, request); + BranchingActivity activity = (BranchingActivity) monitoringService.getActivityById(activityId, BranchingActivity.class); + return viewBranching(activity, lessonId, true, mapping, request, monitoringService); } @@ -186,7 +176,7 @@ * Input parameters: activityID */ private ActionForward viewBranching(BranchingActivity activity, Long lessonId, boolean useLocalFiles, - ActionMapping mapping, HttpServletRequest request) throws IOException, ServletException { + ActionMapping mapping, HttpServletRequest request, IMonitoringService monitoringService) throws IOException, ServletException { // in general the progress engine expects the activity and lesson id to be in the request, // so follow that standard. @@ -197,7 +187,7 @@ // only show the group names if this is a group based branching activity - the names // are meaningless for chosen and tool based branching - BranchingDTO dto = new BranchingDTO((BranchingActivity) activity); + BranchingDTO dto = getBranchingDTO(activity, monitoringService); request.setAttribute(PARAM_BRANCHING_DTO, dto); request.setAttribute(PARAM_SHOW_GROUP_NAME, activity.isGroupBranchingActivity()); if ( log.isDebugEnabled() ) { @@ -222,15 +212,18 @@ IMonitoringService monitoringService = MonitoringServiceProxy.getMonitoringService(getServlet().getServletContext()); BranchingActivity activity = (BranchingActivity) monitoringService.getActivityById(activityID); - TreeSet sortedBranches = new TreeSet(new ActivityTitleComparator()); + TreeSet sortedBranches = new TreeSet(new ActivityTitleComparator()); sortedBranches.addAll(activity.getActivities()); // build the output string to return to the chosen branching page. // there should only ever be one group for each branch in chosen branching String branchesOutput = ""; boolean first = true; - for ( SequenceActivity branch : sortedBranches ) { + for ( Activity childActivity : sortedBranches ) { + + SequenceActivity branch = (SequenceActivity) monitoringService.getActivityById(childActivity.getActivityId(), SequenceActivity.class); + Long branchId = branch.getActivityId(); String name = branch.getTitle(); int numberOfMembers = 0; @@ -383,4 +376,31 @@ return null; } + // Can't do this in BranchingDTO (although that's where it should be) as we have + // to get the SequenceActivities via the getActivityById to get around Hibernate + // not allowing us to cast the cglib classes. + private BranchingDTO getBranchingDTO(BranchingActivity activity, IMonitoringService monitoringService) { + BranchingDTO dto = new BranchingDTO(); + + dto.setBranchActivityId(activity.getActivityId()); + dto.setBranchActivityName(activity.getTitle()); + + TreeSet branches = new TreeSet(); + Iterator iter = activity.getActivities().iterator(); + while (iter.hasNext()) { + Activity childActivity = (Activity) iter.next(); + SequenceActivity branch = (SequenceActivity) monitoringService.getActivityById(childActivity.getActivityId(), SequenceActivity.class); + Set mappingEntries = branch.getBranchEntries(); + SortedSet groups = new TreeSet(); + for ( BranchActivityEntry entry : mappingEntries ) { + Group group = entry.getGroup(); + groups.add(group); + } + branches.add(new BranchDTO(branch, groups)); + } + dto.setBranches(branches); + return dto; + } + + }