Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardAttachment.java =================================================================== diff -u -r89ae2d0b15d307b9dd4c20da0577481807524ce2 -r14ddf81e81af986fb804ec0fbf3d114f8b685898 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardAttachment.java (.../NoticeboardAttachment.java) (revision 89ae2d0b15d307b9dd4c20da0577481807524ce2) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardAttachment.java (.../NoticeboardAttachment.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898) @@ -29,6 +29,7 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; /** @@ -95,7 +96,8 @@ this.onlineFile = isOnline; } - /** Clone this attachment, including the unique id */ + /** Clone this attachment, including the unique id. This leaves two records pointing to the same item + * in the content repository. */ public Object clone(){ Object obj = null; try { @@ -105,6 +107,7 @@ } return obj; } + /** * @return Returns the attachmentId. */ Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardContent.java =================================================================== diff -u -r89ae2d0b15d307b9dd4c20da0577481807524ce2 -r14ddf81e81af986fb804ec0fbf3d114f8b685898 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardContent.java (.../NoticeboardContent.java) (revision 89ae2d0b15d307b9dd4c20da0577481807524ce2) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/NoticeboardContent.java (.../NoticeboardContent.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898) @@ -22,11 +22,16 @@ import java.io.Serializable; import java.util.Date; +import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.HashSet; +import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; +import org.lamsfoundation.lams.contentrepository.NodeKey; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; +import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; + /** *
Persistent noticeboard object/bean that defines the content for the noticeboard tool. * Provides accessors and mutators to get/set noticeboard attributes
@@ -361,8 +366,10 @@ * @param nb NoticeboardContent object containing the content to copy from * @param toContentId The new Id of the new noticeboard object * @return newContent The new noticeboard content object + * @throws RepositoryCheckedException + * @throws ItemNotFoundException */ - public static NoticeboardContent newInstance(NoticeboardContent nb, Long toContentId) + public static NoticeboardContent newInstance(NoticeboardContent nb, Long toContentId, IToolContentHandler toolContentHandler) throws ItemNotFoundException, RepositoryCheckedException { NoticeboardContent newContent = new NoticeboardContent(toContentId, nb.getTitle(), @@ -381,9 +388,10 @@ Iterator iter = nb.getNbAttachments().iterator(); while (iter.hasNext()) { NoticeboardAttachment element = (NoticeboardAttachment) iter.next(); - NoticeboardAttachment newAttachment = (NoticeboardAttachment) element.clone(); - newAttachment.setAttachmentId(null); - newAttachment.setNbContent(newContent); + NoticeboardAttachment newAttachment = new NoticeboardAttachment(newContent, element.getFilename(), element.isOnlineFile()); + NodeKey keys = toolContentHandler.copyFile(element.getUuid()); + newAttachment.setUuid(keys.getUuid()); + newAttachment.setVersionId(keys.getVersion()); newAttachmentSet.add(newAttachment); } newContent.setNbAttachments(newAttachmentSet); Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/applicationContext.xml =================================================================== diff -u -r96cf45593171547d09ab2eefa67f191503418e6a -r14ddf81e81af986fb804ec0fbf3d114f8b685898 --- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/applicationContext.xml (.../applicationContext.xml) (revision 96cf45593171547d09ab2eefa67f191503418e6a) +++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/applicationContext.xml (.../applicationContext.xml) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898) @@ -34,6 +34,7 @@uuid
- * @param uuid The uuid of the file
- public void removeAttachmentByUuid(Long uuid);
- */
-
+ /**
+ * Add a file to the content repository. Does not add a record to the noticeboard tables.
+ * @throws RepositoryCheckedException
+ */
+ public NodeKey uploadFile(InputStream istream, String filename, String contentType, String fileType) throws RepositoryCheckedException;
+
/**
* This method retrieves the default content id.
* @param toolSignature The tool signature which is defined in lams_tool table.
Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java
===================================================================
diff -u -r74804514d697b22ea2afdb8d1daf1c3b7797e793 -r14ddf81e81af986fb804ec0fbf3d114f8b685898
--- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision 74804514d697b22ea2afdb8d1daf1c3b7797e793)
+++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServicePOJO.java (.../NoticeboardServicePOJO.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898)
@@ -21,11 +21,15 @@
package org.lamsfoundation.lams.tool.noticeboard.service;
+import java.io.InputStream;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
+import org.lamsfoundation.lams.contentrepository.NodeKey;
+import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException;
+import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler;
import org.lamsfoundation.lams.learning.service.ILearnerService;
import org.lamsfoundation.lams.tool.ToolContentManager;
import org.lamsfoundation.lams.tool.ToolSessionExportOutputData;
@@ -44,7 +48,6 @@
import org.lamsfoundation.lams.tool.noticeboard.dao.INoticeboardSessionDAO;
import org.lamsfoundation.lams.tool.noticeboard.dao.INoticeboardUserDAO;
import org.lamsfoundation.lams.tool.service.ILamsToolService;
-import org.lamsfoundation.lams.usermanagement.User;
import org.springframework.dao.DataAccessException;
@@ -71,8 +74,8 @@
private INoticeboardUserDAO nbUserDAO=null;
private INoticeboardAttachmentDAO nbAttachmentDAO = null;
+ private IToolContentHandler nbToolContentHandler = null;
-
private static Logger log = Logger.getLogger(NoticeboardServicePOJO.class);
@@ -721,13 +724,16 @@
}
}
- /** @see org.lamsfoundation.lams.tool.noticeboard.service.INoticeboardService#removeAttachment(org.lamsfoundation.lams.tool.noticeboard.NoticeboardAttachment) */
- public void removeAttachment(NoticeboardContent content, NoticeboardAttachment attachment)
+ /** @throws RepositoryCheckedException
+ * @throws
+ * @see org.lamsfoundation.lams.tool.noticeboard.service.INoticeboardService#removeAttachment(org.lamsfoundation.lams.tool.noticeboard.NoticeboardAttachment) */
+ public void removeAttachment(NoticeboardContent content, NoticeboardAttachment attachment) throws RepositoryCheckedException
{
try
{
attachment.setNbContent(null);
content.getNbAttachments().remove(attachment);
+ nbToolContentHandler.deleteFile(attachment.getUuid());
saveNoticeboard(content);
}
catch (DataAccessException e)
@@ -737,30 +743,13 @@
}
}
- /* Not used?
- @see org.lamsfoundation.lams.tool.noticeboard.service.INoticeboardService#removeAttachmentByUuid(java.lang.Long)
- public void removeAttachmentByUuid(Long uuid)
+ /** @throws RepositoryCheckedException
+ * @see org.lamsfoundation.lams.tool.noticeboard.service.INoticeboardService#uploadFile(java.io.InputStream, java.lang.String, java.lang.String, java.lang.String) */
+ public NodeKey uploadFile(InputStream istream, String filename, String contentType, String fileType) throws RepositoryCheckedException
{
- if (uuid == null)
- {
- String error = "Unable to continue. The uuid is missing";
- log.error(error);
- throw new NbApplicationException(error);
- }
- try
- {
- nbAttachmentDAO.removeAttachment(uuid);
- }
- catch (DataAccessException e)
- {
- throw new NbApplicationException("EXCEPTION: An exception has occurred while trying to remove the attachment with UUid" + uuid + " "
- + e.getMessage(), e);
- }
+ return nbToolContentHandler.uploadFile(istream, filename, contentType, fileType);
}
- */
-
-
/* ===============Methods implemented from ToolContentManager =============== */
/** @see org.lamsfoundation.lams.tool.ToolContentManager#copyToolContent(java.lang.Long, java.lang.Long)*/
@@ -779,26 +768,31 @@
//default content id might not have any contnet, throw exception
NoticeboardContent originalNb = null;
- if ((originalNb = retrieveNoticeboard(fromContentId))== null) //the id given does not have content, use default content
- {
- //use default content id to grab contents
- NoticeboardContent defaultContent = retrieveNoticeboard(getToolDefaultContentIdBySignature(NoticeboardConstants.TOOL_SIGNATURE));
-
- if (defaultContent != null)
- {
- NoticeboardContent newContent = NoticeboardContent.newInstance(defaultContent, toContentId);
- saveNoticeboard(newContent);
- }
- else
- {
- throw new ToolException("Default content is missing. Unable to copy tool content");
- }
+ try {
+ if ((originalNb = retrieveNoticeboard(fromContentId))== null) //the id given does not have content, use default content
+ {
+ //use default content id to grab contents
+ NoticeboardContent defaultContent = retrieveNoticeboard(getToolDefaultContentIdBySignature(NoticeboardConstants.TOOL_SIGNATURE));
+
+ if (defaultContent != null)
+ {
+ NoticeboardContent newContent = NoticeboardContent.newInstance(defaultContent, toContentId, nbToolContentHandler);
+ saveNoticeboard(newContent);
+ }
+ else
+ {
+ throw new ToolException("Default content is missing. Unable to copy tool content");
+ }
+ }
+ else
+ {
+ NoticeboardContent newNbContent = NoticeboardContent.newInstance(originalNb, toContentId, nbToolContentHandler);
+ saveNoticeboard(newNbContent);
+ }
+ } catch (RepositoryCheckedException e) {
+ log.error("Unable to copy the tool content due to a content repository error. fromContentId "+fromContentId+" toContentId "+toContentId);
+ throw new ToolException(e);
}
- else
- {
- NoticeboardContent newNbContent = NoticeboardContent.newInstance(originalNb, toContentId);
- saveNoticeboard(newNbContent);
- }
}
@@ -1021,4 +1015,12 @@
public void setToolService(ILamsToolService toolService) {
this.toolService = toolService;
}
+
+ public IToolContentHandler getNbToolContentHandler() {
+ return nbToolContentHandler;
+ }
+
+ public void setNbToolContentHandler(IToolContentHandler nbToolContentHandler) {
+ this.nbToolContentHandler = nbToolContentHandler;
+ }
}
Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServiceProxy.java
===================================================================
diff -u -r96cf45593171547d09ab2eefa67f191503418e6a -r14ddf81e81af986fb804ec0fbf3d114f8b685898
--- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServiceProxy.java (.../NoticeboardServiceProxy.java) (revision 96cf45593171547d09ab2eefa67f191503418e6a)
+++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/service/NoticeboardServiceProxy.java (.../NoticeboardServiceProxy.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898)
@@ -75,14 +75,4 @@
return (ToolContentManager)getNbDomainService(servletContext);
}
- /*
- * Get the Noticeboard's tool content handler
- * @param servletContext the servletContext for current application
- * @return noticeboard service object. */
- public static final NbToolContentHandler getToolContentHandler(ServletContext servletContext)
- {
- WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
- return (NbToolContentHandler) wac.getBean("nbToolContentHandler");
- }
-
}
Index: lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/web/NbAuthoringAction.java
===================================================================
diff -u -r96cf45593171547d09ab2eefa67f191503418e6a -r14ddf81e81af986fb804ec0fbf3d114f8b685898
--- lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/web/NbAuthoringAction.java (.../NbAuthoringAction.java) (revision 96cf45593171547d09ab2eefa67f191503418e6a)
+++ lams_tool_nb/src/java/org/lamsfoundation/lams/tool/noticeboard/web/NbAuthoringAction.java (.../NbAuthoringAction.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898)
@@ -314,26 +314,21 @@
while (iter.hasNext()) {
NoticeboardAttachment attachment = (NoticeboardAttachment) iter.next();
- // remove entry from content repository. deleting a non-existent entry
- // shouldn't cause any errors.
try
{
- IToolContentHandler toolContentHandler = NoticeboardServiceProxy.getToolContentHandler(getServlet().getServletContext());
- toolContentHandler.deleteFile(attachment.getUuid());
- }
- catch (RepositoryCheckedException e) {
+ // remove tool entry from db, includies removing entry from the content repository
+ // deleting a non-existent entry shouldn't cause any errors.
+ if ( attachment.getAttachmentId() != null ) {
+ nbService.removeAttachment(nbContent, attachment);
+ }
+ } catch (RepositoryCheckedException e) {
logger.error("Unable to delete file",e);
ActionMessages am = new ActionMessages();
am.add( ActionMessages.GLOBAL_MESSAGE,
new ActionMessage( NoticeboardConstants.ERROR_FILE_UPLOAD_CONTENT_REPOSITORY ,
attachment.getFilename()));
- saveErrors( request, am );
+ saveErrors( request, am );
}
-
- // remove tool entry from db
- if ( attachment.getAttachmentId() != null ) {
- nbService.removeAttachment(nbContent, attachment);
- }
}
deletedAttachmentList.clear();
}
@@ -403,8 +398,7 @@
{
// This is a new file and so is saved to the content repository. Add it to the
// attachments collection, but don't add it to the tool's tables yet.
- IToolContentHandler toolContentHandler = NoticeboardServiceProxy.getToolContentHandler(getServlet().getServletContext());
- NodeKey node = toolContentHandler.uploadFile(theFile.getInputStream(), theFile.getFileName(), theFile.getContentType(), fileType);
+ NodeKey node = nbService.uploadFile(theFile.getInputStream(), theFile.getFileName(), theFile.getContentType(), fileType);
NoticeboardAttachment file = new NoticeboardAttachment();
file.setFilename(theFile.getFileName());
file.setOnlineFile(isOnlineFile);
Index: lams_tool_nb/test/java/org/lamsfoundation/lams/tool/noticeboard/service/TestNoticeboardServicePOJO.java
===================================================================
diff -u -r74804514d697b22ea2afdb8d1daf1c3b7797e793 -r14ddf81e81af986fb804ec0fbf3d114f8b685898
--- lams_tool_nb/test/java/org/lamsfoundation/lams/tool/noticeboard/service/TestNoticeboardServicePOJO.java (.../TestNoticeboardServicePOJO.java) (revision 74804514d697b22ea2afdb8d1daf1c3b7797e793)
+++ lams_tool_nb/test/java/org/lamsfoundation/lams/tool/noticeboard/service/TestNoticeboardServicePOJO.java (.../TestNoticeboardServicePOJO.java) (revision 14ddf81e81af986fb804ec0fbf3d114f8b685898)
@@ -30,6 +30,7 @@
import java.util.Iterator;
+import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException;
import org.lamsfoundation.lams.tool.noticeboard.NbApplicationException;
import org.lamsfoundation.lams.tool.noticeboard.NbDataAccessTestCase;
import org.lamsfoundation.lams.tool.noticeboard.NoticeboardContent;
@@ -510,12 +511,16 @@
}
- public void testRemoveAttachment()
+ public void testRemoveAttachment()
{
initNbAttachmentData();
attachment = nbService.retrieveAttachmentByUuid(TEST_UUID);
- nbService.removeAttachment(nbService.retrieveNoticeboard(TEST_NB_ID), attachment);
+ try {
+ nbService.removeAttachment(nbService.retrieveNoticeboard(TEST_NB_ID), attachment);
+ } catch (RepositoryCheckedException e) {
+ fail("Repository exception thrown"+e.getMessage());
+ }
attachment = nbService.retrieveAttachmentByUuid(TEST_UUID);