Index: lams_monitoring/.classpath =================================================================== diff -u -r9062257e5aa7069ce8404bb6478871d54d25245a -rec7f4e736e801f08af16e76e5ea9960583531db7 --- lams_monitoring/.classpath (.../.classpath) (revision 9062257e5aa7069ce8404bb6478871d54d25245a) +++ lams_monitoring/.classpath (.../.classpath) (revision ec7f4e736e801f08af16e76e5ea9960583531db7) @@ -3,11 +3,13 @@ - + + + Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -rec7f4e736e801f08af16e76e5ea9960583531db7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java (.../BranchingDTO.java) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/BranchingDTO.java (.../BranchingDTO.java) (revision ec7f4e736e801f08af16e76e5ea9960583531db7) @@ -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 =================================================================== diff -u -re1683b7e5ac777deb10d15b0bf41182587ca8373 -rec7f4e736e801f08af16e76e5ea9960583531db7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision e1683b7e5ac777deb10d15b0bf41182587ca8373) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision ec7f4e736e801f08af16e76e5ea9960583531db7) @@ -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 =================================================================== diff -u -r0b7dc08b7bfe113e0884b2c81f273ac04c9a010d -rec7f4e736e801f08af16e76e5ea9960583531db7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 0b7dc08b7bfe113e0884b2c81f273ac04c9a010d) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision ec7f4e736e801f08af16e76e5ea9960583531db7) @@ -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 =================================================================== diff -u -r23211f44c3c9c17bf1f48b16985cba850fbdbf78 -rec7f4e736e801f08af16e76e5ea9960583531db7 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java (.../ChosenBranchingAJAXAction.java) (revision 23211f44c3c9c17bf1f48b16985cba850fbdbf78) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/ChosenBranchingAJAXAction.java (.../ChosenBranchingAJAXAction.java) (revision ec7f4e736e801f08af16e76e5ea9960583531db7) @@ -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; + } + + }