Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java,v diff -u -r1.6 -r1.7 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 5 Jul 2005 06:11:26 -0000 1.6 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 13 Jan 2006 04:25:38 -0000 1.7 @@ -24,6 +24,8 @@ package org.lamsfoundation.lams.tool.service; +import java.util.Set; + import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; @@ -48,13 +50,37 @@ public interface ILamsCoreToolService { /** - * Creates a Lams ToolSession for a learner and activity. + * Creates a LAMS ToolSession for a learner and activity. Checks + * to see if an appropriate tool session exists for each learner + * before creating the tool session. + *

+ * If an appropriate tool session already exists for a learner, then + * it returns null. + *

+ * Sets up the tool session based on the groupingSupportType. + * @see org.lamsfoundation.lams.learningdesign.ToolActivity#createToolSessionForActivity(org.lamsfoundation.lams.usermanagement.User,org.lamsfoundation.lams.lesson.Lesson) + * * @param learner the learner who is running the activity. * @param activity the requested activity. + * @return toolSession if a new one created, null otherwise. */ public ToolSession createToolSession(User learner, ToolActivity activity,Lesson lesson) throws LamsToolServiceException; - + /** + * Creates LAMS ToolSessions for a set of learners and activity. Checks + * to see if an appropriate tool session exists for each learner + * before creating the tool session. + *

+ * If an appropriate tool session already exists for a learner, then + * it does not include the tool session in the returned set. + *

+ * @param learners the learners who are running the activity. + * @param activity the requested activity. + * @return toolSessions set of newly created ToolSessions + */ + public Set createToolSessions(Set learners, ToolActivity activity,Lesson lesson) throws LamsToolServiceException; + + /** * Returns the previously created ToolSession for a learner and activity. * It is queried base on learner. * @param learner the learner who owns the tool session. Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java,v diff -u -r1.12 -r1.13 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 12 Dec 2005 03:05:02 -0000 1.12 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 13 Jan 2006 04:25:38 -0000 1.13 @@ -20,11 +20,13 @@ */ package org.lamsfoundation.lams.tool.service; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + import org.apache.log4j.Logger; 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.ToolAccessMode; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; @@ -58,7 +60,6 @@ //--------------------------------------------------------------------- private ApplicationContext context; private IToolSessionDAO toolSessionDAO; - private IActivityDAO activityDAO; private ToolContentIDGenerator contentIDGenerator; //--------------------------------------------------------------------- // Inversion of Control Methods - Method injection @@ -96,11 +97,40 @@ */ public ToolSession createToolSession(User learner, ToolActivity activity,Lesson lesson) throws LamsToolServiceException { - ToolSession toolSession = activity.createToolSessionForActivity(learner,lesson); + // look for an existing applicable tool session + // could be either a grouped (class group or standard group) or an individual. + // more likely to be grouped (more tools work that way!) + ToolSession toolSession = toolSessionDAO.getToolSessionByLearner(learner, activity); + + // if haven't found an existing tool session then create one + if( toolSession == null ) { + toolSession = activity.createToolSessionForActivity(learner,lesson); + toolSessionDAO.saveToolSession(toolSession); + return toolSession; + } - toolSessionDAO.saveToolSession(toolSession); + // indicate that we found an existing tool session by returning null + return null; + } + + + /** + * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#createToolSession(java.util.Set, org.lamsfoundation.lams.learningdesign.Activity) + */ + public Set createToolSessions(Set learners, ToolActivity activity,Lesson lesson) throws LamsToolServiceException + { + Iterator iter = learners.iterator(); + Set newToolSessions = new HashSet(); + while (iter.hasNext()) { + // set up the new tool session. createToolSession() will see if it really + // needs to be created - if not will return an existing session. + User learner = (User) iter.next(); + ToolSession toolSession = createToolSession(learner, activity,lesson); + if ( toolSession != null ) + newToolSessions.add(toolSession); + } - return toolSession; + return newToolSessions; } /** @@ -126,17 +156,7 @@ */ public ToolSession getToolSessionByActivity(User learner, ToolActivity toolActivity) throws LamsToolServiceException { - if(toolActivity.getApplyGrouping().booleanValue()) - { - 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); + return this.toolSessionDAO.getToolSessionByLearner(learner,toolActivity); } /**