Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -rbefb60ab3288d93e681e0316168ede788a874895 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision befb60ab3288d93e681e0316168ede788a874895) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -9,6 +9,7 @@ import java.util.List; import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.usermanagement.User; /** @@ -30,15 +31,24 @@ public List getAllPotentialLearners(long toolContentID) throws LamsToolServiceException; /** - * Creates a ToolSession for a learner and activity. + * Creates a Lams ToolSession for a learner and activity. * @param learner * @param activity */ - public ToolSession createToolSession(User learner, Activity activity) throws LamsToolServiceException; + public ToolSession createToolSession(User learner, ToolActivity activity) throws LamsToolServiceException; + /** * Returns the previously created ToolSession for a learner and activity. */ public ToolSession getToolSession(User learner, Activity activity) throws LamsToolServiceException; + /** + * Notify tools to create their tool sessions in their own tables. + * @param toolSessionId the tool session generated by lams. + * @param activity the activity correspondent to that tool session. + */ + public void notifyToolsToCreateSession(Long toolSessionId, ToolActivity activity); + + public Long copyToolContent(ToolActivity toolActivity); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -0,0 +1,168 @@ +/* + 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 java.util.List; + +import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.learningdesign.ToolActivity; +import org.lamsfoundation.lams.tool.ToolContentIDGenerator; +import org.lamsfoundation.lams.tool.ToolContentManager; +import org.lamsfoundation.lams.tool.ToolSession; +import org.lamsfoundation.lams.tool.ToolSessionManager; +import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; +import org.lamsfoundation.lams.usermanagement.User; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + + +/** + * + * @author Jacky Fang 2005-2-23 + * + */ +public class LamsToolService implements ILamsToolService,ApplicationContextAware +{ + //--------------------------------------------------------------------- + // Instance variables + //--------------------------------------------------------------------- + private ApplicationContext context; + private IToolSessionDAO toolSessionDAO; + private ToolContentIDGenerator contentIDGenerator; + //--------------------------------------------------------------------- + // Inversion of Control Methods - Method injection + //--------------------------------------------------------------------- + /** + * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) + */ + public void setApplicationContext(ApplicationContext context) throws BeansException + { + this.context = context; + } + + /** + * @param toolSessionDAO The toolSessionDAO to set. + */ + public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) + { + this.toolSessionDAO = toolSessionDAO; + } + + /** + * @param contentIDGenerator The contentIDGenerator to set. + */ + public void setContentIDGenerator(ToolContentIDGenerator contentIDGenerator) + { + this.contentIDGenerator = contentIDGenerator; + } + //--------------------------------------------------------------------- + // Service Methods + //--------------------------------------------------------------------- + /** + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#getAllPotentialLearners(long) + */ + public List getAllPotentialLearners(long toolContentID) throws LamsToolServiceException + { + // TODO Auto-generated method stub + return null; + } + + /** + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#createToolSession(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.learningdesign.Activity) + */ + public ToolSession createToolSession(User learner, ToolActivity activity) throws LamsToolServiceException + { + ToolSession toolSession = activity.createToolSessionForActivity(learner); + + toolSessionDAO.saveToolSession(toolSession); + + return toolSession; + } + + /** + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#getToolSession(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.learningdesign.Activity) + */ + public ToolSession getToolSession(User learner, Activity activity) throws LamsToolServiceException + { + // TODO Auto-generated method stub + return null; + } + + /** + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#notifyToolsToCreateSession(java.lang.Long, org.lamsfoundation.lams.learningdesign.ToolActivity) + */ + public void notifyToolsToCreateSession(Long toolSessionId, ToolActivity activity) + { + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(activity); + + sessionManager.createToolSession(toolSessionId, + activity.getToolContentId()); + + } + + /** + * Make a copy of all tools content which belongs to this learning design. + * + * @param toolActivity the tool activity defined in the design. + * @see org.lamsfoundation.lams.tool.service.ILamsToolService#copyToolContent(org.lamsfoundation.lams.learningdesign.ToolActivity) + */ + public Long copyToolContent(ToolActivity toolActivity) + { + Long newToolcontentID = contentIDGenerator.getNextToolContentIDFor(toolActivity.getTool()); + //This is just for testing purpose because surveyService is the only + //service is available at the moment. + //TODO we need to remove this once all done. + if (isSurvey(toolActivity)) + { + ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity); + contentManager.copyToolContent(toolActivity.getToolContentId(), + newToolcontentID); + } + return newToolcontentID; + } + + //--------------------------------------------------------------------- + // Helper Methods + //--------------------------------------------------------------------- + + /** + * Find a tool's service registered inside lams. It is implemented using + * Spring now. We might need to extract this method to a proxy class to + * find different service such as EJB or Web service. + * @param toolActivity the tool activity defined in the design. + * @return the service object from tool. + */ + private Object findToolService(ToolActivity toolActivity) + { + return context.getBean(toolActivity.getTool().getServiceName()); + } + + /** + * This is more for testing purpose. + * @param toolActivity the tool activity defined in the design. + * @return + */ + private boolean isSurvey(ToolActivity toolActivity) + { + return toolActivity.getTool().getServiceName().equals("surveyService"); + } +} Index: lams_common/test/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml =================================================================== diff -u -r53f5c22785cd5d9d63e6c1557f460ba7314635e5 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_common/test/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 53f5c22785cd5d9d63e6c1557f460ba7314635e5) +++ lams_common/test/java/org/lamsfoundation/lams/tool/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -32,4 +32,22 @@ + + + + + + + + + + + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED + + + + Index: lams_monitoring/lib/lams/lams-tool-survey.jar =================================================================== diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a Binary files differ Index: lams_monitoring/lib/lams/lams.jar =================================================================== diff -u -r9618589c0aa5eb2d26007e8c14adb13e47747a49 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a Binary files differ Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java =================================================================== diff -u -r214a1446ca64680e16978f703dab68540a1c8a68 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 214a1446ca64680e16978f703dab68540a1c8a68) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/IMonitoringService.java (.../IMonitoringService.java) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -11,6 +11,7 @@ import java.util.List; +import org.lamsfoundation.lams.tool.service.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; @@ -40,7 +41,7 @@ * service. * @param lessonId the specified the lesson id. */ - public void startlesson(long lessonId); + public void startlesson(long lessonId)throws LamsToolServiceException; /** * Force the learner to complete all the activities for current lesson. Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -r9618589c0aa5eb2d26007e8c14adb13e47747a49 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -9,7 +9,6 @@ package org.lamsfoundation.lams.monitoring.service; -import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -24,12 +23,9 @@ import org.lamsfoundation.lams.lesson.LessonClass; import org.lamsfoundation.lams.lesson.dao.ILessonClassDAO; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; -import org.lamsfoundation.lams.tool.NonGroupedToolSession; -import org.lamsfoundation.lams.tool.ToolContentIDGenerator; -import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolSession; -import org.lamsfoundation.lams.tool.ToolSessionManager; -import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; +import org.lamsfoundation.lams.tool.service.ILamsToolService; +import org.lamsfoundation.lams.tool.service.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.springframework.beans.BeansException; @@ -56,11 +52,11 @@ //--------------------------------------------------------------------- private ILessonDAO lessonDAO; private ILessonClassDAO lessonClassDAO; - private IToolSessionDAO toolSessionDAO; + private ILamsToolService lamsToolService; private IAuthoringService authoringService; private ApplicationContext context; - private ToolContentIDGenerator contentIDGenerator; + //--------------------------------------------------------------------- // Inversion of Control Methods - Method injection //--------------------------------------------------------------------- @@ -97,21 +93,13 @@ } /** - * @param contentIDGenerator The contentIDGenerator to set. + * @param lamsToolService The lamsToolService to set. */ - public void setContentIDGenerator(ToolContentIDGenerator contentIDGenerator) + public void setLamsToolService(ILamsToolService lamsToolService) { - this.contentIDGenerator = contentIDGenerator; + this.lamsToolService = lamsToolService; } - /** - * @param toolSessionDAO The toolSessionDAO to set. - */ - public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) - { - this.toolSessionDAO = toolSessionDAO; - } - //--------------------------------------------------------------------- // Service Methods //--------------------------------------------------------------------- @@ -142,7 +130,7 @@ Activity currentActivity = (Activity) i.next(); if (currentActivity.isToolActivity()) { - Long newContentId = copyToolContent((ToolActivity) currentActivity); + Long newContentId = lamsToolService.copyToolContent((ToolActivity) currentActivity); ((ToolActivity) currentActivity).setToolContentId(newContentId); } } @@ -157,9 +145,10 @@ } /** + * @throws LamsToolServiceException * @see org.lamsfoundation.lams.monitoring.service.IMonitoringService#startlesson(long) */ - public void startlesson(long lessonId) + public void startlesson(long lessonId) throws LamsToolServiceException { //we get the lesson just created Lesson requestedLesson = lessonDAO.getLesson(new Long(lessonId)); @@ -169,6 +158,8 @@ .iterator(); i.hasNext();) { Activity activity = (Activity) i.next(); + //TODO this is for testing purpose as survey is the only tool available + //so far. if (shouldInitToolSessionFor(activity)&&this.isSurvey((ToolActivity)activity)) { initToolSessionFor((ToolActivity) activity, @@ -249,38 +240,6 @@ } /** - * Make a copy of all tools content which belongs to this learning design. - * - * @param toolActivity the tool activity defined in the design. - */ - private Long copyToolContent(ToolActivity toolActivity) - { - Long newToolcontentID = contentIDGenerator.getNextToolContentIDFor(toolActivity.getTool()); - //This is just for testing purpose because surveyService is the only - //service is available at the moment. - //TODO we need to remove this once all done. - if (isSurvey(toolActivity)) - { - ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity); - contentManager.copyToolContent(toolActivity.getToolContentId(), - newToolcontentID); - } - return newToolcontentID; - } - - /** - * Find a tool's service registered inside lams. It is implemented using - * Spring now. We might need to extract this method to a proxy class to - * find different service such as EJB or Web service. - * @param toolActivity the tool activity defined in the design. - * @return the service object from tool. - */ - private Object findToolService(ToolActivity toolActivity) - { - return context.getBean(toolActivity.getTool().getServiceName()); - } - - /** * This is more for testing purpose. * @param toolActivity the tool activity defined in the design. * @return @@ -292,39 +251,24 @@ /** * @param activity + * @throws LamsToolServiceException */ - private void initToolSessionFor(ToolActivity activity, Set learners) + private void initToolSessionFor(ToolActivity activity, Set learners) throws LamsToolServiceException { activity.setToolSessions(new HashSet()); for (Iterator i = learners.iterator(); i.hasNext();) { User learner = (User) i.next(); - ToolSession toolSession = new NonGroupedToolSession(activity, - new Date(System.currentTimeMillis()), - ToolSession.STARTED_STATE, - learner); - toolSessionDAO.saveToolSession(toolSession); + + ToolSession toolSession = lamsToolService.createToolSession(learner,activity); //ask tool to create their own tool sessions using the given id. - notifyToolsToCreateSession(toolSession.getToolSessionId(), activity); + lamsToolService.notifyToolsToCreateSession(toolSession.getToolSessionId(), activity); //update the hibernate persistent object activity.getToolSessions().add(toolSession); } } /** - * @param toolSessionId - */ - private void notifyToolsToCreateSession(Long toolSessionId, - ToolActivity activity) - { - ToolSessionManager sessionManager = (ToolSessionManager) findToolService(activity); - //TODO this is for testing purpose as survey is the only tool available - //so far. - sessionManager.createToolSession(toolSessionId, - activity.getToolContentId()); - } - - /** * @param activity * @return */ @@ -334,4 +278,5 @@ && !((ToolActivity) activity).getTool().getSupportsGrouping(); } + } \ No newline at end of file Index: lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml =================================================================== diff -u -r9618589c0aa5eb2d26007e8c14adb13e47747a49 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49) +++ lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml (.../monitoringApplicationContext.xml) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -19,13 +19,12 @@ - but this is cleaner as there is no need to ever access the unwrapped object. --> - + - Index: lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java =================================================================== diff -u -r9618589c0aa5eb2d26007e8c14adb13e47747a49 -r6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a --- lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 9618589c0aa5eb2d26007e8c14adb13e47747a49) +++ lams_monitoring/test/java/org/lamsfoundation/lams/monitoring/service/TestMonitoringService.java (.../TestMonitoringService.java) (revision 6935a6aa9c04d7ef01ed59b9115e23bdbe7b337a) @@ -16,6 +16,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.dao.ILessonDAO; import org.lamsfoundation.lams.lesson.dao.hibernate.LessonDAO; +import org.lamsfoundation.lams.tool.service.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -89,6 +90,7 @@ return new String[] { "/org/lamsfoundation/lams/tool/toolApplicationContext.xml", "/org/lamsfoundation/lams/monitoring/monitoringApplicationContext.xml", "/org/lamsfoundation/lams/lesson/lessonApplicationContext.xml", + "/org/lamsfoundation/lams/learningdesign/learningDesignApplicationContext.xml", "/org/lamsfoundation/lams/authoring/mockAuthoringApplicationContext.xml", "/org/lamsfoundation/lams/tool/survey/dataAccessContext.xml", "/org/lamsfoundation/lams/tool/survey/surveyApplicationContext.xml", @@ -124,7 +126,7 @@ //lessonDao.deleteLesson(createdLesson); } - public void testStartlesson() + public void testStartlesson() throws LamsToolServiceException { monitoringService.startlesson(TEST_LESSON_ID.longValue()); assertTrue(true);