Fisheye: Tag 1.1 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/tool/ToolCompletionStatus.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java,v diff -u -r1.12.14.4 -r1.12.14.5 --- lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java 15 Jun 2016 08:02:53 -0000 1.12.14.4 +++ lams_common/src/java/org/lamsfoundation/lams/tool/ToolSessionManager.java 11 Jan 2017 08:44:59 -0000 1.12.14.5 @@ -26,6 +26,7 @@ import java.util.List; import java.util.SortedMap; +import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; @@ -167,4 +168,11 @@ */ void forceCompleteUser(Long toolSessionId, User user); + /** + * Get the completion status as according to the tool. + * @param learner + * @param activity + * @return + */ + ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java,v diff -u -r1.29.2.8 -r1.29.2.9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 27 Sep 2016 06:22:54 -0000 1.29.2.8 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 11 Jan 2017 08:44:59 -0000 1.29.2.9 @@ -31,6 +31,7 @@ import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; import org.lamsfoundation.lams.tool.ToolSession; @@ -415,4 +416,7 @@ String setupToolURLWithToolContent(ToolActivity activity, String toolURL); Object findToolService(Tool tool) throws NoSuchBeanDefinitionException; + + ToolCompletionStatus getCompletionStatusFromTool(User learner, Activity activity) + throws LamsToolServiceException; } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java,v diff -u -r1.45.2.12 -r1.45.2.13 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 15 Dec 2016 11:46:15 -0000 1.45.2.12 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 11 Jan 2017 08:44:59 -0000 1.45.2.13 @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.ToolAdapterContentManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContent; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; @@ -878,4 +879,15 @@ } return false; } + + @Override + public ToolCompletionStatus getCompletionStatusFromTool(User learner, Activity activity) { + if (activity.isToolActivity()) { + ToolSession session = getToolSessionByLearner(learner, activity); + ToolSessionManager toolService = (ToolSessionManager) findToolService(((ToolActivity)activity).getTool()); + return toolService.getCompletionStatus(learner.getUserId().longValue(), session.getToolSessionId()); + } + return null; + } + } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java,v diff -u -r1.128.2.18 -r1.128.2.19 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 13 Sep 2016 04:57:11 -0000 1.128.2.18 +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java 11 Jan 2017 08:54:24 -0000 1.128.2.19 @@ -56,31 +56,26 @@ import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.learning.service.ILearnerService; -import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.ToolActivity; -import org.lamsfoundation.lams.learningdesign.dao.IActivityDAO; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; -import org.lamsfoundation.lams.lesson.Lesson; -import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; -import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.ToolSessionExportOutputData; import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.mc.AnswerDTO; import org.lamsfoundation.lams.tool.mc.McAppConstants; import org.lamsfoundation.lams.tool.mc.McApplicationException; -import org.lamsfoundation.lams.tool.mc.AnswerDTO; import org.lamsfoundation.lams.tool.mc.McOptionDTO; import org.lamsfoundation.lams.tool.mc.McQuestionDTO; import org.lamsfoundation.lams.tool.mc.McSessionMarkDTO; @@ -102,9 +97,6 @@ import org.lamsfoundation.lams.tool.mc.pojos.McUsrAttempt; import org.lamsfoundation.lams.tool.mc.util.McSessionComparator; import org.lamsfoundation.lams.tool.service.ILamsToolService; -import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.OrganisationType; -import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; @@ -1812,6 +1804,33 @@ return mcOutputFactory.getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + McSession session = getMcSessionById(toolSessionId); + McQueUsr learner = mcUserDAO.getMcUserBySession(learnerId, session.getUid()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + List attempts = getFinalizedUserAttempts(learner); + for (McUsrAttempt item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isResponseFinalised()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java,v diff -u -r1.111.2.30 -r1.111.2.31 --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java 4 Jan 2017 12:48:47 -0000 1.111.2.30 +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java 11 Jan 2017 08:54:22 -0000 1.111.2.31 @@ -58,6 +58,7 @@ import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1194,6 +1195,31 @@ return getQaOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + QaQueUsr learner = qaQueUsrDAO.getQaUserBySession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Date startDate = null; + Date endDate = null; + Set attempts = learner.getQaUsrResps(); + for (QaUsrResp item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isLearnerFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } // ****************** REST methods ************************* /** Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java,v diff -u -r1.7.2.4 -r1.7.2.5 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java 25 Nov 2016 12:07:42 -0000 1.7.2.4 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/ResourceItemVisitDAO.java 11 Jan 2017 08:54:20 -0000 1.7.2.5 @@ -51,4 +51,5 @@ int getCountVisitLogsBySessionAndItem(Long sessionId, Long itemUid, String searchString); + public Object[] getDateRangeOfAccesses(Long userUid, Long toolSessionId); } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java,v diff -u -r1.11.2.6 -r1.11.2.7 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java 25 Nov 2016 12:07:42 -0000 1.11.2.6 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/dao/hibernate/ResourceItemVisitDAOHibernate.java 11 Jan 2017 08:54:20 -0000 1.11.2.7 @@ -31,6 +31,7 @@ import java.util.Map; import org.hibernate.Query; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.rsrc.dao.ResourceItemVisitDAO; import org.lamsfoundation.lams.tool.rsrc.dto.VisitLogDTO; @@ -56,6 +57,9 @@ + Resource.class.getName() + " as r " + " where v.sessionId = :sessionId and v.sessionId = s.sessionId " + " and s.resource.uid = r.uid " + " and r.contentId =:contentId " + " group by v.sessionId, v.resourceItem.uid "; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(access_date) start_date, MAX(access_date) end_date " + + " FROM tl_larsrc11_item_log WHERE user_uid = :userUid && session_id = :sessionId"; + @Override public ResourceItemVisitLog getResourceItemLog(Long itemUid, Long userId) { List list = doFind(FIND_BY_ITEM_AND_USER, new Object[] { userId, itemUid }); @@ -170,4 +174,11 @@ } } + @Override + public Object[] getDateRangeOfAccesses(Long userUid, Long toolSessionId) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid).setLong("sessionId", toolSessionId); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java,v diff -u -r1.77.2.16 -r1.77.2.17 --- lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java 9 Jan 2017 11:49:11 -0000 1.77.2.16 +++ lams_tool_larsrc/src/java/org/lamsfoundation/lams/tool/rsrc/service/ResourceServiceImpl.java 11 Jan 2017 08:54:20 -0000 1.77.2.17 @@ -69,6 +69,7 @@ import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.ToolAccessMode; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1145,6 +1146,20 @@ this.resourceOutputFactory = resourceOutputFactory; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ResourceUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Object[] dates = resourceItemVisitDao.getDateRangeOfAccesses(learner.getUid(), toolSessionId); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } + // ****************** REST methods ************************* /** Index: lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java,v diff -u -r1.6.2.8 -r1.6.2.9 --- lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java 15 Jun 2016 08:07:06 -0000 1.6.2.8 +++ lams_tool_leader/src/java/org/lamsfoundation/lams/tool/leaderselection/service/LeaderselectionService.java 11 Jan 2017 08:54:21 -0000 1.6.2.9 @@ -50,6 +50,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -592,6 +593,17 @@ return getLeaderselectionOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + LeaderselectionUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java,v diff -u -r1.17.2.11 -r1.17.2.12 --- lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java 15 Jun 2016 08:07:04 -0000 1.17.2.11 +++ lams_tool_mindmap/src/java/org/lamsfoundation/lams/tool/mindmap/service/MindmapService.java 11 Jan 2017 08:51:37 -0000 1.17.2.12 @@ -45,6 +45,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -984,6 +985,16 @@ return getMindmapOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + MindmapUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java,v diff -u -r1.53.2.10 -r1.53.2.11 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java 15 Jun 2016 08:06:31 -0000 1.53.2.10 +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java 11 Jan 2017 08:49:40 -0000 1.53.2.11 @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -619,6 +620,19 @@ return null; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + NoticeboardUser learner = retrieveNoticeboardUser(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus( + NoticeboardUser.COMPLETED.equals(learner.getUserStatus()) ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* @Override Index: lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java,v diff -u -r1.31.2.13 -r1.31.2.14 --- lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java 13 Dec 2016 14:33:30 -0000 1.31.2.13 +++ lams_tool_notebook/src/java/org/lamsfoundation/lams/tool/notebook/service/NotebookService.java 11 Jan 2017 08:49:38 -0000 1.31.2.14 @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -636,7 +637,19 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getNotebookOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + NotebookUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java,v diff -u -r1.14.2.7 -r1.14.2.8 --- lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java 15 Jun 2016 08:07:08 -0000 1.14.2.7 +++ lams_tool_pixlr/src/java/org/lamsfoundation/lams/tool/pixlr/service/PixlrService.java 11 Jan 2017 08:49:19 -0000 1.14.2.8 @@ -40,6 +40,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -680,4 +681,16 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getPixlrOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + PixlrUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } } Index: lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java,v diff -u -r1.7.2.19 -r1.7.2.20 --- lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java 27 Dec 2016 06:46:19 -0000 1.7.2.19 +++ lams_tool_preview/src/java/org/lamsfoundation/lams/tool/peerreview/service/PeerreviewServiceImpl.java 11 Jan 2017 08:49:20 -0000 1.7.2.20 @@ -61,6 +61,7 @@ import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -991,6 +992,18 @@ this.ratingService = ratingService; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + PeerreviewUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* public void setEventNotificationService(IEventNotificationService eventNotificationService) { Index: lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java,v diff -u -r1.94.2.12 -r1.94.2.13 --- lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java 30 Aug 2016 02:15:10 -0000 1.94.2.12 +++ lams_tool_sbmt/src/java/org/lamsfoundation/lams/tool/sbmt/service/SubmitFilesService.java 11 Jan 2017 08:48:45 -0000 1.94.2.13 @@ -71,6 +71,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1214,7 +1215,33 @@ public void setSubmitFilesOutputFactory(SubmitFilesOutputFactory submitFilesOutputFactory) { this.submitFilesOutputFactory = submitFilesOutputFactory; } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SubmitUser learner = getSessionUser(toolSessionId, learnerId.intValue()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + Date startDate = null; + Date endDate = null; + List list = submissionDetailsDAO.getBySessionAndLearner(toolSessionId, learnerId.intValue()); + for ( SubmissionDetails detail : list ) { + Date newDate = detail.getDateOfSubmission(); + if ( newDate != null ) { + if ( startDate == null || newDate.before(startDate) ) + startDate = newDate; + if ( endDate == null || newDate.after(endDate) ) + endDate = newDate; + } + } + + if (learner.isFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java,v diff -u -r1.51.2.27 -r1.51.2.28 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 6 Dec 2016 16:52:34 -0000 1.51.2.27 +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java 11 Jan 2017 08:48:27 -0000 1.51.2.28 @@ -62,6 +62,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -94,7 +95,6 @@ import org.lamsfoundation.lams.tool.scratchie.util.ScratchieAnswerComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieToolContentHandler; -import org.lamsfoundation.lams.tool.scratchie.web.action.LearningWebsocketServer; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.dto.UserDTO; @@ -2120,6 +2120,17 @@ this.scheduler = scheduler; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + // db doesn't have a start/finish date for learner, and session start/finish is null + ScratchieUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } // ****************** REST methods ************************* /** Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java,v diff -u -r1.30.2.11 -r1.30.2.12 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 15 Jun 2016 08:06:23 -0000 1.30.2.11 +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/service/ScribeService.java 11 Jan 2017 08:48:02 -0000 1.30.2.12 @@ -47,6 +47,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -618,6 +619,17 @@ return null; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + ScribeUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isFinishedActivity() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java,v diff -u -r1.14.2.12 -r1.14.2.13 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java 27 Sep 2016 07:23:36 -0000 1.14.2.12 +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java 11 Jan 2017 08:47:40 -0000 1.14.2.13 @@ -42,6 +42,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -695,4 +696,15 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return null; } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SpreadsheetUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } } Index: lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java,v diff -u -r1.37.2.14 -r1.37.2.15 --- lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java 13 Dec 2016 14:33:32 -0000 1.37.2.14 +++ lams_tool_survey/src/java/org/lamsfoundation/lams/tool/survey/service/SurveyServiceImpl.java 11 Jan 2017 08:47:21 -0000 1.37.2.15 @@ -51,6 +51,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -939,6 +940,17 @@ this.surveyOutputFactory = surveyOutputFactory; } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + SurveyUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + return new ToolCompletionStatus(learner.isSessionFinished() ? ToolCompletionStatus.ACTIVITY_COMPLETED + : ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java,v diff -u -r1.4.2.3 -r1.4.2.4 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java 11 May 2016 07:35:22 -0000 1.4.2.3 +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/TaskListItemVisitDAO.java 11 Jan 2017 08:46:57 -0000 1.4.2.4 @@ -68,4 +68,5 @@ int getCountCompletedTasksBySessionAndItem(Long toolSessionId, Long itemUid); + public Object[] getDateRangeOfTasks(Long userUid, Long sessionId); } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java,v diff -u -r1.4.2.5 -r1.4.2.6 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java 11 May 2016 07:35:21 -0000 1.4.2.5 +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/dao/hibernate/TaskListItemVisitDAOHibernate.java 11 Jan 2017 08:46:57 -0000 1.4.2.6 @@ -25,6 +25,7 @@ import java.util.List; +import org.hibernate.SQLQuery; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.taskList.dao.TaskListItemVisitDAO; import org.lamsfoundation.lams.tool.taskList.model.TaskListItemVisitLog; @@ -53,6 +54,9 @@ + TaskListItemVisitLog.class.getName() + " as r where r.complete=true and r.sessionId=? and r.taskListItem.uid =?"; + private static final String SQL_QUERY_DATES_BY_USER_SESSION = "SELECT MIN(access_date) start_date, MAX(access_date) end_date " + + " FROM tl_latask10_item_log WHERE user_uid = :userUid and session_id = :sessionId"; + @Override public TaskListItemVisitLog getTaskListItemLog(Long itemUid, Long userId) { List list = doFind(FIND_BY_ITEM_AND_USER, new Object[] { userId, itemUid }); @@ -87,4 +91,11 @@ return (List) doFind(FIND_BY_ITEM_BYSESSION, new Object[] { sessionId, itemUid }); } + @Override + public Object[] getDateRangeOfTasks(Long userUid, Long sessionId) { + SQLQuery query = (SQLQuery) getSession().createSQLQuery(SQL_QUERY_DATES_BY_USER_SESSION.toString()) + .setLong("userUid", userUid).setLong("sessionId", sessionId); + Object[] values = (Object[]) query.list().get(0); + return values; + } } Index: lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java,v diff -u -r1.37.2.10 -r1.37.2.11 --- lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java 15 Jun 2016 08:07:00 -0000 1.37.2.10 +++ lams_tool_task/src/java/org/lamsfoundation/lams/tool/taskList/service/TaskListServiceImpl.java 11 Jan 2017 08:46:57 -0000 1.37.2.11 @@ -48,6 +48,7 @@ import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -981,4 +982,18 @@ public Class[] getSupportedToolOutputDefinitionClasses(int definitionType) { return getTaskListOutputFactory().getSupportedDefinitionClasses(definitionType); } + + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + TaskListUser learner = getUserByIDAndSession(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + Object[] dates = getTaskListItemVisitDao().getDateRangeOfTasks(learner.getUid(), toolSessionId); + if (learner.isSessionFinished()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, (Date)dates[0], (Date)dates[1]); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED,(Date) dates[0], null); + } } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java,v diff -u -r1.86.2.13 -r1.86.2.14 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java 21 Dec 2016 05:28:04 -0000 1.86.2.13 +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteServicePOJO.java 11 Jan 2017 08:46:37 -0000 1.86.2.14 @@ -60,6 +60,7 @@ import org.lamsfoundation.lams.rest.ToolRestManager; import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.SimpleURL; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1946,6 +1947,34 @@ return getVoteOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + VoteSession session = getSessionBySessionId(toolSessionId); + VoteQueUsr learner = getVoteUserBySession(learnerId, session.getUid()); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + + Date startDate = null; + Date endDate = null; + Set attempts = learner.getVoteUsrAttempts(); // expect only one + for (VoteUsrAttempt item : attempts) { + Date newDate = item.getAttemptTime(); + if (newDate != null) { + if (startDate == null || newDate.before(startDate)) + startDate = newDate; + if (endDate == null || newDate.after(endDate)) + endDate = newDate; + } + } + + if (learner.isResponseFinalised()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, startDate, endDate); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, startDate, null); + } + // ****************** REST methods ************************* /** Index: lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java,v diff -u -r1.25.2.8 -r1.25.2.9 --- lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java 15 Jun 2016 08:06:56 -0000 1.25.2.8 +++ lams_tool_wiki/src/java/org/lamsfoundation/lams/tool/wiki/service/WikiService.java 11 Jan 2017 08:46:17 -0000 1.25.2.9 @@ -49,6 +49,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.rest.RestTags; import org.lamsfoundation.lams.rest.ToolRestManager; +import org.lamsfoundation.lams.tool.ToolCompletionStatus; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolOutput; import org.lamsfoundation.lams.tool.ToolOutputDefinition; @@ -1017,6 +1018,21 @@ return getWikiOutputFactory().getSupportedDefinitionClasses(definitionType); } + @Override + public ToolCompletionStatus getCompletionStatus(Long learnerId, Long toolSessionId) { + WikiUser learner = getUserByUserIdAndSessionId(learnerId, toolSessionId); + if (learner == null) { + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_NOT_ATTEMPTED, null, null); + } + + // very complicated to try to work out from edit page, so not doing dates. + + if (learner.isFinishedActivity()) + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_COMPLETED, null, null); + else + return new ToolCompletionStatus(ToolCompletionStatus.ACTIVITY_ATTEMPTED, null, null); + } + /* ****************** REST methods **************************************************************************/ /**