From ad602245885ef5a89fa056d33848dc6538b56f34 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 7 May 2009 13:55:24 +0000 Subject: [PATCH 1/1] Attachments management git-svn-id: https://svn.argeo.org/slc/trunk@2417 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org.argeo.slc.demo.basic/conf/basic.xml | 22 +++----- .../argeo/slc/jms/JmsAttachmentUploader.java | 15 +++--- .../slc/jms/JmsTransferNewExecution.java | 51 ------------------- .../org/argeo/slc/activemq/destinations.xml | 15 ------ .../attachment/FileAttachmentsStorage.java | 5 +- .../execution/tasks/UploadAttachments.java | 34 ++++++++++--- .../argeo/slc/core/execution/tasks/core.xml | 3 ++ .../META-INF/spring/jms.xml | 15 ------ 8 files changed, 49 insertions(+), 111 deletions(-) delete mode 100644 runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java diff --git a/demo/site/org.argeo.slc.demo.basic/conf/basic.xml b/demo/site/org.argeo.slc.demo.basic/conf/basic.xml index acaee0cb9..686fc5f63 100644 --- a/demo/site/org.argeo.slc.demo.basic/conf/basic.xml +++ b/demo/site/org.argeo.slc.demo.basic/conf/basic.xml @@ -56,22 +56,14 @@ - - - - - - - - - - - - - - - + + + + + + + diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java index f5ea454ea..44dcd3e1b 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java +++ b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java @@ -1,8 +1,7 @@ package org.argeo.slc.jms; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.io.IOException; +import java.io.InputStream; import javax.jms.BytesMessage; import javax.jms.Destination; @@ -10,6 +9,7 @@ import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; +import org.apache.commons.io.IOUtils; import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.Attachment; import org.argeo.slc.core.attachment.AttachmentUploader; @@ -37,18 +37,21 @@ public class JmsAttachmentUploader implements AttachmentUploader { message.setStringProperty(ATTACHMENT_CONTENT_TYPE, attachment .getContentType()); + InputStream in = null; try { - BufferedInputStream in = new BufferedInputStream(resource - .getInputStream()); + in = resource.getInputStream(); byte[] buffer = new byte[1024 * 1024]; - while (in.read(buffer) > 0) { - message.writeBytes(buffer); + int read = -1; + while ((read = in.read(buffer)) > 0) { + message.writeBytes(buffer, 0, read); } } catch (IOException e) { throw new SlcException( "Cannot write into byte message for attachment " + attachment + " and resource " + resource, e); + } finally { + IOUtils.closeQuietly(in); } return message; } diff --git a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java b/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java deleted file mode 100644 index aa66dc8da..000000000 --- a/runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsTransferNewExecution.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.argeo.slc.jms; - -import javax.jms.Message; -import javax.jms.MessageListener; - -import org.argeo.slc.SlcException; -import org.argeo.slc.msg.MsgConstants; -import org.argeo.slc.msg.MsgHandler; -import org.argeo.slc.process.SlcExecution; -import org.argeo.slc.runtime.SlcAgent; -import org.argeo.slc.runtime.SlcAgentFactory; -import org.springframework.jms.support.converter.MessageConverter; - -/** Temporary hack */ -public class JmsTransferNewExecution implements MessageListener { - private MessageConverter messageConverter; - private SlcAgentFactory agentFactory; - private MsgHandler serviceMsgHandler; - - public void onMessage(final Message message) { - try { - String agentId = message - .getStringProperty(MsgConstants.PROPERTY_SLC_AGENT_ID); - final SlcAgent agent = agentFactory.getAgent(agentId); - final SlcExecution slcExecution = (SlcExecution) messageConverter - .fromMessage(message); - new Thread() { - public void run() { - agent.runSlcExecution(slcExecution); - } - }.start(); - serviceMsgHandler.handleMsg(slcExecution); - } catch (Exception e) { - throw new SlcException("Could not transfer new execution " - + message, e); - } - } - - public void setMessageConverter(MessageConverter messageConverter) { - this.messageConverter = messageConverter; - } - - public void setAgentFactory(SlcAgentFactory agentFactory) { - this.agentFactory = agentFactory; - } - - public void setServiceMsgHandler(MsgHandler serviceMsgHandler) { - this.serviceMsgHandler = serviceMsgHandler; - } - -} diff --git a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml index 739f02504..083f44883 100644 --- a/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml +++ b/runtime/org.argeo.slc.support.activemq/src/main/resources/org/argeo/slc/activemq/destinations.xml @@ -17,8 +17,6 @@ parent="slcJms.amTopic" /> - - - diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java index fad4db19e..1f1089bb2 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/attachment/FileAttachmentsStorage.java @@ -39,8 +39,9 @@ public class FileAttachmentsStorage implements AttachmentsStorage { try { byte[] buffer = new byte[1024 * 1024]; out = new FileOutputStream(file); - while (inputStream.read(buffer) >= 0) { - out.write(buffer); + int read = -1; + while ((read = inputStream.read(buffer)) >= 0) { + out.write(buffer, 0, read); } } catch (IOException e) { throw new SlcException("Cannot write attachment " + attachment diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java index 499e11948..e4cefa85a 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/core/execution/tasks/UploadAttachments.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.argeo.slc.SlcException; import org.argeo.slc.core.attachment.Attachment; import org.argeo.slc.core.attachment.AttachmentUploader; import org.argeo.slc.core.attachment.AttachmentsEnabled; @@ -12,18 +13,30 @@ import org.springframework.core.io.Resource; public class UploadAttachments implements Runnable { private AttachmentUploader attachmentUploader; + private Attachment attachment = null; + private Resource resource = null; private Map attachments = new HashMap(); private List attachTo = new ArrayList(); public void run() { - for (Attachment attachment : attachments.keySet()) { - Resource resource = attachments.get(attachment); - attachmentUploader.upload(attachment, resource); - for (AttachmentsEnabled attachmentsEnabled : attachTo) { - attachmentsEnabled.addAttachment(attachment); - } + if (attachment != null) { + if (resource == null) + throw new SlcException("A resource must be specified."); + uploadAndAdd(attachment, resource); } + for (Attachment attachmentT : attachments.keySet()) { + Resource resourceT = attachments.get(attachmentT); + uploadAndAdd(attachmentT, resourceT); + } + + } + + protected void uploadAndAdd(Attachment attachment, Resource resource) { + attachmentUploader.upload(attachment, resource); + for (AttachmentsEnabled attachmentsEnabled : attachTo) { + attachmentsEnabled.addAttachment(attachment); + } } public void setAttachmentUploader(AttachmentUploader attachmentUploader) { @@ -38,5 +51,12 @@ public class UploadAttachments implements Runnable { this.attachTo = attachTo; } - + public void setAttachment(Attachment attachment) { + this.attachment = attachment; + } + + public void setResource(Resource resource) { + this.resource = resource; + } + } diff --git a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/tasks/core.xml b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/tasks/core.xml index bf9bb8511..26fe27b14 100644 --- a/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/tasks/core.xml +++ b/runtime/org.argeo.slc.support.simple/src/main/resources/org/argeo/slc/core/execution/tasks/core.xml @@ -16,4 +16,7 @@ abstract="true" /> + + \ No newline at end of file diff --git a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml index 075610212..8c3054dff 100644 --- a/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml +++ b/server/org.argeo.slc.siteserver/bundles/org.argeo.slc.server.jms/META-INF/spring/jms.xml @@ -61,21 +61,6 @@ - - - - - - - - - - - - - - - -- 2.39.2