You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/12/07 10:05:05 UTC

svn commit: r1042941 - in /james/mailbox/trunk: jcr/src/main/java/org/apache/james/mailbox/jcr/ jcr/src/main/java/org/apache/james/mailbox/jcr/mail/ jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/ jcr/src/test/java/org/apache/james/mailbox/j...

Author: norman
Date: Tue Dec  7 09:05:04 2010
New Revision: 1042941

URL: http://svn.apache.org/viewvc?rev=1042941&view=rev
Log:
Make it transparent for the developer to generate the next uid. This seems like the "cleaner" solution..

Modified:
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
    james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java
    james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
    james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java
    james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
    james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
    james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
    james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
    james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
    james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
    james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java Tue Dec  7 09:05:04 2010
@@ -30,7 +30,6 @@ import org.apache.james.mailbox.jcr.user
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 
 /**
@@ -44,19 +43,17 @@ public class JCRMailboxSessionMapperFact
     private final Log logger;
     private final static int DEFAULT_SCALING = 2;
     private final int scaling;
-    private final UidProvider<String> provider;
     private int messageScaling;
 
-    public JCRMailboxSessionMapperFactory(final MailboxSessionJCRRepository repository, final UidProvider<String> uidProvider) {
-        this(repository, uidProvider, DEFAULT_SCALING, JCRMessageMapper.MESSAGE_SCALE_DAY);
+    public JCRMailboxSessionMapperFactory(final MailboxSessionJCRRepository repository) {
+        this(repository, DEFAULT_SCALING, JCRMessageMapper.MESSAGE_SCALE_DAY);
     }
 
-    public JCRMailboxSessionMapperFactory(final MailboxSessionJCRRepository repository, final UidProvider<String> provider, final int scaling, final int messageScaling) {
+    public JCRMailboxSessionMapperFactory(final MailboxSessionJCRRepository repository, final int scaling, final int messageScaling) {
         this.repository = repository;
         this.logger = LogFactory.getLog(JCRMailboxSessionMapperFactory.class);
         this.scaling = scaling;
         this.messageScaling = messageScaling;
-        this.provider = provider;
     }
     
     @Override
@@ -67,7 +64,7 @@ public class JCRMailboxSessionMapperFact
 
     @Override
     public MessageMapper<String> createMessageMapper(MailboxSession session) throws MailboxException {
-        JCRMessageMapper messageMapper = new JCRMessageMapper(repository, session, provider, logger, messageScaling);
+        JCRMessageMapper messageMapper = new JCRMessageMapper(repository, session, logger, messageScaling);
         return messageMapper;
     }
 

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java Tue Dec  7 09:05:04 2010
@@ -57,12 +57,12 @@ public class JCRMessageManager extends S
     }
 
     @Override
-    protected MailboxMembership<String> createMessage(Date internalDate, int size, int bodyStartOctet, InputStream document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException{
+    protected MailboxMembership<String> createMessage(long uid, Date internalDate, int size, int bodyStartOctet, InputStream document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException{
         final List<JCRHeader> jcrHeaders = new ArrayList<JCRHeader>(headers.size());
         for (Header header: headers) {
             jcrHeaders.add((JCRHeader) header);
         }
-        final MailboxMembership<String> message = new JCRMessage(getMailboxEntity().getMailboxId(), internalDate, 
+        final MailboxMembership<String> message = new JCRMessage(getMailboxEntity().getMailboxId(), uid, internalDate, 
                 size, flags, document, bodyStartOctet, jcrHeaders, propertyBuilder, log);
         return message;
     }

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java Tue Dec  7 09:05:04 2010
@@ -49,7 +49,6 @@ import org.apache.james.mailbox.jcr.Mail
 import org.apache.james.mailbox.jcr.mail.model.JCRMessage;
 import org.apache.james.mailbox.store.SearchQueryIterator;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMembership;
 import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
@@ -60,8 +59,6 @@ import org.apache.james.mailbox.store.ma
  *
  */
 public class JCRMessageMapper extends AbstractJCRMapper implements MessageMapper<String> {
-
-    private UidProvider<String> uidGenerator;
     
     /**
      * Store the messages directly in the mailbox: .../mailbox/
@@ -107,14 +104,13 @@ public class JCRMessageMapper extends Ab
      * @param session {@link MailboxSession} to which the mapper is bound
      * @param logger Log
      */
-    public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession session, final UidProvider<String> uidGenerator, final Log logger, int scaleType) {
+    public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession session, final Log logger, int scaleType) {
         super(repos, session, logger);
-        this.uidGenerator = uidGenerator;
         this.scaleType = scaleType;
     }
     
-    public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession session, final UidProvider<String> uidGenerator, final Log logger) {
-        this(repos, session, uidGenerator, logger, MESSAGE_SCALE_DAY);
+    public JCRMessageMapper(final MailboxSessionJCRRepository repos, MailboxSession session, final Log logger) {
+        this(repos, session, logger, MESSAGE_SCALE_DAY);
     }
     
     /**
@@ -510,18 +506,17 @@ public class JCRMessageMapper extends Ab
 
                 }
 
-                final long nextUid = uidGenerator.nextUid(mSession, mailbox);
-
-                messageNode = mailboxNode.addNode(String.valueOf(nextUid), "nt:file");
+                long uid = membership.getUid();
+                messageNode = mailboxNode.addNode(String.valueOf(uid), "nt:file");
                 messageNode.addMixin("jamesMailbox:message");
                 try {
                     membership.merge(messageNode);
-                    messageNode.setProperty(JCRMessage.UID_PROPERTY, nextUid);
+                    messageNode.setProperty(JCRMessage.UID_PROPERTY, uid);
 
                 } catch (IOException e) {
                     throw new RepositoryException("Unable to merge message in to tree", e);
                 }
-                return nextUid;
+                return uid;
                 
             } else {
                 membership.merge(messageNode);
@@ -644,13 +639,13 @@ public class JCRMessageMapper extends Ab
         return xQuery;
     }
     
+
     /*
      * (non-Javadoc)
-     * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(java.lang.Object, long, org.apache.james.mailbox.store.mail.model.MailboxMembership)
+     * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, long, org.apache.james.mailbox.store.mail.model.MailboxMembership)
      */
-    public long copy(Mailbox<String> mailbox, MailboxMembership<String> oldmessage) throws MailboxException{
+    public long copy(Mailbox<String> mailbox, long uid, MailboxMembership<String> oldmessage) throws MailboxException{
         try {
-            long uid = uidGenerator.nextUid(mSession, mailbox);
             String newMessagePath = getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + String.valueOf(uid);
             getSession().getWorkspace().copy(((JCRMessage)oldmessage).getNode().getPath(), getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + String.valueOf(uid));
             Node node = getSession().getNode(newMessagePath);

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java Tue Dec  7 09:05:04 2010
@@ -99,7 +99,7 @@ public class JCRMessage extends Abstract
         this.node = node;
     }
     
-    public JCRMessage(String mailboxUUID, Date internalDate, int size, Flags flags, InputStream content,
+    public JCRMessage(String mailboxUUID, long uid, Date internalDate, int size, Flags flags, InputStream content,
             int bodyStartOctet, final List<JCRHeader> headers,
             final PropertyBuilder propertyBuilder, Log logger) {
         super();
@@ -108,7 +108,7 @@ public class JCRMessage extends Abstract
         this.size = size;
         this.logger = logger;
         setFlags(flags);
-    
+        this.uid = uid;
         this.content = content;
        
         this.bodyStartOctet = bodyStartOctet;
@@ -132,7 +132,7 @@ public class JCRMessage extends Abstract
      * @param message
      * @throws IOException 
      */
-    public JCRMessage(String mailboxUUID, JCRMessage message, Log logger) throws MailboxException {
+    public JCRMessage(String mailboxUUID, long uid,  JCRMessage message, Log logger) throws MailboxException {
         this.mailboxUUID = mailboxUUID;
         this.internalDate = message.getInternalDate();
         this.size = message.getFullContentOctets();
@@ -142,6 +142,7 @@ public class JCRMessage extends Abstract
         this.flagged = message.isFlagged();
         this.recent = message.isRecent();
         this.seen = message.isSeen();
+        this.uid = uid;
         
         this.logger = logger;
         try {

Modified: james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java (original)
+++ james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRHostSystem.java Tue Dec  7 09:05:04 2010
@@ -71,7 +71,7 @@ public class JCRHostSystem extends ImapH
             
             userManager = new InMemoryUserManager();
             JCRCachingUidProvider uidProvider = new JCRCachingUidProvider(sessionRepos);
-            JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos, uidProvider);
+            JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos);
 
             mailboxManager = new JCRMailboxManager(mf, userManager, uidProvider);
             final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new JCRSubscriptionManager(mf));

Modified: james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java (original)
+++ james/mailbox/trunk/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRStressTest.java Tue Dec  7 09:05:04 2010
@@ -64,7 +64,7 @@ public class JCRStressTest extends Abstr
 
         JCRCachingUidProvider uidProvider = new JCRCachingUidProvider(sessionRepos);
 
-        JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos, uidProvider);
+        JCRMailboxSessionMapperFactory mf = new JCRMailboxSessionMapperFactory(sessionRepos);
         mailboxManager = new JCRMailboxManager(mf, null, uidProvider);
 
     }

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java Tue Dec  7 09:05:04 2010
@@ -29,7 +29,6 @@ import org.apache.james.mailbox.jpa.user
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 
 /**
@@ -40,16 +39,14 @@ public class JPAMailboxSessionMapperFact
 
     private final EntityManagerFactory entityManagerFactory;
     private final char delimiter;
-    private UidProvider<Long> uidGenerator;
 
-    public JPAMailboxSessionMapperFactory(EntityManagerFactory entityManagerFactory, UidProvider<Long> uidProvider) {
-        this(entityManagerFactory, uidProvider, MailboxConstants.DEFAULT_DELIMITER);
+    public JPAMailboxSessionMapperFactory(EntityManagerFactory entityManagerFactory) {
+        this(entityManagerFactory, MailboxConstants.DEFAULT_DELIMITER);
     }
 
-    public JPAMailboxSessionMapperFactory(EntityManagerFactory entityManagerFactory, UidProvider<Long> uidGenerator, char delimiter) {
+    public JPAMailboxSessionMapperFactory(EntityManagerFactory entityManagerFactory, char delimiter) {
         this.entityManagerFactory = entityManagerFactory;
         this.delimiter = delimiter;
-        this.uidGenerator = uidGenerator;
         createEntityManager().close();
     }
     
@@ -60,7 +57,7 @@ public class JPAMailboxSessionMapperFact
 
     @Override
     public MessageMapper<Long> createMessageMapper(MailboxSession session) {
-        return new JPAMessageMapper(session, entityManagerFactory, uidGenerator);
+        return new JPAMessageMapper(entityManagerFactory);
     }
 
     @Override

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java Tue Dec  7 09:05:04 2010
@@ -47,13 +47,13 @@ public class JPAMessageManager extends S
     }
     
     @Override
-    protected MailboxMembership<Long> createMessage(Date internalDate, final int size, int bodyStartOctet, final InputStream document, 
+    protected MailboxMembership<Long> createMessage(long uid, Date internalDate, final int size, int bodyStartOctet, final InputStream document, 
             final Flags flags, final List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException{
         final List<JPAHeader> jpaHeaders = new ArrayList<JPAHeader>(headers.size());
         for (Header header: headers) {
             jpaHeaders.add((JPAHeader) header);
         }
-        final MailboxMembership<Long> message = new JPAMailboxMembership(getMailboxEntity().getMailboxId(), internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
+        final MailboxMembership<Long> message = new JPAMailboxMembership(getMailboxEntity().getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
         return message;
     }
 

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java Tue Dec  7 09:05:04 2010
@@ -28,7 +28,6 @@ import javax.persistence.PersistenceExce
 import javax.persistence.Query;
 
 import org.apache.james.mailbox.MailboxException;
-import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.MessageRange.Type;
 import org.apache.james.mailbox.SearchQuery;
@@ -40,7 +39,6 @@ import org.apache.james.mailbox.jpa.mail
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMembership;
 import org.apache.james.mailbox.store.SearchQueryIterator;
 import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMembership;
 import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
@@ -52,13 +50,8 @@ import org.apache.james.mailbox.store.ma
  */
 public class JPAMessageMapper extends JPATransactionalMapper implements MessageMapper<Long> {
     
-    private final UidProvider<Long> uidGenerator;
-    private MailboxSession session;
-
-    public JPAMessageMapper(final MailboxSession session, final EntityManagerFactory entityManagerFactory, UidProvider<Long> uidGenerator) {
+    public JPAMessageMapper(final EntityManagerFactory entityManagerFactory) {
         super(entityManagerFactory);
-        this.session = session;
-        this.uidGenerator = uidGenerator;
     }
 
     /**
@@ -305,9 +298,7 @@ public class JPAMessageMapper extends JP
      */
     public long add(Mailbox<Long> mailbox, MailboxMembership<Long> message) throws MailboxException {
         try {
-            
-            ((AbstractJPAMailboxMembership) message).setUid(uidGenerator.nextUid(session,mailbox));
-            
+                        
             getEntityManager().persist(message);
             return message.getUid();
         } catch (PersistenceException e) {
@@ -317,15 +308,15 @@ public class JPAMessageMapper extends JP
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.store.mail.model.MailboxMembership)
+     * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, long, org.apache.james.mailbox.store.mail.model.MailboxMembership)
      */
-    public long copy(Mailbox<Long> mailbox, MailboxMembership<Long> original) throws MailboxException {
+    public long copy(Mailbox<Long> mailbox, long uid, MailboxMembership<Long> original) throws MailboxException {
 
         MailboxMembership<Long> copy;
         if (original instanceof JPAStreamingMailboxMembership) {
-            copy = new JPAStreamingMailboxMembership(mailbox.getMailboxId(), (AbstractJPAMailboxMembership) original);
+            copy = new JPAStreamingMailboxMembership(mailbox.getMailboxId(), uid, (AbstractJPAMailboxMembership) original);
         } else {
-            copy = new JPAMailboxMembership(mailbox.getMailboxId(), (AbstractJPAMailboxMembership) original);
+            copy = new JPAMailboxMembership(mailbox.getMailboxId(), uid,  (AbstractJPAMailboxMembership) original);
         }
         return add(mailbox, copy);
     }

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java Tue Dec  7 09:05:04 2010
@@ -144,11 +144,11 @@ public abstract class AbstractJPAMailbox
     @Deprecated
     public AbstractJPAMailboxMembership() {}
 
-    public AbstractJPAMailboxMembership(long mailboxId, Date internalDate, Flags flags, int bodyStartOctet, final List<JPAHeader> headers, final PropertyBuilder propertyBuilder) throws MailboxException {
+    public AbstractJPAMailboxMembership(long mailboxId, long uid, Date internalDate, Flags flags, int bodyStartOctet, final List<JPAHeader> headers, final PropertyBuilder propertyBuilder) throws MailboxException {
         super();
         this.mailboxId = mailboxId;
         this.internalDate = internalDate;
-       
+        this.uid = uid;
         setFlags(flags);
     }
 
@@ -160,9 +160,10 @@ public abstract class AbstractJPAMailbox
      * @param original message to be copied, not null
      * @throws IOException 
      */
-    public AbstractJPAMailboxMembership(long mailboxId, MailboxMembership<?> original) throws MailboxException {
+    public AbstractJPAMailboxMembership(long mailboxId, long uid, MailboxMembership<?> original) throws MailboxException {
         super();
         this.mailboxId = mailboxId;
+        this.uid = uid;
         this.internalDate = original.getInternalDate();
         this.answered = original.isAnswered();
         this.deleted = original.isDeleted();

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java Tue Dec  7 09:05:04 2010
@@ -48,9 +48,9 @@ public class JPAMailboxMembership extend
     @Deprecated
     public JPAMailboxMembership() {}
 
-    public JPAMailboxMembership(long mailboxId, Date internalDate, int size, Flags flags, 
+    public JPAMailboxMembership(long mailboxId, long uid, Date internalDate, int size, Flags flags, 
             InputStream content, int bodyStartOctet, final List<JPAHeader> headers, final PropertyBuilder propertyBuilder) throws MailboxException {
-        super(mailboxId, internalDate, flags, bodyStartOctet, headers, propertyBuilder);  
+        super(mailboxId, uid, internalDate, flags, bodyStartOctet, headers, propertyBuilder);  
         try {
             this.message = new JPAMessage(content, size, bodyStartOctet, headers, propertyBuilder);
         } catch (IOException e) {
@@ -58,8 +58,8 @@ public class JPAMailboxMembership extend
         }
     }
 
-    public JPAMailboxMembership(long mailboxId, AbstractJPAMailboxMembership original) throws MailboxException {
-        super(mailboxId, original);
+    public JPAMailboxMembership(long mailboxId, long uid, AbstractJPAMailboxMembership original) throws MailboxException {
+        super(mailboxId, uid, original);
         try {
             this.message = new JPAMessage((JPAMessage) original.getMessage());
         } catch (IOException e) {

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java Tue Dec  7 09:05:04 2010
@@ -49,16 +49,16 @@ public class JPAStreamingMailboxMembersh
     @Deprecated
     public JPAStreamingMailboxMembership() {}
 
-    public JPAStreamingMailboxMembership(long mailboxId, Date internalDate, int size, Flags flags, 
+    public JPAStreamingMailboxMembership(long mailboxId, long uid, Date internalDate, int size, Flags flags, 
             InputStream content, int bodyStartOctet, final List<JPAHeader> headers, final PropertyBuilder propertyBuilder) throws MailboxException {
-        super(mailboxId, internalDate, flags, bodyStartOctet, headers, propertyBuilder);  
+        super(mailboxId, uid, internalDate, flags, bodyStartOctet, headers, propertyBuilder);  
         this.message = new JPAStreamingMessage(content, size, bodyStartOctet, headers, propertyBuilder);
         
        
     }
 
-    public JPAStreamingMailboxMembership(long mailboxId, MailboxMembership<?> original) throws MailboxException {
-        super(mailboxId, original);
+    public JPAStreamingMailboxMembership(long mailboxId, long uid,  MailboxMembership<?> original) throws MailboxException {
+        super(mailboxId, uid, original);
         try {
             this.message = new JPAStreamingMessage(original.getMessage());
         } catch (IOException e) {

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java Tue Dec  7 09:05:04 2010
@@ -58,15 +58,15 @@ public class OpenJPAMessageManager exten
     }
 
     @Override
-    protected MailboxMembership<Long> createMessage(Date internalDate, int size, int bodyStartOctet, InputStream document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException {
+    protected MailboxMembership<Long> createMessage(long uid, Date internalDate, int size, int bodyStartOctet, InputStream document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException {
         if (useStreaming) {
             final List<JPAHeader> jpaHeaders = new ArrayList<JPAHeader>(headers.size());
             for (Header header: headers) {
                 jpaHeaders.add((JPAHeader) header);
             }
-            return new JPAStreamingMailboxMembership(getMailboxEntity().getMailboxId(), internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
+            return new JPAStreamingMailboxMembership(getMailboxEntity().getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
         } else {
-            return super.createMessage(internalDate, size, bodyStartOctet, document, flags, headers, propertyBuilder);
+            return super.createMessage(uid, internalDate, size, bodyStartOctet, document, flags, headers, propertyBuilder);
         }
     }
 

Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAHostSystem.java Tue Dec  7 09:05:04 2010
@@ -80,7 +80,7 @@ public class JPAHostSystem extends ImapH
         entityManagerFactory = OpenJPAPersistence.getEntityManagerFactory(properties);
         JPACachingUidProvider uidProvider = new JPACachingUidProvider(entityManagerFactory);
 
-        JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory, uidProvider);
+        JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory);
         mailboxManager = new OpenJPAMailboxManager(mf, userManager, uidProvider);
         SubscriptionManager subscriptionManager = new JPASubscriptionManager(mf);
         final ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, subscriptionManager);

Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java Tue Dec  7 09:05:04 2010
@@ -75,7 +75,7 @@ public class JPAStressTest extends Abstr
        
         entityManagerFactory = OpenJPAPersistence.getEntityManagerFactory(properties);
         JPACachingUidProvider uidProvider = new JPACachingUidProvider(entityManagerFactory);
-        JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory, uidProvider);
+        JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory);
         mailboxManager = new OpenJPAMailboxManager(mf, null, uidProvider);
         
         // Set the lock timeout via SQL because of a bug in openJPA

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java Tue Dec  7 09:05:04 2010
@@ -51,7 +51,7 @@ public class MaildirMessageManager exten
     }
 
     @Override
-    protected MailboxMembership<Integer> createMessage(Date internalDate,
+    protected MailboxMembership<Integer> createMessage(long uid, Date internalDate,
             int size, int bodyStartOctet, InputStream documentIn, Flags flags,
             List<Header> headers, PropertyBuilder propertyBuilder)
             throws MailboxException {

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java Tue Dec  7 09:05:04 2010
@@ -67,7 +67,7 @@ public class MaildirMessageMapper extend
      * (non-Javadoc)
      * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.store.mail.model.MailboxMembership)
      */
-    public long copy(Mailbox<Integer> mailbox, MailboxMembership<Integer> original)
+    public long copy(Mailbox<Integer> mailbox, long uid, MailboxMembership<Integer> original)
     throws MailboxException {
         MaildirMessage theCopy = new MaildirMessage(mailbox, (AbstractMaildirMessage) original);
 

Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java (original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java Tue Dec  7 09:05:04 2010
@@ -51,7 +51,7 @@ public class InMemoryStoreMessageManager
     }
 
     @Override
-    protected MailboxMembership<Long> createMessage(Date internalDate, int size, int bodyStartOctet, 
+    protected MailboxMembership<Long> createMessage(long uid, Date internalDate, int size, int bodyStartOctet, 
             InputStream  document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         byte[] byteContent;
@@ -70,7 +70,7 @@ public class InMemoryStoreMessageManager
             byteContent = new byte[0];
         }
         InMemoryMailbox mailbox = (InMemoryMailbox) getMailboxEntity();
-        return new SimpleMailboxMembership(internalDate, uidProvider.nextUid(null, mailbox), size, bodyStartOctet, byteContent, flags, headers, propertyBuilder, mailbox.getMailboxId());
+        return new SimpleMailboxMembership(internalDate, uid, size, bodyStartOctet, byteContent, flags, headers, propertyBuilder, mailbox.getMailboxId());
     }
     
 }

Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java (original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java Tue Dec  7 09:05:04 2010
@@ -31,7 +31,6 @@ import javax.mail.Flags;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.SearchQuery;
-import org.apache.james.mailbox.inmemory.mail.model.InMemoryMailbox;
 import org.apache.james.mailbox.inmemory.mail.model.SimpleMailboxMembership;
 import org.apache.james.mailbox.store.SearchQueryIterator;
 import org.apache.james.mailbox.store.mail.MessageMapper;
@@ -216,11 +215,8 @@ public class InMemoryMessageMapper exten
      * (non-Javadoc)
      * @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, org.apache.james.mailbox.store.mail.model.MailboxMembership)
      */
-    public long copy(Mailbox<Long> mailbox, MailboxMembership<Long> original) throws MailboxException {
-        InMemoryMailbox iMailbox = (InMemoryMailbox) mailbox;
-        iMailbox.consumeUid();
-        
-        SimpleMailboxMembership membership = new SimpleMailboxMembership(mailbox.getMailboxId(), iMailbox.getLastUid(), (SimpleMailboxMembership) original);
+    public long copy(Mailbox<Long> mailbox, long uid, MailboxMembership<Long> original) throws MailboxException {        
+        SimpleMailboxMembership membership = new SimpleMailboxMembership(mailbox.getMailboxId(), uid, (SimpleMailboxMembership) original);
         return add(mailbox, membership);
     }
 

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java Tue Dec  7 09:05:04 2010
@@ -257,7 +257,8 @@ public abstract class StoreMessageManage
             if (isRecent) {
                 flags.add(Flags.Flag.RECENT);
             }
-            final MailboxMembership<Id> message = createMessage(internalDate, size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers, propertyBuilder);
+            long nextUid = uidProvider.nextUid(mailboxSession, getMailboxEntity());
+            final MailboxMembership<Id> message = createMessage(nextUid, internalDate, size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers, propertyBuilder);
             long uid = appendMessageToStore(message, mailboxSession);
                         
             dispatcher.added(uid, mailboxSession.getSessionId(), new StoreMailboxPath<Id>(getMailboxEntity()));
@@ -327,6 +328,7 @@ public abstract class StoreMessageManage
     /**
      * Create a new {@link MailboxMembership} for the given data
      * 
+     * @param uid
      * @param internalDate
      * @param size
      * @param bodyStartOctet
@@ -337,7 +339,7 @@ public abstract class StoreMessageManage
      * @return membership
      * @throws MailboxException 
      */
-    protected abstract MailboxMembership<Id> createMessage(Date internalDate, final int size, int bodyStartOctet, 
+    protected abstract MailboxMembership<Id> createMessage(long uid, Date internalDate, final int size, int bodyStartOctet, 
             final InputStream documentIn, final Flags flags, final List<Header> headers, PropertyBuilder propertyBuilder) throws MailboxException;
     
     /**
@@ -553,8 +555,8 @@ public abstract class StoreMessageManage
                copiedRows.add(messageMapper.execute(new Mapper.Transaction<Long>() {
 
                     public Long run() throws MailboxException {
-
-                        return messageMapper.copy(getMailboxEntity(), originalMessage);
+                        long uid = uidProvider.nextUid(session, getMailboxEntity());
+                        return messageMapper.copy(getMailboxEntity(), uid, originalMessage);
                         
                     }
                     

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java?rev=1042941&r1=1042940&r2=1042941&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java Tue Dec  7 09:05:04 2010
@@ -123,11 +123,13 @@ public interface MessageMapper<Id> exten
 
 
     /**
-     * Add the given {@link MailboxMembership} to the underlying storage, assign a new uid and return  it. The uid generation should be delegated to the {@link UidProvider} 
+     * Add the given {@link MailboxMembership} to the underlying storage. Be aware that implementation may choose to replace the uid of the given message while storing.
+     * So you should only depend on the returned uid.
      * 
      * 
      * @param mailbox
      * @param message
+     * @return uid
      * @throws StorageException
      */
     public abstract long add(Mailbox<Id> mailbox, MailboxMembership<Id> message) throws MailboxException;
@@ -147,14 +149,15 @@ public interface MessageMapper<Id> exten
             final MessageRange set) throws MailboxException;
     
     /**
-     * Copy the given {@link MailboxMembership} to a new mailbox and return the uid of the copy
+     * Copy the given {@link MailboxMembership} to a new mailbox and return the uid of the copy. Be aware that the given uid is just a suggestion for the uid of the copied
+     * message. Implementation may choose to use a different one, so only depend on the returned uid!
      * 
      * @param mailbox the Mailbox to copy to
-     * @param uid the uid to use for the new MailboxMembership
+     * @param uid the uid to use for the new MailboxMembership.
      * @param original the original to copy
      * @return The uid of the copied instance
      * @throws StorageException
      */
-    public abstract long copy(Mailbox<Id> mailbox, MailboxMembership<Id> original) throws MailboxException;
+    public abstract long copy(Mailbox<Id> mailbox, long uid, MailboxMembership<Id> original) throws MailboxException;
 
 }
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org