Index: lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml,v diff -u -r1.3 -r1.4 --- lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml 15 Feb 2006 05:05:39 -0000 1.3 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/authoringApplicationContext.xml 20 Feb 2006 05:35:34 -0000 1.4 @@ -32,6 +32,7 @@ + Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java,v diff -u -r1.15 -r1.16 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java 20 Feb 2006 01:27:14 -0000 1.15 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/AuthoringService.java 20 Feb 2006 05:35:34 -0000 1.16 @@ -43,6 +43,7 @@ import org.lamsfoundation.lams.learningdesign.LearningDesign; import org.lamsfoundation.lams.learningdesign.LearningLibrary; import org.lamsfoundation.lams.learningdesign.License; +import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.Transition; import org.lamsfoundation.lams.learningdesign.dao.hibernate.ActivityDAO; import org.lamsfoundation.lams.learningdesign.dao.hibernate.GroupDAO; @@ -61,6 +62,8 @@ import org.lamsfoundation.lams.tool.Tool; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.dao.hibernate.ToolDAO; +import org.lamsfoundation.lams.tool.exception.ToolException; +import org.lamsfoundation.lams.tool.service.ILamsCoreToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.dao.hibernate.UserDAO; @@ -95,6 +98,7 @@ protected GroupingDAO groupingDAO; protected GroupDAO groupDAO; protected ICSSThemeDAO themeDAO; + protected ILamsCoreToolService lamsCoreToolService; protected MessageService messageService; protected ToolContentIDGenerator contentIDGenerator; @@ -187,6 +191,14 @@ this.themeDAO = themeDAO; } + public ILamsCoreToolService getLamsCoreToolService() { + return lamsCoreToolService; + } + + public void setLamsCoreToolService(ILamsCoreToolService lamsCoreToolService) { + this.lamsCoreToolService = lamsCoreToolService; + } + /** * @param contentIDGenerator The contentIDGenerator to set. */ @@ -601,5 +613,34 @@ return licenseDTOList; } - + /** Delete a learning design from the database. Does not remove any content stored in tools - + * that is done by the LamsCoreToolService */ + public void deleteLearningDesign(LearningDesign design) { + if ( design == null ) { + log.error("deleteLearningDesign: unable to delete learning design as design is null."); + return; + } + + // remove all the tool content for the learning design + Set acts = design.getActivities(); + Iterator iter = acts.iterator(); + while (iter.hasNext()) { + Activity activity = (Activity) iter.next(); + if ( activity.getActivityTypeId() != null && + Activity.TOOL_ACTIVITY_TYPE == activity.getActivityTypeId().intValue() ) { + // TODO can't just cast.... + try { + lamsCoreToolService.notifyToolToDeleteContent((ToolActivity)activity); + } catch (ToolException e) { + log.error("Unable to delete tool content for activity"+activity + +" as activity threw exception does not exist",e); + } + } + } + + // remove the learning design + learningDesignDAO.delete(design); + } + + } \ No newline at end of file Index: lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java,v diff -u -r1.6 -r1.7 --- lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java 31 Jan 2006 13:00:54 -0000 1.6 +++ lams_central/src/java/org/lamsfoundation/lams/authoring/service/IAuthoringService.java 20 Feb 2006 05:35:34 -0000 1.7 @@ -215,4 +215,9 @@ * @return Vector of LicenseDTO objects. It is a Vector to ensure compatibility with WDDX */ public Vector getAvailableLicenses(); + + /** Delete a learning design from the database. Does not remove any content stored in tools - + * that is done by the LamsCoreToolService */ + public void deleteLearningDesign(LearningDesign design); + } Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/commonContext.xml,v diff -u -r1.7 -r1.8 --- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 21 Dec 2005 05:27:08 -0000 1.7 +++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml 20 Feb 2006 05:31:00 -0000 1.8 @@ -89,7 +89,7 @@ true - PROPAGATION_REQUIRED,readOnly + PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java,v diff -u -r1.7 -r1.8 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java 13 Jan 2006 04:24:55 -0000 1.7 +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolSessionDAO.java 20 Feb 2006 05:31:00 -0000 1.8 @@ -6,7 +6,10 @@ package org.lamsfoundation.lams.tool.dao; +import java.util.List; + import org.lamsfoundation.lams.learningdesign.Activity; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.usermanagement.User; @@ -37,5 +40,15 @@ */ public ToolSession getToolSessionByLearner(final User learner,final Activity activity); + /** + * Get all the tools for a lesson. Does not order the tool sessions with respect to their + * activities - to do that you need to get the activities first and get the tool session from + * the activity. + * + * @returns list of tool sessions. + */ + public List getToolSessionsByLesson(final Lesson lesson); + + public void updateToolSession(ToolSession toolSession); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java,v diff -u -r1.10 -r1.11 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java 13 Jan 2006 04:24:55 -0000 1.10 +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolSessionDAO.java 20 Feb 2006 05:31:00 -0000 1.11 @@ -6,9 +6,11 @@ package org.lamsfoundation.lams.tool.dao.hibernate; +import java.util.List; + import org.hibernate.Query; import org.lamsfoundation.lams.learningdesign.Activity; -import org.lamsfoundation.lams.learningdesign.Group; +import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.GroupedToolSession; import org.lamsfoundation.lams.tool.NonGroupedToolSession; import org.lamsfoundation.lams.tool.ToolSession; @@ -30,6 +32,8 @@ protected static final String LOAD_GROUPED_TOOL_SESSION_BY_GROUP2 = "select s from GroupedToolSession as s inner join s.sessionGroup as sg inner join sg.users as u " +" where :learner = u and s.toolActivity = :activity"; + protected static final String LOAD_TOOL_SESSION_BY_LESSON = + "from ToolSession s where s.lesson = :lesson"; /** * Retrieves the ToolSession @@ -80,6 +84,17 @@ } /** + * @see org.lamsfoundation.lams.tool.dao.IToolSessionDAO#getToolSessionsByLesson(org.lamsfoundation.lams.lesson.Lesson) + */ + public List getToolSessionsByLesson(final Lesson lesson) { + + Query query = this.getSession().createQuery(LOAD_TOOL_SESSION_BY_LESSON); + query.setParameter("lesson",lesson); + return query.list(); + + } + + /** * @see org.lamsfoundation.lams.tool.dao.IToolSessionDAO#updateToolSession(org.lamsfoundation.lams.tool.ToolSession) */ public void updateToolSession(ToolSession toolSession) 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.8 -r1.9 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 7 Feb 2006 23:24:56 -0000 1.8 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java 20 Feb 2006 05:31:00 -0000 1.9 @@ -24,14 +24,14 @@ package org.lamsfoundation.lams.tool.service; +import java.util.List; import java.util.Set; import org.lamsfoundation.lams.learningdesign.Activity; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.ToolAccessMode; import org.lamsfoundation.lams.tool.ToolSession; -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.ToolException; @@ -131,6 +131,15 @@ throws DataMissingException, ToolException; /** + * Ask a tool to delete a tool content. If any related tool session data exists then it should + * be deleted. + * + * @param toolActivity the tool activity defined in the design. + * @throws ToolException + */ + public void notifyToolToDeleteContent(ToolActivity toolActivity) throws ToolException; + + /** * Update the tool session data. * @param toolSession the new tool session object. */ @@ -148,6 +157,20 @@ public String getLearnerToolURLByMode(ToolActivity activity, User learner, ToolAccessMode accessMode) 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); + + + /** + * 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); + + /** *

Setup target tool url with tool session id parameter based on the tool * activity and learner.

* 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.16 -r1.17 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 7 Feb 2006 23:24:56 -0000 1.16 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 20 Feb 2006 05:31:00 -0000 1.17 @@ -22,6 +22,7 @@ import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Set; import org.apache.log4j.Logger; @@ -175,7 +176,7 @@ } /** - * Make a copy of all tools content which belongs to this learning design. + * Calls the tool to copy the content for an activity. Used when copying a learning design. * * @param toolActivity the tool activity defined in the design. * @throws DataMissingException, ToolException @@ -206,6 +207,22 @@ } /** + * Ask a tool to delete a tool content. If any related tool session data exists then it should + * be deleted. + * + * @param toolActivity the tool activity defined in the design. + * @throws ToolException + */ + public void notifyToolToDeleteContent(ToolActivity toolActivity) throws ToolException + { + //TODO we need to the classpath check once all tools done. + if (isToolOnClasspath(toolActivity)) + { + ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity); + contentManager.removeToolContent(toolActivity.getToolContentId(),true); + } + } + /** * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#updateToolSession(org.lamsfoundation.lams.tool.ToolSession) */ public void updateToolSession(ToolSession toolSession) @@ -214,6 +231,44 @@ } /** + * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#getToolSessionsByLesson(org.lamsfoundation.lams.lesson.Lesson) + */ + public List getToolSessionsByLesson(Lesson lesson) + { + return toolSessionDAO.getToolSessionsByLesson(lesson); + } + + + /** + * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#deleteToolSession(org.lamsfoundation.lams.tool.ToolSession) + */ + public void deleteToolSession(ToolSession toolSession) + { + if ( toolSession == null ) { + log.error("deleteToolSession: unable to delete tool session as tool session is null."); + return; + } + + // call the tool to remove the session details + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(toolSession.getToolActivity()); + + try { + sessionManager.removeToolSession(toolSession.getToolSessionId()); + } catch (DataMissingException e) { + log.error("Unable to delete tool data for tool session "+toolSession.getToolSessionId() + +" as toolSession does not exist",e); + } catch (ToolException e) { + log.error("Unable to delete tool data for tool session "+toolSession.getToolSessionId() + +" as tool threw an exception",e); + } + + // now remove the tool session from the core tables. + toolSessionDAO.removeToolSession(toolSession); + + } + + + /** * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#getLearnerToolURLByMode(org.lamsfoundation.lams.learningdesign.ToolActivity, org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.tool.ToolAccessMode) */ public String getLearnerToolURLByMode(ToolActivity activity, Index: lams_common/src/java/org/lamsfoundation/lams/util/ConfigurationKeys.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/util/ConfigurationKeys.java,v diff -u -r1.6 -r1.7 --- lams_common/src/java/org/lamsfoundation/lams/util/ConfigurationKeys.java 27 Jan 2006 04:35:53 -0000 1.6 +++ lams_common/src/java/org/lamsfoundation/lams/util/ConfigurationKeys.java 20 Feb 2006 05:31:00 -0000 1.7 @@ -31,6 +31,8 @@ public static String LICENSE_TICKET_FILE="TicketFile"; + public static String PREVIEW_CLEANUP_NUM_DAYS="CleanupPreviewOlderThanDays"; + /** Number of milliseconds before a user is considered "inactive". "Anonymous" sessions * are ended after this period (ie ones that haven't ever access one of the clients ) */ public static String INACTIVE_TIME="UserInactiveTimeout"; Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java,v diff -u -r1.5 -r1.6 --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java 31 Jan 2006 12:53:19 -0000 1.5 +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/WDDXTAGS.java 20 Feb 2006 05:31:00 -0000 1.6 @@ -171,5 +171,7 @@ public static final String LESSON_NAME = "lessonName"; public static final String LESSON_START_DATETIME = "lessonStartDateTime"; + /** Crash Dump Specific Tags */ + public static final String CRASH_DUMP_BATCH="crashDataBatch"; } Index: lams_common/src/java/org/lamsfoundation/lams/web/servlet/AbstractStoreWDDXPacketServlet.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/web/servlet/AbstractStoreWDDXPacketServlet.java,v diff -u -r1.4 -r1.5 --- lams_common/src/java/org/lamsfoundation/lams/web/servlet/AbstractStoreWDDXPacketServlet.java 23 Jan 2006 07:09:20 -0000 1.4 +++ lams_common/src/java/org/lamsfoundation/lams/web/servlet/AbstractStoreWDDXPacketServlet.java 20 Feb 2006 05:31:00 -0000 1.5 @@ -88,7 +88,7 @@ packet = getBody(request); if ( log.isDebugEnabled() ) { - log.debug("Request "+request.getRequestURI()+" received packet "+packet); + log.debug("Request "+request.getRequestURI()+" received packet length "+packet); } if(containsNulls(packet)){ @@ -151,27 +151,27 @@ { int tempContentLength = req.getContentLength(); InputStream sis = req.getInputStream(); - byte[] content = new byte[1024*4]; +/* byte[] content = new byte[1024*4]; OutputStream bos = new ByteArrayOutputStream(tempContentLength>0 ? tempContentLength : 200); int len; while((len = sis.read(content)) != -1){ bos.write(content,0,len); } return bos.toString(); - -// BufferedReader buff = new BufferedReader(new InputStreamReader(sis)); -// -// StringBuffer tempStrBuf = new StringBuffer( tempContentLength>0 ? tempContentLength : 200 ); -// String tempStr; -// tempStr = buff.readLine(); -// while ( tempStr != null ) -// { -// tempStrBuf.append(tempStr); -// tempStr = buff.readLine(); -// } -// -// return(tempStrBuf.toString()); + */ + BufferedReader buff = new BufferedReader(new InputStreamReader(sis)); + StringBuffer tempStrBuf = new StringBuffer( tempContentLength>0 ? tempContentLength : 200 ); + String tempStr; + tempStr = buff.readLine(); + while ( tempStr != null ) + { + tempStrBuf.append(tempStr); + tempStr = buff.readLine(); + } + + return(tempStrBuf.toString()); + /* BufferedReader tempReader = req.getReader(); int tempContentLength = req.getContentLength();