Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java =================================================================== diff -u -r5926b5cb145649a9f978ab4c14146169684a849c -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision 5926b5cb145649a9f978ab4c14146169684a849c) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java (.../IIntegrationService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -204,14 +204,22 @@ ExtServerLessonMap createExtServerLessonMap(Long lessonId, String resourceLinkId, ExtServer extServer); /** - * Checks whether the lesson was created from extServer and returns lessonFinishCallbackUrl if it's not blank. + * Checks whether the lesson was created from extServer (not an LTI consumer one) and returns lessonFinishCallbackUrl if it's not blank. * * @param user * @param lesson * @return * @throws UnsupportedEncodingException */ String getLessonFinishCallbackUrl(User user, Lesson lesson) throws UnsupportedEncodingException; + + /** + * Check whether specified lesson was created using LTI consumer, and if so - push user mark to that server + * + * @param user + * @param lesson + */ + void pushMarkToLtiConsumer(User user, Lesson lesson, Double mark); /** * Checks whether lesson was created using integrations and whether according integrated server has ExtGroupsUrl Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -rc975a1230b65f2245c5c77ba413afe97a2816df9 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision c975a1230b65f2245c5c77ba413afe97a2816df9) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -102,10 +102,8 @@ * @author Fei Yang */ public class IntegrationService implements IIntegrationService { - private static Logger log = Logger.getLogger(IntegrationService.class); - private IGradebookService gradebookService; private IUserManagementService service; private ILessonService lessonService; private ILamsCoreToolService toolService; @@ -634,88 +632,95 @@ @Override public String getLessonFinishCallbackUrl(User user, Lesson lesson) throws UnsupportedEncodingException { + if (lesson == null) { + return null; + } + // the callback url must contain %username%, %lessonid%, %timestamp% and %hash% eg: // "http://server.com/lams--bb/UserData?uid=%username%&lessonid=%lessonid%&ts=%timestamp%&hash=%hash%"; // where %username%, %lessonid%, %timestamp% and %hash% will be replaced with their real values String lessonFinishCallbackUrl = null; - if (lesson != null) { - Long lessonId = lesson.getLessonId(); - ExtServerLessonMap extServerLesson = getExtServerLessonMap(lessonId); - // checks whether the lesson was created from extServer and whether it has lessonFinishCallbackUrl setting - if (extServerLesson != null - && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl())) { - ExtServer server = extServerLesson.getExtServer(); + Long lessonId = lesson.getLessonId(); + ExtServerLessonMap extServerLesson = getExtServerLessonMap(lessonId); + ExtServer server = extServerLesson == null ? null : extServerLesson.getExtServer(); + ExtUserUseridMap extUser = extServerLesson == null ? null + : getExtUserUseridMapByUserId(server, user.getUserId()); - ExtUserUseridMap extUser = getExtUserUseridMapByUserId(server, user.getUserId()); - if (extUser != null) { - String extUsername = extUser.getExtUsername(); + // checks whether the lesson was created from extServer and whether it has lessonFinishCallbackUrl setting + if (extServerLesson != null && extUser != null + && server.getServerTypeId().equals(ExtServer.INTEGRATION_SERVER_TYPE) + && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl())) { - //return URL in case of integration server - if (server.getServerTypeId().equals(ExtServer.INTEGRATION_SERVER_TYPE)) { - // construct real lessonFinishCallbackUrl - lessonFinishCallbackUrl = server.getLessonFinishUrl(); - String timestamp = Long.toString(new Date().getTime()); - String hash = hash(server, extUsername, timestamp); - String encodedExtUsername = URLEncoder.encode(extUsername, "UTF8"); + // construct real lessonFinishCallbackUrl + lessonFinishCallbackUrl = server.getLessonFinishUrl(); + String timestamp = Long.toString(new Date().getTime()); + String extUsername = extUser.getExtUsername(); + String hash = hash(server, extUsername, timestamp); + String encodedExtUsername = URLEncoder.encode(extUsername, "UTF8"); - // set the values for the parameters - lessonFinishCallbackUrl = lessonFinishCallbackUrl.replaceAll("%username%", encodedExtUsername) - .replaceAll("%lessonid%", lessonId.toString()).replaceAll("%timestamp%", timestamp) - .replaceAll("%hash%", hash); - log.debug(lessonFinishCallbackUrl); + // set the values for the parameters + lessonFinishCallbackUrl = lessonFinishCallbackUrl.replaceAll("%username%", encodedExtUsername) + .replaceAll("%lessonid%", lessonId.toString()).replaceAll("%timestamp%", timestamp) + .replaceAll("%hash%", hash); + log.debug(lessonFinishCallbackUrl); + } + // in case of LTI Tool Consumer - pushMarkToIntegratedServer() method will be invoked from GradebookService on mark update - // in case of LTI Tool Consumer - create a new thread to report score back to LMS (in order to do this task in parallel not to slow down later work) - } else { + return lessonFinishCallbackUrl; + } + + @Override + public void pushMarkToLtiConsumer(User user, Lesson lesson, Double userMark) { + if (lesson == null) { + return; + } + Long lessonId = lesson.getLessonId(); + ExtServerLessonMap extServerLesson = getExtServerLessonMap(lessonId); + ExtServer server = extServerLesson == null ? null : extServerLesson.getExtServer(); + ExtUserUseridMap extUser = extServerLesson == null ? null + : getExtUserUseridMapByUserId(server, user.getUserId()); + + // checks whether the lesson was created from extServer and whether it's a LTI Tool Consumer - create a new thread to report score back to LMS (in order to do this task in parallel not to slow down later work) + if (extServerLesson != null && extUser != null + && server.getServerTypeId().equals(ExtServer.LTI_CONSUMER_SERVER_TYPE) + && StringUtils.isNotBlank(extServerLesson.getExtServer().getLessonFinishUrl())) { - // calculate lesson's MaxPossibleMark - Long lessonMaxPossibleMark = toolService.getLessonMaxPossibleMark(lesson); - GradebookUserLesson gradebookUserLesson = gradebookService.getGradebookUserLesson(lessonId, - user.getUserId()); - Double userTotalMark = (gradebookUserLesson == null) || (gradebookUserLesson.getMark() == null) - ? null - : gradebookUserLesson.getMark(); + // calculate lesson's MaxPossibleMark + Long lessonMaxPossibleMark = toolService.getLessonMaxPossibleMark(lesson); - final String lessonFinishUrl = server.getLessonFinishUrl(); - if (userTotalMark != null && StringUtils.isNotBlank(lessonFinishUrl)) { + final String lessonFinishUrl = server.getLessonFinishUrl(); + if (userMark != null && StringUtils.isNotBlank(lessonFinishUrl)) { + Double score = lessonMaxPossibleMark.equals(0L) ? 0 : userMark / lessonMaxPossibleMark; + final String scoreStr = (userMark == null) || lessonMaxPossibleMark.equals(0L) ? "" + : score.toString(); - Double score = lessonMaxPossibleMark.equals(0L) ? 0 : userTotalMark / lessonMaxPossibleMark; - final String scoreStr = (userTotalMark == null) || lessonMaxPossibleMark.equals(0L) ? "" - : score.toString(); + final String serverKey = server.getServerid(); + final String serverSecret = server.getServerkey(); + final String tcGradebookId = extUser.getTcGradebookId(); + final ExtUserUseridMap extUserFinal = extUser; - final String serverKey = server.getServerid(); - final String serverSecret = server.getServerkey(); - final String tcGradebookId = extUser.getTcGradebookId(); - final ExtUserUseridMap extUserFinal = extUser; - - Thread preaddLearnersMonitorsThread = new Thread(new Runnable() { - @Override - public void run() { - //send Request directly - try { - IMSPOXRequest.sendReplaceResult(lessonFinishUrl, serverKey, serverSecret, - tcGradebookId, scoreStr); - } catch (IOException e) { - throw new RuntimeException(e); - } catch (OAuthException e) { - throw new RuntimeException(e); - } catch (GeneralSecurityException e) { - throw new RuntimeException(e); - } - log.debug("Score (" + scoreStr + ") posted to Tool Consumer (serverKey:" + serverKey - + "). extUsername:" + extUserFinal.getExtUsername()); - } - }, "LAMS_sendScoresLTI_thread"); - preaddLearnersMonitorsThread.start(); - + Thread sendMarkToLtiConsumerThread = new Thread(new Runnable() { + @Override + public void run() { + //send Request directly + try { + IMSPOXRequest.sendReplaceResult(lessonFinishUrl, serverKey, serverSecret, tcGradebookId, + scoreStr); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (OAuthException e) { + throw new RuntimeException(e); + } catch (GeneralSecurityException e) { + throw new RuntimeException(e); } + log.debug("Score (" + scoreStr + ") posted to Tool Consumer (serverKey:" + serverKey + + "). extUsername:" + extUserFinal.getExtUsername()); } - - } + }, "LAMS_sendScoresLTI_thread"); + sendMarkToLtiConsumerThread.start(); } } - - return lessonFinishCallbackUrl; } @Override @@ -1080,10 +1085,6 @@ this.lessonService = lessonService; } - public void setGradebookService(IGradebookService gradebookService) { - this.gradebookService = gradebookService; - } - public void setToolService(ILamsCoreToolService toolService) { this.toolService = toolService; } Index: lams_common/src/java/org/lamsfoundation/lams/integrationContext.xml =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/integrationContext.xml (.../integrationContext.xml) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_common/src/java/org/lamsfoundation/lams/integrationContext.xml (.../integrationContext.xml) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -6,7 +6,6 @@ http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> - Index: lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java =================================================================== diff -u -r673e64304c12d78aa1b4ba819a39ae14f394ca42 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 673e64304c12d78aa1b4ba819a39ae14f394ca42) +++ lams_common/src/java/org/lamsfoundation/lams/learning/service/ILearnerService.java (.../ILearnerService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -121,6 +121,12 @@ * Complete the activity in the progress engine and delegate to the progress engine to calculate the next activity * in the learning design. It is currently triggered by various progress engine related action classes, which then * calculate the url to go to next, based on the ActivityMapping class. + * + * @param learnerId + * the learner who are running this activity in the design. + * @param activity + * the activity is being run. + * @return the updated learner progress */ void completeActivity(Integer learnerId, Activity activity, Long progressID); Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== diff -u -r9f98b5e2b822f824d857d3d677f21b1149f794c8 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 9f98b5e2b822f824d857d3d677f21b1149f794c8) +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java (.../ToolSessionManager.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -164,6 +164,8 @@ * @return */ List getConfidenceLevels(Long toolSessionId); + + boolean isUserGroupLeader(Long userId, Long toolSessionId); /** * Notifies tool that the user is force completed. Currently it's been utilized only by leader aware tools, which Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -280,6 +280,14 @@ * @return */ List getConfidenceLevelsByToolSession(ToolSession toolSession); + + /** + * Returns true in case this tool is leader-aware and specified user is a leader in his group, false otherwise. + * + * @param toolSession + * @param learner + */ + boolean isUserLeaderInActivity(ToolSession toolSession, User user); /** * Notifies tool that the user is force completed. Currently it's been utilized only by leader aware tools, which Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r9f98b5e2b822f824d857d3d677f21b1149f794c8 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 9f98b5e2b822f824d857d3d677f21b1149f794c8) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -155,8 +155,8 @@ // if haven't found an existing tool session then create one if (toolSession == null) { - if (LamsCoreToolService.log.isDebugEnabled()) { - LamsCoreToolService.log.debug("Creating tool session for [" + activity.getActivityId() + "," + if (log.isDebugEnabled()) { + log.debug("Creating tool session for [" + activity.getActivityId() + "," + activity.getTitle() + "] for learner [" + learner.getLogin() + "] lesson [" + lesson.getLessonId() + "," + lesson.getLessonName() + "]."); } @@ -200,7 +200,7 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to create tool session. ToolActivity " + activity; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } @@ -225,7 +225,7 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to copy/update the tool content. ToolActivity " + toolActivity; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } @@ -239,14 +239,14 @@ if (toolContent == null) { String error = "The toolContentID " + toolContentId + " is not valid. No such record exists on the database."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } Tool tool = toolContent.getTool(); if (tool == null) { String error = "The tool for toolContentId " + toolContentId + " is missing."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } @@ -262,7 +262,7 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to copy the tool content. ToolContentId " + toolContentId; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } @@ -277,7 +277,7 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to delete the tool content. ToolActivity " + toolActivity; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } @@ -292,7 +292,7 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to delete learner content. ToolActivity " + toolActivity; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } else if (activity.isGroupingActivity()) { @@ -367,14 +367,14 @@ if (toolContent == null) { String error = "The toolContentID " + toolContentId + " is not valid. No such record exists on the database."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } Tool tool = toolContent.getTool(); if (tool == null) { String error = "The tool for toolContentId " + toolContentId + " is missing."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } @@ -384,12 +384,12 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to get the tool output definitions. ToolContentId " + toolContentId; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getToolOutputDefinitions(toolContentId) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } @@ -404,14 +404,14 @@ if (toolContent == null) { String error = "The toolContentID " + inputToolContentId + " is not valid. No such record exists on the database."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } Tool tool = toolContent.getTool(); if (tool == null) { String error = "The tool for toolContentId " + inputToolContentId + " is missing."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } @@ -447,12 +447,12 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to get the tool output definitions. ToolContentId " + inputToolContentId; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getSupportedToolOutputDefinitionClasses(definitionType) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } @@ -473,14 +473,14 @@ if (toolSession == null) { String error = "The toolSession is not valid. Unable to get the tool output"; - LamsCoreToolService.log.error(error); + 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); + log.error(error); throw new DataMissingException(error); } @@ -491,12 +491,12 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to gt the tol output. toolSession " + toolSession.getToolSessionId(); - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } @@ -506,14 +506,14 @@ if (toolActivity == null) { String error = "The toolActivity is null. Unable to get tool outputs"; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } Tool tool = toolActivity.getTool(); if (tool == null) { String error = "The tool for toolActivity " + toolActivity.getActivityId() + " is missing."; - LamsCoreToolService.log.error(error); + log.error(error); throw new DataMissingException(error); } @@ -523,12 +523,12 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to grt the tol output. toolActivity " + toolActivity.getActivityId(); - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } @@ -538,14 +538,14 @@ if (toolSession == null) { String error = "The toolSession is null. Unable to get confidence levels"; - LamsCoreToolService.log.error(error); + 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); + log.error(error); throw new DataMissingException(error); } @@ -555,29 +555,60 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to get the tool output. toolActivity " + toolSession.getToolActivity().getActivityId(); - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } + + @Override + public boolean isUserLeaderInActivity(ToolSession toolSession, User learner) throws ToolException { + if (toolSession == null) { + String error = "The toolSession is not valid. Unable to check whether user is a leader."; + 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."; + log.error(error); + throw new DataMissingException(error); + } + try { + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(tool); + //we get leader from the current tool rather than LeaderSelection tool in order to avoid making redundant calls to DB + return sessionManager.isUserGroupLeader(learner.getUserId().longValue(), toolSession.getToolSessionId()); + } catch (NoSuchBeanDefinitionException e) { + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to check whether user is a leader. toolSession " + + toolSession.getToolSessionId(); + log.error(message, e); + throw new ToolException(message, e); + } catch (AbstractMethodError e) { + String message = "Tool " + tool.getToolDisplayName() + + " doesn't support the isUserLeaderInActivity(ToolSession, User) method so can't check whether user is a leader."; + log.error(message, e); + throw new ToolException(message, e); + } + } + @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); + 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); + log.error(error); throw new DataMissingException(error); } @@ -587,12 +618,12 @@ } 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); + 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); + log.error(message, e); throw new ToolException(message, e); } } @@ -610,14 +641,14 @@ if (toolSession == null) { String error = "The toolSession is not valid. Unable to get the tool output"; - LamsCoreToolService.log.error(error); + 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); + log.error(error); throw new DataMissingException(error); } @@ -628,12 +659,12 @@ } catch (NoSuchBeanDefinitionException e) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to gt the tol output. toolSession " + toolSession.getToolSessionId(); - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } catch (java.lang.AbstractMethodError e) { String message = "Tool " + tool.getToolDisplayName() + " doesn't support the getToolOutput(name, toolSessionId, learnerId) method so no output definitions can be accessed."; - LamsCoreToolService.log.error(message, e); + log.error(message, e); throw new ToolException(message, e); } } @@ -746,7 +777,7 @@ @Override public void deleteToolSession(ToolSession toolSession) { if (toolSession == null) { - LamsCoreToolService.log.error("deleteToolSession: unable to delete tool session as tool session is null."); + log.error("deleteToolSession: unable to delete tool session as tool session is null."); return; } @@ -757,10 +788,10 @@ try { sessionManager.removeToolSession(toolSession.getToolSessionId()); } catch (DataMissingException e) { - LamsCoreToolService.log.error("Unable to delete tool data for tool session " + log.error("Unable to delete tool data for tool session " + toolSession.getToolSessionId() + " as toolSession does not exist", e); } catch (ToolException e) { - LamsCoreToolService.log.error("Unable to delete tool data for tool session " + log.error("Unable to delete tool data for tool session " + toolSession.getToolSessionId() + " as tool threw an exception", e); } @@ -881,7 +912,7 @@ String error = "Unable to set up url as session does not exist. Activity " + (activity != null ? activity.getActivityId() + ":" + activity.getTitle() : "null") + " learner " + (learner != null ? learner.getUserId() + ":" + learner.getLogin() : "null"); - LamsCoreToolService.log.error(error); + log.error(error); throw new LamsToolServiceException(error); } Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml =================================================================== diff -u -r62aaf160878735888d077bf28fac3c1989bb8fbd -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision 62aaf160878735888d077bf28fac3c1989bb8fbd) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/gradebookApplicationContext.xml (.../gradebookApplicationContext.xml) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -20,11 +20,11 @@ - + Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java =================================================================== diff -u -rd471fb4d4ad60b6568b9f3cb4ec9cd82c6fbe495 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision d471fb4d4ad60b6568b9f3cb4ec9cd82c6fbe495) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/GradebookService.java (.../GradebookService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -49,8 +49,8 @@ import org.lamsfoundation.lams.gradebook.model.GradebookUserActivityArchive; import org.lamsfoundation.lams.gradebook.model.GradebookUserLessonArchive; import org.lamsfoundation.lams.gradebook.util.GBGridView; -import org.lamsfoundation.lams.gradebook.util.GradebookUtil; import org.lamsfoundation.lams.gradebook.util.LessonComparator; +import org.lamsfoundation.lams.integration.service.IIntegrationService; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ActivityEvaluation; @@ -131,12 +131,11 @@ private ILessonDAO lessonDAO; private ILessonService lessonService; private IUserManagementService userService; - private IBaseDAO baseDAO; private IActivityDAO activityDAO; private MessageService messageService; private ILogEventService logEventService; private static ILearnerService learnerService; - + private IIntegrationService integrationService; private IOutcomeService outcomeService; @Override @@ -727,7 +726,6 @@ } } } - } catch (ToolException e) { logger.debug( "Runtime exception when attempted to get outputs for activity: " + toolActivity.getActivityId(), e); @@ -737,7 +735,6 @@ @Override public void updateGradebookUserActivityMark(Lesson lesson, User learner, Activity activity, Double mark, Boolean markedInGradebook, boolean isAuditLogRequired) { - GradebookUserActivity gradebookUserActivity = gradebookDAO .getGradebookUserDataForActivity(activity.getActivityId(), learner.getUserId()); @@ -748,19 +745,6 @@ gradebookUserActivity, gradebookUserLesson); } - private void updateUserActivityGradebookMark(Lesson lesson, User learner, Activity activity, Double mark, - Boolean markedInGradebook, boolean isAuditLogRequired) { - - GradebookUserActivity gradebookUserActivity = gradebookDAO - .getGradebookUserDataForActivity(activity.getActivityId(), learner.getUserId()); - - GradebookUserLesson gradebookUserLesson = gradebookDAO.getGradebookUserDataForLesson(lesson.getLessonId(), - learner.getUserId()); - - updateUserActivityGradebookMark(lesson, learner, activity, mark, markedInGradebook, isAuditLogRequired, - gradebookUserActivity, gradebookUserLesson); - } - @Override public boolean isWeightedMarks(Long lessonId) { Lesson lesson = lessonService.getLesson(lessonId); @@ -788,6 +772,9 @@ return evaluations; } + /* + * TODO Method is not in use. Remove it? + * private void updateUserActivityGradebookMark(Lesson lesson, Activity activity, User learner) { ToolSession toolSession = toolService.getToolSessionByLearner(learner, activity); @@ -815,7 +802,7 @@ // Only set the mark if it hasnt previously been set by a teacher if ((gradebookUserActivity == null) || !gradebookUserActivity.getMarkedInGradebook()) { - updateUserActivityGradebookMark(lesson, learner, toolActivity, outputDouble, false, false); + updateGradebookUserActivityMark(lesson, learner, toolActivity, outputDouble, false, false); } } } @@ -825,6 +812,7 @@ "Runtime exception when attempted to get outputs for activity: " + toolActivity.getActivityId(), e); } } + */ /** * It's the same method as above, it only also accepts gradebookUserActivity and gradebookUserLesson as parameters. @@ -870,6 +858,13 @@ logEventService.logEvent(LogEvent.TYPE_MARK_UPDATED, monitorUser.getUserID(), learner.getUserId(), lesson.getLessonId(), activity.getActivityId(), message); } + + //propagade mark to integration server, if the lesson has been finished by the learner + LearnerProgress learnerProgress = lessonService.getUserProgressForLesson(learner.getUserId(), + lesson.getLessonId()); + if (learnerProgress != null && learnerProgress.isComplete()) { + integrationService.pushMarkToLtiConsumer(learner, lesson, gradebookUserLesson.getMark()); + } } } @@ -941,7 +936,6 @@ Integer orgId = organisation.getOrganisationId(); if (organisation != null) { - List lessons = (view == GBGridView.MON_COURSE || view == GBGridView.LIST || view == GBGridView.MON_USER) ? gradebookDAO.getLessonsByGroupAndUser(isGroupManager ? null : viewer.getUserId(), true, @@ -1035,12 +1029,8 @@ } else { lessonRow.setSubGroup(""); } - } } - - } else { - logger.error("Request for gradebook grid with a null organisation"); } return lessonRows; @@ -1897,7 +1887,9 @@ } } - @Override + /* + * TODO Method is not in use. Remove it? + * public void updateActivityMark(Double mark, String feedback, Integer userID, Long toolSessionID, Boolean markedInGradebook) { ToolSession toolSession = toolService.getToolSessionById(toolSessionID); @@ -1909,12 +1901,13 @@ // If gradebook user activity is null or the mark is set by teacher or was set previously by user - save the // mark and feedback if ((gradebookUserActivity == null) || markedInGradebook || !gradebookUserActivity.getMarkedInGradebook()) { - updateUserActivityGradebookMark(toolSession.getLesson(), learner, activity, mark, markedInGradebook, + updateGradebookUserActivityMark(toolSession.getLesson(), learner, activity, mark, markedInGradebook, false); updateUserActivityGradebookFeedback(activity, learner, feedback); } } } + */ @Override public void removeActivityMark(Integer userID, Long toolSessionID) { @@ -1963,7 +1956,7 @@ logger.debug( "Removing activity and lesson entries for learner ID " + learnerId + " and lesson ID " + lessonId); } - Lesson lesson = getLessonService().getLesson(lessonId); + Lesson lesson = lessonService.getLesson(lessonId); List activities = getLessonActivitiesForLearner(lesson, learnerId); for (ToolActivity activity : activities) { GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(activity.getActivityId(), learnerId); @@ -1983,7 +1976,7 @@ logger.debug("Archiving activity and lesson entries for learner ID " + learnerId + " and lesson ID " + lessonId + " with archive date " + archiveDate); } - Lesson lesson = getLessonService().getLesson(lessonId); + Lesson lesson = lessonService.getLesson(lessonId); List activities = getLessonActivitiesForLearner(lesson, learnerId); for (ToolActivity activity : activities) { GradebookUserActivity gradebookUserActivity = getGradebookUserActivity(activity.getActivityId(), learnerId); @@ -2553,18 +2546,10 @@ this.logEventService = logEventService; } - public ILamsCoreToolService getToolService() { - return toolService; - } - public void setToolService(ILamsCoreToolService toolService) { this.toolService = toolService; } - public IGradebookDAO getGradebookDAO() { - return gradebookDAO; - } - public void setGradebookDAO(IGradebookDAO gradebookDAO) { this.gradebookDAO = gradebookDAO; } @@ -2577,34 +2562,14 @@ this.lessonDAO = lessonDAO; } - public ILessonService getLessonService() { - return lessonService; - } - public void setLessonService(ILessonService lessonService) { this.lessonService = lessonService; } - public IUserManagementService getUserService() { - return userService; - } - public void setUserService(IUserManagementService userService) { this.userService = userService; } - public IBaseDAO getBaseDAO() { - return baseDAO; - } - - public void setBaseDAO(IBaseDAO baseDAO) { - this.baseDAO = baseDAO; - } - - public IActivityDAO getActivityDAO() { - return activityDAO; - } - public void setActivityDAO(IActivityDAO activityDAO) { this.activityDAO = activityDAO; } @@ -2620,4 +2585,8 @@ public void setOutcomeService(IOutcomeService outcomeService) { this.outcomeService = outcomeService; } + + public void setIntegrationService(IIntegrationService integrationService) { + this.integrationService = integrationService; + } } \ No newline at end of file Index: lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java =================================================================== diff -u -rd471fb4d4ad60b6568b9f3cb4ec9cd82c6fbe495 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision d471fb4d4ad60b6568b9f3cb4ec9cd82c6fbe495) +++ lams_gradebook/src/java/org/lamsfoundation/lams/gradebook/service/IGradebookFullService.java (.../IGradebookFullService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -242,17 +242,6 @@ Double getAverageMarkForLesson(Long lessonID); /** - * Method for updating an activity mark that tools can call - * - * @param mark - * @param feedback - * @param userID - * @param toolSessionID - */ - void updateActivityMark(Double mark, String feedback, Integer userID, Long toolSessionID, - Boolean markedInGradebook); - - /** * Get an activity from the db by id * * @param activityID Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerFullService.java =================================================================== diff -u -r471b903caa3365758fbdec0a22440b1b0b3f2947 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerFullService.java (.../ILearnerFullService.java) (revision 471b903caa3365758fbdec0a22440b1b0b3f2947) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/ILearnerFullService.java (.../ILearnerFullService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1,10 +1,15 @@ package org.lamsfoundation.lams.learning.service; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import org.lamsfoundation.lams.learning.command.model.Command; +import org.lamsfoundation.lams.learning.web.util.ActivityMapping; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.BranchingActivity; import org.lamsfoundation.lams.learningdesign.Grouping; @@ -59,14 +64,17 @@ * @return LearnerProgress */ LearnerProgress chooseActivity(Integer learnerId, Long lessonId, Activity activity, Boolean clearCompletedFlag); - + /** - * If specified activity is set to produce ToolOutput, calculates and stores mark to gradebook. + * "Complete" an activity from the web layer's perspective. Used for CompleteActivityAction and the Gate and + * Grouping actions. Calls the completeActivity(Integer, Activity, Long) to actually complete the activity and + * progress. * - * @param toolActivity - * @param progress + * @param redirect + * Should this call redirect to the next screen (true) or use a forward (false) */ - void updateGradebookMark(Activity activity, LearnerProgress progress); + String completeActivity(ActivityMapping actionMappings, LearnerProgress progress, Activity currentActivity, + Integer learnerId, boolean redirect) throws UnsupportedEncodingException; /** * Perform grouping for the learners who have started the lesson, based on the grouping activity. Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r673e64304c12d78aa1b4ba819a39ae14f394ca42 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 673e64304c12d78aa1b4ba819a39ae14f394ca42) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -23,6 +23,7 @@ package org.lamsfoundation.lams.learning.service; +import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Calendar; @@ -288,7 +289,7 @@ Lesson lesson = getLesson(lessonID); if ((lesson == null) || !lesson.isLessonStarted()) { - LearnerService.log.error("joinLesson: Learner " + learner.getLogin() + " joining lesson " + lesson + log.error("joinLesson: Learner " + learner.getLogin() + " joining lesson " + lesson + " but lesson has not started"); throw new LearnerServiceException("Cannot join lesson as lesson has not started"); } @@ -305,7 +306,7 @@ try { progressEngine.setUpStartPoint(learnerProgress); } catch (ProgressException e) { - LearnerService.log.error("error occurred in 'setUpStartPoint':" + e.getMessage()); + log.error("error occurred in 'setUpStartPoint':" + e.getMessage()); throw new LearnerServiceException(e.getMessage()); } // Use TimeStamp rather than Date directly to keep consistent with Hibnerate persiste object. @@ -332,7 +333,7 @@ try { progressEngine.setUpStartPoint(learnerProgress); } catch (ProgressException e) { - LearnerService.log.error("error occurred in 'setUpStartPoint':" + e.getMessage()); + log.error("error occurred in 'setUpStartPoint':" + e.getMessage()); throw new LearnerServiceException(e.getMessage()); } } @@ -373,10 +374,10 @@ lamsCoreToolService.createToolSession(learnerProgress.getUser(), (ToolActivity) activity, lesson); } } catch (RequiredGroupMissingException e) { - LearnerService.log.warn("error occurred in 'createToolSessionFor':" + e.getMessage()); + log.warn("error occurred in 'createToolSessionFor':" + e.getMessage()); throw e; } catch (ToolException e) { - LearnerService.log.error("error occurred in 'createToolSessionFor':" + e.getMessage()); + log.error("error occurred in 'createToolSessionFor':" + e.getMessage()); throw new LearnerServiceException(e.getMessage()); } } @@ -592,31 +593,44 @@ } - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug("CompleteToolSession() for tool session id " + toolSessionId + " learnerId " + if (log.isDebugEnabled()) { + log.debug("CompleteToolSession() for tool session id " + toolSessionId + " learnerId " + learnerId + " url is " + returnURL); } return returnURL; + } + @Override + public String completeActivity(ActivityMapping actionMappings, LearnerProgress progress, Activity currentActivity, + Integer learnerId, boolean redirect) throws UnsupportedEncodingException { + Lesson lesson = progress.getLesson(); + + if (currentActivity == null) { + progress = joinLesson(learnerId, lesson.getLessonId()); + + } else if (progress.getCompletedActivities().containsKey(currentActivity)) { + // recalculate activity mark and pass it to gradebook + updateGradebookMark(currentActivity, progress); + return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); + + } else { + completeActivity(learnerId, currentActivity, progress.getLearnerProgressId()); + } + + if (currentActivity != null && (currentActivity.isFloating() || (currentActivity.getParentActivity() != null + && progress.getCompletedActivities().containsKey(currentActivity.getParentActivity())))) { + return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); + } + + boolean displayParallelFrames = false; + return actionMappings.getProgressForward(progress, redirect, displayParallelFrames); } - /** - * Complete the activity in the progress engine and delegate to the progress engine to calculate the next activity - * in the learning design. It is currently triggered by various progress engine related action classes, which then - * calculate the url to go to next, based on the ActivityMapping class. - * - * @param learnerId - * the learner who are running this activity in the design. - * @param activity - * the activity is being run. - * @return the updated learner progress - */ @Override public void completeActivity(Integer learnerId, Activity activity, Long progressID) { - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log - .debug("Completing activity ID " + activity.getActivityId() + " for learner " + learnerId); + if (log.isDebugEnabled()) { + log.debug("Completing activity ID " + activity.getActivityId() + " for learner " + learnerId); } LearnerProgress progress = learnerProgressDAO.getLearnerProgress(progressID); if (progress.getCompletedActivities().keySet().contains(activity)) { @@ -637,7 +651,7 @@ try { progressEngine.setUpStartPoint(progress); } catch (ProgressException e) { - LearnerService.log.error("error occurred in 'setUpStartPoint':" + e.getMessage(), e); + log.error("error occurred in 'setUpStartPoint':" + e.getMessage(), e); throw new LearnerServiceException(e); } @@ -656,16 +670,39 @@ activity.getTitle(), activity.getActivityId() })); } - @Override - public void updateGradebookMark(Activity activity, LearnerProgress progress) { + /** + * If specified activity is set to produce ToolOutput, calculates and stores mark to gradebook. + * + * @param toolActivity + * @param progress + */ + private void updateGradebookMark(Activity activity, LearnerProgress progress) { User learner = progress.getUser(); Lesson lesson = progress.getLesson(); - gradebookService.updateGradebookUserActivityMark(lesson, activity, learner); + + if ((learner == null) || (lesson == null) || (activity == null) || !(activity instanceof ToolActivity) + || (((ToolActivity) activity).getEvaluation() == null)) { + return; + } + ToolSession toolSession = lamsCoreToolService.getToolSessionByLearner(learner, activity); + if (toolSession == null) { + return; + } + + //in case this is a leader - update marks for all users in the group, otherwise update marks only for the specified user + List learnersRequiringMarkUpdate = new ArrayList<>(); + if (lamsCoreToolService.isUserLeaderInActivity(toolSession, learner)) { + learnersRequiringMarkUpdate.addAll(toolSession.getLearners()); + + } else { + learnersRequiringMarkUpdate.add(learner); + } + + for (User learnerRequiringMarksUpdate : learnersRequiringMarkUpdate) { + gradebookService.updateGradebookUserActivityMark(lesson, activity, learnerRequiringMarksUpdate); + } } - /** - * @see org.lamsfoundation.lams.learning.service.ICoreLearnerService#getActivity(java.lang.Long) - */ @Override public Activity getActivity(Long activityId) { return activityDAO.getActivityByActivityId(activityId); @@ -707,7 +744,7 @@ } else { String error = "Grouping activity " + groupingActivity + " learner " + learnerId + " does not exist. Cannot perform grouping."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } } catch (LessonServiceException e) { @@ -807,7 +844,7 @@ } String error = "Gate activity " + gateActivityId + " does not exist. Cannot knock on gate."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } @@ -896,7 +933,7 @@ public Lesson getLessonByActivity(Activity activity) { Lesson lesson = lessonDAO.getLessonForActivity(activity.getActivityId()); if (lesson == null) { - LearnerService.log.warn( + log.warn( "Tried to get lesson id for a non-lesson based activity. An error is likely to be thrown soon. Activity was " + activity); } @@ -934,7 +971,7 @@ User learner = (User) userManagementService.findById(User.class, learnerId); if (learner == null) { String error = "determineBranch: learner " + learnerId + " does not exist. Cannot determine branch."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } @@ -950,7 +987,7 @@ } } catch (LessonServiceException e) { String message = "determineBranch failed due to " + e.getMessage(); - LearnerService.log.error(message, e); + log.error(message, e); throw new LearnerServiceException("determineBranch failed due to " + e.getMessage(), e); } } @@ -1002,7 +1039,7 @@ if (toolOutput == null) { toolOutput = lamsCoreToolService.getOutputFromTool(conditionName, toolSession, learner.getUserId()); if (toolOutput == null) { - LearnerService.log.warn("Condition " + condition + " refers to a tool output " + conditionName + log.warn("Condition " + condition + " refers to a tool output " + conditionName + " but tool doesn't return any tool output for that name. Skipping this condition."); } else { toolOutputMap.put(conditionName, toolOutput); @@ -1017,17 +1054,17 @@ // If no conditions match, use the branch that is the "default" branch for this branching activity. if (matchedBranch != null) { - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug("Found branch " + matchedBranch.getActivityId() + ":" + if (log.isDebugEnabled()) { + log.debug("Found branch " + matchedBranch.getActivityId() + ":" + matchedBranch.getTitle() + " for branching activity " + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); } return matchedBranch; } else if (defaultBranch != null) { - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug("Using default branch " + defaultBranch.getActivityId() + ":" + if (log.isDebugEnabled()) { + log.debug("Using default branch " + defaultBranch.getActivityId() + ":" + defaultBranch.getTitle() + " for branching activity " + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); @@ -1036,8 +1073,8 @@ return (SequenceActivity) activityDAO.getActivityByActivityId(defaultBranch.getActivityId(), SequenceActivity.class); } else { - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug( + if (log.isDebugEnabled()) { + log.debug( "No branches match and no default branch exists. Uable to allocate learner to a branch for the branching activity" + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); @@ -1069,8 +1106,8 @@ } if (sequenceActivity != null) { - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug("Found branch " + sequenceActivity.getActivityId() + ":" + if (log.isDebugEnabled()) { + log.debug("Found branch " + sequenceActivity.getActivityId() + ":" + sequenceActivity.getTitle() + " for branching activity " + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); @@ -1116,7 +1153,7 @@ toolOutput = lamsCoreToolService.getOutputFromTool(conditionName, toolSession, learner.getUserId()); if (toolOutput == null) { - LearnerService.log.warn("Condition " + condition + " refers to a tool output " + log.warn("Condition " + condition + " refers to a tool output " + conditionName + " but tool doesn't return any tool output for that name. Skipping this condition."); } else { @@ -1154,7 +1191,7 @@ User learner = (User) userManagementService.findById(User.class, learnerId); if (learner == null) { String error = "selectBranch: learner " + learnerId + " does not exist. Cannot determine branch."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } @@ -1166,7 +1203,7 @@ || !selectedBranch.getParentActivity().equals(branchingActivity)) { String error = "selectBranch: activity " + selectedBranch + " is not a branch within the branching activity " + branchingActivity + ". Unable to branch."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } @@ -1192,7 +1229,7 @@ + " for the branch " + selectedBranch + " for the lesson " + lesson.getLessonName() + " preview is " + lesson.isPreviewLesson() + ". This will only work if preview is true."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } } @@ -1212,14 +1249,14 @@ String error = "selectBranch: learner " + learnerId + " cannot be added to the group " + group + " for the branch " + selectedBranch + " for the lesson " + lesson.getLessonName() + " preview is " + lesson.isPreviewLesson() + ". This will only work if preview is true."; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } } groupingDAO.update(grouping); - if (LearnerService.log.isDebugEnabled()) { - LearnerService.log.debug("Found branch " + selectedBranch.getActivityId() + ":" + if (log.isDebugEnabled()) { + log.debug("Found branch " + selectedBranch.getActivityId() + ":" + selectedBranch.getTitle() + " for branching activity " + branchingActivity.getActivityId() + ":" + branchingActivity.getTitle() + " for learner " + learner.getUserId() + ":" + learner.getLogin()); @@ -1229,7 +1266,7 @@ } else { String error = "selectBranch: Unable to find branch for branch id " + branchId; - LearnerService.log.error(error); + log.error(error); throw new LearnerServiceException(error); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java =================================================================== diff -u -r9b4a3799f9589dbda9a792e10a4ebd649db1e3db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java (.../CompleteActivityController.java) (revision 9b4a3799f9589dbda9a792e10a4ebd649db1e3db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/CompleteActivityController.java (.../CompleteActivityController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -88,7 +88,7 @@ return null; } - // if user has already completed the lesson - we need to let integrations servers know to come and pick up + // if user has already completed the lesson - we need to let non-LTI integrations server know to come and pick up // updated marks (as it won't happen at lessoncomplete.jsp page) if (progress.isComplete()) { String lessonFinishCallbackUrl = integrationService.getLessonFinishCallbackUrl(progress.getUser(), @@ -101,14 +101,11 @@ } } - String forward = null; // Set activity as complete try { - forward = LearningWebUtil.completeActivity(request, response, activityMapping, progress, activity, learnerId, - learnerService, false); + return learnerService.completeActivity(activityMapping, progress, activity, learnerId, false); } catch (LearnerServiceException e) { return "error"; } - return forward; } } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/DisplayActivityController.java =================================================================== diff -u -r9b4a3799f9589dbda9a792e10a4ebd649db1e3db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/DisplayActivityController.java (.../DisplayActivityController.java) (revision 9b4a3799f9589dbda9a792e10a4ebd649db1e3db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/DisplayActivityController.java (.../DisplayActivityController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -80,8 +80,7 @@ boolean displayParallelFrames = WebUtil.readBooleanParam(request, DisplayActivityController.PARAM_INITIAL_DISPLAY, true); - String forward = activityMapping.getProgressForward(learnerProgress, false, displayParallelFrames, request, - learnerService); + String forward = activityMapping.getProgressForward(learnerProgress, false, displayParallelFrames); if (log.isDebugEnabled()) { log.debug(forward); } Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GateController.java =================================================================== diff -u -r9b4a3799f9589dbda9a792e10a4ebd649db1e3db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GateController.java (.../GateController.java) (revision 9b4a3799f9589dbda9a792e10a4ebd649db1e3db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GateController.java (.../GateController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -140,9 +140,7 @@ } // gate is open, so let the learner go to the next activity ( updating the cached learner progress on the way ) - return LearningWebUtil.completeActivity(request, response, activityMapping, learnerProgress, activity, - learner.getUserId(), learnerService, true); - + return learnerService.completeActivity(activityMapping, learnerProgress, activity, learner.getUserId(), true); } // --------------------------------------------------------------------- Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GroupingController.java =================================================================== diff -u -re325f88e2e856294ed9cde0f90303f84e2ceea8d -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GroupingController.java (.../GroupingController.java) (revision e325f88e2e856294ed9cde0f90303f84e2ceea8d) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/GroupingController.java (.../GroupingController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -189,8 +189,7 @@ Integer learnerId = LearningWebUtil.getUserId(); // so manually resume the progress. The completeActivity code can cope with a missing activity. - return LearningWebUtil.completeActivity(request, response, activityMapping, progress, groupingActivity, - learnerId, learnerService, true); + return learnerService.completeActivity(activityMapping, progress, groupingActivity, learnerId, true); } /** Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java =================================================================== diff -u -rf2ad75cef0c507a64877942631fee13efbc6ed50 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java (.../LessonCompleteActivityController.java) (revision f2ad75cef0c507a64877942631fee13efbc6ed50) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/LessonCompleteActivityController.java (.../LessonCompleteActivityController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -75,7 +75,7 @@ request.setAttribute(RELEASED_LESSONS_REQUEST_ATTRIBUTE, releasedLessonNames.toString()); } - //checks for lessonFinishUrl parameter + //let non-LTI integrations server know to come and pick up updated marks (it will happen at lessoncomplete.jsp page) String lessonFinishCallbackUrl = integrationService.getLessonFinishCallbackUrl(learnerProgress.getUser(), lesson); if (lessonFinishCallbackUrl != null) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/SequenceActivityController.java =================================================================== diff -u -rf4e0bfe05f14ecc966f26ecb6eed46c9a8c59e1e -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/SequenceActivityController.java (.../SequenceActivityController.java) (revision f4e0bfe05f14ecc966f26ecb6eed46c9a8c59e1e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/controller/SequenceActivityController.java (.../SequenceActivityController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -73,7 +73,6 @@ return "error"; } - String forward = null; SequenceActivity sequenceActivity = (SequenceActivity) activity; Activity firstIncompletedActivity = null; @@ -93,8 +92,7 @@ } else { // No activities exist in the sequence, so go to the next activity. - return LearningWebUtil.completeActivity(request, response, activityMapping, learnerProgress, activity, - learnerId, learnerService, true); + return learnerService.completeActivity(activityMapping, learnerProgress, activity, learnerId, true); } } } \ No newline at end of file Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java =================================================================== diff -u -r9b4a3799f9589dbda9a792e10a4ebd649db1e3db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 9b4a3799f9589dbda9a792e10a4ebd649db1e3db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/ActivityMapping.java (.../ActivityMapping.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -99,8 +99,8 @@ * @return * @throws UnsupportedEncodingException */ - public String getProgressForward(LearnerProgress progress, boolean redirect, boolean displayParallelFrames, - HttpServletRequest request, ILearnerFullService learnerService) throws UnsupportedEncodingException { + public String getProgressForward(LearnerProgress progress, boolean redirect, boolean displayParallelFrames) + throws UnsupportedEncodingException { String forward = null; if (progress.isComplete()) { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java =================================================================== diff -u -r9b4a3799f9589dbda9a792e10a4ebd649db1e3db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 9b4a3799f9589dbda9a792e10a4ebd649db1e3db) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/util/LearningWebUtil.java (.../LearningWebUtil.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -117,46 +117,6 @@ return activity; } - /** - * "Complete" an activity from the web layer's perspective. Used for CompleteActivityAction and the Gate and - * Grouping actions. Calls the learningService to actually complete the activity and progress. - * - * @param redirect - * Should this call redirect to the next screen (true) or use a forward (false) - * @param windowName - * Name of the window that triggered this code. Normally LearnerActivity (the popup window) or lWindow - * (normal learner window) - * @throws UnsupportedEncodingException - * @throws InterruptedException - * - */ - public static String completeActivity(HttpServletRequest request, HttpServletResponse response, - ActivityMapping actionMappings, LearnerProgress progress, Activity currentActivity, Integer learnerId, - ILearnerFullService learnerService, boolean redirect) - throws LearnerServiceException, UnsupportedEncodingException { - - Lesson lesson = progress.getLesson(); - - if (currentActivity == null) { - progress = learnerService.joinLesson(learnerId, lesson.getLessonId()); - } else if (progress.getCompletedActivities().containsKey(currentActivity)) { - - // recalculate activity mark and pass it to gradebook - learnerService.updateGradebookMark(currentActivity, progress); - - return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); - } else { - learnerService.completeActivity(learnerId, currentActivity, progress.getLearnerProgressId()); - } - - if (currentActivity != null && (currentActivity.isFloating() || (currentActivity.getParentActivity() != null - && progress.getCompletedActivities().containsKey(currentActivity.getParentActivity())))) { - return actionMappings.getCloseForward(currentActivity, lesson.getLessonId()); - } - - return actionMappings.getProgressForward(progress, redirect, false, request, learnerService); - } - public static ActivityURL getActivityURL(ActivityMapping activityMapping, LearnerProgress learnerProgress, Activity activity, boolean defaultURL, boolean isFloating) { ActivityURL activityURL = new ActivityURL(); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r17de10bb40e34a174c19ccc0b8821bfe08025156 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 17de10bb40e34a174c19ccc0b8821bfe08025156) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -165,12 +165,11 @@ // Service method // ******************************************************************************* @Override - public boolean isUserGroupLeader(AssessmentUser user, Long toolSessionId) { - + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { AssessmentSession session = getSessionBySessionId(toolSessionId); - AssessmentUser groupLeader = session.getGroupLeader(); + AssessmentUser groupLeader = session == null ? null : session.getGroupLeader(); - return (groupLeader != null) && user.getUserId().equals(groupLeader.getUserId()); + return (groupLeader != null) && userId.equals(groupLeader.getUserId()); } @Override @@ -1159,7 +1158,7 @@ //if this is a leader finishes, complete all non-leaders as well, also copy leader results to them AssessmentSession session = user.getSession(); Assessment assessment = session.getAssessment(); - if (assessment.isUseSelectLeaderToolOuput() && isUserGroupLeader(user, toolSessionId)) { + if (assessment.isUseSelectLeaderToolOuput() && isUserGroupLeader(userId, toolSessionId)) { session.getAssessmentUsers().forEach(sessionUser -> { //finish non-leader sessionUser.setSessionFinished(true); @@ -2861,7 +2860,7 @@ //if this is a leader finishes, complete all non-leaders as well, also copy leader results to them AssessmentUser groupLeader = checkLeaderSelectToolForSessionLeader(assessmentUser, toolSessionId); - if (isUserGroupLeader(assessmentUser, toolSessionId)) { + if (isUserGroupLeader(userId, toolSessionId)) { session.getAssessmentUsers().forEach(sessionUser -> { //finish non-leader sessionUser.setSessionFinished(true); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -62,7 +62,7 @@ * @param toolSessionId * @return */ - boolean isUserGroupLeader(AssessmentUser user, Long toolSessionId); + boolean isUserGroupLeader(Long userId, Long toolSessionId); /** * Set specified user as a leader. Also the previous leader (if any) is marked as non-leader. Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java =================================================================== diff -u -r8518d9067746b5286f01a9ed5679a8b60cff0e95 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision 8518d9067746b5286f01a9ed5679a8b60cff0e95) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/LearningController.java (.../LearningController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -187,7 +187,7 @@ } sessionMap.put(AssessmentConstants.ATTR_GROUP_LEADER, groupLeader); - boolean isUserLeader = service.isUserGroupLeader(user, toolSessionId); + boolean isUserLeader = service.isUserGroupLeader(user.getUserId(), toolSessionId); sessionMap.put(AssessmentConstants.ATTR_IS_USER_LEADER, isUserLeader); Set questionReferences = new TreeSet<>(new SequencableComparator()); Index: lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java =================================================================== diff -u -r910f7a30fc4dc1b47e8b3e2df5927c64df977a45 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision 910f7a30fc4dc1b47e8b3e2df5927c64df977a45) +++ lams_tool_bbb/src/java/org/lamsfoundation/lams/tool/bbb/service/BbbService.java (.../BbbService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -90,6 +90,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -221,6 +221,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_daco/src/java/org/lamsfoundation/lams/tool/daco/service/DacoServiceImpl.java (.../DacoServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -567,6 +567,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_dimdim/src/java/org/lamsfoundation/lams/tool/dimdim/service/DimdimService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_dimdim/src/java/org/lamsfoundation/lams/tool/dimdim/service/DimdimService.java (.../DimdimService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_dimdim/src/java/org/lamsfoundation/lams/tool/dimdim/service/DimdimService.java (.../DimdimService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -85,6 +85,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java =================================================================== diff -u -r1ee503e3d0e0228ea8a45025fddf15d9623c0377 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java (.../DokumaranSession.java) (revision 1ee503e3d0e0228ea8a45025fddf15d9623c0377) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/model/DokumaranSession.java (.../DokumaranSession.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -150,8 +150,6 @@ this.sessionName = sessionName; } - /** - */ public DokumaranUser getGroupLeader() { return this.groupLeader; } Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1041,7 +1041,15 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + DokumaranSession session = getDokumaranSessionBySessionId(toolSessionId); + DokumaranUser groupLeader = session == null ? null : session.getGroupLeader(); + return (groupLeader != null) && userId.equals(groupLeader.getUserId()); + } + @Override public void forceCompleteUser(Long toolSessionId, User user) { // no actions required Index: lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java (.../EadventureServiceImpl.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_eadventure/src/java/org/eucm/lams/tool/eadventure/service/EadventureServiceImpl.java (.../EadventureServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -84,6 +84,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1179,6 +1179,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java =================================================================== diff -u -r910f7a30fc4dc1b47e8b3e2df5927c64df977a45 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision 910f7a30fc4dc1b47e8b3e2df5927c64df977a45) +++ lams_tool_gmap/src/java/org/lamsfoundation/lams/tool/gmap/service/GmapService.java (.../GmapService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -87,6 +87,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java =================================================================== diff -u -r1e26200cec472e799b29f548270b1a67027e9167 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 1e26200cec472e799b29f548270b1a67027e9167) +++ lams_tool_images/src/java/org/lamsfoundation/lams/tool/imageGallery/service/ImageGalleryServiceImpl.java (.../ImageGalleryServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1064,6 +1064,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_imscc/src/java/org/lamsfoundation/lams/tool/commonCartridge/service/CommonCartridgeServiceImpl.java (.../CommonCartridgeServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -859,6 +859,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java =================================================================== diff -u -rb1d90cebfaf11f221fd5f7c81008507b8f146842 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision b1d90cebfaf11f221fd5f7c81008507b8f146842) +++ lams_tool_kaltura/src/java/org/lamsfoundation/lams/tool/kaltura/service/KalturaService.java (.../KalturaService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -90,6 +90,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -r3b0e49dde2f5aed2b2cc53e70ae8fd8b30298315 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 3b0e49dde2f5aed2b2cc53e70ae8fd8b30298315) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1563,6 +1563,14 @@ return confidenceLevelDtos; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + McSession session = getMcSessionById(toolSessionId); + McQueUsr mcUser = getMcUserBySession(userId, session.getUid()); + + return (session != null) && (mcUser != null) && session.isUserGroupLeader(mcUser); + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java =================================================================== diff -u -r17de10bb40e34a174c19ccc0b8821bfe08025156 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision 17de10bb40e34a174c19ccc0b8821bfe08025156) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -55,7 +55,7 @@ * @param toolSessionId * @return */ - boolean isUserGroupLeader(QaQueUsr user, Long toolSessionId); + boolean isUserGroupLeader(Long userId, Long toolSessionId); /** * Set specified user as a leader. Also the previous leader (if any) is marked as non-leader. Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java =================================================================== diff -u -r17de10bb40e34a174c19ccc0b8821bfe08025156 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision 17de10bb40e34a174c19ccc0b8821bfe08025156) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaService.java (.../QaService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -119,12 +119,11 @@ private Random generator = new Random(); @Override - public boolean isUserGroupLeader(QaQueUsr user, Long toolSessionId) { - + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { QaSession session = this.getSessionById(toolSessionId); QaQueUsr groupLeader = session.getGroupLeader(); - boolean isUserLeader = (groupLeader != null) && user.getUid().equals(groupLeader.getUid()); + boolean isUserLeader = (groupLeader != null) && userId.equals(groupLeader.getQueUsrId()); return isUserLeader; } @@ -931,7 +930,7 @@ //if this is a leader finishes, complete all non-leaders as well, also copy leader results to them QaQueUsr groupLeader = checkLeaderSelectToolForSessionLeader(qaUser, toolSessionId); - if (isUserGroupLeader(qaUser, toolSessionId)) { + if (isUserGroupLeader(userId, toolSessionId)) { session.getQaQueUsers().forEach(sessionUser -> { //finish users sessionUser.setResponseFinalized(true); @@ -1191,7 +1190,7 @@ //if this is a leader finishes, complete all non-leaders as well, also copy leader results to them QaSession session = user.getQaSession(); QaQueUsr groupLeader = checkLeaderSelectToolForSessionLeader(user, toolSessionID); - if (isUserGroupLeader(user, toolSessionID)) { + if (isUserGroupLeader(userID, toolSessionID)) { session.getQaQueUsers().forEach(sessionUser -> { //finish users sessionUser.setResponseFinalized(true); Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/QaLearningController.java =================================================================== diff -u -r17de10bb40e34a174c19ccc0b8821bfe08025156 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/QaLearningController.java (.../QaLearningController.java) (revision 17de10bb40e34a174c19ccc0b8821bfe08025156) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/controller/QaLearningController.java (.../QaLearningController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -204,7 +204,7 @@ || (mode != null) && mode.equals(ToolAccessMode.TEACHER.toString())); sessionMap.put(ATTR_GROUP_LEADER, groupLeader); - boolean isUserLeader = qaService.isUserGroupLeader(user, new Long(toolSessionID)); + boolean isUserLeader = qaService.isUserGroupLeader(user.getQueUsrId(), new Long(toolSessionID)); boolean lockWhenFinished = qaContent.isLockWhenFinished(); sessionMap.put(ATTR_IS_USER_LEADER, isUserLeader); sessionMap.put(AttributeNames.ATTR_MODE, mode); Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== diff -u -rbbd1ae162c29e443f30ef696c36ba958be942272 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision bbd1ae162c29e443f30ef696c36ba958be942272) +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java (.../ResourceServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -1048,6 +1048,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java (.../LeaderselectionService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java (.../LeaderselectionService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -154,6 +154,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java (.../MindmapService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -175,6 +175,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardService.java (.../NoticeboardService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardService.java (.../NoticeboardService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -546,6 +546,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java (.../NotebookService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -171,6 +171,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java (.../PixlrService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java (.../PixlrService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -165,6 +165,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== diff -u -r757ceb570a6d7b9ac11df60ef4de581848c79ba0 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 757ceb570a6d7b9ac11df60ef4de581848c79ba0) +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java (.../PeerreviewServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -883,6 +883,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/ISubmitFilesService.java (.../ISubmitFilesService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -359,11 +359,11 @@ void createUser(SubmitUser submitUser); /** - * @param user + * @param userId * @param toolSessionId * @return */ - boolean isUserGroupLeader(SubmitUser user, Long toolSessionId); + boolean isUserGroupLeader(Long userId, Long toolSessionId); void copyLearnerContent(SubmitUser fromUser, SubmitUser toUser); Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java (.../SubmitFilesService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -538,6 +538,14 @@ } @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + SubmitFilesSession session = submitFilesSessionDAO.getSessionByID(toolSessionId); + SubmitUser groupLeader = session.getGroupLeader(); + + return (groupLeader != null) && userId.equals(groupLeader.getUserID().longValue()); + } + + @Override public void forceCompleteUser(Long toolSessionId, User user) { // no actions required } @@ -1386,13 +1394,4 @@ submitUserDAO.insertOrUpdate(user); } - @Override - public boolean isUserGroupLeader(SubmitUser user, Long toolSessionId) { - - SubmitFilesSession session = submitFilesSessionDAO.getSessionByID(toolSessionId); - SubmitUser groupLeader = session.getGroupLeader(); - - return (groupLeader != null) && user.getUserID().equals(groupLeader.getUserID()); - } - } \ No newline at end of file Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearnerController.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearnerController.java (.../LearnerController.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/web/controller/LearnerController.java (.../LearnerController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -250,7 +250,7 @@ } sessionMap.put(SbmtConstants.ATTR_GROUP_LEADER, groupLeader); - boolean isUserLeader = submitFilesService.isUserGroupLeader(learner, toolSessionID); + boolean isUserLeader = submitFilesService.isUserGroupLeader(learner.getUserID().longValue(), toolSessionID); sessionMap.put(SbmtConstants.ATTR_IS_USER_LEADER, isUserLeader); boolean hasEditRight = !content.isUseSelectLeaderToolOuput() Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r17de10bb40e34a174c19ccc0b8821bfe08025156 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 17de10bb40e34a174c19ccc0b8821bfe08025156) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -301,7 +301,15 @@ public Set getPrecedingConfidenceLevelsActivities(Long toolContentId) { return toolService.getPrecedingConfidenceLevelsActivities(toolContentId); } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + ScratchieSession session = getScratchieSessionBySessionId(toolSessionId); + ScratchieUser groupLeader = session.getGroupLeader(); + return (groupLeader != null) && userId.equals(groupLeader.getUserId()); + } + @Override public ScratchieUser checkLeaderSelectToolForSessionLeader(ScratchieUser user, Long toolSessionId) { if ((user == null) || (toolSessionId == null)) { Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java (.../ScribeService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -163,6 +163,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -637,6 +637,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java (.../SurveyServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -864,6 +864,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java (.../TaskListServiceImpl.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -865,6 +865,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/service/VideoRecorderService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/service/VideoRecorderService.java (.../VideoRecorderService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_videorecorder/src/java/org/lamsfoundation/lams/tool/videoRecorder/service/VideoRecorderService.java (.../VideoRecorderService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -136,6 +136,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java (.../IVoteService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/IVoteService.java (.../IVoteService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -75,7 +75,7 @@ * @param toolSessionId * @return */ - boolean isUserGroupLeader(VoteQueUsr user, Long toolSessionId); + boolean isUserGroupLeader(Long userId, Long toolSessionId); /** * Set specified user as a leader. Also the previous leader (if any) is marked as non-leader. Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -133,11 +133,10 @@ } @Override - public boolean isUserGroupLeader(VoteQueUsr user, Long toolSessionId) { - + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { VoteSession session = getSessionBySessionId(toolSessionId); VoteQueUsr groupLeader = session.getGroupLeader(); - boolean isUserLeader = (groupLeader != null) && user.getUid().equals(groupLeader.getUid()); + boolean isUserLeader = (groupLeader != null) && userId.equals(groupLeader.getQueUsrId()); return isUserLeader; } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/LearningController.java =================================================================== diff -u -r3ee06bc1b00b1673399c1871a73cfa1d8ec2c0db -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/LearningController.java (.../LearningController.java) (revision 3ee06bc1b00b1673399c1871a73cfa1d8ec2c0db) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/controller/LearningController.java (.../LearningController.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -780,7 +780,7 @@ voteLearningForm.setGroupLeaderName(groupLeader.getFullname()); voteLearningForm.setGroupLeaderUserId( groupLeader.getQueUsrId() != null ? groupLeader.getQueUsrId().toString() : ""); - boolean isUserLeader = voteService.isUserGroupLeader(user, new Long(toolSessionID)); + boolean isUserLeader = voteService.isUserGroupLeader(user.getQueUsrId(), new Long(toolSessionID)); voteLearningForm.setIsUserLeader(isUserLeader); } Index: lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java (.../WikiService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java (.../WikiService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -226,6 +226,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java (.../WookieService.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_tool_wookie/src/java/org/lamsfoundation/lams/tool/wookie/service/WookieService.java (.../WookieService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -137,6 +137,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) { Index: lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java =================================================================== diff -u -r3bb7e0141ae1cc15ccd737c95d90b5762a34ad61 -r20aa6cbca9fc96d341080e6ad39f82593443f792 --- lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java (.../ZoomService.java) (revision 3bb7e0141ae1cc15ccd737c95d90b5762a34ad61) +++ lams_tool_zoom/src/java/org/lamsfoundation/lams/tool/zoom/service/ZoomService.java (.../ZoomService.java) (revision 20aa6cbca9fc96d341080e6ad39f82593443f792) @@ -164,6 +164,11 @@ public List getConfidenceLevels(Long toolSessionId) { return null; } + + @Override + public boolean isUserGroupLeader(Long userId, Long toolSessionId) { + return false; + } @Override public void forceCompleteUser(Long toolSessionId, User user) {