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-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to