Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java =================================================================== diff -u -rc44482d534e42cdecb0eefd678fad9cc5d8eb137 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision c44482d534e42cdecb0eefd678fad9cc5d8eb137) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Activity.java (.../Activity.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -31,6 +31,7 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; +import org.lamsfoundation.lams.learningdesign.dto.ProgressActivityDTO; import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.Nullable; @@ -586,31 +587,46 @@ } /** * Delegate to activity strategy to check up the status of all children. - * @param learnerProgress the current learner progress that record the - * all completed activities. - * @return the boolean to indicate the status of children. + * + * @param learnerProgress the progress data that record what has been + * completed + * @return true if all children are completed. + */ public boolean areChildrenCompleted(LearnerProgress learnerProgress) { return activityStrategy.areChildrenCompleted(this,learnerProgress); } /** - * Delegate to activity strategy to calculate what is the next activity - * within the parent activity. + *

Delegate to activity strategy to calculate what is the next activity + * within the parent activity.

* - * @param learnerProgress the progress data that record what has been - * completed - * @return true if all children are completed. + * Note: The logic of what is the next activity here is progress + * enigne specific now. Please see the ActivityStrategy + * for details explaination of what is next. + * + * @param currentChild the current child activity in a complex activity. + * @return the next activity within a parent activity */ public Activity getNextActivityByParent(Activity currentChild) { return activityStrategy.getNextActivityByParent(this,currentChild); } + public Integer getActivityCategoryID() { return activityCategoryID; } public void setActivityCategoryID(Integer activityCategoryID) { this.activityCategoryID = activityCategoryID; } + + /** + * Return the activity dto for progress view. + * @return the activity dto. + */ + public ProgressActivityDTO getProgressActivityData() + { + return new ProgressActivityDTO(this.activityId); + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java =================================================================== diff -u -r069bac311e45f31f2c84b154aca926b5469f9d33 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java (.../Grouping.java) (revision 069bac311e45f31f2c84b154aca926b5469f9d33) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java (.../Grouping.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -8,6 +8,7 @@ import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.lamsfoundation.lams.lesson.LessonClass; +import org.lamsfoundation.lams.usermanagement.User; /** @@ -197,8 +198,26 @@ } /** - * @return + * Returns the group that current learner is in. + * @param learner the user in the group + * @return the group that has the learner */ + public Group getGroupBy(User learner) + { + for(Iterator i = getGroups().iterator();i.hasNext();) + { + Group group = (Group)i.next(); + if(isLearnerGroup(group)&&group.hasLearner(learner)) + return group; + } + return new NullGroup(); + } + + /** + * Is this group a learner group. It is also possible that the group is a + * staff group. + * @return whether the group is learner group or not. + */ public abstract boolean isLearnerGroup(Group group); public Integer getGroupingUIID() { Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ProgressActivityDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ProgressActivityDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/dto/ProgressActivityDTO.java (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -0,0 +1,85 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.learningdesign.dto; + + +/** + * The data transfer object to allow flash to view an activity from learner + * progress bar or monitoring flash component. + * + * @author Jacky Fang + * @since 2005-3-15 + * @version 1.1 + * + */ +public class ProgressActivityDTO +{ + //--------------------------------------------------------------------- + // attributes + //--------------------------------------------------------------------- + private Long activityId; + private String activityURL; + + + //--------------------------------------------------------------------- + // Construtors + //--------------------------------------------------------------------- + /** + * Minimum constructor + */ + public ProgressActivityDTO(Long activityId) + { + this(activityId,null); + } + + /** + * Full constructor + */ + public ProgressActivityDTO(Long activityId,String activityURL) + { + this.activityId = activityId; + this.activityURL = activityURL; + } + + /** + * @return Returns the activityId. + */ + public Long getActivityId() + { + return activityId; + } + /** + * @return Returns the activityURL. + */ + public String getActivityURL() + { + return activityURL; + } + /** + * @param activityURL The activityURL to set. + */ + public void setActivityURL(String activityURL) + { + this.activityURL = activityURL; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/lesson/dto/LearnerProgressDTO.java =================================================================== diff -u -r6e59ce4878d3f44cf14542a284c749258f2a9039 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/lesson/dto/LearnerProgressDTO.java (.../LearnerProgressDTO.java) (revision 6e59ce4878d3f44cf14542a284c749258f2a9039) +++ lams_common/src/java/org/lamsfoundation/lams/lesson/dto/LearnerProgressDTO.java (.../LearnerProgressDTO.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -62,13 +62,6 @@ } /** - * @return Returns the currentActivityID. - */ - public Long getCurrentActivityID() - { - return currentActivityId; - } - /** * @return Returns the learnerId. */ public Integer getLearnerId() Fisheye: Tag 8bbaae4777d25bac513a7adc0b42b2d8480e05cc refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/tool/ProgressOutputData.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== diff -u -r14092613cbb3d0bec8c306d5a6abdf6de151307f -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 14092613cbb3d0bec8c306d5a6abdf6de151307f) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -11,23 +11,35 @@ import java.util.List; +import org.lamsfoundation.lams.lesson.LearnerProgress; + /** + * The interface that defines the tool's contract regarding session. It must + * be implemented by the tool to establish the communication channel between + * tool and lams core service. * - * @author Jacky Fang 2004-12-6 - * + * @author Jacky Fang + * @since 2004-12-6 + * @version 1.1 */ public interface ToolSessionManager { + /** + * Create a tool session for a piece of tool content using the tool + * session id generated by lams. + * @param toolSessionId the generated tool session id. + * @param toolContentId the tool content id specified. + */ public void createToolSession(Long toolSessionId, Long toolContentId); /** * Call the controller service to complete and leave the tool session. * @param toolSessionId the runtime tool session id. * @return the data object that wraps the progess information. */ - public ProgressOutputData leaveToolSession(Long toolSessionId); + public LearnerProgress leaveToolSession(Long toolSessionId); public ToolSessionExportOutputData exportToolSession(Long toolSessionId); Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -r7def51eecc3d871673b614e8cb9a1ffc87a98881 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 7def51eecc3d871673b614e8cb9a1ffc87a98881) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -50,6 +50,9 @@ * @return the tool session object */ public ToolSession getToolSessionById(Long toolSessionId); + + + public ToolSession getToolSessionByActivity(User learner, ToolActivity toolActivity)throws LamsToolServiceException; /** * Notify tools to create their tool sessions in their own tables. * @param toolSessionId the tool session generated by lams. Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -rc44482d534e42cdecb0eefd678fad9cc5d8eb137 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision c44482d534e42cdecb0eefd678fad9cc5d8eb137) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -23,7 +23,9 @@ import java.util.List; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.Group; import org.lamsfoundation.lams.learningdesign.ToolActivity; +import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; @@ -49,6 +51,7 @@ //--------------------------------------------------------------------- private ApplicationContext context; private IToolSessionDAO toolSessionDAO; + private IActivityDAO activityDAO; private ToolContentIDGenerator contentIDGenerator; //--------------------------------------------------------------------- // Inversion of Control Methods - Method injection @@ -76,6 +79,7 @@ { this.contentIDGenerator = contentIDGenerator; } + //--------------------------------------------------------------------- // Service Methods //--------------------------------------------------------------------- @@ -114,7 +118,30 @@ { return toolSessionDAO.getToolSession(toolSessionId); } + /** + * Get the tool session based on the activity id and the learner. + * @throws LamsToolServiceException + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#getToolSessionByActivity(org.lamsfoundation.lams.usermanagement.User, ToolActivity) + */ + public ToolSession getToolSessionByActivity(User learner, ToolActivity toolActivity) throws LamsToolServiceException + { + //TODO need to be changed to grouping flag when grouping activity is mapped + //properly. + if(toolActivity.getGrouping()!=null) + { + Group learnerGroup = toolActivity.getGrouping().getGroupBy(learner); + + if(learnerGroup.isNull()) + throw new LamsToolServiceException("Fail to get grouped tool session: No group found for this learner."); + + return this.toolSessionDAO.getToolSessionByGroup(learnerGroup,toolActivity); + } + else + return this.toolSessionDAO.getToolSessionByLearner(learner,toolActivity); + } + + /** * @see org.lamsfoundation.lams.tool.service.ILamsToolService#notifyToolsToCreateSession(java.lang.Long, org.lamsfoundation.lams.learningdesign.ToolActivity) */ public void notifyToolsToCreateSession(Long toolSessionId, ToolActivity activity) @@ -179,6 +206,4 @@ { return toolActivity.getTool().getServiceName().equals("surveyService"); } - - } Index: lams_common/src/java/org/lamsfoundation/lams/util/WebUtil.java =================================================================== diff -u -rce9f6b5bcb8cec8268504f40d5e2387155163e99 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/src/java/org/lamsfoundation/lams/util/WebUtil.java (.../WebUtil.java) (revision ce9f6b5bcb8cec8268504f40d5e2387155163e99) +++ lams_common/src/java/org/lamsfoundation/lams/util/WebUtil.java (.../WebUtil.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -21,10 +21,12 @@ //--------------------------------------------------------------------- public static final String PARAM_MODE = "mode"; public static final String PARAM_SESSION_STATUS = "sessionStatus"; + public static final String PARAM_TOOL_SESSION_ID = "sessionId"; public static final String PARAM_CONTENT_ID = "content_id"; public static final String PARAM_USER_ID = "user_id"; public static final String PARAM_LESSON_ID = "lesson_id"; + public static final String ATTR_MODE = "mode"; public static final String ATTR_USERNAME = "username"; public static final String ATTR_UPDATE_PROGRESS_BAR = "updateProgressBar"; Index: lams_common/test/java/applicationContext.xml =================================================================== diff -u -ra6cf2cb595b55b325c991334ba51a099b269e18b -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/test/java/applicationContext.xml (.../applicationContext.xml) (revision a6cf2cb595b55b325c991334ba51a099b269e18b) +++ lams_common/test/java/applicationContext.xml (.../applicationContext.xml) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -26,7 +26,7 @@ com.mysql.jdbc.Driver - jdbc:mysql://localhost/lams?characterEncoding=utf8 + jdbc:mysql://localhost/lams?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull lams lamsdemo Index: lams_common/test/java/org/lamsfoundation/lams/learningdesign/TestGrouping.java =================================================================== diff -u -r6795a362026cb413d432bbfaefe570222bc3beb6 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/test/java/org/lamsfoundation/lams/learningdesign/TestGrouping.java (.../TestGrouping.java) (revision 6795a362026cb413d432bbfaefe570222bc3beb6) +++ lams_common/test/java/org/lamsfoundation/lams/learningdesign/TestGrouping.java (.../TestGrouping.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -91,6 +91,38 @@ assertEquals("verify number of learners",2,grouping.getLearners().size()); } + public void testGetGroupByLearner() + { + grouping.setGroups(new HashSet()); + User user1 = new User(); + user1.setUserId(new Integer(1)); + Group group1 = new Group(); + insertUserIntoGroup(user1, group1); + + User user2 = new User(); + user2.setUserId(new Integer(2)); + Group group2 = new Group(); + insertUserIntoGroup(user2, group2); + + Group group = grouping.getGroupBy(user2); + assertEquals("verify group retrieved",group2.getOrderId(),group.getOrderId()); + } + + public void testGetNullGroupByLearner() + { + grouping.setGroups(new HashSet()); + User user1 = new User(); + user1.setUserId(new Integer(1)); + Group group1 = new Group(); + insertUserIntoGroup(user1, group1); + + User user2 = new User(); + user2.setUserId(new Integer(2)); + + Group group = grouping.getGroupBy(user2); + assertTrue("verify group retrieved",group.isNull()); + + } /** * @param user1 * @param group1 Index: lams_common/test/java/org/lamsfoundation/lams/tool/ToolDataAccessTestCase.java =================================================================== diff -u -re3ac07f9808b1feee9b3e3cf1a5c868f1ad37280 -r8bbaae4777d25bac513a7adc0b42b2d8480e05cc --- lams_common/test/java/org/lamsfoundation/lams/tool/ToolDataAccessTestCase.java (.../ToolDataAccessTestCase.java) (revision e3ac07f9808b1feee9b3e3cf1a5c868f1ad37280) +++ lams_common/test/java/org/lamsfoundation/lams/tool/ToolDataAccessTestCase.java (.../ToolDataAccessTestCase.java) (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -13,11 +13,14 @@ import org.lamsfoundation.lams.AbstractLamsTestCase; import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.IGroupDAO; +import org.lamsfoundation.lams.learningdesign.dao.IGroupingDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.GroupDAO; +import org.lamsfoundation.lams.learningdesign.dao.hibernate.GroupingDAO; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.dao.hibernate.LessonDAO; @@ -66,6 +69,7 @@ private final static Long TEST_NON_GROUP_ACTIVITY_ID = new Long(20); private static final Long TEST_GROUPED_ACTIVITY_ID = new Long(19); private static final Long TEST_GROUP_ID = new Long(88); + private static final Long TEST_GROUPING_ID = new Long(100); public static final Long TEST_LESSON_ID = new Long(1); /* Index: lams_common/test/java/org/lamsfoundation/lams/tool/service/TestLamsToolService.java =================================================================== diff -u --- lams_common/test/java/org/lamsfoundation/lams/tool/service/TestLamsToolService.java (revision 0) +++ lams_common/test/java/org/lamsfoundation/lams/tool/service/TestLamsToolService.java (revision 8bbaae4777d25bac513a7adc0b42b2d8480e05cc) @@ -0,0 +1,90 @@ +/*************************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + * + * http://www.gnu.org/licenses/gpl.txt + * ***********************************************************************/ + +package org.lamsfoundation.lams.tool.service; + +import org.lamsfoundation.lams.tool.ToolDataAccessTestCase; +import org.lamsfoundation.lams.tool.ToolSession; +import org.lamsfoundation.lams.tool.dao.hibernate.ToolSessionDAO; + + +/** + * + * @author Jacky Fang + * @since 2005-3-15 + * @version + * + */ +public class TestLamsToolService extends ToolDataAccessTestCase +{ + private ILamsToolService toolService; + + /* + * @see ToolDataAccessTestCase#setUp() + */ + protected void setUp() throws Exception + { + super.setUp(); + toolService = (ILamsToolService) this.context.getBean("lamsToolService"); + + toolSessionDao = (ToolSessionDAO)this.context.getBean("toolSessionDAO"); + + super.initTestToolSession(); + toolSessionDao.saveToolSession(this.ngToolSession); + toolSessionDao.saveToolSession(this.gToolSession); + } + + /* + * @see ToolDataAccessTestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + toolSessionDao.removeToolSession(this.ngToolSession); + toolSessionDao.removeToolSession(this.gToolSession); + } + + /** + * Constructor for TestLamsToolService. + * @param arg0 + */ + public TestLamsToolService(String arg0) + { + super(arg0); + } + + public void testGetNGToolSessionByActivityId() throws LamsToolServiceException + { + ToolSession tngToolSession = toolService.getToolSessionByActivity(this.testUser, + this.testNonGroupedActivity); + assertNotNull(tngToolSession); + } + + public void testGetGroupedToolSessionByActivityId()throws LamsToolServiceException + { + ToolSession tgroupedToolSession = toolService.getToolSessionByActivity(this.testUser, + this.testGroupedActivity); + + assertNotNull(tgroupedToolSession); + + } +}