You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/09/04 20:57:38 UTC
svn commit: r992659 - in /james/imap/trunk:
deployment/src/test/java/org/apache/james/imap/functional/
mailbox/src/main/java/org/apache/james/imap/mailbox/
processor/src/main/java/org/apache/james/imap/processor/
processor/src/test/java/org/apache/jame...
Author: norman
Date: Sat Sep 4 18:57:37 2010
New Revision: 992659
URL: http://svn.apache.org/viewvc?rev=992659&view=rev
Log:
Add startProcessing, endProcessing methods to SubscriptionManager interface so we are able to handle request scope operations.
Added:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java
Modified:
james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/SubscriptionManager.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
Modified: james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java (original)
+++ james/imap/trunk/deployment/src/test/java/org/apache/james/imap/functional/InMemoryUserManager.java Sat Sep 4 18:57:37 2010
@@ -91,4 +91,14 @@ public class InMemoryUserManager impleme
user.setPassword(password);
}
+ public void endProcessingRequest(MailboxSession session) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void startProcessingRequest(MailboxSession session) {
+ // TODO Auto-generated method stub
+
+ }
+
}
Modified: james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/SubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/SubscriptionManager.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/SubscriptionManager.java (original)
+++ james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/SubscriptionManager.java Sat Sep 4 18:57:37 2010
@@ -52,4 +52,18 @@ public interface SubscriptionManager{
*/
public void unsubscribe(MailboxSession session, String mailbox)
throws SubscriptionException;
+
+ /**
+ * Start the processing of a request for the given MailboxSession. If the user is not logged in already then the MailboxSession will be null
+ *
+ * @param session
+ */
+ public void startProcessingRequest(MailboxSession session);
+
+ /**
+ * End the processing of a request for the given MailboxSession. If the user is not logged in already then the MailboxSession will be null
+ *
+ * @param session
+ */
+ public void endProcessingRequest(MailboxSession session);
}
Added: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java?rev=992659&view=auto
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java (added)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java Sat Sep 4 18:57:37 2010
@@ -0,0 +1,74 @@
+/****************************************************************
+ * 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.imap.processor;
+
+import org.apache.james.imap.api.ImapCommand;
+import org.apache.james.imap.api.message.request.ImapRequest;
+import org.apache.james.imap.api.message.response.StatusResponseFactory;
+import org.apache.james.imap.api.process.ImapProcessor;
+import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.mailbox.MailboxManager;
+import org.apache.james.imap.mailbox.MailboxSession;
+import org.apache.james.imap.mailbox.SubscriptionManager;
+import org.apache.james.imap.processor.base.ImapSessionUtils;
+
+/**
+ * Abstract base class which should be used by implementations which need to access the {@link SubscriptionManager}
+ *
+ */
+public abstract class AbstractSubscriptionProcessor extends AbstractMailboxProcessor{
+
+ private final SubscriptionManager subscriptionManager;
+
+ public AbstractSubscriptionProcessor(ImapProcessor next, MailboxManager mailboxManager, final SubscriptionManager subscriptionManager,StatusResponseFactory factory) {
+ super(next, mailboxManager, factory);
+ this.subscriptionManager = subscriptionManager;
+ }
+
+ /**
+ * Return the {@link SubscriptionManager}
+ *
+ * @return subscriptionManager
+ */
+ protected SubscriptionManager getSubscriptionManager() {
+ return subscriptionManager;
+ }
+
+ @Override
+ protected final void doProcess(ImapRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
+
+ // take care of calling the start/end processing
+ MailboxSession mSession = ImapSessionUtils.getMailboxSession(session);
+ getSubscriptionManager().startProcessingRequest(mSession);
+ doProcessRequest(message, session, tag, command, responder);
+ getSubscriptionManager().endProcessingRequest(mSession);
+ }
+
+ /**
+ * Process the request
+ *
+ * @param message
+ * @param session
+ * @param tag
+ * @param command
+ * @param responder
+ */
+ protected abstract void doProcessRequest(ImapRequest message, ImapSession session, String tag, ImapCommand command, Responder responder);
+
+}
Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java Sat Sep 4 18:57:37 2010
@@ -42,59 +42,21 @@ import org.apache.james.imap.message.req
import org.apache.james.imap.message.response.LSubResponse;
import org.apache.james.imap.processor.base.ImapSessionUtils;
-public class LSubProcessor extends AbstractMailboxProcessor {
+public class LSubProcessor extends AbstractSubscriptionProcessor {
- private final SubscriptionManager subscriptionManager;
-
- public LSubProcessor(final ImapProcessor next,
- final MailboxManager mailboxManager,
- final SubscriptionManager subscriptionManager,
- final StatusResponseFactory factory) {
- super(next, mailboxManager, factory);
- this.subscriptionManager = subscriptionManager;
+ public LSubProcessor(ImapProcessor next, MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory) {
+ super(next, mailboxManager, subscriptionManager, factory);
}
protected boolean isAcceptable(ImapMessage message) {
return (message instanceof LsubRequest);
}
- protected void doProcess(ImapRequest message, ImapSession session,
- String tag, ImapCommand command, Responder responder) {
- final LsubRequest request = (LsubRequest) message;
- final String referenceName = request.getBaseReferenceName();
- final String mailboxPattern = request.getMailboxPattern();
-
- try {
- if (mailboxPattern.length() == 0) {
- respondWithHierarchyDelimiter(responder);
- } else {
- listSubscriptions(session, responder, referenceName, mailboxPattern);
- }
-
- okComplete(command, tag, responder);
-
- } catch (SubscriptionException e) {
- session.getLog().debug("Subscription failed", e);
- final HumanReadableText exceptionKey = e.getKey();
- final HumanReadableText displayTextKey;
- if (exceptionKey == null) {
- displayTextKey = HumanReadableText.GENERIC_LSUB_FAILURE;
- } else {
- displayTextKey = exceptionKey;
- }
- no(command, tag, responder, displayTextKey);
- } catch (MailboxException e) {
- session.getLog().debug("Subscription failed", e);
- final HumanReadableText displayTextKey = HumanReadableText.GENERIC_LSUB_FAILURE;
- no(command, tag, responder, displayTextKey);
- }
- }
-
private void listSubscriptions(ImapSession session, Responder responder,
final String referenceName, final String mailboxName)
throws SubscriptionException, MailboxException {
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
- final Collection<String> mailboxes = subscriptionManager.subscriptions(mailboxSession);
+ final Collection<String> mailboxes = getSubscriptionManager().subscriptions(mailboxSession);
// If the mailboxName is fully qualified, ignore the reference name.
String finalReferencename = referenceName;
@@ -153,4 +115,36 @@ public class LSubProcessor extends Abstr
final LSubResponse response = new LSubResponse("", true);
responder.respond(response);
}
+
+ @Override
+ protected void doProcessRequest(ImapRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
+ final LsubRequest request = (LsubRequest) message;
+ final String referenceName = request.getBaseReferenceName();
+ final String mailboxPattern = request.getMailboxPattern();
+
+ try {
+ if (mailboxPattern.length() == 0) {
+ respondWithHierarchyDelimiter(responder);
+ } else {
+ listSubscriptions(session, responder, referenceName, mailboxPattern);
+ }
+
+ okComplete(command, tag, responder);
+
+ } catch (SubscriptionException e) {
+ session.getLog().debug("Subscription failed", e);
+ final HumanReadableText exceptionKey = e.getKey();
+ final HumanReadableText displayTextKey;
+ if (exceptionKey == null) {
+ displayTextKey = HumanReadableText.GENERIC_LSUB_FAILURE;
+ } else {
+ displayTextKey = exceptionKey;
+ }
+ no(command, tag, responder, displayTextKey);
+ } catch (MailboxException e) {
+ session.getLog().debug("Subscription failed", e);
+ final HumanReadableText displayTextKey = HumanReadableText.GENERIC_LSUB_FAILURE;
+ no(command, tag, responder, displayTextKey);
+ }
+ }
}
Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java Sat Sep 4 18:57:37 2010
@@ -33,29 +33,23 @@ import org.apache.james.imap.mailbox.Sub
import org.apache.james.imap.message.request.SubscribeRequest;
import org.apache.james.imap.processor.base.ImapSessionUtils;
-public class SubscribeProcessor extends AbstractMailboxProcessor {
+public class SubscribeProcessor extends AbstractSubscriptionProcessor {
- private final SubscriptionManager subscriptionManager;
-
- public SubscribeProcessor(final ImapProcessor next,
- final MailboxManager mailboxManager,
- final SubscriptionManager subscriptionManager,
- final StatusResponseFactory factory) {
- super(next, mailboxManager, factory);
- this.subscriptionManager = subscriptionManager;
+ public SubscribeProcessor(ImapProcessor next, MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory) {
+ super(next, mailboxManager, subscriptionManager, factory);
}
protected boolean isAcceptable(ImapMessage message) {
return (message instanceof SubscribeRequest);
}
- protected void doProcess(ImapRequest message, ImapSession session,
- String tag, ImapCommand command, Responder responder) {
+ @Override
+ protected void doProcessRequest(ImapRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
final SubscribeRequest request = (SubscribeRequest) message;
final String mailboxName = request.getMailboxName();
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
try {
- subscriptionManager.subscribe(mailboxSession, mailboxName);
+ getSubscriptionManager().subscribe(mailboxSession, mailboxName);
unsolicitedResponses(session, responder, false);
okComplete(command, tag, responder);
@@ -72,6 +66,7 @@ public class SubscribeProcessor extends
displayTextKey = exceptionKey;
}
no(command, tag, responder, displayTextKey);
- }
+ }
}
+
}
Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java Sat Sep 4 18:57:37 2010
@@ -33,30 +33,24 @@ import org.apache.james.imap.mailbox.Sub
import org.apache.james.imap.message.request.UnsubscribeRequest;
import org.apache.james.imap.processor.base.ImapSessionUtils;
-public class UnsubscribeProcessor extends AbstractMailboxProcessor {
+public class UnsubscribeProcessor extends AbstractSubscriptionProcessor {
- private final SubscriptionManager subscriptionManager;
-
- public UnsubscribeProcessor(final ImapProcessor next,
- final MailboxManager mailboxManager,
- final SubscriptionManager subscriptionManager,
- final StatusResponseFactory factory) {
- super(next, mailboxManager, factory);
- this.subscriptionManager = subscriptionManager;
+ public UnsubscribeProcessor(ImapProcessor next, MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory) {
+ super(next, mailboxManager, subscriptionManager, factory);
}
protected boolean isAcceptable(ImapMessage message) {
return (message instanceof UnsubscribeRequest);
}
- protected void doProcess(ImapRequest message, ImapSession session,
- String tag, ImapCommand command, Responder responder) {
+ @Override
+ protected void doProcessRequest(ImapRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) {
final UnsubscribeRequest request = (UnsubscribeRequest) message;
final String mailboxName = request.getMailboxName();
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
try {
- subscriptionManager.unsubscribe(mailboxSession, mailboxName);
+ getSubscriptionManager().unsubscribe(mailboxSession, mailboxName);
unsolicitedResponses(session, responder, false);
okComplete(command, tag, responder);
@@ -73,6 +67,7 @@ public class UnsubscribeProcessor extend
displayTextKey = exceptionKey;
}
no(command, tag, responder, displayTextKey);
- }
+ }
}
+
}
Modified: james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java (original)
+++ james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java Sat Sep 4 18:57:37 2010
@@ -115,7 +115,9 @@ public class LSubProcessorTest {
subscriptions.add(MAILBOX_A);
subscriptions.add(MAILBOX_B);
subscriptions.add(MAILBOX_C);
+
mockery.checking(new Expectations() {{
+ allowing(session).getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY); will(returnValue(mailboxSession));
oneOf(responder).respond(with(
equal(new LSubResponse("", true))));
}});
@@ -123,7 +125,7 @@ public class LSubProcessorTest {
expectOk();
LsubRequest request = new LsubRequest(command, "", "", TAG);
- processor.doProcess(request, session, TAG, command, responderImpl);
+ processor.doProcessRequest(request, session, TAG, command, responderImpl);
}
@@ -148,7 +150,7 @@ public class LSubProcessorTest {
LsubRequest request = new LsubRequest(command, "", PARENT
+ ImapConstants.HIERARCHY_DELIMITER + "%", TAG);
- processor.doProcess(request, session, TAG, command, responderImpl);
+ processor.doProcessRequest(request, session, TAG, command, responderImpl);
}
@@ -171,7 +173,7 @@ public class LSubProcessorTest {
LsubRequest request = new LsubRequest(command, "", ROOT
+ ImapConstants.HIERARCHY_DELIMITER + "%", TAG);
- processor.doProcess(request, session, TAG, command, responderImpl);
+ processor.doProcessRequest(request, session, TAG, command, responderImpl);
}
@@ -195,7 +197,7 @@ public class LSubProcessorTest {
LsubRequest request = new LsubRequest(command, "", ROOT
+ ImapConstants.HIERARCHY_DELIMITER + "%", TAG);
- processor.doProcess(request, session, TAG, command, responderImpl);
+ processor.doProcessRequest(request, session, TAG, command, responderImpl);
}
@@ -217,7 +219,7 @@ public class LSubProcessorTest {
expectOk();
LsubRequest request = new LsubRequest(command, "", "*", TAG);
- processor.doProcess(request, session, TAG, command, responderImpl);
+ processor.doProcessRequest(request, session, TAG, command, responderImpl);
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java?rev=992659&r1=992658&r2=992659&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreSubscriptionManager.java Sat Sep 4 18:57:37 2010
@@ -111,4 +111,21 @@ public abstract class StoreSubscriptionM
throw new SubscriptionException(e.getKey(), (Exception)e.getCause());
}
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.SubscriptionManager#endProcessingRequest(org.apache.james.imap.mailbox.MailboxSession)
+ */
+ public void endProcessingRequest(MailboxSession session) {
+ mapperFactory.endRequest(session);
+ }
+
+ /**
+ * Do nothing, Sub classes should override this if needed
+ */
+ public void startProcessingRequest(MailboxSession session) {
+ // Do nothing
+ }
+
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org