Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -re9d37f66811961f608908669c5f40b73dd59f388 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 Binary files differ Index: lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/tool/ToolContent.hbm.xml =================================================================== diff -u -r42ddbd4c509c956cc9f5328cea8d45d6e593e796 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/tool/ToolContent.hbm.xml (.../ToolContent.hbm.xml) (revision 42ddbd4c509c956cc9f5328cea8d45d6e593e796) +++ lams_common/conf/hibernate/mappings/org/lamsfoundation/lams/tool/ToolContent.hbm.xml (.../ToolContent.hbm.xml) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -39,7 +39,9 @@ + not-null="true" + lazy="false" + cascade="none"> Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolContentDAO.java =================================================================== diff -u -r34b959260a0f8f8285793a4481a95ca3580eabc5 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolContentDAO.java (.../IToolContentDAO.java) (revision 34b959260a0f8f8285793a4481a95ca3580eabc5) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/IToolContentDAO.java (.../IToolContentDAO.java) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -23,6 +23,7 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.dao; +import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.tool.ToolContent; @@ -31,7 +32,7 @@ * @author Jacky Fang 8/02/2005 * */ -public interface IToolContentDAO +public interface IToolContentDAO extends IBaseDAO { public void saveToolContent(ToolContent toolContent); Index: lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolContentDAO.java =================================================================== diff -u -r34b959260a0f8f8285793a4481a95ca3580eabc5 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolContentDAO.java (.../ToolContentDAO.java) (revision 34b959260a0f8f8285793a4481a95ca3580eabc5) +++ lams_common/src/java/org/lamsfoundation/lams/tool/dao/hibernate/ToolContentDAO.java (.../ToolContentDAO.java) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -23,17 +23,17 @@ /* $$Id$$ */ package org.lamsfoundation.lams.tool.dao.hibernate; +import org.lamsfoundation.lams.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.tool.ToolContent; import org.lamsfoundation.lams.tool.dao.IToolContentDAO; -import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * * @author Jacky Fang 8/02/2005 * */ -public class ToolContentDAO extends HibernateDaoSupport implements IToolContentDAO +public class ToolContentDAO extends BaseDAO implements IToolContentDAO { /** Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java =================================================================== diff -u -r0a3641cb6f80f0def4d3172ca10da9788a9268f4 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 0a3641cb6f80f0def4d3172ca10da9788a9268f4) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsCoreToolService.java (.../ILamsCoreToolService.java) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -133,6 +133,18 @@ throws DataMissingException, ToolException; /** + * Calls the tool to copy the content for an activity. Used when copying an activity in authoring. Can't + * use the notifyToolToCopyContent(ToolActivity, boolean) version in authoring as the tool activity won't + * exist if the user hasn't saved the sequence yet. But the tool content (as that is saved by the + * tool) may already exist. + * + * @param toolContentId the content to be copied. + * @throws DataMissingException, ToolException + * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#notifyToolToCopyContent(org.lamsfoundation.lams.learningdesign.ToolActivity) + */ + public Long notifyToolToCopyContent(Long toolContentId) + throws DataMissingException, ToolException; + /** * Ask a tool to delete a tool content. If any related tool session data exists then it should * be deleted. * Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -r0a3641cb6f80f0def4d3172ca10da9788a9268f4 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 0a3641cb6f80f0def4d3172ca10da9788a9268f4) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -33,17 +33,21 @@ import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.tool.SystemTool; +import org.lamsfoundation.lams.tool.Tool; +import org.lamsfoundation.lams.tool.ToolContent; import org.lamsfoundation.lams.tool.ToolContentIDGenerator; import org.lamsfoundation.lams.tool.ToolContentManager; import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.ToolSessionManager; import org.lamsfoundation.lams.tool.dao.ISystemToolDAO; +import org.lamsfoundation.lams.tool.dao.IToolContentDAO; 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; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.WebUtil; +import org.lamsfoundation.lams.util.wddx.FlashMessage; import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; @@ -68,6 +72,7 @@ private IToolSessionDAO toolSessionDAO; private ISystemToolDAO systemToolDAO; private ToolContentIDGenerator contentIDGenerator; + protected IToolContentDAO toolContentDAO; //--------------------------------------------------------------------- // Inversion of Control Methods - Method injection //--------------------------------------------------------------------- @@ -188,7 +193,7 @@ public void notifyToolsToCreateSession(ToolSession toolSession, ToolActivity activity) throws ToolException { try { - ToolSessionManager sessionManager = (ToolSessionManager) findToolService(activity); + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(activity.getTool()); sessionManager.createToolSession(toolSession.getToolSessionId(),toolSession.getToolSessionName(), activity.getToolContentId()); @@ -211,7 +216,7 @@ { Long newToolcontentID = contentIDGenerator.getNextToolContentIDFor(toolActivity.getTool()); try { - ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity); + ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity.getTool()); contentManager.copyToolContent(toolActivity.getToolContentId(), newToolcontentID); @@ -233,6 +238,46 @@ } /** + * Calls the tool to copy the content for an activity. Used when copying an activity in authoring. Can't + * use the notifyToolToCopyContent(ToolActivity, boolean) version in authoring as the tool activity won't + * exist if the user hasn't saved the sequence yet. But the tool content (as that is saved by the + * tool) may already exist. + * + * @param toolContentId the content to be copied. + * @throws DataMissingException, ToolException + * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#notifyToolToCopyContent(org.lamsfoundation.lams.learningdesign.ToolActivity) + */ + public Long notifyToolToCopyContent(Long toolContentId) + throws DataMissingException, ToolException + { + ToolContent toolContent = (ToolContent) toolContentDAO.find(ToolContent.class, toolContentId); + if ( toolContent == null ) { + String error = "The toolContentID "+ toolContentId + " is not valid. No such record exists on the database."; + log.error(error); + throw new DataMissingException(error); + } + + Tool tool = toolContent.getTool(); + if ( tool == null ) { + String error = "The tool for toolContentId "+ toolContentId + " is missing."; + log.error(error); + throw new DataMissingException(error); + } + + Long newToolcontentID = contentIDGenerator.getNextToolContentIDFor(tool); + try { + ToolContentManager contentManager = (ToolContentManager) findToolService(tool); + contentManager.copyToolContent(toolContentId,newToolcontentID); + } catch ( NoSuchBeanDefinitionException e ) { + String message = "A tool which is defined in the database appears to missing from the classpath. Unable to copy the tool content. ToolContentId "+toolContentId; + log.error(message,e); + throw new ToolException(message,e); + } + + return newToolcontentID; + } + + /** * Ask a tool to delete a tool content. If any related tool session data exists then it should * be deleted. * @@ -242,7 +287,7 @@ public void notifyToolToDeleteContent(ToolActivity toolActivity) throws ToolException { try { - ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity); + ToolContentManager contentManager = (ToolContentManager) findToolService(toolActivity.getTool()); contentManager.removeToolContent(toolActivity.getToolContentId(),true); } catch ( NoSuchBeanDefinitionException e ) { String message = "A tool which is defined in the database appears to missing from the classpath. Unable to delete the tool content. ToolActivity "+toolActivity; @@ -278,7 +323,7 @@ } // call the tool to remove the session details - ToolSessionManager sessionManager = (ToolSessionManager) findToolService(toolSession.getToolActivity()); + ToolSessionManager sessionManager = (ToolSessionManager) findToolService(toolSession.getToolActivity().getTool()); try { sessionManager.removeToolSession(toolSession.getToolSessionId()); @@ -487,10 +532,14 @@ * @return the service object from tool. * @throws NoSuchBeanDefinitionException if the tool is not the classpath or the supplied service name is wrong. */ - private Object findToolService(ToolActivity toolActivity) throws NoSuchBeanDefinitionException + private Object findToolService(Tool tool) throws NoSuchBeanDefinitionException { - return context.getBean(toolActivity.getTool().getServiceName()); + return context.getBean(tool.getServiceName()); } + public void setToolContentDAO(IToolContentDAO toolContentDAO) { + this.toolContentDAO = toolContentDAO; + } + } Index: lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml =================================================================== diff -u -r3f60ecf7d3a92231a1089191ae75c68bc66e9595 -r27fbc8140e958c21edc3aabcdf5579bea45a08c6 --- lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 3f60ecf7d3a92231a1089191ae75c68bc66e9595) +++ lams_common/src/java/org/lamsfoundation/lams/toolApplicationContext.xml (.../toolApplicationContext.xml) (revision 27fbc8140e958c21edc3aabcdf5579bea45a08c6) @@ -39,6 +39,7 @@ + @@ -51,7 +52,7 @@ PROPAGATION_REQUIRED PROPAGATION_REQUIRED - PROPAGATION_REQUIRED + PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED