Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java,v diff -u -r1.40 -r1.41 --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java 11 Oct 2012 12:01:11 -0000 1.40 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java 12 Oct 2012 15:01:57 -0000 1.41 @@ -9,8 +9,10 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedMap; +import java.util.TreeMap; import java.util.TreeSet; import java.util.Vector; @@ -352,7 +354,6 @@ try { ExtServerOrgMap serverMap = LessonManagerServlet.integrationService.getExtServerOrgMap(serverId); Authenticator.authenticate(serverMap, datetime, username, hashValue); - ExtUserUseridMap userMap = LessonManagerServlet.integrationService.getExtUserUseridMap(serverMap, username); Lesson lesson = LessonManagerServlet.lessonService.getLesson(lsId); Element element = document.createElement(CentralConstants.ELEM_LESSON_PROGRESS); @@ -417,8 +418,6 @@ Element element = document.createElement(CentralConstants.ELEM_LESSON_PROGRESS); element.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lsId); - String prefix = serverMap.getPrefix(); - if (lesson != null) { int activitiesTotal = lesson.getLearningDesign().getActivities().size(); @@ -744,95 +743,102 @@ */ @SuppressWarnings("unchecked") public Element getToolOutputs(Document document, String serverId, String datetime, String hashValue, - String username, Long lessonId, String courseID, boolean isAuthoredToolOutputs, String outputsUser) - throws Exception { - try { + String username, Long lessonId, String courseID, boolean isAuthoredToolOutputs, String outputsUser) throws Exception { + + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, username, hashValue); - ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); - Authenticator.authenticate(serverMap, datetime, username, hashValue); - - Lesson lesson = lessonService.getLesson(lessonId); - if (lesson == null) { + Lesson lesson = lessonService.getLesson(lessonId); + if (lesson == null) { + // TODO: handle this error instead of throwing an exception + log.debug("No lesson exists for: " + lessonId + ". Cannot get tool outputs report."); + throw new Exception("Lesson with lessonID: " + lessonId + " could not be found for learner progresses"); + } + + Set activities = getLessonActivities(lesson); + + Set learners = new TreeSet(); + // if outputsUser is null we build results for the whole lesson, otherwise - for the specified learner + if (outputsUser != null) { + + ExtUserUseridMap userMap = integrationService.getExistingExtUserUseridMap(serverMap, outputsUser); + if (userMap == null) { // TODO: handle this error instead of throwing an exception - log.debug("No lesson exists for: " + lessonId + ". Cannot get tool outputs report."); - throw new Exception("Lesson with lessonID: " + lessonId + " could not be found for learner progresses"); + log.debug("No user exists for: " + outputsUser + ". Cannot get tool outputs report."); + throw new Exception("No user exists for: " + outputsUser + ". Cannot get tool outputs report."); } + learners.add(userMap.getUser()); - Set activities = getLessonActivities(lesson); - - Set learners = new TreeSet(); - // if outputsUser is null we build results for the whole lesson, otherwise - for the specified learner - if (outputsUser != null) { - - ExtUserUseridMap userMap = integrationService.getExistingExtUserUseridMap(serverMap, outputsUser); - if (userMap == null) { - // TODO: handle this error instead of throwing an exception - log.debug("No user exists for: " + outputsUser + ". Cannot get tool outputs report."); - throw new Exception("No user exists for: " + outputsUser + ". Cannot get tool outputs report."); - } - learners.add(userMap.getUser()); - - } else { - learners.addAll(lesson.getAllLearners()); - log.debug("Getting tool ouputs report for: " + lessonId + ". With learning design: " - + lesson.getLearningDesign().getLearningDesignId()); - } + } else { + learners.addAll(lesson.getAllLearners()); + log.debug("Getting tool ouputs report for: " + lessonId + ". With learning design: " + + lesson.getLearningDesign().getLearningDesignId()); + } - // Create the root node of the xml document - Element toolOutputsElement = document.createElement("ToolOutputs"); + // Create the root node of the xml document + Element toolOutputsElement = document.createElement("ToolOutputs"); - toolOutputsElement.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lessonId); - toolOutputsElement.setAttribute("name", lesson.getLessonName()); + toolOutputsElement.setAttribute(CentralConstants.ATTR_LESSON_ID, "" + lessonId); + toolOutputsElement.setAttribute("name", lesson.getLessonName()); - List learnerProgresses = lessonService.getUserProgressForLesson(lesson.getLessonId()); - List toolSessions = toolService.getToolSessionsByLesson(lesson); - - for (User learner : learners) { + List learnerProgresses = lessonService.getUserProgressForLesson(lesson.getLessonId()); + List toolSessions = toolService.getToolSessionsByLesson(lesson); - Element learnerElement = document.createElement("LearnerOutput"); + // map contains pairs toolContentId -> toolOutputDefinitions + Map> toolOutputDefinitionsMap = new TreeMap>(); + for (ToolActivity activity : activities) { + Long toolContentId = activity.getToolContentId(); + if (toolOutputDefinitionsMap.get(toolContentId) == null) { + SortedMap toolOutputDefinitions = toolService + .getOutputDefinitionsFromTool(toolContentId, + ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); + toolOutputDefinitionsMap.put(toolContentId, toolOutputDefinitions); + } + } - String userNoPrefixName = learner.getLogin().substring(serverMap.getPrefix().length() + 1); - learnerElement.setAttribute("userName", userNoPrefixName); - learnerElement.setAttribute("lamsUserName", learner.getLogin()); - learnerElement.setAttribute("lamsUserId", learner.getUserId().toString()); - learnerElement.setAttribute("firstName", learner.getFirstName()); - learnerElement.setAttribute("lastName", learner.getLastName()); + for (User learner : learners) { - // find required learnerProgress from learnerProgresses (this way we don't querying DB). - LearnerProgress learnerProgress = null; - for (LearnerProgress dbLearnerProgress : learnerProgresses) { - if (dbLearnerProgress.getUser().getUserId().equals(learner.getUserId())) { - learnerProgress = dbLearnerProgress; - } + Element learnerElement = document.createElement("LearnerOutput"); + + String userNoPrefixName = learner.getLogin().substring(serverMap.getPrefix().length() + 1); + learnerElement.setAttribute("userName", userNoPrefixName); + learnerElement.setAttribute("lamsUserName", learner.getLogin()); + learnerElement.setAttribute("lamsUserId", learner.getUserId().toString()); + learnerElement.setAttribute("firstName", learner.getFirstName()); + learnerElement.setAttribute("lastName", learner.getLastName()); + + // find required learnerProgress from learnerProgresses (this way we don't querying DB). + LearnerProgress learnerProgress = null; + for (LearnerProgress dbLearnerProgress : learnerProgresses) { + if (dbLearnerProgress.getUser().getUserId().equals(learner.getUserId())) { + learnerProgress = dbLearnerProgress; } - if (learnerProgress != null) { - learnerElement.setAttribute("completedLesson", "" + learnerProgress.isComplete()); - } + } + if (learnerProgress != null) { + learnerElement.setAttribute("completedLesson", "" + learnerProgress.isComplete()); + } - for (ToolActivity activity : activities) { - // find required toolSession from toolSessions (this way we don't querying DB). - ToolSession toolSession = null; - for (ToolSession dbToolSession : toolSessions) { - if (dbToolSession.getToolActivity().getActivityId().equals(activity.getActivityId()) - && dbToolSession.getLearners().contains(learner)) { - toolSession = dbToolSession; - } + for (ToolActivity activity : activities) { + // find required toolSession from toolSessions (this way we don't querying DB). + ToolSession toolSession = null; + for (ToolSession dbToolSession : toolSessions) { + if (dbToolSession.getToolActivity().getActivityId().equals(activity.getActivityId()) + && dbToolSession.getLearners().contains(learner)) { + toolSession = dbToolSession; } - - learnerElement.appendChild(getActivityOutputsElement(document, activity, learner, learnerProgress, - toolSession, isAuthoredToolOutputs)); } + Map toolOutputDefinitions = toolOutputDefinitionsMap.get(activity + .getToolContentId()); - toolOutputsElement.appendChild(learnerElement); + learnerElement.appendChild(getActivityOutputsElement(document, activity, learner, learnerProgress, + toolSession, toolOutputDefinitions, isAuthoredToolOutputs)); } - return toolOutputsElement; - - } catch (Exception e) { - LessonManagerServlet.log.error("Problem creating tool output report for lesson: " + lessonId.toString(), e); - throw new Exception(e); + toolOutputsElement.appendChild(learnerElement); } + return toolOutputsElement; + } /** @@ -897,7 +903,7 @@ * @return */ private Element getActivityOutputsElement(Document document, ToolActivity activity, User learner, - LearnerProgress progress, ToolSession toolSession, boolean isAuthoredToolOutputs) { + LearnerProgress progress, ToolSession toolSession, Map toolOutputDefinitions, boolean isAuthoredToolOutputs) { Element activityElement = document.createElement("Activity"); activityElement.setAttribute("title", activity.getTitle()); activityElement.setAttribute("activityId", activity.getActivityId().toString()); @@ -918,46 +924,40 @@ activityElement.setAttribute("completed", "" + false); } - if (activityAttempted) { - SortedMap map = toolService.getOutputDefinitionsFromTool( - activity.getToolContentId(), ToolOutputDefinition.DATA_OUTPUT_DEFINITION_TYPE_CONDITION); + if (activityAttempted && (toolSession != null)) { - if (toolSession != null) { + for (String outputName : toolOutputDefinitions.keySet()) { - for (String outputName : map.keySet()) { + try { + ToolOutputDefinition definition = toolOutputDefinitions.get(outputName); - try { - ToolOutputDefinition definition = map.get(outputName); - - if (isAuthoredToolOutputs) { - Set activityEvaluations = activity.getActivityEvaluations(); - if (activityEvaluations != null) { - for (ActivityEvaluation evaluation : activityEvaluations) { - if (outputName.equals(evaluation.getToolOutputDefinition())) { - ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, - learner.getUserId()); - activityElement.appendChild(getOutputElement(document, toolOutput, definition)); - } + if (isAuthoredToolOutputs) { + Set activityEvaluations = activity.getActivityEvaluations(); + if (activityEvaluations != null) { + for (ActivityEvaluation evaluation : activityEvaluations) { + if (outputName.equals(evaluation.getToolOutputDefinition())) { + ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, + learner.getUserId()); + activityElement.appendChild(getOutputElement(document, toolOutput, definition)); } } - } else { - ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, - learner.getUserId()); + } + } else { + ToolOutput toolOutput = toolService.getOutputFromTool(outputName, toolSession, learner.getUserId()); - if (toolOutput != null) { - activityElement.appendChild(getOutputElement(document, toolOutput, definition)); + if (toolOutput != null) { + activityElement.appendChild(getOutputElement(document, toolOutput, definition)); - } - } - } catch (RuntimeException e) { - log.debug("Runtime exception when attempted to get outputs for activity: " - + activity.getActivityId() + ", continuing for other activities", e); } - } + } catch (RuntimeException e) { + log.error("Runtime exception when attempted to get outputs for activity: " + activity.getActivityId() + + ", continuing for other activities", e); + } } + } return activityElement; }