Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r1c42119baf51e12d0ef19919cb5a266a186d4b7d -ra0bce7961a19548c58f5b0025160f124785f9951 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== diff -u -r97612142f4697066beb66064e83ff31fef1712b9 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 97612142f4697066beb66064e83ff31fef1712b9) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -28,6 +28,7 @@ import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.usermanagement.User; @@ -40,8 +41,8 @@ * @since 2004-12-6 * @version 1.1 */ -public interface ToolSessionManager -{ +public interface ToolSessionManager { + /** * Create a tool session for a piece of tool content using the tool * session id generated by LAMS. If no content exists with the given @@ -52,7 +53,7 @@ * @param toolContentId the tool content id specified. * @throws ToolException if an error occurs e.g. defaultContent is missing. */ - public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException; + void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException; /** * Call the controller service to complete and leave the tool session. @@ -61,7 +62,7 @@ * @throws DataMissingException if no tool session matches the toolSessionId * @throws ToolException if any other error occurs */ - public String leaveToolSession(Long toolSessionId, Long learnerId) + String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException; /** @@ -70,7 +71,7 @@ * @throws DataMissingException if no tool session matches the toolSessionId * @throws ToolException if any other error occurs */ - public ToolSessionExportOutputData exportToolSession(Long toolSessionId) + ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException; /** @@ -79,7 +80,7 @@ * @throws DataMissingException if no tool session matches the toolSessionId * @throws ToolException if any other error occurs */ - public ToolSessionExportOutputData exportToolSession(List toolSessionIds) + ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException; /** @@ -88,7 +89,7 @@ * @throws DataMissingException if no tool session matches the toolSessionId * @throws ToolException if any other error occurs */ - public void removeToolSession(Long toolSessionId) + void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException; /** Get all the outputs that match the list of names. @@ -108,7 +109,7 @@ * that "name". At present, if there are multiple attempts at an activity for one learner, we assume each attempt would have a * different toolSessionId, and hence getToolOutput[] would be called multiple times. This may not be a valid assumption. */ - public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId); + SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId); /** * Get the outputs for a particular tool output name. @@ -122,8 +123,17 @@ * * Note: the learnerId may not be the userId of the current user as the current user may be a staff member. */ - public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId); + ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId); - + /** + * Notifies tool that the user is force completed. Currently it's been utilized only by leader aware tools, which + * copy results from leader to non-leader. All other tools leave this method blank. + * + * @param toolSessionId + * @param learner + * user to be force completed + * @throws ToolException + */ + void forceCompleteUser(Long toolSessionId, User user); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r61c706419c438d5ef52d93bda3de1f7c415380ae -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -257,6 +257,17 @@ Integer learnerId) throws ToolException; /** + * Notifies tool that the user is force completed. Currently it's been utilized only by leader aware tools, which + * copy results from leader to non-leader. + * + * @param toolSession + * @param learner + * user to be force completed + * @throws ToolException + */ + void forceCompleteActivity(ToolSession toolSession, User learner) throws ToolException; + + /** * Get activity's max possible mark. * * @param activity Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r61c706419c438d5ef52d93bda3de1f7c415380ae -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 61c706419c438d5ef52d93bda3de1f7c415380ae) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -423,6 +423,39 @@ } @Override + public void forceCompleteActivity(ToolSession toolSession, User learner) throws ToolException { + + if (toolSession == null) { + String error = "The toolSession is not valid. Unable to force complete activity."; + LamsCoreToolService.log.error(error); + throw new DataMissingException(error); + } + + Tool tool = toolSession.getToolActivity().getTool(); + if (tool == null) { + String error = "The tool for toolSession " + toolSession.getToolSessionId() + " is missing."; + LamsCoreToolService.log.error(error); + throw new DataMissingException(error); + } + + try { + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(tool); + sessionManager.forceCompleteUser(toolSession.getToolSessionId(), learner); + } catch (NoSuchBeanDefinitionException e) { + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to force complete activity. toolSession " + + toolSession.getToolSessionId(); + LamsCoreToolService.log.error(message, e); + throw new ToolException(message, e); + } catch (java.lang.AbstractMethodError e) { + String message = "Tool " + + tool.getToolDisplayName() + + " doesn't support the forceCompleteUser(ToolSession toolSession, User learner) method so can't force complete learner."; + LamsCoreToolService.log.error(message, e); + throw new ToolException(message, e); + } + } + + @Override public SortedMap getOutputFromTool(List names, Long toolSessionId, Integer learnerId) throws ToolException { ToolSession session = toolSessionDAO.getToolSession(toolSessionId); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java =================================================================== diff -u -rc208628989d52041b3765784f4c8cbfd6c80d47b -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision c208628989d52041b3765784f4c8cbfd6c80d47b) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/service/MonitoringService.java (.../MonitoringService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -1197,6 +1197,11 @@ learnerService.createToolSessionsIfNecessary(toolActivity, progress); toolSession = lamsCoreToolService.getToolSessionByActivity(learner, toolActivity); } + + // Let activity know that the user is force completed. Currently it's been utilized only by leader + // aware tools, it copies results from leader to non-leader. + lamsCoreToolService.forceCompleteActivity(toolSession, progress.getUser()); + learnerService.completeToolSession(toolSession.getToolSessionId(), new Long(learner.getUserId() .longValue())); learnerService.completeActivity(learner.getUserId(), activity, lessonId); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 11d6b3d1391ab1d1aa42453aa0347a6b85fcfeaa) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -1790,7 +1790,39 @@ return assessmentOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + Long userId = user.getUserId().longValue(); + AssessmentSession session = getAssessmentSessionBySessionId(toolSessionId); + if ((session == null) || (session.getAssessment() == null)) { + return; + } + Assessment assessment = session.getAssessment(); + + // copy answers only in case leader aware feature is ON + if (assessment.isUseSelectLeaderToolOuput()) { + + AssessmentUser assessmentUser = getUserByIDAndSession(userId, toolSessionId); + // create user if he hasn't accessed this activity yet + if (assessmentUser == null) { + assessmentUser = new AssessmentUser(user.getUserDTO(), session); + createUser(assessmentUser); + } + + AssessmentUser groupLeader = session.getGroupLeader(); + + // check if leader has submitted answers + if (groupLeader != null && groupLeader.isSessionFinished()) { + + // we need to make sure specified user has the same scratches as a leader + copyAnswersFromLeader(assessmentUser, groupLeader); + } + + } + + } + public boolean isContentEdited(Long toolContentId) { return getAssessmentByContentId(toolContentId).isDefineLater(); } Index: lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -65,6 +65,7 @@ import org.lamsfoundation.lams.tool.exception.SessionDataExistsException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.service.ILamsToolService; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; /** @@ -121,41 +122,35 @@ } public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { - // TODO Auto-generated method stub return null; } @SuppressWarnings("unchecked") public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { - // TODO Auto-generated method stub return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { bbbSessionDAO.deleteByProperty(BbbSession.class, "sessionId", toolSessionId); // TODO check if cascade worked } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util .List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return new TreeMap(); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return null; } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* Methods from ToolContentManager */ Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -rf78c5189265e4a86b25fae47e77e27a27e9ec349 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision f78c5189265e4a86b25fae47e77e27a27e9ec349) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -71,6 +71,7 @@ import org.lamsfoundation.lams.tool.exception.SessionDataExistsException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.service.ILamsToolService; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.WebUtil; @@ -128,6 +129,7 @@ chatSessionDAO.saveOrUpdate(session); } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { // TODO issues with session status/start date/ end date. Need to @@ -167,44 +169,43 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { // TODO Auto-generated method stub return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { // TODO Auto-generated method stub return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { chatSessionDAO.deleteBySessionID(toolSessionId); // TODO check if cascade worked } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return getChatOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getChatOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* Methods from ToolContentManager */ + @Override public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { if (ChatService.logger.isDebugEnabled()) { Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -564,6 +564,7 @@ } } + @Override public DacoSession getSessionBySessionId(Long sessionId) { return dacoSessionDao.getSessionBySessionId(sessionId); } @@ -579,34 +580,22 @@ return contentId; } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return dacoOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return dacoOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ + @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { Daco daco = getDacoByContentId(toolContentId); @@ -620,28 +609,29 @@ return getDacoOutputFactory().getToolOutputDefinitions(daco, definitionType); } + @Override public String getToolContentTitle(Long toolContentId) { return getDacoByContentId(toolContentId).getTitle(); } + @Override public boolean isContentEdited(Long toolContentId) { return getDacoByContentId(toolContentId).isDefineLater(); } + @Override public DacoUser getUser(Long uid) { return (DacoUser) dacoUserDao.getObject(DacoUser.class, uid); } + @Override public DacoUser getUserByUserIdAndContentId(Long userId, Long contentId) { - return dacoUserDao.getUserByUserIdAndContentId(userId, contentId); - } + @Override public DacoUser getUserByUserIdAndSessionId(Long userId, Long sessionId) { - return dacoUserDao.getUserByUserIdAndSessionId(userId, sessionId); - } /* Index: lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java (.../EadventureServiceImpl.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java (.../EadventureServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -118,9 +118,7 @@ * */ public class EadventureServiceImpl implements IEadventureService, ToolContentManager, ToolSessionManager, - ToolContentImport102Manager - -{ + ToolContentImport102Manager { static Logger log = Logger.getLogger(EadventureServiceImpl.class.getName()); private EadventureDAO eadventureDao; @@ -1098,15 +1096,16 @@ } } - public void removeParams(Long toolContentId){ + public void removeParams(Long toolContentId) { List params = getEadventureParamByContentId(toolContentId); - if (params!=null){ - for (EadventureParam param:params){ - eadventureParamDao.delete(param); + if (params != null) { + for (EadventureParam param : params) { + eadventureParamDao.delete(param); + } } - } } + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { EadventureSession session = new EadventureSession(); session.setSessionId(toolSessionId); @@ -1116,6 +1115,7 @@ eadventureSessionDao.saveObject(session); } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (toolSessionId == null) { EadventureServiceImpl.log.error("Fail to leave tool Session based on null tool session id."); @@ -1139,38 +1139,36 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { eadventureSessionDao.deleteBySessionId(toolSessionId); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return getEadventureOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getEadventureOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ===============Methods implemented from ToolContentImport102Manager =============== */ Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r754792bca8667b0c5609e15710f49c1bced36d80 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 754792bca8667b0c5609e15710f49c1bced36d80) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -945,15 +945,7 @@ return true; } - /** - * Export the XML fragment for the tool's content, along with any files needed for the content. - * - * @throws DataMissingException - * if no tool content matches the toolSessionId - * @throws ToolException - * if any other error occurs - */ - + @Override public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { Forum toolContentObj = forumDao.getByContentId(toolContentId); if (toolContentObj == null) { @@ -989,12 +981,7 @@ } } - /** - * Import the XML fragment for the tool's content, along with any files needed for the content. - * - * @throws ToolException - * if any other error occurs - */ + @Override public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath, String fromVersion, String toVersion) throws ToolException { @@ -1049,14 +1036,7 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ + @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { Forum forum = getForumByContentId(toolContentId); @@ -1066,18 +1046,17 @@ return getForumOutputFactory().getToolOutputDefinitions(forum, definitionType); } + @Override public String getToolContentTitle(Long toolContentId) { return getForumByContentId(toolContentId).getTitle(); } + @Override public boolean isContentEdited(Long toolContentId) { return getForumByContentId(toolContentId).isDefineLater(); } - /** - * @see org.lamsfoundation.lams.tool.ToolSessionManager#createToolSession(java.lang.Long, java.lang.String, - * java.lang.Long) - */ + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { ForumToolSession session = new ForumToolSession(); session.setSessionId(toolSessionId); @@ -1103,9 +1082,12 @@ session.setStatus(ForumConstants.STATUS_CONTENT_COPYED); forumToolSessionDao.saveOrUpdate(session); - ForumService.log.debug("tool session [" + session.getSessionId() + "] created."); + if ( log.isDebugEnabled() ) { + ForumService.log.debug("tool session [" + session.getSessionId() + "] created."); + } } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (toolSessionId == null) { ForumService.log.error("Fail to leave tool Session based on null tool session id."); @@ -1128,46 +1110,40 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { forumToolSessionDao.delete(toolSessionId); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return forumOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return forumOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } - /* - * (non-Javadoc) - * - * @see org.lamsfoundation.lams.tool.sbmt.service.ISubmitFilesService#getDefaultContent(java.lang.Long) - */ + @Override public Forum getDefaultContent(Long contentID) { if (contentID == null) { String error = "Could not retrieve default content id for Forum tool"; Index: lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -69,6 +69,7 @@ import org.lamsfoundation.lams.tool.gmap.util.GmapConstants; import org.lamsfoundation.lams.tool.gmap.util.GmapException; import org.lamsfoundation.lams.tool.service.ILamsToolService; +import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.web.session.SessionManager; import org.lamsfoundation.lams.web.util.AttributeNames; @@ -85,7 +86,7 @@ public class GmapService implements ToolSessionManager, ToolContentManager, IGmapService, ToolContentImport102Manager { - static Logger logger = Logger.getLogger(GmapService.class.getName()); + private static Logger logger = Logger.getLogger(GmapService.class.getName()); private IGmapDAO gmapDAO = null; @@ -113,6 +114,7 @@ } /* ************ Methods from ToolSessionManager ************* */ + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { if (GmapService.logger.isDebugEnabled()) { GmapService.logger.debug("entering method createToolSession:" + " toolSessionId = " + toolSessionId @@ -140,45 +142,42 @@ } } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { - // TODO Auto-generated method stub return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { - // TODO Auto-generated method stub return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { gmapSessionDAO.deleteBySessionID(toolSessionId); // TODO check if cascade worked } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return new TreeMap(); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return null; } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ************ Methods from ToolContentManager ************************* */ Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java =================================================================== diff -u -ra41ef185bfa95828df54b39993cbcfbad31f1d55 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision a41ef185bfa95828df54b39993cbcfbad31f1d55) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -755,6 +755,7 @@ // ToolContentManager, ToolSessionManager methods // ******************************************************************************* + @Override public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { ImageGallery toolContentObj = imageGalleryDao.getByContentId(toolContentId); if (toolContentObj == null) { @@ -810,6 +811,7 @@ } } + @Override public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath, String fromVersion, String toVersion) throws ToolException { @@ -862,14 +864,7 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ + @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { ImageGallery imageGallery = getImageGalleryByContentId(toolContentId); @@ -879,6 +874,7 @@ return getImageGalleryOutputFactory().getToolOutputDefinitions(imageGallery, definitionType); } + @Override public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { if (toContentId == null) { throw new ToolException("Failed to create the SharedImageGalleryFiles tool seession"); @@ -916,6 +912,7 @@ imageGalleryDao.saveObject(toContent); } + @Override public String getToolContentTitle(Long toolContentId) { return getImageGalleryByContentId(toolContentId).getTitle(); } @@ -929,10 +926,12 @@ imageGallery.setDefineLater(false); } + @Override public boolean isContentEdited(Long toolContentId) { return getImageGalleryByContentId(toolContentId).isDefineLater(); } + @Override public void removeToolContent(Long toolContentId, boolean removeSessionData) throws SessionDataExistsException, ToolException { ImageGallery imageGallery = imageGalleryDao.getByContentId(toolContentId); @@ -947,6 +946,7 @@ imageGalleryDao.delete(imageGallery); } + @Override @SuppressWarnings("unchecked") public void removeLearnerContent(Long toolContentId, Integer userId) throws ToolException { if (log.isDebugEnabled()) { @@ -1014,6 +1014,7 @@ } + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { ImageGallerySession session = new ImageGallerySession(); session.setSessionId(toolSessionId); @@ -1023,6 +1024,7 @@ imageGallerySessionDao.saveObject(session); } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (toolSessionId == null) { ImageGalleryServiceImpl.log.error("Fail to leave tool Session based on null tool session id."); @@ -1046,38 +1048,36 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { imageGallerySessionDao.deleteBySessionId(toolSessionId); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return imageGalleryOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return imageGalleryOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ===============Methods implemented from ToolContentImport102Manager =============== */ Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -110,9 +110,7 @@ * */ public class CommonCartridgeServiceImpl implements ICommonCartridgeService, ToolContentManager, ToolSessionManager, - ToolContentImport102Manager - -{ + ToolContentImport102Manager { static Logger log = Logger.getLogger(CommonCartridgeServiceImpl.class.getName()); private CommonCartridgeDAO commonCartridgeDao; @@ -895,10 +893,12 @@ commonCartridge.setDefineLater(false); } + @Override public boolean isContentEdited(Long toolContentId) { return getCommonCartridgeByContentId(toolContentId).isDefineLater(); } + @Override public void removeToolContent(Long toolContentId, boolean removeSessionData) throws SessionDataExistsException, ToolException { CommonCartridge commonCartridge = commonCartridgeDao.getByContentId(toolContentId); @@ -913,6 +913,7 @@ commonCartridgeDao.delete(commonCartridge); } + @Override @SuppressWarnings("unchecked") public void removeLearnerContent(Long toolContentId, Integer userId) throws ToolException { if (log.isDebugEnabled()) { @@ -965,6 +966,7 @@ } } + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { CommonCartridgeSession session = new CommonCartridgeSession(); session.setSessionId(toolSessionId); @@ -974,6 +976,7 @@ commonCartridgeSessionDao.saveObject(session); } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (toolSessionId == null) { CommonCartridgeServiceImpl.log.error("Fail to leave tool Session based on null tool session id."); @@ -997,38 +1000,36 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { commonCartridgeSessionDao.deleteBySessionId(toolSessionId); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return new TreeMap(); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return null; } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ===============Methods implemented from ToolContentImport102Manager =============== */ Index: lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java =================================================================== diff -u -r2251d2f64fcffab6d98e67a0272ea078dc863e1e -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision 2251d2f64fcffab6d98e67a0272ea078dc863e1e) +++ lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -173,6 +173,11 @@ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getKalturaOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ************ Methods from ToolContentManager ************************* */ Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -rb7332cccde9104906888864f79ec90e10cab2e17 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision b7332cccde9104906888864f79ec90e10cab2e17) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -40,7 +40,6 @@ import java.util.TreeSet; import java.util.Vector; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.lang.StringUtils; @@ -78,8 +77,8 @@ import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.mc.McAppConstants; import org.lamsfoundation.lams.tool.mc.McApplicationException; -import org.lamsfoundation.lams.tool.mc.McOptionDTO; import org.lamsfoundation.lams.tool.mc.McLearnerAnswersDTO; +import org.lamsfoundation.lams.tool.mc.McOptionDTO; import org.lamsfoundation.lams.tool.mc.McQuestionDTO; import org.lamsfoundation.lams.tool.mc.McSessionMarkDTO; import org.lamsfoundation.lams.tool.mc.McStringComparator; @@ -1200,16 +1199,7 @@ return data; } - /** - * implemented as part of the Tool Contract copyToolContent(Long fromContentId, Long toContentId) throws - * ToolException - * - * @param fromContentId - * @param toContentId - * @return - * @throws ToolException - * - */ + @Override public void copyToolContent(Long fromContentId, Long toContentId) { if (fromContentId == null) { @@ -1240,15 +1230,7 @@ } } - /** - * implemented as part of the tool contract. Removes content and uploaded files from the content repository. - * removeToolContent(Long toolContentId, boolean removeSessionData) throws SessionDataExistsException, ToolException - * - * @param toContentId - * @param removeSessionData - * @return - * @throws ToolException - */ + @Override public void removeToolContent(Long toolContentId, boolean removeSessionData) throws SessionDataExistsException, ToolException { @@ -1292,6 +1274,7 @@ mcContentDAO.saveMcContent(mcContent); } + @Override @SuppressWarnings("unchecked") public void removeLearnerContent(Long toolContentId, Integer userId) throws ToolException { if (logger.isDebugEnabled()) { @@ -1320,15 +1303,7 @@ } } - /** - * Export the XML fragment for the tool's content, along with any files needed for the content. - * - * @throws DataMissingException - * if no tool content matches the toolSessionId - * @throws ToolException - * if any other error occurs - */ - + @Override public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { McContent toolContentObj = mcContentDAO.findMcContentById(toolContentId); if (toolContentObj == null) { @@ -1349,12 +1324,7 @@ } } - /** - * Import the XML fragment for the tool's content, along with any files needed for the content. - * - * @throws ToolException - * if any other error occurs - */ + @Override public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath, String fromVersion, String toVersion) throws ToolException { try { @@ -1378,14 +1348,7 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - */ + @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { McContent content = getMcContent(toolContentId); @@ -1396,10 +1359,12 @@ return getMcOutputFactory().getToolOutputDefinitions(content, definitionType); } + @Override public String getToolContentTitle(Long toolContentId) { return mcContentDAO.findMcContentById(toolContentId).getTitle(); } + @Override public boolean isContentEdited(Long toolContentId) { return mcContentDAO.findMcContentById(toolContentId).isDefineLater(); } @@ -1416,20 +1381,7 @@ return mcSession != null; } - /** - * Implemented as part of the tool contract. Gets called only in the Learner mode. All the learners in the same - * group have the same toolSessionId. - * - * @param toolSessionId - * the generated tool session id. - * @param toolSessionName - * the tool session name. - * @param toolContentId - * the tool content id specified. - * @throws ToolException - * if an error occurs e.g. defaultContent is missing. - * - */ + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { if (toolSessionId == null) { @@ -1454,15 +1406,7 @@ } } - /** - * Implemented as part of the tool contract. removeToolSession(Long toolSessionId) throws DataMissingException, - * ToolException - * - * @param toolSessionId - * @param toolContentId - * return - * @throws ToolException - */ + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { if (toolSessionId == null) { McServicePOJO.logger.error("toolSessionId is null"); @@ -1491,16 +1435,7 @@ } } - /** - * Implemtented as part of the tool contract. leaveToolSession(Long toolSessionId,Long learnerId) throws - * DataMissingException, ToolException - * - * @param toolSessionId - * @param learnerId - * return String - * @throws ToolException - * - */ + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (learnerService == null) { @@ -1536,51 +1471,64 @@ return nextUrl; } - /** - * exportToolSession(Long toolSessionId) throws DataMissingException, ToolException - * - * @param toolSessionId - * return ToolSessionExportOutputData - * @throws ToolException - */ + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { throw new ToolException("not yet implemented"); } - /** - * exportToolSession(Long toolSessionId) throws DataMissingException, ToolException - * - * @param toolSessionIds - * return ToolSessionExportOutputData - * @throws ToolException - */ + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { throw new ToolException("not yet implemented"); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { - return mcOutputFactory.getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return mcOutputFactory.getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + Long userId = user.getUserId().longValue(); + McSession session = getMcSessionById(toolSessionId); + if ((session == null) || (session.getMcContent() == null)) { + return; + } + McContent content = session.getMcContent(); + + // copy answers only in case leader aware feature is ON + if (content.isUseSelectLeaderToolOuput()) { + + McQueUsr mcUser = getMcUserBySession(userId, session.getUid()); + // create user if he hasn't accessed this activity yet + if (mcUser == null) { + + String userName = user.getLogin(); + String fullName = user.getFirstName() + " " + user.getLastName(); + mcUser = new McQueUsr(userId, userName, fullName, session, new TreeSet()); + mcUserDAO.saveMcUser(mcUser); + } + + McQueUsr groupLeader = session.getGroupLeader(); + + // check if leader has submitted answers + if (groupLeader != null && groupLeader.isResponseFinalised()) { + + // we need to make sure specified user has the same scratches as a leader + copyAnswersFromLeader(mcUser, groupLeader); + } + + } + + } + public IToolVO getToolBySignature(String toolSignature) throws McApplicationException { IToolVO tool = toolService.getToolBySignature(toolSignature); return tool; Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -r229b32d50e848e3b5377fdbc8ac8af6d60c1e79b -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision 229b32d50e848e3b5377fdbc8ac8af6d60c1e79b) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -1084,7 +1084,43 @@ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getQaOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + Long userId = user.getUserId().longValue(); + QaSession session = getSessionById(toolSessionId); + if ((session == null) || (session.getQaContent() == null)) { + return; + } + QaContent content = session.getQaContent(); + + // copy answers only in case leader aware feature is ON + if (content.isUseSelectLeaderToolOuput()) { + + QaQueUsr qaUser = getUserByIdAndSession(userId, toolSessionId); + // create user if he hasn't accessed this activity yet + if (qaUser == null) { + + String userName = user.getLogin(); + String fullName = user.getFirstName() + " " + user.getLastName(); + qaUser = new QaQueUsr(userId, userName, fullName, session, new TreeSet()); + qaQueUsrDAO.createUsr(qaUser); + } + + QaQueUsr groupLeader = session.getGroupLeader(); + + // check if leader has submitted answers + if (groupLeader != null && groupLeader.isResponseFinalized()) { + + // we need to make sure specified user has the same scratches as a leader + copyAnswersFromLeader(qaUser, groupLeader); + } + + } + + } + public IToolVO getToolBySignature(String toolSignature) { IToolVO tool = toolService.getToolBySignature(toolSignature); return tool; Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -r02ce51e45612531c5ea14bcb54bf9dfa28c18c50 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 02ce51e45612531c5ea14bcb54bf9dfa28c18c50) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -31,7 +31,6 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; -import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; @@ -89,8 +88,8 @@ import org.lamsfoundation.lams.tool.rsrc.dao.ResourceSessionDAO; import org.lamsfoundation.lams.tool.rsrc.dao.ResourceUserDAO; import org.lamsfoundation.lams.tool.rsrc.dto.GroupSummary; -import org.lamsfoundation.lams.tool.rsrc.dto.ReflectDTO; import org.lamsfoundation.lams.tool.rsrc.dto.ItemSummary; +import org.lamsfoundation.lams.tool.rsrc.dto.ReflectDTO; import org.lamsfoundation.lams.tool.rsrc.ims.IContentPackageConverter; import org.lamsfoundation.lams.tool.rsrc.ims.IMSManifestException; import org.lamsfoundation.lams.tool.rsrc.ims.ImscpApplicationException; @@ -101,7 +100,6 @@ import org.lamsfoundation.lams.tool.rsrc.model.ResourceItemVisitLog; import org.lamsfoundation.lams.tool.rsrc.model.ResourceSession; import org.lamsfoundation.lams.tool.rsrc.model.ResourceUser; -import org.lamsfoundation.lams.tool.rsrc.util.ReflectDTOComparator; import org.lamsfoundation.lams.tool.rsrc.util.ResourceItemComparator; import org.lamsfoundation.lams.tool.rsrc.util.ResourceToolContentHandler; import org.lamsfoundation.lams.tool.service.ILamsToolService; @@ -816,6 +814,7 @@ return messageService.getMessage(key, args); } + @Override public boolean isGroupedActivity(long toolContentID) { return toolService.isGroupedActivity(toolContentID); } @@ -824,6 +823,7 @@ // ToolContentManager, ToolSessionManager methods // ******************************************************************************* + @Override public void exportToolContent(Long toolContentId, String rootPath) throws DataMissingException, ToolException { Resource toolContentObj = resourceDao.getByContentId(toolContentId); if (toolContentObj == null) { @@ -848,6 +848,7 @@ } } + @Override public void importToolContent(Long toolContentId, Integer newUserUid, String toolContentPath, String fromVersion, String toVersion) throws ToolException { @@ -892,15 +893,7 @@ } } - /** - * Get the definitions for possible output for an activity, based on the toolContentId. These may be definitions - * that are always available for the tool (e.g. number of marks for Multiple Choice) or a custom definition created - * for a particular activity such as the answer to the third question contains the word Koala and hence the need for - * the toolContentId - * - * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition - * @throws ResourceApplicationException - */ + @Override public SortedMap getToolOutputDefinitions(Long toolContentId, int definitionType) throws ToolException { Resource content = getResourceByContentId(toolContentId); @@ -914,6 +907,7 @@ return getResourceOutputFactory().getToolOutputDefinitions(content, definitionType); } + @Override public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { if (toContentId == null) { throw new ToolException("Failed to create the SharedResourceFiles tool seession"); @@ -945,6 +939,7 @@ } } + @Override public String getToolContentTitle(Long toolContentId) { return getResourceByContentId(toolContentId).getTitle(); } @@ -958,10 +953,12 @@ resource.setDefineLater(false); } + @Override public boolean isContentEdited(Long toolContentId) { return getResourceByContentId(toolContentId).isDefineLater(); } + @Override public void removeToolContent(Long toolContentId, boolean removeSessionData) throws SessionDataExistsException, ToolException { Resource resource = resourceDao.getByContentId(toolContentId); @@ -976,6 +973,7 @@ resourceDao.delete(resource); } + @Override @SuppressWarnings("unchecked") public void removeLearnerContent(Long toolContentId, Integer userId) throws ToolException { if (log.isDebugEnabled()) { @@ -1025,6 +1023,7 @@ } } + @Override public void createToolSession(Long toolSessionId, String toolSessionName, Long toolContentId) throws ToolException { ResourceSession session = new ResourceSession(); session.setSessionId(toolSessionId); @@ -1034,6 +1033,7 @@ resourceSessionDao.saveObject(session); } + @Override public String leaveToolSession(Long toolSessionId, Long learnerId) throws DataMissingException, ToolException { if (toolSessionId == null) { ResourceServiceImpl.log.error("Fail to leave tool Session based on null tool session id."); @@ -1057,44 +1057,40 @@ return learnerService.completeToolSession(toolSessionId, learnerId); } + @Override public ToolSessionExportOutputData exportToolSession(Long toolSessionId) throws DataMissingException, ToolException { return null; } + @Override public ToolSessionExportOutputData exportToolSession(List toolSessionIds) throws DataMissingException, ToolException { return null; } + @Override public void removeToolSession(Long toolSessionId) throws DataMissingException, ToolException { resourceSessionDao.deleteBySessionId(toolSessionId); } - /** - * Get the tool output for the given tool output names. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.util.List, java.lang.Long, - * java.lang.Long) - */ + @Override public SortedMap getToolOutput(List names, Long toolSessionId, Long learnerId) { return getResourceOutputFactory().getToolOutput(names, this, toolSessionId, learnerId); } - /** - * Get the tool output for the given tool output name. - * - * @see org.lamsfoundation.lams.tool.ToolSessionManager#getToolOutput(java.lang.String, java.lang.Long, - * java.lang.Long) - */ + @Override public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getResourceOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } + + @Override + public void forceCompleteUser(Long toolSessionId, User user) { + //no actions required + } /* ===============Methods implemented from ToolContentImport102Manager =============== */ - /** - * Import the data for a 1.0.2 Noticeboard or HTMLNoticeboard - */ + @Override public void import102ToolContent(Long toolContentId, UserDTO user, Hashtable importValues) { Date now = new Date(); Resource toolContentObj = new Resource(); Index: lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp =================================================================== diff -u -re7539bc4f824fb791811f0a83e95358be947ca29 -ra0bce7961a19548c58f5b0025160f124785f9951 --- lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision e7539bc4f824fb791811f0a83e95358be947ca29) +++ lams_tool_larsrc/web/pages/authoring/parts/itemlist.jsp (.../itemlist.jsp) (revision a0bce7961a19548c58f5b0025160f124785f9951) @@ -249,12 +249,14 @@ <%-- This script will works when a new resoruce item submit in order to refresh "Resource List" panel. --%>