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 2012/01/28 12:56:57 UTC

svn commit: r1237050 [3/3] - in /james/mailbox/trunk: ./ api/src/main/java/org/apache/james/mailbox/ api/src/test/java/org/apache/james/mailbox/ hbase/src/main/java/org/apache/james/mailbox/hbase/ hbase/src/main/java/org/apache/james/mailbox/hbase/mail...

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=1237050&r1=1237049&r2=1237050&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 Sat Jan 28 11:56:55 2012
@@ -24,6 +24,8 @@ import java.util.Date;
 import javax.mail.Flags;
 import javax.mail.internet.SharedInputStream;
 
+import org.apache.james.mailbox.MailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.jpa.JPAMessageManager;
@@ -51,13 +53,13 @@ public class OpenJPAMessageManager exten
     }
     
     public OpenJPAMessageManager(MailboxSessionMapperFactory<Long> mapperFactory, MessageSearchIndex<Long> index,
-            MailboxEventDispatcher<Long> dispatcher, MailboxPathLocker locker, Mailbox<Long> mailbox) throws MailboxException {
-        this(mapperFactory, index, dispatcher, locker,  mailbox, AdvancedFeature.None);
+            MailboxEventDispatcher<Long> dispatcher, MailboxPathLocker locker, Mailbox<Long> mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver) throws MailboxException {
+        this(mapperFactory, index, dispatcher, locker,  mailbox, AdvancedFeature.None, aclResolver, groupMembershipResolver);
     }
 
     public OpenJPAMessageManager(MailboxSessionMapperFactory<Long> mapperFactory, MessageSearchIndex<Long> index, 
-            MailboxEventDispatcher<Long> dispatcher, MailboxPathLocker locker, Mailbox<Long> mailbox, final AdvancedFeature f) throws MailboxException {
-        super(mapperFactory,  index, dispatcher, locker, mailbox);
+            MailboxEventDispatcher<Long> dispatcher, MailboxPathLocker locker, Mailbox<Long> mailbox, final AdvancedFeature f, MailboxACLResolver aclResolver, GroupMembershipResolver groupMembershipResolver) throws MailboxException {
+        super(mapperFactory,  index, dispatcher, locker, mailbox, aclResolver, groupMembershipResolver);
         this.feature = f;
     }
 

Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java Sat Jan 28 11:56:55 2012
@@ -23,9 +23,13 @@ import java.util.HashMap;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.mailbox.BadCredentialsException;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.AbstractMailboxManagerTest;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
@@ -99,7 +103,10 @@ public class JPAMailboxManagerTest exten
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory, new JPAUidProvider(locker, entityManagerFactory), new JPAModSeqProvider(locker, entityManagerFactory));
 
-        JPAMailboxManager mailboxManager = new OpenJPAMailboxManager(mf, null);
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+        JPAMailboxManager mailboxManager = new OpenJPAMailboxManager(mf, null, aclResolver, groupMembershipResolver);
         mailboxManager.init();
 
         setMailboxManager(mailboxManager);

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=1237050&r1=1237049&r2=1237050&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 Sat Jan 28 11:56:55 2012
@@ -24,9 +24,13 @@ import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 
 import org.apache.james.mailbox.AbstractStressTest;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.jpa.mail.JPAModSeqProvider;
 import org.apache.james.mailbox.jpa.mail.JPAUidProvider;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
@@ -75,7 +79,10 @@ public class JPAStressTest extends Abstr
         JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
         JPAMailboxSessionMapperFactory mf = new JPAMailboxSessionMapperFactory(entityManagerFactory, new JPAUidProvider(locker, entityManagerFactory), new JPAModSeqProvider(locker, entityManagerFactory));
 
-        mailboxManager = new OpenJPAMailboxManager(mf, null);
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+        mailboxManager = new OpenJPAMailboxManager(mf, null, aclResolver, groupMembershipResolver);
         mailboxManager.init();
 
         // Set the lock timeout via SQL because of a bug in openJPA

Modified: james/mailbox/trunk/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java (original)
+++ james/mailbox/trunk/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java Sat Jan 28 11:56:55 2012
@@ -34,7 +34,9 @@ import java.util.Map;
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
+import org.apache.james.mailbox.MailboxACL;
 import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.SimpleMailboxACL;
 import org.apache.james.mailbox.SearchQuery.AddressType;
 import org.apache.james.mailbox.SearchQuery.DateResolution;
 import org.apache.james.mailbox.SearchQuery.Sort.SortClause;
@@ -742,5 +744,22 @@ public class LuceneMessageSearchIndexTes
             return 0;
         }
 
+        /* (non-Javadoc)
+         * @see org.apache.james.mailbox.store.mail.model.Mailbox#getACL()
+         */
+        @Override
+        public MailboxACL getACL() {
+            return SimpleMailboxACL.OWNER_FULL_ACL;
+        }
+
+        /* (non-Javadoc)
+         * @see org.apache.james.mailbox.store.mail.model.Mailbox#setACL(org.apache.james.mailbox.MailboxACL)
+         */
+        @Override
+        public void setACL(MailboxACL acl) {
+            throw new UnsupportedOperationException("Not supported");
+        }
+
+
     }
 }

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java Sat Jan 28 11:56:55 2012
@@ -21,11 +21,14 @@ package org.apache.james.mailbox.maildir
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -33,14 +36,19 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.NoSuchElementException;
+import java.util.Properties;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.ArrayUtils;
+import org.apache.james.mailbox.MailboxACL;
+import org.apache.james.mailbox.MailboxACL.MailboxACLEntryKey;
+import org.apache.james.mailbox.MailboxACL.MailboxACLRights;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxPathLocker;
+import org.apache.james.mailbox.SimpleMailboxACL;
 import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxSession;
 
@@ -48,6 +56,7 @@ public class MaildirFolder {
 
     public static final String VALIDITY_FILE = "james-uidvalidity";
     public static final String UIDLIST_FILE = "james-uidlist";
+    public static final String ACL_FILE = "james-acl";
     public static final String CUR = "cur";
     public static final String NEW = "new";
     public static final String TMP = "tmp";
@@ -57,10 +66,12 @@ public class MaildirFolder {
     private File newFolder;
     private File tmpFolder;
     private File uidFile;
+    private File aclFile;
     
     private long lastUid = -1;
     private int messageCount = 0;
     private long uidValidity = -1;
+    private MailboxACL acl;
 
     private final MailboxPathLocker locker;
 
@@ -77,6 +88,7 @@ public class MaildirFolder {
         this.newFolder = new File(rootFolder, NEW);
         this.tmpFolder = new File(rootFolder, TMP);
         this.uidFile = new File(rootFolder, UIDLIST_FILE);
+        this.aclFile = new File(rootFolder, ACL_FILE);
         this.locker = locker;
         this.path = path;
     }
@@ -201,7 +213,7 @@ public class MaildirFolder {
         
         
     }
-    
+
     /**
      * Returns the uidValidity of this mailbox
      * @return The uidValidity
@@ -885,4 +897,93 @@ public class MaildirFolder {
         return getRootFile().getAbsolutePath();
     }
     
+    public MailboxACL getACL(final MailboxSession session) throws MailboxException {
+        if (acl == null) {
+            acl = readACL(session);
+        }
+        return acl;
+    }
+
+    /**
+     * Read the ACL of the given mailbox from the file system.
+     * 
+     * @param session
+     * @throws MailboxException if there are problems with the aclFile file
+     */
+    private MailboxACL readACL(MailboxSession session) throws MailboxException {
+        // FIXME Do we need this locking?
+        return locker.executeWithLock(session, path, new LockAwareExecution<MailboxACL>() {
+            
+            @Override
+            public MailboxACL execute() throws MailboxException {
+                File f = aclFile;
+                InputStream in = null;
+                Properties props = new Properties();
+                if (f.exists()) {
+                    try {
+                        in = new FileInputStream(f);
+                        props.load(in);
+                    } catch (FileNotFoundException e) {
+                        throw new MailboxException("Unable to read last ACL from "+ f.getAbsolutePath(), e);
+                    } catch (IOException e) {
+                        throw new MailboxException("Unable to read last ACL from "+ f.getAbsolutePath(), e);
+                    }
+                    finally {
+                        IOUtils.closeQuietly(in);
+                    }
+                }
+                
+                return new SimpleMailboxACL(props);
+
+            }
+        }, true);
+        
+    }
+    
+    public void setACL(final MailboxSession session, final MailboxACL acl) throws MailboxException {
+        MailboxACL old = this.acl;
+        if (old != acl && (old == null || !old.equals(acl))) {
+            /* change only if different */
+            saveACL(acl, session);
+            this.acl = acl;
+        }
+        
+    }
+
+    private void saveACL(final MailboxACL acl, final MailboxSession session) throws MailboxException {
+        // FIXME Do we need this locking?
+        locker.executeWithLock(session, path, new LockAwareExecution<Void>() {
+            
+            @Override
+            public Void execute() throws MailboxException {
+                File f = aclFile;
+                OutputStream out = null;
+                Properties props = new Properties();
+                Map<MailboxACLEntryKey, MailboxACLRights> entries = acl.getEntries();
+                if (entries != null) {
+                    for (Entry<MailboxACLEntryKey, MailboxACLRights> en : entries.entrySet()) {
+                        props.put(en.getKey().serialize(), en.getValue().serialize());
+                    }
+                }
+                if (f.exists()) {
+                    try {
+                        out = new FileOutputStream(f);
+                        props.store(out, "written by "+ getClass().getName());
+                    } catch (FileNotFoundException e) {
+                        throw new MailboxException("Unable to read last ACL from "+ f.getAbsolutePath(), e);
+                    } catch (IOException e) {
+                        throw new MailboxException("Unable to read last ACL from "+ f.getAbsolutePath(), e);
+                    }
+                    finally {
+                        IOUtils.closeQuietly(out);
+                    }
+                }
+                
+                return null;
+
+            }
+        }, true);
+    }
+
+    
 }

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java Sat Jan 28 11:56:55 2012
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.MailboxN
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.maildir.mail.model.MaildirMailbox;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
@@ -118,12 +119,9 @@ public class MaildirStore implements Uid
      * @throws MailboxException If the mailbox folder doesn't exist or can't be read
      */
     private Mailbox<Integer> loadMailbox(MailboxSession session, File mailboxFile, MailboxPath mailboxPath) throws MailboxException {
-        long uidValidity;
         MaildirFolder folder = new MaildirFolder(mailboxFile.getAbsolutePath(), mailboxPath, locker);
         try {
-            uidValidity = folder.getUidValidity();
-            return new SimpleMailbox<Integer>(mailboxPath, uidValidity);
-
+            return new MaildirMailbox<Integer>(session, mailboxPath, folder);
         } catch (IOException e) {
             throw new MailboxException("Unable to load Mailbox " + mailboxPath, e);
         }

Added: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMailbox.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMailbox.java?rev=1237050&view=auto
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMailbox.java (added)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMailbox.java Sat Jan 28 11:56:55 2012
@@ -0,0 +1,41 @@
+package org.apache.james.mailbox.maildir.mail.model;
+
+import java.io.IOException;
+
+import org.apache.james.mailbox.MailboxACL;
+import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MailboxPath;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.maildir.MaildirFolder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+
+public class MaildirMailbox<Id> extends SimpleMailbox<Id> {
+
+    private MaildirFolder folder;
+    private MailboxSession session;
+
+    public MaildirMailbox(MailboxSession session, MailboxPath path, MaildirFolder folder) throws IOException {
+        super(path, folder.getUidValidity());
+        this.folder = folder;
+        this.session = session;
+    }
+
+    @Override
+    public MailboxACL getACL() {
+        try {
+            return folder.getACL(session);
+        } catch (MailboxException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public void setACL(MailboxACL acl) {
+        try {
+            folder.setACL(session, acl);
+        } catch (MailboxException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}

Propchange: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMailbox.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTest.java (original)
+++ james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTest.java Sat Jan 28 11:56:55 2012
@@ -27,8 +27,12 @@ import java.io.UnsupportedEncodingExcept
 import org.apache.commons.io.FileUtils;
 import org.apache.james.mailbox.AbstractMailboxManagerTest;
 import org.apache.james.mailbox.BadCredentialsException;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxExistsException;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.After;
@@ -110,7 +114,11 @@ public class MaildirMailboxManagerTest e
 
             MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%domain/%user", new JVMMailboxPathLocker());
             MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
-            StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker());
+            
+            MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+            GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+            StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver);
             manager.init();
             setMailboxManager(manager);
             try {
@@ -140,7 +148,10 @@ public class MaildirMailboxManagerTest e
 
             MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%domain/%user", new JVMMailboxPathLocker());
             MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
-            StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker());
+            MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+            GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+            StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver);
             manager.init();
             setMailboxManager(manager);
             try {
@@ -169,7 +180,10 @@ public class MaildirMailboxManagerTest e
     private void doTestListWithMaildirStoreConfiguration(String maildirStoreConfiguration) throws MailboxException, UnsupportedEncodingException {
         MaildirStore store = new MaildirStore(MAILDIR_HOME + maildirStoreConfiguration, new JVMMailboxPathLocker());
         MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
-        StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker());
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+        StoreMailboxManager<Integer> manager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver);
         manager.init();
         setMailboxManager(manager);
         try {

Modified: james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirStressTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirStressTest.java (original)
+++ james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirStressTest.java Sat Jan 28 11:56:55 2012
@@ -23,8 +23,12 @@ import java.io.IOException;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.james.mailbox.AbstractStressTest;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.After;
@@ -41,7 +45,10 @@ public class MaildirStressTest extends A
         MaildirStore store = new MaildirStore(MAILDIR_HOME + "/%user", new JVMMailboxPathLocker());
 
         MaildirMailboxSessionMapperFactory mf = new MaildirMailboxSessionMapperFactory(store);
-        mailboxManager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker());
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+        mailboxManager = new StoreMailboxManager<Integer>(mf, null, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver);
         mailboxManager.init();
 
     }

Modified: james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java (original)
+++ james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java Sat Jan 28 11:56:55 2012
@@ -19,9 +19,13 @@
 package org.apache.james.mailbox.inmemory;
 
 import org.apache.james.mailbox.BadCredentialsException;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.AbstractMailboxManagerTest;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.store.MockAuthenticator;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.junit.After;
@@ -62,7 +66,10 @@ public class InMemoryMailboxManagerTest 
     protected void createMailboxManager() throws MailboxException {
         
         InMemoryMailboxSessionMapperFactory factory = new InMemoryMailboxSessionMapperFactory();
-        StoreMailboxManager<Long> mailboxManager = new StoreMailboxManager<Long>(factory, new MockAuthenticator());
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
+        StoreMailboxManager<Long> mailboxManager = new StoreMailboxManager<Long>(factory, new MockAuthenticator(), aclResolver, groupMembershipResolver);
         mailboxManager.init();
         
         setMailboxManager(mailboxManager);

Modified: james/mailbox/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/pom.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/pom.xml (original)
+++ james/mailbox/trunk/pom.xml Sat Jan 28 11:56:55 2012
@@ -26,7 +26,7 @@
     <parent>
         <artifactId>james-project</artifactId>
         <groupId>org.apache.james</groupId>
-        <version>1.9-SNAPSHOT</version>
+        <version>1.8</version>
         <relativePath></relativePath>
     </parent>
 

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-hbase.xml Sat Jan 28 11:56:55 2012
@@ -41,6 +41,8 @@
         <constructor-arg index="0" ref="hbase-sessionMapperFactory"/>
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="hbase-locker"/>
+        <constructor-arg index="3" ref="aclResolver"/>
+        <constructor-arg index="4" ref="groupMembershipResolver"/>
     </bean>
     
     <bean id="hbase-sessionMapperFactory" class="org.apache.james.mailbox.hbase.HBaseMailboxSessionMapperFactory">

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jcr.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jcr.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jcr.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jcr.xml Sat Jan 28 11:56:55 2012
@@ -31,6 +31,8 @@
         <constructor-arg index="0" ref="jcr-sessionMapperFactory"/>
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="jcr-locker"/>
+        <constructor-arg index="3" ref="aclResolver"/>
+        <constructor-arg index="4" ref="groupMembershipResolver"/>
     </bean>
     <bean id ="jcr-subscriptionManager" class="org.apache.james.mailbox.jcr.JCRSubscriptionManager">
         <constructor-arg index="0" ref="jcr-sessionMapperFactory"/>

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jpa.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jpa.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jpa.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-jpa.xml Sat Jan 28 11:56:55 2012
@@ -34,6 +34,8 @@
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="jpa-locker"/>
         <constructor-arg index="3" type="boolean" value="false"/>
+        <constructor-arg index="4" ref="aclResolver"/>
+        <constructor-arg index="5" ref="groupMembershipResolver"/>
     </bean>
     <bean id ="jpa-subscriptionManager" class="org.apache.james.mailbox.jpa.JPASubscriptionManager">
         <constructor-arg index="0" ref="jpa-sessionMapperFactory"/>

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-maildir.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-maildir.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-maildir.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-maildir.xml Sat Jan 28 11:56:55 2012
@@ -37,6 +37,8 @@
         <constructor-arg index="0" ref="maildir-sessionMapperFactory"/>
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="maildir-locker"/>
+        <constructor-arg index="3" ref="aclResolver"/>
+        <constructor-arg index="4" ref="groupMembershipResolver"/>
 <!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
     </bean>
     <bean id ="maildir-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager">

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-memory.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-memory.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-memory.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-memory.xml Sat Jan 28 11:56:55 2012
@@ -33,6 +33,8 @@
         <constructor-arg index="0" ref="maildir-sessionMapperFactory"/>
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="memory-locker"/>
+        <constructor-arg index="3" ref="aclResolver"/>
+        <constructor-arg index="4" ref="groupMembershipResolver"/>
 <!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
     </bean>
     <bean id ="memory-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager">

Modified: james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox.xml?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox.xml (original)
+++ james/mailbox/trunk/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox.xml Sat Jan 28 11:56:55 2012
@@ -41,10 +41,21 @@
 -->
     <import resource="classpath:META-INF/org/apache/james/spring-mailbox-maildir.xml" />
     <import resource="classpath:META-INF/org/apache/james/spring-mailbox-memory.xml" />
+    <!--  
     <import resource="classpath:META-INF/org/apache/james/spring-mailbox-hbase.xml" />
+    -->
     <!-- 
       Mailbox Copier
      -->
     <bean id="mailboxcopier" class="org.apache.james.mailbox.copier.MailboxCopierImpl"/>
+
+    <!-- 
+      Mailbox ACL Resolver
+     -->
+    <bean id="aclResolver" class="org.apache.james.mailbox.UnionMailboxACLResolver"/>
+    <!-- 
+      Group Membership Resolver
+     -->
+    <bean id="groupMembershipResolver" class="org.apache.james.mailbox.SimpleGroupMembershipResolver"/>
           
 </beans>

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxMetaData.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxMetaData.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxMetaData.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxMetaData.java Sat Jan 28 11:56:55 2012
@@ -24,9 +24,9 @@ import java.util.List;
 
 import javax.mail.Flags;
 
+import org.apache.james.mailbox.MailboxACL;
 import org.apache.james.mailbox.MessageManager;
 
-
 /**
  * Describes the current state of a mailbox.
  */
@@ -43,9 +43,9 @@ public class MailboxMetaData implements 
     private final boolean writeable;
     private final long highestModSeq;
     private final boolean modSeqPermanent;
-    
-    public MailboxMetaData(final List<Long> recent, final Flags premanentFlags, final long uidValidity, final long nextUid, final long highestModSeq, 
-            final long messageCount, final long unseenCount, final Long firstUnseen, final boolean writeable, final boolean modSeqPermanent) {
+    private final MailboxACL acl;
+
+    public MailboxMetaData(final List<Long> recent, final Flags premanentFlags, final long uidValidity, final long nextUid, final long highestModSeq, final long messageCount, final long unseenCount, final Long firstUnseen, final boolean writeable, final boolean modSeqPermanent, MailboxACL acl) {
         super();
         if (recent == null) {
             this.recent = new ArrayList<Long>();
@@ -64,6 +64,7 @@ public class MailboxMetaData implements 
         this.firstUnseen = firstUnseen;
         this.writeable = writeable;
         this.modSeqPermanent = modSeqPermanent;
+        this.acl = acl;
     }
 
     /**
@@ -142,4 +143,14 @@ public class MailboxMetaData implements 
     public boolean isModSeqPermanent() {
         return modSeqPermanent;
     }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.james.mailbox.MessageManager.MetaData#getACL()
+     */
+    @Override
+    public MailboxACL getACL() {
+        return acl;
+    }
 }

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java Sat Jan 28 11:56:55 2012
@@ -27,24 +27,26 @@ import java.util.Locale;
 import java.util.Random;
 
 import org.apache.james.mailbox.BadCredentialsException;
+import org.apache.james.mailbox.MailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxExistsException;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxMetaData;
+import org.apache.james.mailbox.MailboxMetaData.Selectability;
 import org.apache.james.mailbox.MailboxNotFoundException;
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxPathLocker;
+import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
 import org.apache.james.mailbox.MailboxQuery;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.MailboxSessionIdGenerator;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.RequestAware;
 import org.apache.james.mailbox.StandardMailboxMetaDataComparator;
-import org.apache.james.mailbox.MailboxMetaData.Selectability;
-import org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution;
-import org.apache.james.mailbox.MailboxSession.SessionType;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -74,11 +76,14 @@ public class StoreMailboxManager<Id> imp
     private final MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory;    
     
     private final Authenticator authenticator;
-    private final static Random RANDOM = new Random();
     
-    private int copyBatchSize = 0;
+    private final MailboxACLResolver aclResolver;
+    
+    private final GroupMembershipResolver groupMembershipResolver;
     
+    private final static Random RANDOM = new Random();
     
+    private int copyBatchSize = 0;
 
     private MailboxPathLocker locker;
 
@@ -89,14 +94,16 @@ public class StoreMailboxManager<Id> imp
     private int fetchBatchSize = DEFAULT_FETCH_BATCH_SIZE;
 
     
-    public StoreMailboxManager(MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, final Authenticator authenticator, final MailboxPathLocker locker) {
+    public StoreMailboxManager(MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, final Authenticator authenticator, final MailboxPathLocker locker, final MailboxACLResolver aclResolver, final GroupMembershipResolver groupMembershipResolver) {
         this.authenticator = authenticator;
         this.locker = locker;
-        this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;       
+        this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
+        this.aclResolver = aclResolver;
+        this.groupMembershipResolver = groupMembershipResolver;
     }
     
-    public StoreMailboxManager(MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, final Authenticator authenticator) {
-        this(mailboxSessionMapperFactory, authenticator, new JVMMailboxPathLocker());
+    public StoreMailboxManager(MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, final Authenticator authenticator, final MailboxACLResolver aclResolver, final GroupMembershipResolver groupMembershipResolver) {
+        this(mailboxSessionMapperFactory, authenticator, new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver);
     }
    
     public void setMailboxSessionIdGenerator(MailboxSessionIdGenerator idGenerator) {
@@ -179,6 +186,13 @@ public class StoreMailboxManager<Id> imp
         return locker;
     }
     
+    public MailboxACLResolver getAclResolver() {
+        return aclResolver;
+    }
+
+    public GroupMembershipResolver getGroupMembershipResolver() {
+        return groupMembershipResolver;
+    }
     
     /**
      * Set the {@link AbstractDelegatingMailboxListener} to use with this {@link MailboxManager} instance. If none is set here a {@link HashMapDelegatingMailboxListener} instance will
@@ -284,7 +298,7 @@ public class StoreMailboxManager<Id> imp
      * @return storeMailbox
      */
     protected StoreMessageManager<Id> createMessageManager(Mailbox<Id> mailbox, MailboxSession session) throws MailboxException {
-        return new StoreMessageManager<Id>(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), getLocker(), mailbox);
+        return new StoreMessageManager<Id>(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), getLocker(), mailbox, getAclResolver(), getGroupMembershipResolver());
     }
 
     /**

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=1237050&r1=1237049&r2=1237050&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 Sat Jan 28 11:56:55 2012
@@ -38,18 +38,24 @@ import javax.mail.util.SharedFileInputSt
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.TeeInputStream;
+import org.apache.james.mailbox.MailboxACL;
+import org.apache.james.mailbox.MailboxACL.MailboxACLRight;
+import org.apache.james.mailbox.MailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
+import org.apache.james.mailbox.MessageResult.FetchGroup;
 import org.apache.james.mailbox.MessageResultIterator;
 import org.apache.james.mailbox.ReadOnlyException;
 import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.UnsupportedRightException;
 import org.apache.james.mailbox.UpdatedFlags;
-import org.apache.james.mailbox.MessageResult.FetchGroup;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
@@ -103,17 +109,23 @@ public class StoreMessageManager<Id> imp
     private final MessageMapperFactory<Id> mapperFactory;
 
     private final MessageSearchIndex<Id> index;
+    
+    private final MailboxACLResolver aclResolver;
+    
+    private final GroupMembershipResolver groupMembershipResolver;
 
 	private MailboxPathLocker locker;
 
     private int fetchBatchSize;
     
-    public StoreMessageManager(final MessageMapperFactory<Id> mapperFactory, final MessageSearchIndex<Id> index, final MailboxEventDispatcher<Id> dispatcher, final MailboxPathLocker locker, final Mailbox<Id> mailbox) throws MailboxException {
+    public StoreMessageManager(final MessageMapperFactory<Id> mapperFactory, final MessageSearchIndex<Id> index, final MailboxEventDispatcher<Id> dispatcher, final MailboxPathLocker locker, final Mailbox<Id> mailbox, final MailboxACLResolver aclResolver, final GroupMembershipResolver groupMembershipResolver) throws MailboxException {
         this.mailbox = mailbox;
         this.dispatcher = dispatcher;
         this.mapperFactory = mapperFactory;
         this.index = index;
         this.locker = locker;
+        this.aclResolver = aclResolver;
+        this.groupMembershipResolver = groupMembershipResolver;
     }
     
     public void setFetchBatchSize(int fetchBatchSize) {
@@ -395,6 +407,7 @@ public class StoreMessageManager<Id> imp
      */
     public MetaData getMetaData(boolean resetRecent, MailboxSession mailboxSession, 
             org.apache.james.mailbox.MessageManager.MetaData.FetchGroup fetchGroup) throws MailboxException {
+        
         final List<Long> recent;
         final Flags permanentFlags = getPermanentFlags(mailboxSession);
         final long uidValidity = getMailboxEntity().getUidValidity();
@@ -436,7 +449,10 @@ public class StoreMessageManager<Id> imp
                 recent = new ArrayList<Long>();
                 break;
         }
-        return new MailboxMetaData(recent, permanentFlags, uidValidity, uidNext,highestModSeq, messageCount, unseenCount, firstUnseen, isWriteable(mailboxSession), isModSeqPermanent(mailboxSession));
+        // FIXME
+        boolean resourceOwnerIsGroup = false;
+        MailboxACL resolvedAcl = aclResolver.applyGlobalACL(mailbox.getACL(), resourceOwnerIsGroup );
+        return new MailboxMetaData(recent, permanentFlags, uidValidity, uidNext,highestModSeq, messageCount, unseenCount, firstUnseen, isWriteable(mailboxSession), isModSeqPermanent(mailboxSession), resolvedAcl );
     }
 
  
@@ -676,4 +692,15 @@ public class StoreMessageManager<Id> imp
         MessageMapper<Id> messageMapper = mapperFactory.getMessageMapper(session);
         return messageMapper.findFirstUnseenMessageUid(getMailboxEntity());
     }
+    
+    public boolean hasRight(MailboxACLRight right, MailboxSession session) throws UnsupportedRightException {
+        User user = session.getUser();
+        String userName = user != null ? user.getUserName() : null;
+        
+        // FIXME probably mailbox should provide the information whether the resource owner is group; otherwise user names and group names may clash
+        boolean resourceOwnerIsGroup = false;
+        
+        return aclResolver.hasRight(userName, groupMembershipResolver, right, mailbox.getACL(), mailbox.getUser(), resourceOwnerIsGroup);
+    }
+    
 }

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Mailbox.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Mailbox.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Mailbox.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Mailbox.java Sat Jan 28 11:56:55 2012
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.mail.model;
 
+import org.apache.james.mailbox.MailboxACL;
+
 /**
  * Models long term mailbox data.
  */
@@ -70,4 +72,20 @@ public interface Mailbox<Id> {
      * @return uid validity
      */
     long getUidValidity();
+    
+    
+    /**
+     * Gets the current ACL for this mailbox.
+     *
+     * @return ACL
+     */
+    MailboxACL getACL();
+    
+    /**
+     * Sets the current ACL for this mailbox.
+     *
+     * @param acl
+     */
+    void setACL(MailboxACL acl);
+    
 }
\ No newline at end of file

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java Sat Jan 28 11:56:55 2012
@@ -18,7 +18,9 @@
  ****************************************************************/
 package org.apache.james.mailbox.store.mail.model.impl;
 
+import org.apache.james.mailbox.MailboxACL;
 import org.apache.james.mailbox.MailboxPath;
+import org.apache.james.mailbox.SimpleMailboxACL;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 public class SimpleMailbox<Id> implements Mailbox<Id> {
@@ -28,6 +30,7 @@ public class SimpleMailbox<Id> implement
     private String user;
     private String name;
     private long uidValidity;
+    private MailboxACL acl = SimpleMailboxACL.EMPTY;
 
     public SimpleMailbox(MailboxPath path, long uidValidity) {
         this.namespace = path.getNamespace();
@@ -148,4 +151,20 @@ public class SimpleMailbox<Id> implement
         this.id = id;
     }
 
+    /* (non-Javadoc)
+     * @see org.apache.james.mailbox.store.mail.model.Mailbox#getACL()
+     */
+    @Override
+    public MailboxACL getACL() {
+        return acl;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.james.mailbox.store.mail.model.Mailbox#setACL(org.apache.james.mailbox.MailboxACL)
+     */
+    @Override
+    public void setACL(MailboxACL acl) {
+        this.acl = acl;
+    }
+
 }

Modified: james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherFlagsTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherFlagsTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherFlagsTest.java (original)
+++ james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherFlagsTest.java Sat Jan 28 11:56:55 2012
@@ -26,9 +26,11 @@ import java.util.Iterator;
 
 import javax.mail.Flags;
 
+import org.apache.james.mailbox.MailboxACL;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageResult;
+import org.apache.james.mailbox.SimpleMailboxACL;
 import org.apache.james.mailbox.UpdatedFlags;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.store.MailboxEventDispatcher;
@@ -102,6 +104,16 @@ public class MailboxEventDispatcherFlags
         public long getUidValidity() {
             return 0;
         }
+        
+        @Override
+        public MailboxACL getACL() {
+            return SimpleMailboxACL.EMPTY;
+        }
+
+        @Override
+        public void setACL(MailboxACL acl) {
+        }
+
     };
     
     @Before

Modified: james/mailbox/trunk/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java?rev=1237050&r1=1237049&r2=1237050&view=diff
==============================================================================
--- james/mailbox/trunk/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java (original)
+++ james/mailbox/trunk/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java Sat Jan 28 11:56:55 2012
@@ -24,11 +24,15 @@ import java.util.List;
 import junit.framework.Assert;
 
 import org.apache.james.mailbox.BadCredentialsException;
+import org.apache.james.mailbox.MailboxACLResolver;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.UnionMailboxACLResolver;
+import org.apache.james.mailbox.MailboxACLResolver.GroupMembershipResolver;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.mock.MockMailboxManager;
 import org.apache.james.mailbox.store.Authenticator;
@@ -147,14 +151,19 @@ public class MailboxCopierTest {
      * @return a new InMemoryMailboxManager
      */
     private MailboxManager newInMemoryMailboxManager() {
-    
+        MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
+        GroupMembershipResolver groupMembershipResolver = new SimpleGroupMembershipResolver();
+
         return new StoreMailboxManager<Long>(
             new InMemoryMailboxSessionMapperFactory(), 
             new Authenticator() {
                 public boolean isAuthentic(String userid, CharSequence passwd) {
                     return true;
                 }
-            });
+            },
+            aclResolver,
+            groupMembershipResolver
+            );
     
     }
 



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