Index: lams_common/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r02fd9bc11bce2f15195f1e9ee0b46f2f3de243c8 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_common/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 02fd9bc11bce2f15195f1e9ee0b46f2f3de243c8) +++ lams_common/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -64,6 +64,6 @@ email.notifications.lesson =lesson email.notifications.tool =tool email.notifications.activity =activity +error.requires.existing.grouping =Activity {0} requires existing grouping but no group for user {1} exists yet. - #======= End labels: Exported 58 labels for en AU ===== Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java =================================================================== diff -u -re4cc998f13d5b249c1da90c86e398aa7b4ae711f -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java (.../ToolActivity.java) (revision e4cc998f13d5b249c1da90c86e398aa7b4ae711f) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java (.../ToolActivity.java) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -42,7 +42,9 @@ import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; +import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.MessageService; /** * @author Manpreet Minhas @@ -186,7 +188,8 @@ * @return the new tool session. */ @SuppressWarnings("unchecked") - public ToolSession createToolSessionForActivity(User learner, Lesson lesson) { + public ToolSession createToolSessionForActivity(MessageService messageService, User learner, Lesson lesson) + throws RequiredGroupMissingException { Date now = new Date(System.currentTimeMillis()); Integer supportType = getGroupingSupportType(); ToolSession session = null; @@ -198,10 +201,12 @@ Group group = null; if (getApplyGrouping().booleanValue()) { group = this.getGroupFor(learner); + + //check if activity requires existing grouping but no group for user exists yet if (group == null || group.isNull()) { - throw new LamsToolServiceException("Activity " + getActivityId() - + " requires existing grouping but no group for user " + learner.getUserId() - + " exists yet."); + String errorMessage = messageService.getMessage("error.requires.existing.grouping", new Object[] { + getActivityId(), learner.getUserId() }); + throw new RequiredGroupMissingException(errorMessage); } for (ToolSession toolSession : (Set) group.getToolSessions()) { Index: lams_common/src/java/org/lamsfoundation/lams/tool/exception/RequiredGroupMissingException.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/tool/exception/RequiredGroupMissingException.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/tool/exception/RequiredGroupMissingException.java (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -0,0 +1,38 @@ +/**************************************************************** + * Copyright (C) 2005 LAMS Foundation (http://lamsfoundation.org) + * ============================================================= + * License Information: http://lamsfoundation.org/licensing/lams/2.0/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2.0 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA + * + * http://www.gnu.org/licenses/gpl.txt + * **************************************************************** + */ + +/* $Id$ */ +package org.lamsfoundation.lams.tool.exception; + +/** + * Activity requires existing grouping but no group for user exists yet. + */ +public class RequiredGroupMissingException extends ToolException { + + /** + * @param msg + */ + public RequiredGroupMissingException(String msg) { + super(msg); + } + +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r15045d0b9b0dbb930f42a9da7757207e7a325341 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 15045d0b9b0dbb930f42a9da7757207e7a325341) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -36,9 +36,11 @@ import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; +import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.dao.DataIntegrityViolationException; /** *

@@ -72,8 +74,8 @@ * the requested activity. * @return toolSession if a new one created, null otherwise. */ - public ToolSession createToolSession(User learner, ToolActivity activity, Lesson lesson) - throws LamsToolServiceException; + ToolSession createToolSession(User learner, ToolActivity activity, Lesson lesson) + throws DataIntegrityViolationException, RequiredGroupMissingException; /** * Creates LAMS ToolSessions for a set of learners and activity. Checks to see if an appropriate tool session exists @@ -89,7 +91,7 @@ * the requested activity. * @return toolSessions set of newly created ToolSessions */ - public Set createToolSessions(Set learners, ToolActivity activity, Lesson lesson) throws LamsToolServiceException; + Set createToolSessions(Set learners, ToolActivity activity, Lesson lesson) throws LamsToolServiceException; /** * Returns the previously created ToolSession for a learner and activity. It is queried base on learner. @@ -102,7 +104,7 @@ * @throws LamsToolServiceException * the known error condition when we are getting the tool session */ - public ToolSession getToolSessionByLearner(User learner, Activity activity) throws LamsToolServiceException; + ToolSession getToolSessionByLearner(User learner, Activity activity) throws LamsToolServiceException; /** * Returns the tool session according to tool session id. @@ -111,7 +113,7 @@ * the requested tool session id. * @return the tool session object */ - public ToolSession getToolSessionById(Long toolSessionId); + ToolSession getToolSessionById(Long toolSessionId); /** * Get the lams tool session based on activity. It search through all the tool sessions that linked to the requested @@ -125,7 +127,7 @@ * @throws LamsToolServiceException * the known error condition when we are getting the tool session */ - public ToolSession getToolSessionByActivity(User learner, ToolActivity toolActivity) + ToolSession getToolSessionByActivity(User learner, ToolActivity toolActivity) throws LamsToolServiceException; /** @@ -136,7 +138,7 @@ * @param activity * the activity correspondent to that tool session. */ - public void notifyToolsToCreateSession(ToolSession toolSession, ToolActivity activity) throws ToolException; + void notifyToolsToCreateSession(ToolSession toolSession, ToolActivity activity) throws ToolException; /** * Calls the tool to copy the content for an activity. Used when copying a learning design. @@ -149,7 +151,7 @@ * ToolException * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#notifyToolToCopyContent(org.lamsfoundation.lams.learningdesign.ToolActivity) */ - public Long notifyToolToCopyContent(ToolActivity toolActivity, String customCSV) throws DataMissingException, + Long notifyToolToCopyContent(ToolActivity toolActivity, String customCSV) throws DataMissingException, ToolException; /** @@ -165,7 +167,7 @@ * ToolException * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#notifyToolToCopyContent(org.lamsfoundation.lams.learningdesign.ToolActivity) */ - public Long notifyToolToCopyContent(Long toolContentId, String customCSV) throws DataMissingException, + Long notifyToolToCopyContent(Long toolContentId, String customCSV) throws DataMissingException, ToolException; /** @@ -175,12 +177,12 @@ * the tool activity defined in the design. * @throws ToolException */ - public void notifyToolToDeleteContent(ToolActivity toolActivity) throws ToolException; + void notifyToolToDeleteContent(ToolActivity toolActivity) throws ToolException; /** * Ask a tool to delete content entered by the given user, if exists. */ - public void notifyToolToDeleteLearnerContent(ToolActivity toolActivity, Integer userId) throws ToolException; + void notifyToolToDeleteLearnerContent(ToolActivity toolActivity, Integer userId) throws ToolException; /** * Ask a tool for its OutputDefinitions, based on the given toolContentId. If the tool doesn't have any content @@ -193,7 +195,7 @@ * @return SortedMap of ToolOutputDefinitions with the key being the name of each definition * @throws ToolException */ - public SortedMap getOutputDefinitionsFromTool(Long toolContentId, int definitionType) + SortedMap getOutputDefinitionsFromTool(Long toolContentId, int definitionType) throws ToolException; /** @@ -206,7 +208,7 @@ * @return * @throws ToolException */ - public SortedMap getOutputDefinitionsFromToolFiltered(Long outputToolContentId, + SortedMap getOutputDefinitionsFromToolFiltered(Long outputToolContentId, int definitionType, Long inputToolContentId) throws ToolException; /** @@ -217,7 +219,7 @@ * * @throws ToolException */ - public ToolOutput getOutputFromTool(String conditionName, Long toolSessionId, Integer learnerId) + ToolOutput getOutputFromTool(String conditionName, Long toolSessionId, Integer learnerId) throws ToolException; /** @@ -228,7 +230,7 @@ * * @throws ToolException */ - public ToolOutput getOutputFromTool(String conditionName, ToolSession toolSession, Integer learnerId) + ToolOutput getOutputFromTool(String conditionName, ToolSession toolSession, Integer learnerId) throws ToolException; /** @@ -247,7 +249,7 @@ * * @throws ToolException */ - public SortedMap getOutputFromTool(List names, Long toolSessionId, Integer learnerId) + SortedMap getOutputFromTool(List names, Long toolSessionId, Integer learnerId) throws ToolException; /** @@ -266,7 +268,7 @@ * * @throws ToolException */ - public SortedMap getOutputFromTool(List names, ToolSession toolSession, + SortedMap getOutputFromTool(List names, ToolSession toolSession, Integer learnerId) throws ToolException; /** @@ -275,7 +277,7 @@ * @param toolSession * the new tool session object. */ - public void updateToolSession(ToolSession toolSession); + void updateToolSession(ToolSession toolSession); /** * Return tool activity url for a learner. See also getToolPreviewURL, getToolLearnerProgressURL @@ -288,7 +290,7 @@ * the current learner. * @return the tool access url with tool session id or activity id */ - public String getToolLearnerURL(Long lessonID, Activity activity, User learner) throws LamsToolServiceException; + String getToolLearnerURL(Long lessonID, Activity activity, User learner) throws LamsToolServiceException; /** * Return tool activity url for running a tool in preview mode. See also getToolLearnerURL, @@ -302,7 +304,7 @@ * the current learner. * @return the tool access url with tool session id or activity id */ - public String getToolLearnerPreviewURL(Long lessonID, Activity activity, User learner) + String getToolLearnerPreviewURL(Long lessonID, Activity activity, User learner) throws LamsToolServiceException; /** @@ -316,7 +318,7 @@ * the current learner. * @return the tool access url with tool session id or activity id */ - public String getToolLearnerProgressURL(Long lessonID, Activity activity, User learner) + String getToolLearnerProgressURL(Long lessonID, Activity activity, User learner) throws LamsToolServiceException; /** @@ -328,7 +330,7 @@ * the requested activity - should be either a ToolActivity or a SystemToolActivity * @return the tool access url with tool session id or activity id */ - public String getToolMonitoringURL(Long lessonID, Activity activity) throws LamsToolServiceException; + String getToolMonitoringURL(Long lessonID, Activity activity) throws LamsToolServiceException; /** * Return the contribution url for monitoring. @@ -339,7 +341,7 @@ * the requested activity - should be either a ToolActivity or a SystemToolActivity * @return the tool access url with tool session id or activity id */ - public String getToolContributionURL(Long lessonID, Activity activity) throws LamsToolServiceException; + String getToolContributionURL(Long lessonID, Activity activity) throws LamsToolServiceException; /** * Return the moderate url for monitoring. @@ -348,20 +350,20 @@ * the requested activity - must be a a ToolActivity. System Activities don't support moderation. * @return the tool access url with tool content id */ - public String getToolModerateURL(ToolActivity activity) throws LamsToolServiceException; + String getToolModerateURL(ToolActivity activity) throws LamsToolServiceException; /** * Get all the tool sessions for a lesson. The resulting list is not sorted. * * @return list of ToolSession objects */ - public List getToolSessionsByLesson(Lesson lesson); + List getToolSessionsByLesson(Lesson lesson); /** * Delete a tool session. Calls the tool to delete its session details and then deletes the main tool session * record. If the tool throws an exception, the main tool session record is still deleted. */ - public void deleteToolSession(ToolSession toolSession); + void deleteToolSession(ToolSession toolSession); /** *

@@ -377,7 +379,7 @@ * @throws LamsToolServiceException * @return the url with tool session id. */ - public String setupToolURLWithToolSession(ToolActivity activity, User learner, String toolURL) + String setupToolURLWithToolSession(ToolActivity activity, User learner, String toolURL) throws LamsToolServiceException; /** @@ -391,7 +393,7 @@ * the target url * @return the url with tool content id. */ - public String setupToolURLWithToolContent(ToolActivity activity, String toolURL); + String setupToolURLWithToolContent(ToolActivity activity, String toolURL); - public Object findToolService(Tool tool) throws NoSuchBeanDefinitionException; + Object findToolService(Tool tool) throws NoSuchBeanDefinitionException; } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r15045d0b9b0dbb930f42a9da7757207e7a325341 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 15045d0b9b0dbb930f42a9da7757207e7a325341) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -49,8 +49,10 @@ import org.lamsfoundation.lams.tool.dao.IToolSessionDAO; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; +import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.BeansException; @@ -76,6 +78,7 @@ private ISystemToolDAO systemToolDAO; private ToolContentIDGenerator contentIDGenerator; protected IToolContentDAO toolContentDAO; + private MessageService messageService; // --------------------------------------------------------------------- // Inversion of Control Methods - Method injection @@ -112,14 +115,21 @@ public void setToolContentDAO(IToolContentDAO toolContentDAO) { this.toolContentDAO = toolContentDAO; } + + /** + * Set i18n MessageService + */ + public void setMessageService(MessageService messageService) { + this.messageService = messageService; + } // --------------------------------------------------------------------- // Service Methods // --------------------------------------------------------------------- @Override public synchronized ToolSession createToolSession(User learner, ToolActivity activity, Lesson lesson) - throws LamsToolServiceException, DataIntegrityViolationException { + throws RequiredGroupMissingException, DataIntegrityViolationException { // look for an existing applicable tool session // could be either a grouped (class group or standard group) or an individual. // more likely to be grouped (more tools work that way!) @@ -134,7 +144,7 @@ + lesson.getLessonId() + "," + lesson.getLessonName() + "]."); } - toolSession = activity.createToolSessionForActivity(learner, lesson); + toolSession = activity.createToolSessionForActivity(messageService, learner, lesson); toolSessionDAO.saveToolSession(toolSession); return toolSession; Index: lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml =================================================================== diff -u -r6cb043085b0ff20f830c077e00ef63cbc37154e0 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 6cb043085b0ff20f830c077e00ef63cbc37154e0) +++ lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -44,6 +44,7 @@ + Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -r88e98be30293b57a81d4a8a6e5cdaf5c62e97883 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 88e98be30293b57a81d4a8a6e5cdaf5c62e97883) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -82,6 +82,7 @@ import org.lamsfoundation.lams.tool.ToolOutputValue; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; +import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.usermanagement.User; @@ -380,9 +381,9 @@ ToolActivity toolActivity = (ToolActivity) activity; createToolSessionFor(toolActivity, learnerProgress.getUser(), learnerProgress.getLesson()); } - } catch (LamsToolServiceException e) { - LearnerService.log.error("error occurred in 'createToolSessionFor':" + e.getMessage()); - throw new LearnerServiceException(e.getMessage()); + } catch (RequiredGroupMissingException e) { + LearnerService.log.warn("error occurred in 'createToolSessionFor':" + e.getMessage()); + throw e; } catch (ToolException e) { LearnerService.log.error("error occurred in 'createToolSessionFor':" + e.getMessage()); throw new LearnerServiceException(e.getMessage()); @@ -1035,7 +1036,7 @@ * @throws LamsToolServiceException */ private void createToolSessionFor(ToolActivity toolActivity, User learner, Lesson lesson) - throws LamsToolServiceException, ToolException { + throws RequiredGroupMissingException, ToolException { // if the tool session already exists, createToolSession() will return null ToolSession toolSession = null; try { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -rc135649b64e98c9233da20bdcfb7689598116314 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision c135649b64e98c9233da20bdcfb7689598116314) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -41,6 +41,7 @@ import org.lamsfoundation.lams.learning.web.util.LearningWebUtil; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.lesson.LearnerProgress; +import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.springframework.transaction.UnexpectedRollbackException; /** @@ -53,6 +54,7 @@ * @struts:action path="/LoadToolActivity" name="activityForm" validate="false" scope="request" * * @struts:action-forward name="displayTool" path=".loadToolActivity" + * @struts:action-forward name="message" path=".message" * */ public class LoadToolActivityAction extends ActivityAction { @@ -98,8 +100,16 @@ synchronized (toolSessionCreationLock) { try { learnerService.createToolSessionsIfNecessary(activity, learnerProgress); + } catch (UnexpectedRollbackException e) { log.warn("Got exception while trying to create a tool session, but carrying on.", e); + + } catch (RequiredGroupMissingException e) { + + //got here when activity requires existing grouping but no group for user exists yet + log.warn(e.getMessage()); + request.setAttribute("messageKey", e.getMessage()); + return mapping.findForward("message"); } } Index: lams_learning/web/WEB-INF/tiles-defs.xml =================================================================== diff -u -rc135649b64e98c9233da20bdcfb7689598116314 -rda9d623352f3964daa5fe12f81a683b9377d286a --- lams_learning/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision c135649b64e98c9233da20bdcfb7689598116314) +++ lams_learning/web/WEB-INF/tiles-defs.xml (.../tiles-defs.xml) (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -55,6 +55,11 @@ + + + + + Index: lams_learning/web/msgContent.jsp =================================================================== diff -u --- lams_learning/web/msgContent.jsp (revision 0) +++ lams_learning/web/msgContent.jsp (revision da9d623352f3964daa5fe12f81a683b9377d286a) @@ -0,0 +1,12 @@ +<%@ taglib uri="tags-fmt" prefix="fmt" %> + + + + + +
+
+

+

+
+