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 jo...@apache.org on 2006/12/02 09:43:02 UTC
svn commit: r481519 - in
/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james:
imapserver/commands/ mailboxmanager/ mailboxmanager/impl/
mailboxmanager/mailbox/ mailboxmanager/repository/ mailboxmanager/torque/
mailboxmanager/util/ mailbo...
Author: joachim
Date: Sat Dec 2 00:42:59 2006
New Revision: 481519
URL: http://svn.apache.org/viewvc?view=rev&rev=481519
Log:
merged in 481327:481374 from trunk
Added:
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/LogAware.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java
- copied unchanged from r481374, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java
Removed:
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java
Modified:
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/CloseCommand.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/ExpungeCommand.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/CloseCommand.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/CloseCommand.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/CloseCommand.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/CloseCommand.java Sat Dec 2 00:42:59 2006
@@ -24,8 +24,8 @@
import org.apache.james.imapserver.ImapSession;
import org.apache.james.imapserver.ProtocolException;
import org.apache.james.imapserver.store.MailboxException;
-import org.apache.james.mailboxmanager.GeneralMessageSet;
import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -49,7 +49,7 @@
ImapMailboxSession mailbox = session.getSelected().getMailbox();
if ( session.getSelected().getMailbox().isWriteable() ) {
try {
- mailbox.expunge(GeneralMessageSetImpl.all(),GeneralMessageSet.TYPE_NONE);
+ mailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.NOTHING);
} catch (MailboxManagerException e) {
throw new MailboxException(e);
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/ExpungeCommand.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/ExpungeCommand.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/ExpungeCommand.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/imapserver/commands/ExpungeCommand.java Sat Dec 2 00:42:59 2006
@@ -24,8 +24,8 @@
import org.apache.james.imapserver.ImapSession;
import org.apache.james.imapserver.ProtocolException;
import org.apache.james.imapserver.store.MailboxException;
-import org.apache.james.mailboxmanager.GeneralMessageSet;
import org.apache.james.mailboxmanager.MailboxManagerException;
+import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -53,7 +53,7 @@
}
try {
- mailbox.expunge(GeneralMessageSetImpl.all(),GeneralMessageSet.TYPE_NONE);
+ mailbox.expunge(GeneralMessageSetImpl.all(),MessageResult.NOTHING);
} catch (MailboxManagerException e) {
throw new MailboxException(e);
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java Sat Dec 2 00:42:59 2006
@@ -10,7 +10,7 @@
public interface GeneralMessageSet {
- public static int TYPE_NONE=0;
+ public static int TYPE_NOTHING=0;
public static int TYPE_MSN=1;
public static int TYPE_UID=2;
public static int TYPE_KEY=4;
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java Sat Dec 2 00:42:59 2006
@@ -15,6 +15,8 @@
private int msnTo;
+ private String key;
+
private GeneralMessageSetImpl() {
}
@@ -43,8 +45,7 @@
}
public String getKey() throws IllegalStateException {
- // TODO Auto-generated method stub
- return null;
+ return key;
}
public Message getMessage() throws IllegalStateException {
@@ -130,6 +131,19 @@
gms.type = TYPE_MSN;
gms.msnFrom = msn;
gms.msnTo = msn;
+ return gms;
+ }
+
+ public static GeneralMessageSet oneKey(String key) {
+ GeneralMessageSetImpl gms = new GeneralMessageSetImpl();
+ gms.type = TYPE_KEY;
+ gms.key=key;
+ return gms;
+ }
+
+ public static GeneralMessageSet nothing() {
+ GeneralMessageSetImpl gms = new GeneralMessageSetImpl();
+ gms.type = TYPE_NOTHING;
return gms;
}
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java Sat Dec 2 00:42:59 2006
@@ -17,6 +17,7 @@
private Flags flags;
private int size;
private Date internalDate;
+ private String key;
public MessageResultImpl(long uid) {
@@ -83,8 +84,7 @@
}
public String getKey() {
- // TODO Auto-generated method stub
- return null;
+ return key;
}
public void setUid(long uid) {
@@ -159,6 +159,10 @@
}
throw new IllegalArgumentException("unknown Flag: "+flag);
+ }
+
+ public void setKey(String key) {
+ this.key=key;
}
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java Sat Dec 2 00:42:59 2006
@@ -19,38 +19,53 @@
package org.apache.james.mailboxmanager.mailbox;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
import javax.mail.internet.MimeMessage;
import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.util.AbstractLogEnabled;
-
-public abstract class AbstractGeneralMailbox extends AbstractLogEnabled implements Mailbox {
+import org.apache.james.mailboxmanager.MessageResult;
+import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
+import org.apache.james.mailboxmanager.util.AbstractLogFactoryAware;
+public abstract class AbstractGeneralMailbox extends AbstractLogFactoryAware implements GeneralMailbox {
+
public Collection list() throws MailboxManagerException {
- // TODO Auto-generated method stub
- return null;
+ MessageResult[] messageResult=getMessages(GeneralMessageSetImpl.all(), MessageResult.KEY);
+ Collection result=new ArrayList(messageResult.length);
+ for (int i = 0; i < messageResult.length; i++) {
+ result.add(messageResult[i].getKey());
+ }
+ return result;
}
public void remove(String key) throws MailboxManagerException {
- // TODO Auto-generated method stub
-
+ remove(GeneralMessageSetImpl.oneKey(key));
}
public MimeMessage retrieve(String key) throws MailboxManagerException {
- // TODO Auto-generated method stub
- return null;
+ MessageResult[] result = getMessages(GeneralMessageSetImpl.oneKey(key),
+ MessageResult.MIME_MESSAGE);
+ if (result != null && result.length == 1) {
+ return result[0].getMimeMessage();
+ } else {
+ return null;
+ }
}
public String store(MimeMessage message) throws MailboxManagerException {
- // TODO Auto-generated method stub
- return null;
+ MessageResult result=appendMessage(message, new Date(), MessageResult.KEY);
+ return result.getKey();
}
public String update(String key, MimeMessage message) throws MailboxManagerException {
- // TODO Auto-generated method stub
- return null;
+ MessageResult result=updateMessage(GeneralMessageSetImpl.oneKey(key),message, MessageResult.KEY);
+ return result.getKey();
}
+
+
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java Sat Dec 2 00:42:59 2006
@@ -89,6 +89,9 @@
*/
MessageResult[] getMessages(GeneralMessageSet set, int result) throws MailboxManagerException;
+
+ void remove(GeneralMessageSet set)
+ throws MailboxManagerException;
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java Sat Dec 2 00:42:59 2006
@@ -21,12 +21,9 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Date;
import java.util.Iterator;
-import javax.mail.Flags;
import javax.mail.MessagingException;
-import javax.mail.Flags.Flag;
import javax.mail.internet.MimeMessage;
import org.apache.avalon.framework.activity.Initializable;
@@ -40,12 +37,9 @@
import org.apache.commons.logging.impl.SimpleLog;
import org.apache.james.core.MailImpl;
import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.MessageResult;
import org.apache.james.mailboxmanager.Namespace;
-import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
-import org.apache.james.mailboxmanager.mailbox.FlaggedMailbox;
+import org.apache.james.mailboxmanager.mailbox.Mailbox;
import org.apache.james.mailboxmanager.mailbox.MailboxSession;
-import org.apache.james.mailboxmanager.mailbox.UidMailbox;
import org.apache.james.mailboxmanager.manager.MailboxManager;
import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
import org.apache.james.services.User;
@@ -64,7 +58,7 @@
/**
* used to map keys to uid and vice versa
*/
- private UidToKeyBidiMap uidToKeyBidiMap = null;
+ private KeyBidiMap keyBidiMap = null;
private MailboxManager mailboxManager;
@@ -74,15 +68,13 @@
private User user;
- protected long addUIDMessage(MimeMessage message) throws MessagingException {
+ protected String addMessage(MimeMessage message) throws MessagingException {
try {
- MessageResult mr = getMailboxGateKeeper().getMailbox().appendMessage(message,
- new Date(), MessageResult.UID);
- return mr.getUid();
+ String myKey = getMailboxGateKeeper().getMailbox().store(message);
+ return myKey;
} catch (MailboxManagerException e) {
throw new MessagingException(e.getMessage(), e);
}
-
}
/**
@@ -103,40 +95,39 @@
*/
public synchronized void store(Mail mc) throws MessagingException {
MimeMessage message = mc.getMessage();
- String key = mc.getName();
-
+ String externalKey = mc.getName();
+
getLogger().debug("store key:" + mc.getName());
- if (!message.isSet(Flag.RECENT)) {
- getLogger().debug("Message didn't have RECENT flag");
- message.setFlag(Flag.RECENT, true);
- }
boolean wasLocked = true;
try {
getMailboxGateKeeper().use();
-
+
synchronized (this) {
- wasLocked = getLock().isLocked(key);
+ wasLocked = getLock().isLocked(externalKey);
if (!wasLocked) {
// If it wasn't locked, we want a lock during the store
- lock(key);
+ lock(externalKey);
}
}
// insert or update, don't call remove(key) because of locking
- if (getUidToKeyBidiMap().containsKey(key)) {
- getLogger().info("remove message because of update Key:" + mc.getName());
- doRemove(key,true);
- }
- long uid = addUIDMessage(message);
- getUidToKeyBidiMap().put(key, uid);
-
- getLogger().info("message stored: UID: " + uid + " Key:" + mc.getName());
+ if (getKeyBidiMap().containsExternalKey(externalKey)) {
+ getLogger().info(
+ "remove message because of update Key:" + mc.getName());
+ doRemove(externalKey);
+ }
+ String internalKey = addMessage(message);
+ getKeyBidiMap().put(externalKey, internalKey);
+
+ getLogger().info(
+ "message stored: externalKey: " + externalKey
+ + " internalKey:" + internalKey);
} finally {
if (!wasLocked) {
// If it wasn't locked, we need to unlock now
- unlock(key);
+ unlock(externalKey);
synchronized (this) {
notify();
}
@@ -150,20 +141,20 @@
*
* @return
*/
- protected UidToKeyBidiMap getUidToKeyBidiMap() {
- if (uidToKeyBidiMap == null) {
- uidToKeyBidiMap = new UidToKeyBidiMapImpl();
+ protected KeyBidiMap getKeyBidiMap() {
+ if (keyBidiMap == null) {
+ keyBidiMap = new KeyBidiMapImpl();
}
- return uidToKeyBidiMap;
+ return keyBidiMap;
}
/**
* Used for testing
*
- * @param uidToKeyBidiMap
+ * @param keyBidiMap
*/
- void setUidToKeyBidiMap(UidToKeyBidiMap uidToKeyBidiMap) {
- this.uidToKeyBidiMap = uidToKeyBidiMap;
+ void setKeyBidiMap(KeyBidiMap keyBidiMap) {
+ this.keyBidiMap = keyBidiMap;
}
/**
@@ -194,13 +185,14 @@
*/
public synchronized void remove(String key) throws MessagingException {
getLogger().info(" remove key:" + key);
- doLockedRemove(key,true);
+ doLockedRemove(key, true);
}
- protected void doLockedRemove(String key,boolean expunge) throws MessagingException {
+ protected void doLockedRemove(String key, boolean expunge)
+ throws MessagingException {
if (lock(key)) {
try {
- doRemove(key,expunge);
+ doRemove(key);
} finally {
unlock(key);
}
@@ -209,18 +201,15 @@
throw new MessagingException("could not optain lock for remove");
}
}
- protected void doRemove(String key,boolean expunge) throws MessagingException {
+
+ protected void doRemove(String externalKey) throws MessagingException {
try {
getMailboxGateKeeper().use();
- if (getUidToKeyBidiMap().containsKey(key)) {
- long uid = getUidToKeyBidiMap().getByKey(key);
- getMailboxGateKeeper().getMailbox().setFlags(
- new Flags(Flags.Flag.DELETED), true, false,
- GeneralMessageSetImpl.oneUid(uid), null);
- getUidToKeyBidiMap().removeByKey(key);
- if (expunge) {
- doExpunge();
- }
+ if (getKeyBidiMap().containsExternalKey(externalKey)) {
+ String internalKey = getKeyBidiMap().getByExternalKey(
+ externalKey);
+ getMailboxGateKeeper().getMailbox().remove(internalKey);
+ getKeyBidiMap().removeByExternalKey(externalKey);
}
} catch (MailboxManagerException e) {
throw new MessagingException(e.getMessage(), e);
@@ -229,18 +218,6 @@
}
}
- protected void doExpunge() {
- try {
- getLogger().debug("Expunge");
- getMailboxGateKeeper().getMailbox().expunge(
- GeneralMessageSetImpl.all(), MessageResult.NOTHING);
- } catch (MailboxManagerException e) {
- getLogger().error("Error expunging mailbox",e);
- } catch (MessagingException e) {
- getLogger().error("Error expunging mailbox",e);
- }
- }
-
/**
* List string keys of messages in repository.
*
@@ -250,50 +227,42 @@
*
*/
public Iterator list() throws MessagingException {
- getLogger().debug("UIDPlusFolder list");
+ getLogger().debug("MailboxManagerMailRepository list");
try {
getMailboxGateKeeper().use();
- FlaggedMailbox mailbox = getMailboxGateKeeper().getMailbox();
-
+ Mailbox mailbox = getMailboxGateKeeper().getMailbox();
+
// needed for retainAllListedAndAddedByKeys(String[], Collection)
- String[] keysBefore = getUidToKeyBidiMap().getKeys();
-
+ String[] externalKeysBefore = getKeyBidiMap().getExternalKeys();
+
// get the messages
- MessageResult[] messageResults = mailbox.getMessages(
- GeneralMessageSetImpl.all(), MessageResult.UID
- + MessageResult.FLAGS);
- Collection keys = new ArrayList(messageResults.length);
- for (int i = 0; i < messageResults.length; i++) {
-
- long uid = messageResults[i].getUid();
-
- if (!messageResults[i].getFlags().contains(Flags.Flag.DELETED)) {
-
- long uidvalidity = ((UidMailbox) mailbox).getUidValidity();
- // lookup uid
-
- String key = getUidToKeyBidiMap().getByUid(uid);
- if (key == null) {
- // generate new key
- key = "james-uid:" + uidvalidity + ";" + uid + ";"
- + System.currentTimeMillis() + ";"
- + getRandom().nextLong();
- getUidToKeyBidiMap().put(key, uid);
- }
- keys.add(key);
- getLogger().debug("list: UID: " + uid + " Key:" + key);
- } else {
- getLogger().debug("don't list deleted UID:" + uid);
+ Collection internalKeys = mailbox.list();
+ Collection externalKeys = new ArrayList(internalKeys.size());
+ for (Iterator iter = internalKeys.iterator(); iter.hasNext();) {
+ String internalKey = (String) iter.next();
+ String externalKey = getKeyBidiMap().getByInternalKey(
+ internalKey);
+
+ if (externalKey == null) {
+ // generate new key
+ externalKey = "james-mailboxmanager:" + internalKey + ";"
+ + System.currentTimeMillis() + ";"
+ + getRandom().nextLong();
+ getKeyBidiMap().put(externalKey, internalKey);
}
+ externalKeys.add(externalKey);
+ getLogger().debug(
+ "list: externalKey: " + externalKey + " internalKey:"
+ + internalKey);
}
// retain only listed keys, and keys added in the meantime (it would
// be fatal to loose those)
// I don't care about meanwhile removed, those will fail on next
// access
// it's a good idea to keep count of cached small
- getUidToKeyBidiMap()
- .retainAllListedAndAddedByKeys(keysBefore, keys);
- return keys.iterator();
+ getKeyBidiMap().retainAllListedAndAddedByExternalKeys(
+ externalKeysBefore, externalKeys);
+ return externalKeys.iterator();
} catch (MailboxManagerException e) {
throw new MessagingException(e.getMessage(), e);
} finally {
@@ -301,46 +270,30 @@
}
}
- private MimeMessage getMessageFromInbox(String key)
+ private MimeMessage getMessageFromInbox(String externalKey)
throws MessagingException {
-
- long uid = getUidToKeyBidiMap().getByKey(key);
- if (uid < 1) {
- return null;
- }
- MessageResult[] messageResults;
+ String internalKey=getKeyBidiMap().getByExternalKey(externalKey);
+ MimeMessage mimeMessage = null;
try {
getMailboxGateKeeper().use();
- messageResults = getMailboxGateKeeper().getMailbox().getMessages(
- GeneralMessageSetImpl.oneUid(uid),
- MessageResult.MIME_MESSAGE);
+ mimeMessage = getMailboxGateKeeper().getMailbox().retrieve(internalKey);
} catch (MailboxManagerException e) {
throw new MessagingException(e.getMessage(), e);
} finally {
getMailboxGateKeeper().free();
}
- MimeMessage mm = null;
- if (messageResults.length == 1) {
- mm = messageResults[0].getMimeMessage();
- }
- getLogger().debug("getMessageFromInbox: UID: " + uid + " Key:" + key);
- if (mm == null) {
- getUidToKeyBidiMap().removeByKey(key);
- getLogger().info("Message not Found");
- }
- return mm;
+ return mimeMessage;
}
public void remove(Collection mails) throws MessagingException {
- getLogger().debug("Remove by Collection KEYS:"+mails);
+ getLogger().debug("Remove by Collection KEYS:" + mails);
try {
getMailboxGateKeeper().use();
for (Iterator iter = mails.iterator(); iter.hasNext();) {
Mail mail = (Mail) iter.next();
- doRemove(mail.getName(), false);
+ doRemove(mail.getName());
}
- doExpunge();
} finally {
getMailboxGateKeeper().free();
}
@@ -357,25 +310,25 @@
class MailboxGateKeeper {
int open = 0;
- FlaggedMailbox mailbox = null;
+ MailboxSession mailboxSession = null;
synchronized void use() {
open++;
}
- synchronized void free() {
+ synchronized void free() {
if (open < 1) {
throw new RuntimeException("use<1 !");
}
open--;
if (open < 1) {
if (open == 0) {
- if (mailbox != null) {
+ if (mailboxSession != null) {
try {
- ((MailboxSession) mailbox).close();
+ mailboxSession.close();
} catch (MailboxManagerException e) {
}
- mailbox=null;
+ mailboxSession=null;
}
} else {
throw new RuntimeException("use<0 !");
@@ -383,20 +336,21 @@
}
}
- synchronized FlaggedMailbox getMailbox()
- throws MailboxManagerException, MessagingException {
+ synchronized Mailbox getMailbox() throws MailboxManagerException,
+ MessagingException {
if (open < 1) {
throw new RuntimeException("use<1 !");
}
- if (mailbox == null) {
+ if (mailboxSession == null) {
Namespace ns = mailboxManagerProvider.getPersonalDefaultNamespace(
user);
- String inbox=ns.getName() + ns.getHierarchyDelimter()+ "INBOX";
- mailbox = getMailboxManager()
- .getImapMailboxSession(inbox);
+ String inbox = ns.getName() + ns.getHierarchyDelimter()
+ + "INBOX";
+ mailboxSession = getMailboxManager().getImapMailboxSession(
+ inbox);
}
- return mailbox;
+ return mailboxSession;
}
}
@@ -404,7 +358,7 @@
* lazy loads a MailboxManager from MailboxManagerProvider
*
*/
-
+
protected MailboxManager getMailboxManager() throws MessagingException,
MailboxManagerException {
if (mailboxManager == null) {
@@ -427,9 +381,9 @@
}
public void configure(Configuration conf) throws ConfigurationException {
-
+
// fetch user name
-
+
String destinationUrl = conf.getAttribute("destinationURL");
if (destinationUrl.endsWith("/")) {
destinationUrl = destinationUrl.substring(0, destinationUrl
@@ -437,25 +391,28 @@
}
String userName = destinationUrl.substring(destinationUrl
.lastIndexOf('/') + 1);
- getLogger().info("Configured for user: '"+userName+"' URL: '"+destinationUrl+"'");
- setUser(new DefaultJamesUser(userName,"none"));
+ getLogger().info(
+ "Configured for user: '" + userName + "' URL: '"
+ + destinationUrl + "'");
+ setUser(new DefaultJamesUser(userName, "none"));
}
-
public void setUser(User user) {
- this.user=user;
+ this.user = user;
}
public void service(ServiceManager serviceManager) throws ServiceException {
- MailboxManagerProvider mailboxManagerProvider =(MailboxManagerProvider) serviceManager.lookup("org.apache.james.mailboxmanager.manager.MailboxManagerProvider");
- getLogger().debug("MailboxManagerMailRepository uses service "+mailboxManagerProvider);
+ MailboxManagerProvider mailboxManagerProvider = (MailboxManagerProvider) serviceManager
+ .lookup("org.apache.james.mailboxmanager.manager.MailboxManagerProvider");
+ getLogger().debug(
+ "MailboxManagerMailRepository uses service "
+ + mailboxManagerProvider);
setMailboxManagerProvider(mailboxManagerProvider);
}
-
-
+
protected Log getLogger() {
- if (log==null) {
- log=new SimpleLog("MailboxManagerMailRepository");
+ if (log == null) {
+ log = new SimpleLog("MailboxManagerMailRepository");
}
return log;
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java Sat Dec 2 00:42:59 2006
@@ -52,6 +52,8 @@
import org.apache.james.mailboxmanager.torque.om.MessageRowPeer;
import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
import org.apache.james.mailboxmanager.tracking.UidRange;
+import org.apache.james.mailboxmanager.util.UidToKeyConverter;
+import org.apache.james.mailboxmanager.util.UidToKeyConverterImpl;
import org.apache.torque.NoRowsException;
import org.apache.torque.TooManyRowsException;
import org.apache.torque.TorqueException;
@@ -71,12 +73,15 @@
private UidChangeTracker tracker;
private MailboxEventDispatcher eventDispatcher = new MailboxEventDispatcher();
+
+ private UidToKeyConverter uidToKeyConverter;
TorqueMailbox(MailboxRow mailboxRow, UidChangeTracker tracker, Log log) {
setLog(log);
this.mailboxRow = mailboxRow;
this.tracker = tracker;
tracker.addMailboxListener(getEventDispatcher());
+ getUidToKeyConverter().setUidValidity(mailboxRow.getUidValidity());
}
public int getMessageResultTypes() {
@@ -236,7 +241,8 @@
public MessageResult[] getMessages(GeneralMessageSet set, int result)
throws MailboxManagerException {
checkAccess();
- if (!set.isValid()) {
+ set=toUidSet(set);
+ if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) {
return new MessageResult[0];
}
Criteria c = criteriaForMessageSet(set);
@@ -307,6 +313,12 @@
messageResult.setInternalDate(messageRow.getInternalDate());
result -= MessageResult.INTERNAL_DATE;
}
+ if ((result & MessageResult.KEY) > 0) {
+ messageResult.setKey(getUidToKeyConverter().toKey(messageRow.getUid()));
+ result -= MessageResult.KEY;
+ }
+
+
if (result != 0) {
throw new RuntimeException("Unsupportet result: " + result);
}
@@ -394,6 +406,10 @@
public MessageResult[] expunge(GeneralMessageSet set, int result)
throws MailboxManagerException {
checkAccess();
+ set=toUidSet(set);
+ if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) {
+ return new MessageResult[0];
+ }
try {
// TODO put this into a serializable transaction
final Criteria c = criteriaForMessageSet(set);
@@ -424,6 +440,10 @@
GeneralMessageSet set, MailboxListener silentListener)
throws MailboxManagerException {
checkAccess();
+ set=toUidSet(set);
+ if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) {
+ return;
+ }
try {
// TODO put this into a serializeable transaction
final List messageRows = getMailboxRow()
@@ -531,7 +551,13 @@
this.mailboxRow = mailboxRow;
}
- public MessageResult[] search(GeneralMessageSet set, SearchTerm searchTerm, int result) {
+ public MessageResult[] search(GeneralMessageSet set, SearchTerm searchTerm,
+ int result) throws MailboxManagerException {
+ checkAccess();
+ set=toUidSet(set);
+ if (!set.isValid() || set.getType()==GeneralMessageSet.TYPE_NOTHING) {
+ return new MessageResult[0];
+ }
final Log log = getLog();
// TODO implementation
if (log.isWarnEnabled()) {
@@ -540,5 +566,29 @@
MessageResult[] results = {};
return results;
}
+
+ protected UidToKeyConverter getUidToKeyConverter() {
+ if (uidToKeyConverter == null) {
+ uidToKeyConverter = new UidToKeyConverterImpl();
+ }
+ return uidToKeyConverter;
+ }
+
+ public void remove(GeneralMessageSet set) throws MailboxManagerException {
+ setFlags(new Flags(Flags.Flag.DELETED), true, false, set, null);
+ expunge(set, MessageResult.NOTHING);
+ }
+ private GeneralMessageSet toUidSet(GeneralMessageSet set) {
+ if (set.getType()==GeneralMessageSet.TYPE_KEY) {
+ Long uid=getUidToKeyConverter().toUid(set.getKey());
+ if (uid!=null) {
+ set=GeneralMessageSetImpl.oneUid(uid.longValue());
+ } else {
+ set=GeneralMessageSetImpl.nothing();
+ }
+ }
+ return set;
+ }
+
}
Modified: james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java?view=diff&rev=481519&r1=481518&r2=481519
==============================================================================
--- james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java (original)
+++ james/server/sandbox/mailbox-namespaces/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java Sat Dec 2 00:42:59 2006
@@ -73,4 +73,8 @@
return true;
}
+ public void remove(GeneralMessageSet set) throws MailboxManagerException {
+ mailbox.remove(toUidSet(set));
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org