JAMES-1691 Add a decorator to MailQueueItem to be able to launch specific 
actions


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a5a9ee20
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a5a9ee20
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a5a9ee20

Branch: refs/heads/master
Commit: a5a9ee2083f5f28eb370e60211fcd487836f7d8d
Parents: 66579d7
Author: Raphael Ouazana <[email protected]>
Authored: Wed Feb 17 18:49:42 2016 +0100
Committer: Raphael Ouazana <[email protected]>
Committed: Wed Feb 24 15:01:09 2016 +0100

----------------------------------------------------------------------
 .../modules/server/ActiveMQQueueModule.java     | 10 +++-
 .../james/queue/activemq/ActiveMQMailQueue.java | 12 ++--
 .../activemq/ActiveMQMailQueueFactory.java      | 11 +++-
 .../META-INF/spring/activemq-queue-context.xml  | 10 +++-
 .../queue/activemq/ActiveMQMailQueueTest.java   |  5 +-
 server/queue/queue-api/pom.xml                  | 25 +++++++-
 .../api/MailQueueItemDecoratorFactory.java      | 61 ++++++++++++++++++++
 .../apache/james/queue/file/FileMailQueue.java  |  8 ++-
 .../james/queue/file/FileMailQueueFactory.java  |  7 ++-
 .../apache/james/queue/jms/JMSMailQueue.java    | 51 ++++++++--------
 .../james/queue/jms/JMSMailQueueFactory.java    | 11 +++-
 .../queue/jms/AbstractJMSMailQueueTest.java     | 43 +++++++-------
 12 files changed, 190 insertions(+), 64 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
 
b/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
index 6825eb6..92d972c 100644
--- 
a/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
+++ 
b/server/container/cassandra-guice/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
@@ -23,6 +23,7 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.Singleton;
 import org.apache.james.queue.activemq.ActiveMQMailQueueFactory;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,12 +47,17 @@ public class ActiveMQQueueModule extends AbstractModule {
 
     @Provides
     @Singleton
-    public MailQueueFactory createActiveMailQueueFactory(ConnectionFactory 
connectionFactory, ActiveMQMailQueueFactory activeMQMailQueueFactory) {
+    public MailQueueFactory 
createActiveMailQueueFactory(ActiveMQMailQueueFactory activeMQMailQueueFactory) 
{
         activeMQMailQueueFactory.setUseJMX(true);
-        activeMQMailQueueFactory.setConnectionFactory(connectionFactory);
         activeMQMailQueueFactory.setLog(LOGGER);
         activeMQMailQueueFactory.init();
         return activeMQMailQueueFactory;
     }
+    
+    @Provides
+    @Singleton
+    public MailQueueItemDecoratorFactory 
defaultMailQueueItemDecoratorFactory() {
+        return MailQueueItemDecoratorFactory.RAW_FACTORY;
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
index fc9d54b..dbb507a 100644
--- 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
+++ 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
@@ -44,6 +44,7 @@ import org.apache.james.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.core.MimeMessageInputStream;
 import org.apache.james.core.MimeMessageSource;
 import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.jms.JMSMailQueue;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
@@ -91,8 +92,8 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
      * Construct a {@link ActiveMQMailQueue} which only use {@link BlobMessage}
      * 
      */
-    public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final 
String queuename, final Logger logger) {
-        this(connectionFactory, queuename, true, logger);
+    public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String 
queuename, final Logger logger) {
+        this(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
true, logger);
     }
 
     /**
@@ -103,8 +104,8 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
      * @param useBlob
      * @param logger
      */
-    public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final 
String queuename, boolean useBlob, final Logger logger) {
-        super(connectionFactory, queuename, logger);
+    public ActiveMQMailQueue(final ConnectionFactory connectionFactory, final 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String 
queuename, boolean useBlob, final Logger logger) {
+        super(connectionFactory, mailQueueItemDecoratorFactory, queuename, 
logger);
         this.useBlob = useBlob;
     }
 
@@ -240,7 +241,8 @@ public class ActiveMQMailQueue extends JMSMailQueue 
implements ActiveMQSupport {
     @Override
     protected MailQueueItem createMailQueueItem(Connection connection, Session 
session, MessageConsumer consumer, Message message) throws JMSException, 
MessagingException {
         Mail mail = createMail(message);
-        return new ActiveMQMailQueueItem(mail, connection, session, consumer, 
message, logger);
+        ActiveMQMailQueueItem activeMQMailQueueItem = new 
ActiveMQMailQueueItem(mail, connection, session, consumer, message, logger);
+        return mailQueueItemDecoratorFactory.decorate(activeMQMailQueueItem);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
index 1b2d777..6547be3 100644
--- 
a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
+++ 
b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
@@ -18,7 +18,11 @@
  ****************************************************************/
 package org.apache.james.queue.activemq;
 
+import javax.inject.Inject;
+import javax.jms.ConnectionFactory;
+
 import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.jms.JMSMailQueueFactory;
 
@@ -30,12 +34,17 @@ public class ActiveMQMailQueueFactory extends 
JMSMailQueueFactory {
 
     private boolean useBlob = true;
 
+    @Inject
+    public ActiveMQMailQueueFactory(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) {
+        super(connectionFactory, mailQueueItemDecoratorFactory);
+    }
+
     public void setUseBlobMessages(boolean useBlob) {
         this.useBlob = useBlob;
     }
 
     @Override
     protected MailQueue createMailQueue(String name) {
-        return new ActiveMQMailQueue(connectionFactory, name, useBlob, log);
+        return new ActiveMQMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, useBlob, log);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
 
b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
index 5f307bd..1545212 100644
--- 
a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
+++ 
b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
@@ -18,14 +18,20 @@
 <beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xmlns:amq="http://activemq.apache.org/schema/core";
+       xmlns:util="http://www.springframework.org/schema/util";
        xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
          http://activemq.apache.org/schema/core
-         http://activemq.apache.org/schema/core/activemq-core.xsd";>
+         http://activemq.apache.org/schema/core/activemq-core.xsd
+         http://www.springframework.org/schema/util
+         http://www.springframework.org/schema/util/spring-util-3.0.xsd";>
 
     <!-- James Mail Queue Factory -->
     <bean id="mailqueuefactory" 
class="org.apache.james.queue.activemq.ActiveMQMailQueueFactory" 
depends-on="broker">
-        <property name="connectionFactory" ref="jmsConnectionFactory"/>
+        <constructor-arg index="0" ref="jmsConnectionFactory"/>
+        <constructor-arg index="1">
+            <util:constant 
static-field="org.apache.james.queue.api.MailQueueItemDecoratorFactory.RAW_FACTORY"/>
+        </constructor-arg>
     </bean>
 
     <!-- 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
 
b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
index 37b955e..b490d5d 100644
--- 
a/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
+++ 
b/server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
@@ -23,6 +23,7 @@ import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.region.policy.PolicyEntry;
 import org.apache.activemq.broker.region.policy.PolicyMap;
 import org.apache.activemq.plugin.StatisticsBrokerPlugin;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.jms.AbstractJMSMailQueueTest;
 import org.apache.james.queue.jms.JMSMailQueue;
 import org.junit.AfterClass;
@@ -71,9 +72,9 @@ public abstract class ActiveMQMailQueueTest extends 
AbstractJMSMailQueueTest {
     }
 
     @Override
-    protected JMSMailQueue createQueue(ConnectionFactory factory, String 
queueName) {
+    protected JMSMailQueue createQueue(ConnectionFactory factory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) {
         Logger log = LoggerFactory.getLogger(ActiveMQMailQueueTest.class);
-        return new ActiveMQMailQueue(factory, queueName, useBlobMessages(), 
log);
+        return new ActiveMQMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, useBlobMessages(), log);
     }
 
     protected boolean useBlobMessages() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-api/pom.xml
----------------------------------------------------------------------
diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml
index 4a6aa50..6a103b0 100644
--- a/server/queue/queue-api/pom.xml
+++ b/server/queue/queue-api/pom.xml
@@ -39,17 +39,38 @@
             <artifactId>apache-mailet-api</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.james</groupId>
+            <artifactId>james-server-lifecycle-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.sun.mail</groupId>
             <artifactId>javax.mail</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.james</groupId>
             <artifactId>james-server-core</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.james</groupId>
-            <artifactId>james-server-lifecycle-api</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <version>${assertj-1.version}</version>
+            <scope>test</scope>
+        </dependency>
+            <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
 
b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
new file mode 100644
index 0000000..0a08953
--- /dev/null
+++ 
b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
@@ -0,0 +1,61 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.queue.api;
+
+import org.apache.james.queue.api.MailQueue.MailQueueException;
+import org.apache.james.queue.api.MailQueue.MailQueueItem;
+import org.apache.mailet.Mail;
+
+public interface MailQueueItemDecoratorFactory {
+
+    MailQueueItemDecorator decorate(MailQueueItem mailQueueItem);
+
+    abstract class MailQueueItemDecorator implements MailQueueItem {
+        protected MailQueueItem mailQueueItem;
+
+        public MailQueueItemDecorator(MailQueueItem mailQueueItem) {
+            this.mailQueueItem = mailQueueItem;
+        }
+    }
+
+    MailQueueItemDecoratorFactory RAW_FACTORY = new 
MailQueueItemDecoratorFactory() {
+        @Override
+        public MailQueueItemDecorator decorate(MailQueueItem mailQueueItem) {
+            return new RawMailQueueItem(mailQueueItem);
+        }
+    };
+
+    class RawMailQueueItem extends MailQueueItemDecorator {
+
+        public RawMailQueueItem(MailQueueItem mailQueueItem) {
+            super(mailQueueItem);
+        }
+
+        @Override
+        public Mail getMail() {
+            return mailQueueItem.getMail();
+        }
+
+        @Override
+        public void done(boolean success) throws MailQueueException {
+            mailQueueItem.done(success);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
 
b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
index 2afc46a..ab447a4 100644
--- 
a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
+++ 
b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueue.java
@@ -47,6 +47,7 @@ import org.apache.james.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.core.MimeMessageSource;
 import org.apache.james.lifecycle.api.Disposable;
 import org.apache.james.lifecycle.api.LifecycleUtil;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.ManageableMailQueue;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
@@ -67,13 +68,15 @@ public class FileMailQueue implements ManageableMailQueue {
     private final File queueDir;
     private final Logger log;
 
+    private final MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory;
     private final boolean sync;
     private final static String MSG_EXTENSION = ".msg";
     private final static String OBJECT_EXTENSION = ".obj";
     private final static String NEXT_DELIVERY = "FileQueueNextDelivery";
     private final static int SPLITCOUNT = 10;
 
-    public FileMailQueue(File parentDir, String queuename, boolean sync, 
Logger log) throws IOException {
+    public FileMailQueue(MailQueueItemDecoratorFactory 
mailQueueItemDecoratorFactory, File parentDir, String queuename, boolean sync, 
Logger log) throws IOException {
+        this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory;
         this.log = log;
         this.sync = sync;
         this.queueDir = new File(parentDir, queuename);
@@ -269,7 +272,7 @@ public class FileMailQueue implements ManageableMailQueue {
                 oin = new ObjectInputStream(new FileInputStream(objectFile));
                 final Mail mail = (Mail) oin.readObject();
                 mail.setMessage(new MimeMessageCopyOnWriteProxy(new 
FileMimeMessageSource(msgFile)));
-                return new MailQueueItem() {
+                MailQueueItem fileMailQueueItem = new MailQueueItem() {
 
                     @Override
                     public Mail getMail() {
@@ -293,6 +296,7 @@ public class FileMailQueue implements ManageableMailQueue {
                         LifecycleUtil.dispose(mail);
                     }
                 };
+                return 
mailQueueItemDecoratorFactory.decorate(fileMailQueueItem);
 
                 // TODO: Think about exception handling in detail
             } catch (FileNotFoundException e) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
 
b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
index 238823d..2229e1a 100644
--- 
a/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
+++ 
b/server/queue/queue-file/src/main/java/org/apache/james/queue/file/FileMailQueueFactory.java
@@ -20,6 +20,7 @@ package org.apache.james.queue.file;
 
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.LogEnabled;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.slf4j.Logger;
@@ -36,13 +37,15 @@ import java.util.Map;
 public class FileMailQueueFactory implements MailQueueFactory, LogEnabled {
 
     private final Map<String, MailQueue> queues = new HashMap<String, 
MailQueue>();
+    private MailQueueItemDecoratorFactory mailQueueActionItemDecoratorFactory;
     private FileSystem fs;
     private Logger log;
     private boolean sync = true;
 
     @Inject
-    public void setFileSystem(FileSystem fs) {
+    public FileMailQueueFactory(FileSystem fs, MailQueueItemDecoratorFactory 
mailQueueItemDecoratorFactory) {
         this.fs = fs;
+        this.mailQueueActionItemDecoratorFactory = 
mailQueueItemDecoratorFactory;
     }
 
     /**
@@ -63,7 +66,7 @@ public class FileMailQueueFactory implements 
MailQueueFactory, LogEnabled {
         if (queue == null) {
             synchronized (queues) {
                 try {
-                    queue = new 
FileMailQueue(fs.getFile("file://var/store/queue"), name, sync, log);
+                    queue = new 
FileMailQueue(mailQueueActionItemDecoratorFactory, 
fs.getFile("file://var/store/queue"), name, sync, log);
                     queues.put(name, queue);
                 } catch (IOException e) {
                     throw new RuntimeException("Unable to access queue " + 
name, e);

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
index 80f1308..68ed2f2 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
@@ -18,14 +18,19 @@
  ****************************************************************/
 package org.apache.james.queue.jms;
 
-import org.apache.james.core.MailImpl;
-import org.apache.james.core.MimeMessageCopyOnWriteProxy;
-import org.apache.james.queue.api.MailPrioritySupport;
-import org.apache.james.queue.api.MailQueue;
-import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailAddress;
-import org.slf4j.Logger;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.StringTokenizer;
+import java.util.concurrent.TimeUnit;
 
 import javax.jms.BytesMessage;
 import javax.jms.Connection;
@@ -41,19 +46,16 @@ import javax.jms.Session;
 import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
 import javax.mail.internet.MimeMessage;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-import java.util.concurrent.TimeUnit;
+
+import org.apache.james.core.MailImpl;
+import org.apache.james.core.MimeMessageCopyOnWriteProxy;
+import org.apache.james.queue.api.MailPrioritySupport;
+import org.apache.james.queue.api.MailQueue;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.slf4j.Logger;
 
 /**
  * <p>
@@ -70,11 +72,13 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
 
     protected final String queueName;
     protected final ConnectionFactory connectionFactory;
+    protected final MailQueueItemDecoratorFactory 
mailQueueItemDecoratorFactory;
     protected final Logger logger;
     public final static String FORCE_DELIVERY = "FORCE_DELIVERY";
 
-    public JMSMailQueue(final ConnectionFactory connectionFactory, final 
String queueName, final Logger logger) {
+    public JMSMailQueue(final ConnectionFactory connectionFactory, final 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, final String 
queueName, final Logger logger) {
         this.connectionFactory = connectionFactory;
+        this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory;
         this.queueName = queueName;
         this.logger = logger;
     }
@@ -472,7 +476,8 @@ public class JMSMailQueue implements ManageableMailQueue, 
JMSSupport, MailPriori
      */
     protected MailQueueItem createMailQueueItem(Connection connection, Session 
session, MessageConsumer consumer, Message message) throws JMSException, 
MessagingException {
         final Mail mail = createMail(message);
-        return new JMSMailQueueItem(mail, connection, session, consumer);
+        JMSMailQueueItem jmsMailQueueItem = new JMSMailQueueItem(mail, 
connection, session, consumer);
+        return mailQueueItemDecoratorFactory.decorate(jmsMailQueueItem);
     }
 
     protected String getMessageSelector() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
index d78c231..897b80a 100644
--- 
a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
+++ 
b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
@@ -18,8 +18,10 @@
  ****************************************************************/
 package org.apache.james.queue.jms;
 
+import javax.inject.Inject;
 import javax.jms.ConnectionFactory;
 
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
 import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.apache.james.queue.library.AbstractMailQueueFactory;
@@ -30,14 +32,17 @@ import 
org.apache.james.queue.library.AbstractMailQueueFactory;
 public class JMSMailQueueFactory extends AbstractMailQueueFactory {
 
     protected ConnectionFactory connectionFactory;
-
-    public void setConnectionFactory(ConnectionFactory connectionFactory) {
+    protected MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory;
+    
+    @Inject
+    public JMSMailQueueFactory(ConnectionFactory connectionFactory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory) {
         this.connectionFactory = connectionFactory;
+        this.mailQueueItemDecoratorFactory = mailQueueItemDecoratorFactory;
     }
 
     @Override
     protected MailQueue createMailQueue(String name) {
-        return new JMSMailQueue(connectionFactory, name, log);
+        return new JMSMailQueue(connectionFactory, 
mailQueueItemDecoratorFactory, name, log);
     }
     
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/a5a9ee20/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
----------------------------------------------------------------------
diff --git 
a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
 
b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
index 99825ad..7d15da6 100644
--- 
a/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
+++ 
b/server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/AbstractJMSMailQueueTest.java
@@ -18,27 +18,11 @@
  ****************************************************************/
 package org.apache.james.queue.jms;
 
-import org.apache.activemq.ActiveMQConnectionFactory;
-import org.apache.james.core.MailImpl;
-import org.apache.james.protocols.smtp.MailAddressException;
-import org.apache.james.queue.api.MailQueue.MailQueueItem;
-import org.apache.james.queue.api.ManageableMailQueue;
-import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator;
-import org.apache.mailet.Mail;
-import org.apache.mailet.MailAddress;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import javax.jms.ConnectionFactory;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.internet.MimeMessage;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Date;
@@ -48,6 +32,25 @@ import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
+import javax.jms.ConnectionFactory;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.james.core.MailImpl;
+import org.apache.james.protocols.smtp.MailAddressException;
+import org.apache.james.queue.api.MailQueue.MailQueueItem;
+import org.apache.james.queue.api.MailQueueItemDecoratorFactory;
+import org.apache.james.queue.api.ManageableMailQueue;
+import org.apache.james.queue.api.ManageableMailQueue.MailQueueIterator;
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Basic JMS test class. Extend this class and start the JMS broker in the 
super class,
  * Create a queue and implement the getter and setter for the tests to run.
@@ -63,16 +66,16 @@ public abstract class AbstractJMSMailQueueTest {
     protected ActiveMQConnectionFactory createConnectionFactory() {
         return new ActiveMQConnectionFactory("vm://localhost?create=false");
     }
-
-    protected JMSMailQueue createQueue(ConnectionFactory factory, String 
queueName) {
+    
+    protected JMSMailQueue createQueue(ConnectionFactory factory, 
MailQueueItemDecoratorFactory mailQueueItemDecoratorFactory, String queueName) {
         Logger log = LoggerFactory.getLogger(AbstractJMSMailQueueTest.class);
-        return new JMSMailQueue(factory, queueName, log);
+        return new JMSMailQueue(factory, mailQueueItemDecoratorFactory, 
queueName, log);
     }
 
     @Before
     public void setUp() throws Exception {
         ConnectionFactory connectionFactory = createConnectionFactory();
-        setQueue(createQueue(connectionFactory, QUEUE_NAME));
+        setQueue(createQueue(connectionFactory, 
MailQueueItemDecoratorFactory.RAW_FACTORY, QUEUE_NAME));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to