]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.activemq/src/main/java/org/argeo/slc/jms/JmsAttachmentUploader.java
bc13913357243ddf2875671f45ada7a43f96c78a
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.activemq / src / main / java / org / argeo / slc / jms / JmsAttachmentUploader.java
1 package org.argeo.slc.jms;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
6 import javax.jms.BytesMessage;
7 import javax.jms.Destination;
8 import javax.jms.JMSException;
9 import javax.jms.Message;
10 import javax.jms.Session;
11
12 import org.apache.commons.io.IOUtils;
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15 import org.argeo.slc.SlcException;
16 import org.argeo.slc.core.attachment.Attachment;
17 import org.argeo.slc.core.attachment.AttachmentUploader;
18 import org.springframework.core.io.Resource;
19 import org.springframework.jms.JmsException;
20 import org.springframework.jms.core.JmsTemplate;
21 import org.springframework.jms.core.MessageCreator;
22
23 public class JmsAttachmentUploader implements AttachmentUploader {
24 private final static Log log = LogFactory
25 .getLog(JmsAttachmentUploader.class);
26
27 public final static String ATTACHMENT_ID = "slc_attachmentId";
28 public final static String ATTACHMENT_NAME = "slc_attachmentName";
29 public final static String ATTACHMENT_CONTENT_TYPE = "slc_attachmentContentType";
30
31 private JmsTemplate jmsTemplate;
32 private Destination destination;
33
34 public void upload(final Attachment attachment, final Resource resource) {
35 try {
36 jmsTemplate.send(destination, new MessageCreator() {
37
38 public Message createMessage(Session session)
39 throws JMSException {
40 BytesMessage message = session.createBytesMessage();
41 message.setStringProperty(ATTACHMENT_ID, attachment
42 .getUuid());
43 message.setStringProperty(ATTACHMENT_NAME, attachment
44 .getName());
45 message.setStringProperty(ATTACHMENT_CONTENT_TYPE,
46 attachment.getContentType());
47
48 InputStream in = null;
49 try {
50 in = resource.getInputStream();
51 byte[] buffer = new byte[1024 * 1024];
52 int read = -1;
53 while ((read = in.read(buffer)) > 0) {
54 message.writeBytes(buffer, 0, read);
55 }
56 } catch (IOException e) {
57 throw new SlcException(
58 "Cannot write into byte message for attachment "
59 + attachment + " and resource "
60 + resource, e);
61 } finally {
62 IOUtils.closeQuietly(in);
63 }
64 return message;
65 }
66 });
67 } catch (JmsException e) {
68 if (log.isTraceEnabled())
69 log.debug("Cannot upload", e);
70 else if (log.isDebugEnabled())
71 log.debug("Cannot upload: " + e.getMessage());
72 }
73
74 }
75
76 public void setJmsTemplate(JmsTemplate jmsTemplate) {
77 this.jmsTemplate = jmsTemplate;
78 }
79
80 public void setDestination(Destination destination) {
81 this.destination = destination;
82 }
83
84 }