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/07/06 18:41:23 UTC
svn commit: r960937 - in /james/imap/trunk:
store/src/main/java/org/apache/james/imap/store/
torque/src/main/java/org/apache/james/mailboxmanager/torque/
Author: norman
Date: Tue Jul 6 16:41:23 2010
New Revision: 960937
URL: http://svn.apache.org/viewvc?rev=960937&view=rev
Log:
Introduce a new abstract class DelegatingMailboxManager to allow the share of more code. This will be useful later for cassandra mailbox implementation ;)
Added:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/DelegatingMailboxManager.java
Modified:
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
Added: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/DelegatingMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/DelegatingMailboxManager.java?rev=960937&view=auto
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/DelegatingMailboxManager.java (added)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/DelegatingMailboxManager.java Tue Jul 6 16:41:23 2010
@@ -0,0 +1,181 @@
+/****************************************************************
+ * 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.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Locale;
+import java.util.Random;
+
+import org.apache.commons.logging.Log;
+import org.apache.james.imap.api.AbstractLogEnabled;
+import org.apache.james.imap.mailbox.BadCredentialsException;
+import org.apache.james.imap.mailbox.MailboxConstants;
+import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.mailbox.MailboxManager;
+import org.apache.james.imap.mailbox.MailboxSession;
+import org.apache.james.imap.mailbox.SubscriptionException;
+
+/**
+ * Abstract {@link MailboxManager} which delegates various stuff to the {@link Authenticator} and {@link Subscriber}
+ *
+ */
+public abstract class DelegatingMailboxManager extends AbstractLogEnabled implements MailboxManager{
+
+ private final Authenticator authenticator;
+ private final Subscriber subscriper;
+ private final static Random RANDOM = new Random();
+
+ public DelegatingMailboxManager(final Authenticator authenticator, final Subscriber subscriper) {
+ this.subscriper = subscriper;
+ this.authenticator = authenticator;
+ }
+
+ /**
+ * Generate an return the next uid validity
+ *
+ * @return uidValidity
+ */
+ protected int randomUidValidity() {
+ return Math.abs(RANDOM.nextInt());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#createSystemSession(java.lang.String, org.apache.commons.logging.Log)
+ */
+ public MailboxSession createSystemSession(String userName, Log log) {
+ return createSession(userName, null, log);
+ }
+
+ /**
+ * Create Session
+ *
+ * @param userName
+ * @param log
+ * @return session
+ */
+ private SimpleMailboxSession createSession(String userName, String password, Log log) {
+ return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList<Locale>());
+ }
+
+ /**
+ * Generate and return the next id to use
+ *
+ * @return id
+ */
+ protected long randomId() {
+ return RANDOM.nextLong();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#getDelimiter()
+ */
+ public final char getDelimiter() {
+ return MailboxConstants.DEFAULT_DELIMITER;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#resolve(java.lang.String, java.lang.String)
+ */
+ public String resolve(final String userName, String mailboxPath) {
+ if (mailboxPath.length() > 0 && mailboxPath.charAt(0) != MailboxConstants.DEFAULT_DELIMITER) {
+ mailboxPath = MailboxConstants.DEFAULT_DELIMITER + mailboxPath;
+ }
+ final String result = MailboxConstants.USER_NAMESPACE + MailboxConstants.DEFAULT_DELIMITER + userName
+ + mailboxPath;
+ return result;
+ }
+
+ /**
+ * Log in the user with the given userid and password
+ *
+ * @param userid the username
+ * @param passwd the password
+ * @return success true if login success false otherwise
+ */
+ public boolean login(String userid, String passwd) {
+ return authenticator.isAuthentic(userid, passwd);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#login(java.lang.String, java.lang.String, org.apache.commons.logging.Log)
+ */
+ public MailboxSession login(String userid, String passwd, Log log) throws BadCredentialsException, MailboxException {
+ if (login(userid, passwd)) {
+ return createSession(userid, passwd, log);
+ } else {
+ throw new BadCredentialsException();
+ }
+ }
+
+ /**
+ * Default do nothing. Should be overridden by subclass if needed
+ */
+ public void logout(MailboxSession session, boolean force) throws MailboxException {
+ // Do nothing by default
+ }
+
+
+ /**
+ * Start processing of Request for session. Default is to do nothing.
+ * Implementations should override this if they need to do anything special
+ */
+ public void startProcessingRequest(MailboxSession session) {
+ // Default do nothing
+ }
+
+ /**
+ * End processing of a Request for the given session. Default is to do nothing
+ */
+ public void endProcessingRequest(MailboxSession session) {
+ // Default do nothing
+
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#subscribe(org.apache.james.imap.mailbox.MailboxSession, java.lang.String)
+ */
+ public void subscribe(MailboxSession session, String mailbox) throws SubscriptionException {
+ subscriper.subscribe(session, mailbox);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#subscriptions(org.apache.james.imap.mailbox.MailboxSession)
+ */
+ public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException {
+ return subscriper.subscriptions(session);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxManager#unsubscribe(org.apache.james.imap.mailbox.MailboxSession, java.lang.String)
+ */
+ public void unsubscribe(MailboxSession session, String mailbox) throws SubscriptionException {
+ subscriper.unsubscribe(session, mailbox);
+ }
+
+}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=960937&r1=960936&r2=960937&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java Tue Jul 6 16:41:23 2010
@@ -20,15 +20,10 @@
package org.apache.james.imap.store;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.Locale;
-import java.util.Random;
import org.apache.commons.logging.Log;
-import org.apache.james.imap.api.AbstractLogEnabled;
-import org.apache.james.imap.mailbox.BadCredentialsException;
import org.apache.james.imap.mailbox.MailboxConstants;
import org.apache.james.imap.mailbox.MailboxException;
import org.apache.james.imap.mailbox.MailboxExistsException;
@@ -40,7 +35,6 @@ import org.apache.james.imap.mailbox.Mai
import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.MessageRange;
import org.apache.james.imap.mailbox.StandardMailboxMetaDataComparator;
-import org.apache.james.imap.mailbox.SubscriptionException;
import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
import org.apache.james.imap.mailbox.util.MailboxEventDispatcher;
import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
@@ -57,25 +51,20 @@ import org.apache.james.imap.store.trans
*
* @param <Id>
*/
-public abstract class StoreMailboxManager<Id> extends AbstractLogEnabled implements MailboxManager {
+public abstract class StoreMailboxManager<Id> extends DelegatingMailboxManager {
public static final char SQL_WILDCARD_CHAR = '%';
private final Object mutex = new Object();
- private final static Random random = new Random();
-
private final MailboxEventDispatcher dispatcher = new MailboxEventDispatcher();
- private final DelegatingMailboxListener delegatingListener = new DelegatingMailboxListener();
- private final Authenticator authenticator;
- private final Subscriber subscriber;
+ private final DelegatingMailboxListener delegatingListener = new DelegatingMailboxListener();
protected final MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory;
private UidConsumer<Id> consumer;
public StoreMailboxManager(MailboxSessionMapperFactory<Id> mailboxSessionMapperFactory, final Authenticator authenticator, final Subscriber subscriber, final UidConsumer<Id> consumer) {
- this.authenticator = authenticator;
- this.subscriber = subscriber;
+ super(authenticator, subscriber);
this.consumer = consumer;
this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
}
@@ -248,15 +237,7 @@ public abstract class StoreMailboxManage
}
}
- /**
- * Generate an return the next uid validity
- *
- * @return uidValidity
- */
- protected int randomUidValidity() {
- return Math.abs(random.nextInt());
- }
-
+
/**
* Changes the name of the mailbox instance in the cache.
* @param from not null
@@ -342,130 +323,10 @@ public abstract class StoreMailboxManage
/*
* (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#createSystemSession(java.lang.String, org.apache.commons.logging.Log)
- */
- public MailboxSession createSystemSession(String userName, Log log) {
- return createSession(userName, null, log);
- }
-
- /**
- * Create Session
- *
- * @param userName
- * @param log
- * @return session
- */
- private SimpleMailboxSession createSession(String userName, String password, Log log) {
- return new SimpleMailboxSession(randomId(), userName, password, log, new ArrayList<Locale>());
- }
-
- /**
- * Generate and return the next id to use
- *
- * @return id
- */
- protected long randomId() {
- return random.nextLong();
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#resolve(java.lang.String, java.lang.String)
- */
- public String resolve(final String userName, String mailboxPath) {
- if (mailboxPath.length() > 0 && mailboxPath.charAt(0) != MailboxConstants.DEFAULT_DELIMITER) {
- mailboxPath = MailboxConstants.DEFAULT_DELIMITER + mailboxPath;
- }
- final String result = MailboxConstants.USER_NAMESPACE + MailboxConstants.DEFAULT_DELIMITER + userName
- + mailboxPath;
- return result;
- }
-
- /**
- * Log in the user with the given userid and password
- *
- * @param userid the username
- * @param passwd the password
- * @return success true if login success false otherwise
- */
- public boolean login(String userid, String passwd) {
- return authenticator.isAuthentic(userid, passwd);
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#subscribe(org.apache.james.imap.mailbox.MailboxSession, java.lang.String)
- */
- public void subscribe(MailboxSession session, String mailbox)
- throws SubscriptionException {
- subscriber.subscribe(session, mailbox);
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#subscriptions(org.apache.james.imap.mailbox.MailboxSession)
- */
- public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException {
- return subscriber.subscriptions(session);
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#unsubscribe(org.apache.james.imap.mailbox.MailboxSession, java.lang.String)
- */
- public void unsubscribe(MailboxSession session, String mailbox)
- throws SubscriptionException {
- subscriber.unsubscribe(session, mailbox);
- }
-
- /*
- * (non-Javadoc)
* @see org.apache.james.imap.mailbox.MailboxManager#addListener(java.lang.String, org.apache.james.imap.mailbox.MailboxListener, org.apache.james.imap.mailbox.MailboxSession)
*/
public void addListener(String mailboxName, MailboxListener listener, MailboxSession session) throws MailboxException {
delegatingListener.addListener(mailboxName, listener);
}
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#login(java.lang.String, java.lang.String, org.apache.commons.logging.Log)
- */
- public MailboxSession login(String userid, String passwd, Log log) throws BadCredentialsException, MailboxException {
- if (login(userid, passwd)) {
- return createSession(userid, passwd, log);
- } else {
- throw new BadCredentialsException();
- }
- }
-
- /**
- * Default do nothing. Should be overriden by subclass if needed
- */
- public void logout(MailboxSession session, boolean force) throws MailboxException {
- // Do nothing by default
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#getDelimiter()
- */
- public final char getDelimiter() {
- return MailboxConstants.DEFAULT_DELIMITER;
- }
-
- /**
- * End processing of Request for session
- */
- public void endProcessingRequest(MailboxSession session) {
- mailboxSessionMapperFactory.endRequest(session);
- }
-
- /**
- * Start processing of Request for session. Default is to do nothing.
- * Implementations should override this if they need to do anything special
- */
- public void startProcessingRequest(MailboxSession session) {
- // Default do nothing
- }
-
}
Modified: james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java?rev=960937&r1=960936&r2=960937&view=diff
==============================================================================
--- james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java (original)
+++ james/imap/trunk/torque/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailboxManager.java Tue Jul 6 16:41:23 2010
@@ -20,38 +20,29 @@
package org.apache.james.mailboxmanager.torque;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
-import java.util.Random;
import java.util.concurrent.locks.ReentrantReadWriteLock;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.commons.logging.impl.SimpleLog;
import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.mailbox.BadCredentialsException;
import org.apache.james.imap.mailbox.Mailbox;
import org.apache.james.imap.mailbox.MailboxConstants;
import org.apache.james.imap.mailbox.MailboxException;
import org.apache.james.imap.mailbox.MailboxExistsException;
import org.apache.james.imap.mailbox.MailboxListener;
-import org.apache.james.imap.mailbox.MailboxManager;
import org.apache.james.imap.mailbox.MailboxMetaData;
import org.apache.james.imap.mailbox.MailboxNotFoundException;
import org.apache.james.imap.mailbox.MailboxQuery;
import org.apache.james.imap.mailbox.MailboxSession;
import org.apache.james.imap.mailbox.MessageRange;
import org.apache.james.imap.mailbox.StandardMailboxMetaDataComparator;
-import org.apache.james.imap.mailbox.SubscriptionException;
import org.apache.james.imap.mailbox.MailboxMetaData.Selectability;
import org.apache.james.imap.mailbox.util.SimpleMailboxMetaData;
import org.apache.james.imap.store.Authenticator;
-import org.apache.james.imap.store.SimpleMailboxSession;
+import org.apache.james.imap.store.DelegatingMailboxManager;
import org.apache.james.imap.store.Subscriber;
import org.apache.james.mailboxmanager.torque.om.MailboxRow;
import org.apache.james.mailboxmanager.torque.om.MailboxRowPeer;
@@ -59,27 +50,18 @@ import org.apache.torque.TorqueException
import org.apache.torque.util.CountHelper;
import org.apache.torque.util.Criteria;
-public class TorqueMailboxManager implements MailboxManager {
+public class TorqueMailboxManager extends DelegatingMailboxManager {
private static final char SQL_WILDCARD_CHAR = '%';
- private final static Random random = new Random();
-
- protected Log log = LogFactory.getLog(TorqueMailboxManager.class);
-
private final ReentrantReadWriteLock lock;
private final Map<String, TorqueMailbox> mailboxes;
-
- private final Authenticator authenticator;
-
- private final Subscriber subscriper;
public TorqueMailboxManager(final Authenticator authenticator, final Subscriber subscriper) {
+ super(authenticator, subscriper);
this.lock = new ReentrantReadWriteLock();
mailboxes = new HashMap<String, TorqueMailbox>();
- this.authenticator = authenticator;
- this.subscriper = subscriper;
}
public Mailbox getMailbox(String mailboxName, MailboxSession session)
@@ -157,7 +139,7 @@ public class TorqueMailboxManager implem
MailboxRow mr = new MailboxRow();
mr.setName(namespaceName);
mr.setLastUid(0);
- mr.setUidValidity(Math.abs(random.nextInt()));
+ mr.setUidValidity(randomUidValidity());
try {
mr.save();
} catch (TorqueException e) {
@@ -344,85 +326,9 @@ public class TorqueMailboxManager implem
}
}
- protected Log getLog() {
- if (log == null) {
- log = new SimpleLog("TorqueMailboxManager");
- }
- return log;
- }
-
- public MailboxSession createSystemSession(String userName, Log log) {
- return createSession(userName, null, log);
- }
-
- private MailboxSession createSession(String userName, String password, Log log) {
- return new SimpleMailboxSession(random.nextLong(), userName, password, log, new ArrayList<Locale>());
- }
-
- public String resolve(final String userName, String mailboxPath) {
- if (mailboxPath.charAt(0) != MailboxConstants.DEFAULT_DELIMITER) {
- mailboxPath = MailboxConstants.DEFAULT_DELIMITER + mailboxPath;
- }
- final String result = MailboxConstants.USER_NAMESPACE + MailboxConstants.DEFAULT_DELIMITER + userName
- + mailboxPath;
- return result;
- }
-
- public boolean login(String userid, String passwd) {
- return authenticator.isAuthentic(userid, passwd);
- }
-
- public void subscribe(MailboxSession session, String mailbox)
- throws SubscriptionException {
- subscriper.subscribe(session, mailbox);
- }
-
- public Collection<String> subscriptions(MailboxSession session) throws SubscriptionException {
- return subscriper.subscriptions(session);
- }
-
- public void unsubscribe(MailboxSession session, String mailbox)
- throws SubscriptionException {
- subscriper.unsubscribe(session, mailbox);
- }
-
public void addListener(String mailboxName, MailboxListener listener, MailboxSession session) throws MailboxException {
final TorqueMailbox mailbox = doGetMailbox(mailboxName);
mailbox.addListener(listener);
}
- public MailboxSession login(String userid, String passwd, Log log) throws BadCredentialsException, MailboxException {
- if (login(userid, passwd)) {
- return createSession(userid, passwd, log);
- } else {
- throw new BadCredentialsException();
- }
- }
-
- public void logout(MailboxSession session, boolean force) throws MailboxException {
- // fine
- }
-
- /**
- * Do nothing
- */
- public void endProcessingRequest(MailboxSession session) {
- // Do nothing
- }
-
- /**
- * Do nothing
- */
- public void startProcessingRequest(MailboxSession session) {
- // Do nothing
- }
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.imap.mailbox.MailboxManager#getDelimiter()
- */
- public final char getDelimiter() {
- return MailboxConstants.DEFAULT_DELIMITER;
- }
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org