Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McContent.java =================================================================== diff -u -r3e8a2742fa273f3a67859ee1200c03e248bd1aae -r070e73301afd033583fa0062749425fbbdece17d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McContent.java (.../McContent.java) (revision 3e8a2742fa273f3a67859ee1200c03e248bd1aae) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McContent.java (.../McContent.java) (revision 070e73301afd033583fa0062749425fbbdece17d) @@ -29,6 +29,8 @@ import java.util.Set; import java.util.TreeSet; +import javax.servlet.http.HttpServletRequest; + import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.log4j.Logger; @@ -174,7 +176,7 @@ * @return the new mc content object. */ public static McContent newInstance(McContent mc, - Long newContentId) + Long newContentId, HttpServletRequest request) { McContent newContent = new McContent( newContentId, @@ -203,8 +205,10 @@ new TreeSet() ); newContent.setMcQueContents(mc.deepCopyMcQueContent(newContent)); - newContent.setMcAttachments(mc.deepCopyMcAttachments(newContent)); + newContent.setMcAttachments(mc.deepCopyMcAttachments(newContent, request)); + + return newContent; } @@ -236,7 +240,7 @@ * @param newMcContent * @return Set */ - public Set deepCopyMcAttachments(McContent newMcContent) + public Set deepCopyMcAttachments(McContent newMcContent, HttpServletRequest request) { Set newMcQueContent = new TreeSet(); for (Iterator i = this.getMcAttachments().iterator(); i.hasNext();) @@ -245,7 +249,7 @@ if (mcUploadedFile.getMcContent() != null) { McUploadedFile newMcUploadedFile=McUploadedFile.newInstance(mcUploadedFile, - newMcContent); + newMcContent, request); newMcQueContent.add(newMcUploadedFile); } } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUploadedFile.java =================================================================== diff -u -r235c4ce5577dbe569ef93fbcc5205c761e3158b0 -r070e73301afd033583fa0062749425fbbdece17d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUploadedFile.java (.../McUploadedFile.java) (revision 235c4ce5577dbe569ef93fbcc5205c761e3158b0) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/McUploadedFile.java (.../McUploadedFile.java) (revision 070e73301afd033583fa0062749425fbbdece17d) @@ -22,7 +22,13 @@ import java.io.Serializable; +import javax.servlet.http.HttpServletRequest; + import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.contentrepository.NodeKey; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; +import org.lamsfoundation.lams.tool.mc.service.IMcService; /** *

Persistent object/bean that defines the uploaded file for the MCQ tool. @@ -34,6 +40,8 @@ */ public class McUploadedFile implements Serializable, Comparable { + static Logger logger = Logger.getLogger(McUploadedFile.class.getName()); + /** identifier field */ private Long uid; @@ -92,14 +100,28 @@ public static McUploadedFile newInstance(McUploadedFile mcUploadedFile, - McContent newMcContent) + McContent newMcContent, HttpServletRequest request) { - McUploadedFile newMcUploadedFile = new McUploadedFile(mcUploadedFile.getUuid(), - mcUploadedFile.isFileOnline(), - mcUploadedFile.getFilename(), - newMcContent); - return newMcUploadedFile; + IMcService mcService =McUtils.getToolService(request); + McUploadedFile newMcUploadedFile=null; + + try + { + NodeKey copiedNodeKey = mcService.copyFile(new Long(mcUploadedFile.getUuid())); + logger.debug("copiedNodeKey: " + copiedNodeKey); + newMcUploadedFile = new McUploadedFile(copiedNodeKey.getUuid().toString(), + mcUploadedFile.isFileOnline(), + mcUploadedFile.getFilename(), + newMcContent); + + } + catch(RepositoryCheckedException e) + { + logger.debug("error occurred: " + e); + } + + return newMcUploadedFile; } Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java =================================================================== diff -u -r88d5dbe3e6552bb320ad648f984662ccbd670157 -r070e73301afd033583fa0062749425fbbdece17d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision 88d5dbe3e6552bb320ad648f984662ccbd670157) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/IMcService.java (.../IMcService.java) (revision 070e73301afd033583fa0062749425fbbdece17d) @@ -25,6 +25,8 @@ import java.io.InputStream; import java.util.List; +import javax.servlet.http.HttpServletRequest; + import org.lamsfoundation.lams.contentrepository.ITicket; import org.lamsfoundation.lams.contentrepository.NodeKey; import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; @@ -148,6 +150,8 @@ public boolean studentActivityOccurred(McContent mc) throws McApplicationException; public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException; + + public void copyToolContent(Long fromContentId, Long toContentId, HttpServletRequest request) throws ToolException; public void setAsForceCompleteSession(Long toolSessionId) throws McApplicationException; @@ -227,6 +231,8 @@ public NodeKey uploadFile(InputStream istream, String filename, String contentType, String fileType) throws RepositoryCheckedException; + public NodeKey copyFile(Long uuid) throws RepositoryCheckedException; + public void removeOffLineFile(String filename, Long mcContentId) throws McApplicationException; public void removeOnLineFile(String filename, Long mcContentId) throws McApplicationException; Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java =================================================================== diff -u -r057f73622ec6b272df95a156ad0ade82971b529f -r070e73301afd033583fa0062749425fbbdece17d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 057f73622ec6b272df95a156ad0ade82971b529f) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McServicePOJO.java (.../McServicePOJO.java) (revision 070e73301afd033583fa0062749425fbbdece17d) @@ -27,6 +27,8 @@ import java.util.List; import java.util.TreeSet; +import javax.servlet.http.HttpServletRequest; + import org.apache.log4j.Logger; import org.lamsfoundation.lams.contentrepository.AccessDeniedException; import org.lamsfoundation.lams.contentrepository.FileException; @@ -990,9 +992,100 @@ * gets called by Container+Flash * */ + + public void copyToolContent(Long fromContentId, Long toContentId, HttpServletRequest request) throws ToolException + { + logger.debug("start of copyToolContent with ids: " + fromContentId + " and " + toContentId); + + if (fromContentId == null) + { + logger.debug("fromContentId is null."); + logger.debug("attempt retrieving tool's default content id with signatute : " + MY_SIGNATURE); + long defaultContentId=0; + try + { + defaultContentId=getToolDefaultContentIdBySignature(MY_SIGNATURE); + fromContentId= new Long(defaultContentId); + } + catch(Exception e) + { + logger.debug("default content id has not been setup for signature: " + MY_SIGNATURE); + throw new ToolException("WARNING! default content has not been setup for signature" + MY_SIGNATURE + " Can't continue!"); + } + } + + if (toContentId == null) + { + logger.debug("throwing ToolException: toContentId is null"); + throw new ToolException("toContentId is missing"); + } + logger.debug("final - copyToolContent using ids: " + fromContentId + " and " + toContentId); + + try + { + McContent fromContent = mcContentDAO.findMcContentById(fromContentId); + + if (fromContent == null) + { + logger.debug("fromContent is null."); + logger.debug("attempt retrieving tool's default content id with signatute : " + MY_SIGNATURE); + long defaultContentId=0; + try + { + defaultContentId=getToolDefaultContentIdBySignature(MY_SIGNATURE); + fromContentId= new Long(defaultContentId); + } + catch(Exception e) + { + logger.debug("default content id has not been setup for signature: " + MY_SIGNATURE); + throw new ToolException("WARNING! default content has not been setup for signature" + MY_SIGNATURE + " Can't continue!"); + } + + fromContent = mcContentDAO.findMcContentById(fromContentId); + logger.debug("using fromContent: " + fromContent); + } + + logger.debug("final - retrieved fromContent: " + fromContent); + logger.debug("final - before new instance using " + fromContent + " and " + toContentId); + McContent toContent = McContent.newInstance(fromContent,toContentId, request); + if (toContent == null) + { + logger.debug("throwing ToolException: WARNING!, retrieved toContent is null."); + throw new ToolException("WARNING! Fail to create toContent. Can't continue!"); + } + else + { + logger.debug("retrieved toContent: " + toContent); + mcContentDAO.saveMcContent(toContent); + logger.debug("toContent has been saved successfully: " + toContent); + } + logger.debug("end of copyToolContent with ids: " + fromContentId + " and " + toContentId); + } + catch (DataAccessException e) + { + logger.debug("throwing ToolException: Exception occured when lams is copying content between content ids."); + throw new ToolException("Exception occured when lams is copying content between content ids."); + } + } + - public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException + /** + * + * gets called ONLY when a lesson is being created in monitoring mode. + * Should create the new content(toContent) based on what the author has created her content with. In q/a tool's case + * that is content + question's content but not user responses. The deep copy should go only as far as + * default content (or author created content) already goes. + * ToolContentManager CONTRACT + * + * + * similar to public void removeToolContent(Long toolContentId) + * gets called by Container+Flash + * + */ + + public void copyToolContent(Long fromContentId, Long toContentId) throws ToolException { + /* logger.debug("start of copyToolContent with ids: " + fromContentId + " and " + toContentId); if (fromContentId == null) @@ -1064,9 +1157,10 @@ logger.debug("throwing ToolException: Exception occured when lams is copying content between content ids."); throw new ToolException("Exception occured when lams is copying content between content ids."); } + */ } + - /** * TO BE DEFINED-FUTURE API @@ -1651,6 +1745,11 @@ } + public NodeKey copyFile(Long uuid) throws RepositoryCheckedException + { + return mcToolContentHandler.copyFile(uuid); + } + /** * This method verifies the credentials of the SubmitFiles Tool and gives it * the Ticket to login and access the Content Repository. Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java =================================================================== diff -u -r336dd0a5a85e5ddc5c2b46f7a3388b31903a51c9 -r070e73301afd033583fa0062749425fbbdece17d --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java (.../McStarterAction.java) (revision 336dd0a5a85e5ddc5c2b46f7a3388b31903a51c9) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/web/McStarterAction.java (.../McStarterAction.java) (revision 070e73301afd033583fa0062749425fbbdece17d) @@ -162,7 +162,7 @@ try { - mcService.copyToolContent(fromContentId, toContentId); + mcService.copyToolContent(fromContentId, toContentId, request); } catch(ToolException e) {