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 rd...@apache.org on 2008/08/27 21:27:28 UTC

svn commit: r689578 - in /james/server/trunk: imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ imap-mailbox-processo...

Author: rdonkin
Date: Wed Aug 27 12:27:27 2008
New Revision: 689578

URL: http://svn.apache.org/viewvc?rev=689578&view=rev
Log:
Decouple IMAP processing from user-api. Deployment adapts JAMES core API to protocol specific interfaces. JAMES-860

Added:
    james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java
    james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/PheonixUserManager.java
    james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java
Removed:
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/IMAPSubscriber.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscriptionException.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UserMetaDataIMAPSubscriber.java
    james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/UserMetaDataIMAPSubscriberTest.java
Modified:
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ImapSessionUtils.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/CopyProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/Imap4Rev1ProcessorFactory.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ListProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LoginProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscribeProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UnsubscribeProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/main/DefaultImapProcessorFactory.java
    james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessorTest.java
    james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessorTest.java
    james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialFetchBodyElementTest.java
    james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialWritableByteChannelTest.java
    james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
    james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java
    james/server/trunk/phoenix-deployment/src/java/org/apache/james/imapserver/phoenix/PhoenixImapProcessorFactory.java
    james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java
    james/server/trunk/phoenix-deployment/src/test/org/apache/james/experimental/imapserver/HostSystemFactory.java
    james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java
    james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java Wed Aug 27 12:27:27 2008
@@ -21,7 +21,6 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MailboxSession;
 import org.apache.james.mailboxmanager.manager.MailboxManager;
@@ -38,13 +37,13 @@
     }
     
     public String buildFullName(final ImapSession session, String mailboxName) throws MailboxManagerException {
-        User user = ImapSessionUtils.getUser(session);
+        final String user = ImapSessionUtils.getUserName(session);
         return buildFullName(mailboxName, user);
     }
 
-    private String buildFullName(String mailboxName, User user) throws MailboxManagerException {
+    private String buildFullName(String mailboxName, String user) throws MailboxManagerException {
         if (!mailboxName.startsWith(NAMESPACE_PREFIX)) {
-            mailboxName = mailboxManagerProvider.getMailboxManager().resolve(user.getUserName(),mailboxName);
+            mailboxName = mailboxManagerProvider.getMailboxManager().resolve(user,mailboxName);
         }
         return mailboxName;
     }
@@ -52,21 +51,29 @@
     public MailboxManager getMailboxManager( final ImapSession session ) throws MailboxManagerException {
         // TODO: removed badly implemented and ineffective check that mailbox user matches current user
         // TODO: add check into user login methods
+        // TODO: shouldn't need to cache mailbox manager
+        // TODO: consolidate API by deleting provider and supply manager direct
         MailboxManager result = (MailboxManager) session.getAttribute( ImapSessionUtils.MAILBOX_MANAGER_ATTRIBUTE_SESSION_KEY );
         if (result == null) {
-            // TODO: handle null user
-            final User user = ImapSessionUtils.getUser(session);
             result = mailboxManagerProvider.getMailboxManager();
-            result.getMailbox(buildFullName(MailboxManager.INBOX, user), true);
-            // TODO: reconsider decision not to sunchronise
-            // TODO: mailbox creation is ATM an expensive operation
-            // TODO: so caching is required
-            // TODO: caching in the session seems like the wrong design decision, though
-            // TODO: the mailbox provider should perform any caching that is required
-            session.setAttribute( ImapSessionUtils.MAILBOX_MANAGER_ATTRIBUTE_SESSION_KEY, result );
-            if (ImapSessionUtils.getMailboxSession(session) == null) {
-                final MailboxSession mailboxSession = (MailboxSession) result.createSession(); 
-                ImapSessionUtils.setMailboxSession(session, mailboxSession);
+            //
+            // Mailbox manager is the primary point of contact
+            // But not need to create mailbox until user is logged in
+            //
+            final String user = ImapSessionUtils.getUserName(session);
+            if (user != null)
+            {
+                result.getMailbox(buildFullName(MailboxManager.INBOX, user), true);
+                // TODO: reconsider decision not to sunchronise
+                // TODO: mailbox creation is ATM an expensive operation
+                // TODO: so caching is required
+                // TODO: caching in the session seems like the wrong design decision, though
+                // TODO: the mailbox provider should perform any caching that is required
+                session.setAttribute( ImapSessionUtils.MAILBOX_MANAGER_ATTRIBUTE_SESSION_KEY, result );
+                if (ImapSessionUtils.getMailboxSession(session) == null) {
+                    final MailboxSession mailboxSession = (MailboxSession) result.createSession(); 
+                    ImapSessionUtils.setMailboxSession(session, mailboxSession);
+                }
             }
         }
         return result;

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ImapSessionUtils.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ImapSessionUtils.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ImapSessionUtils.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ImapSessionUtils.java Wed Aug 27 12:27:27 2008
@@ -25,7 +25,6 @@
 import org.apache.james.api.imap.message.response.ImapResponseMessage;
 import org.apache.james.api.imap.process.ImapSession;
 import org.apache.james.api.imap.process.ImapProcessor.Responder;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.response.base.AbstractImapResponse;
 import org.apache.james.mailboxmanager.MailboxSession;
 import org.apache.james.mailboxmanager.mailbox.Mailbox;
@@ -69,12 +68,12 @@
         session.setAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY, mailboxSession);
     }
     
-    public static User getUser( final ImapSession session ) {
-        final User result = (User) session.getAttribute(MAILBOX_USER_ATTRIBUTE_SESSION_KEY);
+    public static String getUserName( final ImapSession session ) {
+        final String result = (String) session.getAttribute(MAILBOX_USER_ATTRIBUTE_SESSION_KEY);
         return result;
     }
     
-    public static void setUser( final ImapSession session, final User user) {
+    public static void setUserName( final ImapSession session, final String user) {
         session.setAttribute(MAILBOX_USER_ATTRIBUTE_SESSION_KEY, user);
     }
 

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java Wed Aug 27 12:27:27 2008
@@ -35,9 +35,9 @@
 import org.apache.james.imap.message.response.imap4rev1.FetchResponse;
 import org.apache.james.imap.message.response.imap4rev1.RecentResponse;
 import org.apache.james.imap.message.response.imap4rev1.status.UntaggedNoResponse;
-import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MailboxSession;
+import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.impl.FetchGroupImpl;
 import org.apache.james.mailboxmanager.impl.MessageRangeImpl;

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/CopyProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/CopyProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/CopyProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/CopyProcessor.java Wed Aug 27 12:27:27 2008
@@ -31,9 +31,9 @@
 import org.apache.james.imap.message.request.imap4rev1.CopyRequest;
 import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
-import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MailboxSession;
+import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.impl.MessageRangeImpl;
 import org.apache.james.mailboxmanager.mailbox.Mailbox;
 import org.apache.james.mailboxmanager.manager.MailboxManager;

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/Imap4Rev1ProcessorFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/Imap4Rev1ProcessorFactory.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/Imap4Rev1ProcessorFactory.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/Imap4Rev1ProcessorFactory.java Wed Aug 27 12:27:27 2008
@@ -21,7 +21,6 @@
 
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
-import org.apache.james.api.user.UsersRepository;
 import org.apache.james.imapserver.processor.imap4rev1.fetch.FetchProcessor;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 
@@ -31,10 +30,9 @@
 public class Imap4Rev1ProcessorFactory {
 
     public static final ImapProcessor createDefaultChain(
-            final ImapProcessor chainEndProcessor, final UsersRepository users,
+            final ImapProcessor chainEndProcessor,
             final MailboxManagerProvider mailboxManagerProvider, 
-            final StatusResponseFactory statusResponseFactory,
-            final IMAPSubscriber subscriber) {
+            final StatusResponseFactory statusResponseFactory) {
         
         final LogoutProcessor logoutProcessor = new LogoutProcessor(
                 chainEndProcessor, statusResponseFactory);
@@ -43,7 +41,7 @@
         final CheckProcessor checkProcessor = new CheckProcessor(
                 capabilityProcessor, statusResponseFactory);
         final LoginProcessor loginProcessor = new LoginProcessor(
-                checkProcessor, users, statusResponseFactory);
+                checkProcessor, mailboxManagerProvider, statusResponseFactory);
         final RenameProcessor renameProcessor = new RenameProcessor(
                 loginProcessor, mailboxManagerProvider, statusResponseFactory);
         final DeleteProcessor deleteProcessor = new DeleteProcessor(
@@ -53,9 +51,9 @@
         final CloseProcessor closeProcessor = new CloseProcessor(
                 createProcessor,statusResponseFactory);
         final UnsubscribeProcessor unsubscribeProcessor = new UnsubscribeProcessor(
-                closeProcessor, statusResponseFactory, subscriber);
+                closeProcessor, mailboxManagerProvider, statusResponseFactory);
         final SubscribeProcessor subscribeProcessor = new SubscribeProcessor(
-                unsubscribeProcessor, statusResponseFactory, subscriber);
+                unsubscribeProcessor, mailboxManagerProvider, statusResponseFactory);
         final CopyProcessor copyProcessor = new CopyProcessor(
                 subscribeProcessor, mailboxManagerProvider, statusResponseFactory);
         final AuthenticateProcessor authenticateProcessor = new AuthenticateProcessor(
@@ -72,7 +70,7 @@
         final StatusProcessor statusProcessor = new StatusProcessor(
                 noopProcessor, mailboxManagerProvider, statusResponseFactory);
         final LSubProcessor lsubProcessor = new LSubProcessor(statusProcessor,
-                mailboxManagerProvider, statusResponseFactory, subscriber);
+                mailboxManagerProvider, statusResponseFactory);
         final ListProcessor listProcessor = new ListProcessor(lsubProcessor,
                 mailboxManagerProvider, statusResponseFactory);
         final SearchProcessor searchProcessor = new SearchProcessor(

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessor.java Wed Aug 27 12:27:27 2008
@@ -31,22 +31,21 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.request.imap4rev1.LsubRequest;
 import org.apache.james.imap.message.response.imap4rev1.server.LSubResponse;
 import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
+import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.manager.MailboxExpression;
+import org.apache.james.mailboxmanager.manager.MailboxManager;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
 
 public class LSubProcessor extends AbstractMailboxAwareProcessor {
-
-    final IMAPSubscriber subscriber;
     
     public LSubProcessor(final ImapProcessor next, final MailboxManagerProvider mailboxManagerProvider, 
-            final StatusResponseFactory factory, final IMAPSubscriber subscriber) {
+            final StatusResponseFactory factory) {
         super(next, mailboxManagerProvider, factory);
-        this.subscriber = subscriber;
     }
 
     protected boolean isAcceptable(ImapMessage message) {
@@ -79,13 +78,17 @@
                 displayTextKey = exceptionKey;
             }
             no(command, tag, responder, displayTextKey);
-        }
+        } catch (MailboxManagerException e) {
+            getLogger().debug("Subscription failed", e);
+            final HumanReadableTextKey displayTextKey = HumanReadableTextKey.GENERIC_LSUB_FAILURE;
+            no(command, tag, responder, displayTextKey);
+        } 
     }
 
-    private void listSubscriptions(ImapSession session, Responder responder, final String referenceName, final String mailboxPattern) throws SubscriptionException {
-        final User user = ImapSessionUtils.getUser(session);
-        final String userName = user.getUserName();
-        final Collection mailboxes = subscriber.subscriptions(userName);
+    private void listSubscriptions(ImapSession session, Responder responder, final String referenceName, final String mailboxPattern) throws SubscriptionException, MailboxManagerException {
+        final String userName = ImapSessionUtils.getUserName(session);
+        final MailboxManager manager = getMailboxManager(session);
+        final Collection mailboxes = manager.subscriptions(userName);
         final MailboxExpression expression 
             = new MailboxExpression(referenceName, mailboxPattern, '*', '%');
         final Collection mailboxResponses = new ArrayList();

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ListProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ListProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ListProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ListProcessor.java Wed Aug 27 12:27:27 2008
@@ -27,7 +27,6 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.request.imap4rev1.ListRequest;
 import org.apache.james.imap.message.response.imap4rev1.server.ListResponse;
 import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
@@ -78,9 +77,9 @@
 
             final ListResult[] listResults;
 
-            final User user = ImapSessionUtils.getUser(session);
+            final String user = ImapSessionUtils.getUserName(session);
             final String personalNamespace = ImapConstants.USER_NAMESPACE
-            + ImapConstants.HIERARCHY_DELIMITER_CHAR + user.getUserName();
+            + ImapConstants.HIERARCHY_DELIMITER_CHAR + user;
 
             if (mailboxPattern.length() == 0) {
                 // An empty mailboxPattern signifies a request for the hierarchy

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LoginProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LoginProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LoginProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/LoginProcessor.java Wed Aug 27 12:27:27 2008
@@ -26,28 +26,26 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
-import org.apache.james.api.user.UsersRepository;
 import org.apache.james.imap.message.request.imap4rev1.LoginRequest;
-import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor;
+import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.manager.MailboxManager;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 
 /**
  * Processes a <code>LOGIN</code> command.
  */
-public class LoginProcessor extends AbstractImapRequestProcessor {
+public class LoginProcessor extends AbstractMailboxAwareProcessor {
 
     private static final String ATTRIBUTE_NUMBER_OF_FAILURES 
         = "org.apache.james.imapserver.processor.imap4rev1.LoginProcessor.NUMBER_OF_FAILURES";
     // TODO: this should be configurable
     private static final int MAX_FAILURES = 3;
-    
-    private final UsersRepository users;
 
-    public LoginProcessor(final ImapProcessor next, final UsersRepository users, 
+    public LoginProcessor(final ImapProcessor next, final MailboxManagerProvider mailboxManagerProvider, 
             final StatusResponseFactory factory) {
-        super(next, factory);
-        this.users = users;
+        super(next, mailboxManagerProvider, factory);
     }
 
     protected boolean isAcceptable(ImapMessage message) {
@@ -56,29 +54,36 @@
 
     protected void doProcess(ImapRequest message,
             ImapSession session, String tag, ImapCommand command, Responder responder) {
-        final LoginRequest request = (LoginRequest) message;
-        final String userid = request.getUserid();
-        final String passwd = request.getPassword();
-        if (users.test(userid, passwd)) {
-            User user = users.getUserByName(userid);
-            session.authenticated();
-            ImapSessionUtils.setUser(session, user);
-            okComplete(command, tag, responder);
-        } else {
-            final Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
-            final int failures;
-            if (currentNumberOfFailures == null) {
-                failures = 1;
+        try
+        {
+            final LoginRequest request = (LoginRequest) message;
+            final String userid = request.getUserid();
+            final String passwd = request.getPassword();
+            final MailboxManager mailboxManager = getMailboxManager(session);
+            if (mailboxManager.isAuthentic(userid, passwd)) {
+                session.authenticated();
+                ImapSessionUtils.setUserName(session, userid);
+                okComplete(command, tag, responder);
             } else {
-                failures = currentNumberOfFailures.intValue() + 1;
-            }
-            if (failures < MAX_FAILURES) {
-                session.setAttribute(ATTRIBUTE_NUMBER_OF_FAILURES, new Integer(failures));
-                no(command,tag, responder, HumanReadableTextKey.INVALID_LOGIN);
-            } else {
-                bye(responder, HumanReadableTextKey.TOO_MANY_FAILURES);
-                session.logout();
+                final Integer currentNumberOfFailures = (Integer) session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
+                final int failures;
+                if (currentNumberOfFailures == null) {
+                    failures = 1;
+                } else {
+                    failures = currentNumberOfFailures.intValue() + 1;
+                }
+                if (failures < MAX_FAILURES) {
+                    session.setAttribute(ATTRIBUTE_NUMBER_OF_FAILURES, new Integer(failures));
+                    no(command,tag, responder, HumanReadableTextKey.INVALID_LOGIN);
+                } else {
+                    bye(responder, HumanReadableTextKey.TOO_MANY_FAILURES);
+                    session.logout();
+                }
             }
+        } catch (MailboxManagerException e) {
+            getLogger().debug("Login failed", e);
+            final HumanReadableTextKey displayTextKey = HumanReadableTextKey.INVALID_LOGIN;
+            no(command, tag, responder, displayTextKey);
         }
     }
 }

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StoreProcessor.java Wed Aug 27 12:27:27 2008
@@ -35,9 +35,9 @@
 import org.apache.james.imap.message.response.imap4rev1.FetchResponse;
 import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
-import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MailboxSession;
+import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResult.FetchGroup;
 import org.apache.james.mailboxmanager.impl.FetchGroupImpl;

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscribeProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscribeProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscribeProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SubscribeProcessor.java Wed Aug 27 12:27:27 2008
@@ -26,19 +26,19 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.request.imap4rev1.SubscribeRequest;
-import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor;
+import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.manager.MailboxManager;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
 
-public class SubscribeProcessor extends AbstractImapRequestProcessor {
+public class SubscribeProcessor extends AbstractMailboxAwareProcessor {
 
-    private final IMAPSubscriber subscriber;
-    
-    public SubscribeProcessor(final ImapProcessor next,
-            final StatusResponseFactory factory, final IMAPSubscriber subscriber) {
-        super(next, factory);
-        this.subscriber = subscriber;
+    public SubscribeProcessor(final ImapProcessor next, final MailboxManagerProvider mailboxManagerProvider,
+            final StatusResponseFactory factory) {
+        super(next, mailboxManagerProvider, factory);
     }
 
     protected boolean isAcceptable(ImapMessage message) {
@@ -49,10 +49,10 @@
             ImapSession session, String tag, ImapCommand command, Responder responder) {
         final SubscribeRequest request = (SubscribeRequest) message;
         final String mailboxName = request.getMailboxName();
-        final User user = ImapSessionUtils.getUser(session);
-        final String userName = user.getUserName();
+        final String userName = ImapSessionUtils.getUserName(session);
         try {
-            subscriber.subscribe(userName, mailboxName);
+            final MailboxManager manager = getMailboxManager(session);
+            manager.subscribe(userName, mailboxName);
             
             unsolicitedResponses(session, responder, false);
             okComplete(command, tag, responder);
@@ -69,6 +69,12 @@
                 displayTextKey = exceptionKey;
             }
             no(command, tag, responder, displayTextKey);
+        } catch (MailboxManagerException e) {
+            getLogger().debug("Subscription failed", e);
+            unsolicitedResponses(session, responder, false);
+            
+            final HumanReadableTextKey displayTextKey = HumanReadableTextKey.GENERIC_SUBSCRIPTION_FAILURE;
+            no(command, tag, responder, displayTextKey);
         }
     }
 }

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UnsubscribeProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UnsubscribeProcessor.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UnsubscribeProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/UnsubscribeProcessor.java Wed Aug 27 12:27:27 2008
@@ -26,19 +26,19 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.request.imap4rev1.UnsubscribeRequest;
-import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor;
+import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
+import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.manager.MailboxManager;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
 
-public class UnsubscribeProcessor extends AbstractImapRequestProcessor {
-
-    private final IMAPSubscriber subscriber;
+public class UnsubscribeProcessor extends AbstractMailboxAwareProcessor {
     
-    public UnsubscribeProcessor(final ImapProcessor next, final StatusResponseFactory factory,
-            final IMAPSubscriber subscriber) {
-        super(next, factory);
-        this.subscriber = subscriber;
+    public UnsubscribeProcessor(final ImapProcessor next, final MailboxManagerProvider mailboxManagerProvider,
+            final StatusResponseFactory factory) {
+        super(next, mailboxManagerProvider, factory);
     }
 
     protected boolean isAcceptable(ImapMessage message) {
@@ -49,10 +49,10 @@
             ImapSession session, String tag, ImapCommand command, Responder responder) {
         final UnsubscribeRequest request = (UnsubscribeRequest) message;
         final String mailboxName = request.getMailboxName();
-        final User user = ImapSessionUtils.getUser(session);
-        final String userName = user.getUserName();
+        final String userName = ImapSessionUtils.getUserName(session);
         try {
-            subscriber.unsubscribe(userName, mailboxName);
+            final MailboxManager mailboxManager = getMailboxManager(session);
+            mailboxManager.unsubscribe(userName, mailboxName);
             
             unsolicitedResponses(session, responder, false);
             okComplete(command, tag, responder);
@@ -69,6 +69,12 @@
                 displayTextKey = exceptionKey;
             }
             no(command, tag, responder, displayTextKey);
+        } catch (MailboxManagerException e) {
+            getLogger().debug("Subscription failed", e);
+            unsolicitedResponses(session, responder, false);
+            
+            final HumanReadableTextKey displayTextKey = HumanReadableTextKey.GENERIC_SUBSCRIPTION_FAILURE;
+            no(command, tag, responder, displayTextKey);
         }
     }
 }

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/main/DefaultImapProcessorFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/main/DefaultImapProcessorFactory.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/main/DefaultImapProcessorFactory.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/main/DefaultImapProcessorFactory.java Wed Aug 27 12:27:27 2008
@@ -22,14 +22,10 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapProcessorFactory;
-import org.apache.james.api.user.UserMetaDataRespository;
-import org.apache.james.api.user.UsersRepository;
 import org.apache.james.imap.message.response.imap4rev1.status.UnpooledStatusResponseFactory;
 import org.apache.james.imapserver.processor.base.ImapResponseMessageProcessor;
 import org.apache.james.imapserver.processor.base.UnknownRequestImapProcessor;
-import org.apache.james.imapserver.processor.imap4rev1.IMAPSubscriber;
 import org.apache.james.imapserver.processor.imap4rev1.Imap4Rev1ProcessorFactory;
-import org.apache.james.imapserver.processor.imap4rev1.UserMetaDataIMAPSubscriber;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 
 /**
@@ -37,26 +33,19 @@
  */
 public class DefaultImapProcessorFactory implements ImapProcessorFactory {
 
-    public static final ImapProcessor createDefaultProcessor(final UsersRepository usersRepository,
-            final MailboxManagerProvider mailboxManagerProvider, final UserMetaDataRespository userMetaDataRepository) {
+    public static final ImapProcessor createDefaultProcessor(final MailboxManagerProvider mailboxManagerProvider) {
         final StatusResponseFactory statusResponseFactory = new UnpooledStatusResponseFactory();
         final UnknownRequestImapProcessor unknownRequestImapProcessor = new UnknownRequestImapProcessor(statusResponseFactory);
-        final IMAPSubscriber subscriber = new UserMetaDataIMAPSubscriber(userMetaDataRepository);
         final ImapProcessor imap4rev1Chain = Imap4Rev1ProcessorFactory.createDefaultChain(unknownRequestImapProcessor, 
-                usersRepository, mailboxManagerProvider, statusResponseFactory, subscriber);
+                mailboxManagerProvider, statusResponseFactory);
         final ImapProcessor result = new ImapResponseMessageProcessor(imap4rev1Chain);
         return result;
     }
     
-    private UsersRepository usersRepository;
     private MailboxManagerProvider mailboxManagerProvider;
-    private UserMetaDataRespository userMetaDataRepository;
     
-    public final void configure(UsersRepository usersRepository, MailboxManagerProvider mailboxManagerProvider, 
-            UserMetaDataRespository userMetaDataRepository) {
-        setUsersRepository(usersRepository);
+    public final void configure(MailboxManagerProvider mailboxManagerProvider) {
         setMailboxManagerProvider(mailboxManagerProvider);
-        setUserMetaDataRepository(userMetaDataRepository);
     }
     
     public final MailboxManagerProvider getMailboxManagerProvider() {
@@ -67,25 +56,8 @@
             MailboxManagerProvider mailboxManagerProvider) {
         this.mailboxManagerProvider = mailboxManagerProvider;
     }
-    
-    public final UsersRepository getUsersRepository() {
-        return usersRepository;
-    }
-    
-    public final void setUsersRepository(UsersRepository usersRepository) {
-        this.usersRepository = usersRepository;
-    }
-    
-    public final UserMetaDataRespository getUserMetaDataRepository() {
-        return userMetaDataRepository;
-    }
-
-    public final void setUserMetaDataRepository(
-            UserMetaDataRespository userMetaDataRepository) {
-        this.userMetaDataRepository = userMetaDataRepository;
-    }
 
     public ImapProcessor buildImapProcessor() {
-        return createDefaultProcessor(usersRepository, mailboxManagerProvider, userMetaDataRepository);
+        return createDefaultProcessor(mailboxManagerProvider);
     }
 }

Modified: james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessorTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessorTest.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessorTest.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/LSubProcessorTest.java Wed Aug 27 12:27:27 2008
@@ -29,11 +29,11 @@
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.user.User;
 import org.apache.james.imap.message.request.imap4rev1.LsubRequest;
 import org.apache.james.imap.message.response.imap4rev1.server.LSubResponse;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
 import org.apache.james.mailboxmanager.ListResult;
+import org.apache.james.mailboxmanager.manager.MailboxManager;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 import org.jmock.Mock;
 import org.jmock.MockObjectTestCase;
@@ -52,13 +52,12 @@
     LSubProcessor processor;
     Mock next;
     Mock provider;
+    Mock manager;
     Mock responder;
     Mock result;
     Mock session;
     Mock command;
     Mock serverResponseFactory;
-    Mock subscriber;
-    Mock user;
     Mock statusResponse;
     Collection subscriptions;
     ImapCommand imapCommand;
@@ -66,7 +65,6 @@
     
     protected void setUp() throws Exception {
         subscriptions = new ArrayList();
-        user = mock(User.class);
         serverResponseFactory = mock(StatusResponseFactory.class);
         session = mock(ImapSession.class);
         command = mock(ImapCommand.class);
@@ -74,12 +72,12 @@
         next = mock(ImapProcessor.class);
         responder = mock(ImapProcessor.Responder.class);
         result = mock(ListResult.class);
-        subscriber = mock(IMAPSubscriber.class);
         provider = mock(MailboxManagerProvider.class);
         statusResponse = mock(StatusResponse.class);
         responderImpl = (ImapProcessor.Responder) responder.proxy();
+        manager = mock(MailboxManager.class);
         processor = new LSubProcessor((ImapProcessor) next.proxy(), (MailboxManagerProvider) provider.proxy(), 
-                (StatusResponseFactory) serverResponseFactory.proxy(), (IMAPSubscriber) subscriber.proxy());
+                (StatusResponseFactory) serverResponseFactory.proxy());
     }
 
     protected void tearDown() throws Exception {
@@ -192,12 +190,14 @@
     }
     
     private void expectSubscriptions() {
-        user.expects(once()).method("getUserName").will(returnValue(USER));
+        session.expects(once()).method("getAttribute")
+        .with(eq(ImapSessionUtils.MAILBOX_MANAGER_ATTRIBUTE_SESSION_KEY))
+            .will(returnValue(manager.proxy()));
         session.expects(once()).method("getAttribute")
             .with(eq(ImapSessionUtils.MAILBOX_USER_ATTRIBUTE_SESSION_KEY))
-                .will(returnValue((User) user.proxy()));
+                .will(returnValue(USER));
         
-        subscriber.expects(once()).method("subscriptions")
+        manager.expects(once()).method("subscriptions")
             .with(eq(USER))
                 .will(returnValue(subscriptions));
     }

Modified: james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessorTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessorTest.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessorTest.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessorTest.java Wed Aug 27 12:27:27 2008
@@ -19,6 +19,11 @@
 
 package org.apache.james.imapserver.processor.imap4rev1;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.mail.Flags.Flag;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.display.HumanReadableTextKey;
 import org.apache.james.api.imap.message.IdRange;
@@ -41,11 +46,6 @@
 import org.jmock.Mock;
 import org.jmock.MockObjectTestCase;
 
-import javax.mail.Flags.Flag;
-
-import java.util.ArrayList;
-import java.util.List;
-
 public class SearchProcessorTest extends MockObjectTestCase {
     private static final int DAY = 6;
     private static final int MONTH = 6;

Modified: james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialFetchBodyElementTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialFetchBodyElementTest.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialFetchBodyElementTest.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialFetchBodyElementTest.java Wed Aug 27 12:27:27 2008
@@ -20,7 +20,6 @@
 package org.apache.james.imapserver.processor.imap4rev1.fetch;
 
 import org.apache.james.imap.message.response.imap4rev1.FetchResponse.BodyElement;
-import org.apache.james.imapserver.processor.imap4rev1.fetch.PartialFetchBodyElement;
 import org.jmock.Mock;
 import org.jmock.MockObjectTestCase;
 

Modified: james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialWritableByteChannelTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialWritableByteChannelTest.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialWritableByteChannelTest.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/test/java/org/apache/james/imapserver/processor/imap4rev1/fetch/PartialWritableByteChannelTest.java Wed Aug 27 12:27:27 2008
@@ -23,8 +23,6 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.WritableByteChannel;
 
-import org.apache.james.imapserver.processor.imap4rev1.fetch.PartialWritableByteChannel;
-
 import junit.framework.TestCase;
 
 public class PartialWritableByteChannelTest extends TestCase implements WritableByteChannel  {

Modified: james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java (original)
+++ james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/MailboxManager.java Wed Aug 27 12:27:27 2008
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailboxmanager.manager;
 
+import java.util.Collection;
+
 import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.ListResult;
 import org.apache.james.mailboxmanager.MailboxExistsException;
@@ -126,20 +128,8 @@
      * to be returned
      * @throws MailboxManagerException 
      */
-
     ListResult[] list(MailboxExpression expression) throws MailboxManagerException;
 
-    /**
-     * could be implemented later. There could be enviroments where
-     * subscribtions are stored in the mailbox database. Another possibility is
-     * to manage subscribtions in the user repository, e.g. a ldap attribute,
-     * 
-     * @param mailboxName
-     * @param value
-     */
-
-    void setSubscription(String mailboxName, boolean value) throws MailboxManagerException;
-
     boolean existsMailbox(String mailboxName) throws MailboxManagerException;
     
     /**
@@ -147,5 +137,34 @@
      * @return <code>MailboxSession</code>, not null
      */
     public MailboxSession createSession();
+
+    /**
+     * Autenticates the given user against the given password.
+     * @param userid user name
+     * @param passwd password supplied
+     * @return true if the user is authenticated
+     */
+    boolean isAuthentic(String userid, String passwd);
+    
+    /**
+     * Subscribes the user to the given mailbox.
+     * @param user the user name, not null
+     * @param mailbox the mailbox name, not null
+     */
+    public void subscribe(String user, String mailbox) throws SubscriptionException;
+    
+    /**
+     * Unsubscribes the user from the given mailbox.
+     * @param user the user name, not null
+     * @param mailbox the mailbox name, not null
+     */
+    public void unsubscribe(String user, String mailbox) throws SubscriptionException;
+    
+    /**
+     * Lists current subscriptions for the given user.
+     * @param user the user name, not null
+     * @return a <code>Collection<String></code> of mailbox names
+     */
+    public Collection subscriptions(String user) throws SubscriptionException;
 }
 

Added: james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java?rev=689578&view=auto
==============================================================================
--- james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java (added)
+++ james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java Wed Aug 27 12:27:27 2008
@@ -0,0 +1,57 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailboxmanager.manager;
+
+import org.apache.james.api.imap.display.HumanReadableTextKey;
+
+/**
+ * Indicates exception during subscription processing.
+ */
+public class SubscriptionException extends Exception {
+
+    private static final long serialVersionUID = -2057022968413471837L;
+
+    private final HumanReadableTextKey key;
+    
+    public SubscriptionException(HumanReadableTextKey key, Throwable cause) {
+        super(key.toString(), cause);
+        this.key = key;
+    }
+
+    public SubscriptionException(HumanReadableTextKey key) {
+        super(key.toString());
+        this.key = key;
+    }
+
+    public SubscriptionException(Throwable cause) {
+        super(cause);
+        key = null;
+    }
+
+    /**
+     * Gets the message key.
+     * @return the key, possibly null
+     */
+    public final HumanReadableTextKey getKey() {
+        return key;
+    }
+    
+    
+}

Modified: james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java (original)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/experimental/imapserver/ImapHandler.java Wed Aug 27 12:27:27 2008
@@ -42,7 +42,7 @@
  */
 public class ImapHandler implements ProtocolHandler, ImapConstants
 {
-	
+    
     private ProtocolHandlerHelper helper;
 
     private static final byte[] EMERGENCY_SIGNOFF = {'*',' ', 'B', 'Y', 'E', ' ', 

Modified: james/server/trunk/phoenix-deployment/src/java/org/apache/james/imapserver/phoenix/PhoenixImapProcessorFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/imapserver/phoenix/PhoenixImapProcessorFactory.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/imapserver/phoenix/PhoenixImapProcessorFactory.java (original)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/imapserver/phoenix/PhoenixImapProcessorFactory.java Wed Aug 27 12:27:27 2008
@@ -22,21 +22,15 @@
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
-import org.apache.james.api.user.UserMetaDataRespository;
-import org.apache.james.api.user.UsersRepository;
 import org.apache.james.imapserver.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 
 public class PhoenixImapProcessorFactory extends DefaultImapProcessorFactory implements Serviceable {
 
     public void service(ServiceManager serviceManager) throws ServiceException {
-        UsersRepository usersRepository = ( UsersRepository ) serviceManager.
-            lookup( UsersRepository.ROLE );
         MailboxManagerProvider mailboxManagerProvider = 
             (MailboxManagerProvider) serviceManager.lookup( MailboxManagerProvider.ROLE );
-        UserMetaDataRespository userMetaDataRepository =
-            (UserMetaDataRespository) serviceManager.lookup( UserMetaDataRespository.ROLE );
-        configure(usersRepository, mailboxManagerProvider, userMetaDataRepository);
+        configure(mailboxManagerProvider);
     }
 
 }

Added: james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/PheonixUserManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/PheonixUserManager.java?rev=689578&view=auto
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/PheonixUserManager.java (added)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/PheonixUserManager.java Wed Aug 27 12:27:27 2008
@@ -0,0 +1,154 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailboxmanager.torque;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.james.api.user.UserMetaDataRespository;
+import org.apache.james.api.user.UserRepositoryException;
+import org.apache.james.api.user.UsersRepository;
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
+
+/**
+ * Stores subscription data in the user meta-data repository.
+ */
+public class PheonixUserManager implements UserManager {
+
+    public static final String META_DATA_KEY
+        ="org.apache.james.IMAP_SUBSCRIPTIONS";
+    
+    private Log log = LogFactory.getLog(PheonixUserManager.class);
+    
+    private final UserMetaDataRespository repository;
+    private final Map userSubscriptionsByUser;
+    
+    private final UsersRepository usersRepository;
+    
+    public PheonixUserManager(final UserMetaDataRespository repository, final UsersRepository usersRepository) {
+        super();
+        this.repository = repository;
+        userSubscriptionsByUser = new HashMap();
+        this.usersRepository = usersRepository;
+    }
+
+    public void subscribe(String user, String mailbox)
+            throws SubscriptionException {
+        try {
+            final UserSubscription subscription = getUserSubscription(user);
+            subscription.subscribe(mailbox);
+        } catch (UserRepositoryException e) {
+            throw new SubscriptionException(e);
+        }
+    }
+
+    public Collection subscriptions(String user) throws SubscriptionException {
+        try {
+            final UserSubscription subscription = getUserSubscription(user);
+            final Collection results = (Collection) subscription.subscriptions().clone();
+            return results;
+        } catch (UserRepositoryException e) {
+            throw new SubscriptionException(e);
+        }
+    }
+
+    public void unsubscribe(String user, String mailbox) throws SubscriptionException {
+        try {
+            final UserSubscription subscription = getUserSubscription(user);
+            subscription.unsubscribe(mailbox);   
+        } catch (UserRepositoryException e) {
+            throw new SubscriptionException(e);
+        }
+    }
+    
+    private synchronized UserSubscription getUserSubscription(final String user) {
+        UserSubscription subscription = (UserSubscription) userSubscriptionsByUser.get(user);
+        if (subscription == null) {
+            subscription = new UserSubscription(user, repository, log);
+        }
+        return subscription;
+    }
+    
+    /**
+     * Manages subscriptions for a user.
+     * Subscriptions are stored in a single collection.
+     * This class synchronizes access for write operations.
+     */
+    private static final class UserSubscription {
+        
+        private final String user;
+        private final UserMetaDataRespository repository;
+        private Log log;
+        
+        public UserSubscription(final String user, final UserMetaDataRespository repository,
+                Log log) {
+            super();
+            this.user = user;
+            this.repository = repository;
+        }
+
+        public synchronized void subscribe(String mailbox) throws UserRepositoryException {
+            final HashSet existingSubscriptions = subscriptions();
+            if (!existingSubscriptions.contains(mailbox)) {
+                final HashSet newSubscriptions;
+                if (existingSubscriptions == null) {
+                    newSubscriptions = new HashSet();
+                } else {
+                    existingSubscriptions.add(mailbox);
+                    newSubscriptions = existingSubscriptions;
+                }
+                repository.setAttribute(user, newSubscriptions, META_DATA_KEY);
+            }
+        }
+        
+        public synchronized void unsubscribe(String mailbox) throws UserRepositoryException {
+            final HashSet subscriptions = subscriptions();
+            if (subscriptions.remove(mailbox)) {
+                repository.setAttribute(user, subscriptions, META_DATA_KEY);
+            }
+        }
+        
+        public HashSet subscriptions() throws UserRepositoryException {
+            try {
+                final HashSet storedSubscriptions = (HashSet) repository.getAttribute(user, META_DATA_KEY);
+                final HashSet results;
+                if (storedSubscriptions == null) {
+                    results = new HashSet();
+                } else {
+                    results = storedSubscriptions;
+                }
+                return results;
+            } catch (ClassCastException e) {
+                log.error("ClassCastException during retrieval. Reseting subscriptions for user " + user);
+                log.debug("HashSet expected but not retrieved.", e);
+                return new HashSet();
+            }
+            
+        }
+    }
+
+    public boolean isAuthentic(String userid, String passwd) {
+        return usersRepository.test(userid, passwd);
+    }
+}

Modified: james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java (original)
+++ james/server/trunk/phoenix-deployment/src/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManagerFactory.java Wed Aug 27 12:27:27 2008
@@ -38,8 +38,11 @@
 import org.apache.commons.configuration.BaseConfiguration;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.logging.impl.AvalonLogger;
+import org.apache.james.api.user.UserMetaDataRespository;
+import org.apache.james.api.user.UsersRepository;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.manager.MailboxManager;
+import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
 import org.apache.james.mailboxmanager.torque.om.MessageBodyPeer;
 import org.apache.james.mailboxmanager.torque.om.MessageFlagsPeer;
@@ -55,6 +58,10 @@
 public class TorqueMailboxManagerFactory extends TorqueMailboxManager implements MailboxManager, 
         Configurable, Initializable, Serviceable, LogEnabled {
 
+    public TorqueMailboxManagerFactory(UserManager userManager) {
+        super(userManager);
+    }
+
     private BaseConfiguration torqueConf;
 
     private boolean initialized;
@@ -198,6 +205,10 @@
 
     public void service(ServiceManager serviceManager) throws ServiceException {
         setFileSystem((FileSystem) serviceManager.lookup(FileSystem.ROLE));
+//        UsersRepository usersRepository = ( UsersRepository ) serviceManager.
+//        lookup( UsersRepository.ROLE );
+//    UserMetaDataRespository userMetaDataRepository =
+//        (UserMetaDataRespository) serviceManager.lookup( UserMetaDataRespository.ROLE );
     }
 
     protected void setFileSystem(FileSystem system) {

Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/experimental/imapserver/HostSystemFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/experimental/imapserver/HostSystemFactory.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/test/org/apache/james/experimental/imapserver/HostSystemFactory.java (original)
+++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/experimental/imapserver/HostSystemFactory.java Wed Aug 27 12:27:27 2008
@@ -25,12 +25,12 @@
 import org.apache.james.imapserver.codec.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imapserver.mock.MailboxManagerProviderSingleton;
 import org.apache.james.imapserver.processor.main.DefaultImapProcessorFactory;
+import org.apache.james.mailboxmanager.mock.TorqueMailboxManagerProviderSingleton;
 import org.apache.james.test.functional.imap.HostSystem;
-import org.apache.james.user.impl.file.FileUserMetaDataRepository;
 
 public class HostSystemFactory {
     
-    private static final String META_DATA_DIRECTORY = "target/user-meta-data";
+    public static final String META_DATA_DIRECTORY = "target/user-meta-data";
     
     public static void resetUserMetaData() throws Exception {
         
@@ -43,13 +43,12 @@
     
     public static HostSystem createStandardImap() throws Exception {
         
-        ExperimentalHostSystem result = new ExperimentalHostSystem();
+        ExperimentalHostSystem host = TorqueMailboxManagerProviderSingleton.host;
         final DefaultImapProcessorFactory defaultImapProcessorFactory = new DefaultImapProcessorFactory();
         resetUserMetaData();
-        defaultImapProcessorFactory.configure(result, 
-                MailboxManagerProviderSingleton.getMailboxManagerProviderInstance(),
-                new FileUserMetaDataRepository(META_DATA_DIRECTORY));
-        result.configure(new DefaultImapDecoderFactory().buildImapDecoder(), 
+        defaultImapProcessorFactory.configure(
+                MailboxManagerProviderSingleton.getMailboxManagerProviderInstance());
+        host.configure(new DefaultImapDecoderFactory().buildImapDecoder(), 
                 new DefaultImapEncoderFactory().buildImapEncoder(), 
                 defaultImapProcessorFactory.buildImapProcessor(), new ExperimentalHostSystem.Resetable() {
 
@@ -59,6 +58,6 @@
                     }
             
         });
-        return result;
+        return host;
     }
 }

Modified: james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java
URL: http://svn.apache.org/viewvc/james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java (original)
+++ james/server/trunk/phoenix-deployment/src/test/org/apache/james/mailboxmanager/mock/TorqueMailboxManagerProviderSingleton.java Wed Aug 27 12:27:27 2008
@@ -20,15 +20,20 @@
 package org.apache.james.mailboxmanager.mock;
 
 import org.apache.commons.configuration.ConfigurationException;
+import org.apache.james.experimental.imapserver.ExperimentalHostSystem;
+import org.apache.james.experimental.imapserver.HostSystemFactory;
 import org.apache.james.mailboxmanager.impl.DefaultMailboxManagerProvider;
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
+import org.apache.james.mailboxmanager.torque.PheonixUserManager;
 import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerFactory;
 import org.apache.james.test.mock.james.MockFileSystem;
+import org.apache.james.user.impl.file.FileUserMetaDataRepository;
 
 public class TorqueMailboxManagerProviderSingleton {
     
     private static TorqueMailboxManagerFactory torqueMailboxManagerFactory;
     private static DefaultMailboxManagerProvider defaultMailboxManagerProvider;
+    public static final ExperimentalHostSystem host = new ExperimentalHostSystem();
 
     public synchronized static MailboxManagerProvider getTorqueMailboxManagerProviderInstance() throws Exception {
         if (defaultMailboxManagerProvider==null) {
@@ -42,7 +47,8 @@
 
     private static TorqueMailboxManagerFactory getTorqueFactory() throws ConfigurationException, Exception {
         if (torqueMailboxManagerFactory == null) {
-            torqueMailboxManagerFactory=new TorqueMailboxManagerFactory() {{
+            torqueMailboxManagerFactory=new TorqueMailboxManagerFactory(new PheonixUserManager(
+                    new FileUserMetaDataRepository(HostSystemFactory.META_DATA_DIRECTORY),  host)) {{
                 setFileSystem(new MockFileSystem());
             }};
             torqueMailboxManagerFactory.configureDefaults();

Modified: james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=689578&r1=689577&r2=689578&view=diff
==============================================================================
--- james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original)
+++ james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Wed Aug 27 12:27:27 2008
@@ -21,6 +21,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -40,6 +41,7 @@
 import org.apache.james.mailboxmanager.mailbox.Mailbox;
 import org.apache.james.mailboxmanager.manager.MailboxExpression;
 import org.apache.james.mailboxmanager.manager.MailboxManager;
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
 import org.apache.james.mailboxmanager.torque.om.MailboxRow;
 import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
 import org.apache.torque.TorqueException;
@@ -58,11 +60,14 @@
 
     private final ReadWriteLock lock;
     
-    private final Map managers;
+    private final Map mailboxes;
     
-    public TorqueMailboxManager() {
+    private final UserManager userManager;
+    
+    public TorqueMailboxManager(final UserManager userManager) {
         this.lock =  new ReentrantWriterPreferenceReadWriteLock();
-        managers = new HashMap();
+        mailboxes = new HashMap();
+        this.userManager = userManager;
     }
     
     public Mailbox getMailbox(String mailboxName, boolean autoCreate)
@@ -76,17 +81,17 @@
             createMailbox(mailboxName);
         }
         try {
-            synchronized (managers) {
+            synchronized (mailboxes) {
                 MailboxRow mailboxRow = MailboxRowPeer
                         .retrieveByName(mailboxName);
 
                 if (mailboxRow != null) {
                     getLog().debug("Loaded mailbox "+mailboxName);
                     
-                    TorqueMailbox torqueMailbox = (TorqueMailbox) managers.get(mailboxName);
+                    TorqueMailbox torqueMailbox = (TorqueMailbox) mailboxes.get(mailboxName);
                     if (torqueMailbox == null) {
                         torqueMailbox = new TorqueMailbox(mailboxRow, lock, getLog());
-                        managers.put(mailboxName, torqueMailbox);
+                        mailboxes.put(mailboxName, torqueMailbox);
                     }
                     
                     return torqueMailbox;
@@ -109,7 +114,7 @@
         } else if (namespaceName.charAt(length - 1) == HIERARCHY_DELIMITER) {
             createMailbox(namespaceName.substring(0, length - 1));
         } else {
-            synchronized (managers) {
+            synchronized (mailboxes) {
                 // Create root first
                 // If any creation fails then mailbox will not be created
                 // TODO: transaction
@@ -147,7 +152,7 @@
     public void deleteMailbox(String mailboxName, MailboxSession session)
             throws MailboxManagerException {
         getLog().info("deleteMailbox "+mailboxName);
-        synchronized (managers) {
+        synchronized (mailboxes) {
             try {
                 // TODO put this into a serilizable transaction
                 MailboxRow mr = MailboxRowPeer.retrieveByName(mailboxName);
@@ -155,7 +160,7 @@
                     throw new MailboxNotFoundException("Mailbox not found");
                 }
                 MailboxRowPeer.doDelete(mr);
-                TorqueMailbox mailbox = (TorqueMailbox) managers.remove(mailboxName);
+                TorqueMailbox mailbox = (TorqueMailbox) mailboxes.remove(mailboxName);
                 if (mailbox != null) {
                     mailbox.deleted(session);
                 }
@@ -169,7 +174,7 @@
     throws MailboxManagerException {
         getLog().debug("renameMailbox "+from+" to "+to);
         try {
-            synchronized (managers) {
+            synchronized (mailboxes) {
                 if (existsMailbox(to)) {
                     throw new MailboxExistsException(to);
                 }
@@ -184,7 +189,7 @@
                 mr.setName(to);
                 mr.save();
 
-                managers.remove(from);
+                mailboxes.remove(from);
 
                 // rename submailbox
                 Criteria c = new Criteria();
@@ -260,10 +265,10 @@
         CountHelper countHelper=new CountHelper();
         int count;
         try {
-            synchronized (managers) {
+            synchronized (mailboxes) {
                 count = countHelper.count(c);
                 if (count == 0) {
-                    managers.remove(mailboxName);
+                    mailboxes.remove(mailboxName);
                     return false;
                 } else {
                     if (count == 1) {
@@ -283,7 +288,7 @@
         try {
             MailboxRowPeer.doDelete(new Criteria().and(MailboxRowPeer.MAILBOX_ID,
                     new Integer(-1), Criteria.GREATER_THAN));
-            managers.clear();
+            mailboxes.clear();
         } catch (TorqueException e) {
             throw new MailboxManagerException(e);
         }
@@ -308,4 +313,20 @@
         return result;
     }
 
+    public boolean isAuthentic(String userid, String passwd) {
+        return userManager.isAuthentic(userid, passwd);
+    }
+
+    public void subscribe(String user, String mailbox) throws SubscriptionException {
+        userManager.subscribe(user, mailbox);
+    }
+
+    public Collection subscriptions(String user) throws SubscriptionException {
+        return userManager.subscriptions(user);
+    }
+
+    public void unsubscribe(String user, String mailbox) throws SubscriptionException {
+        userManager.unsubscribe(user, mailbox);
+    }
+
 }

Added: james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java
URL: http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java?rev=689578&view=auto
==============================================================================
--- james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java (added)
+++ james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/UserManager.java Wed Aug 27 12:27:27 2008
@@ -0,0 +1,35 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mailboxmanager.torque;
+
+import java.util.Collection;
+
+import org.apache.james.mailboxmanager.manager.SubscriptionException;
+
+public interface UserManager {
+
+    public boolean isAuthentic(String userid, String passwd);
+
+    public void subscribe(String user, String mailbox) throws SubscriptionException;
+
+    public Collection subscriptions(String user) throws SubscriptionException;
+
+    public void unsubscribe(String user, String mailbox) throws SubscriptionException;
+}



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


Re: svn commit: r689578 - in /james/server/trunk: imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/ imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/ imap-mailbox-processo...

Posted by Stefano Bagnara <ap...@bago.org>.
rdonkin@apache.org ha scritto:
> Author: rdonkin
> Date: Wed Aug 27 12:27:27 2008
> New Revision: 689578
> 
> URL: http://svn.apache.org/viewvc?rev=689578&view=rev
> Log:
> Decouple IMAP processing from user-api. Deployment adapts JAMES core API to protocol specific interfaces. JAMES-860
> 
> Added:
>     james/server/trunk/mailbox-library/src/main/java/org/apache/james/mailboxmanager/manager/SubscriptionException.java

Hi Robert,

this change add "imap-api" as a dependency for mailbox-library that was 
imap-api indipendent.

Is this something you wanted or a mistake?

Stefano

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