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/01 21:18:49 UTC
svn commit: r481374 - in /james/server/trunk/src:
java/org/apache/james/mailboxmanager/
java/org/apache/james/mailboxmanager/impl/
java/org/apache/james/mailboxmanager/mailbox/
java/org/apache/james/mailboxmanager/repository/
java/org/apache/james/mail...
Author: joachim
Date: Fri Dec 1 12:18:48 2006
New Revision: 481374
URL: http://svn.apache.org/viewvc?view=rev&rev=481374
Log:
- added explicit GeneralMailbox.remove(set) method
- TorqueMailbox works with MessageResult.KEY now
- MailboxManagerMailRepository works with internal keys now instead of uids
- AbstractGeneralMailbox forwards Mailbox methods to GeneralMailbox with keys
Added:
james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java
- copied, changed from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java
- copied, changed from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java
- copied, changed from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java
james/server/trunk/src/test/org/apache/james/mailboxmanager/util/UidToKeyConverterTest.java
Removed:
james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java
Modified:
james/server/trunk/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
james/server/trunk/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java
Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/GeneralMessageSet.java Fri Dec 1 12:18:48 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/trunk/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/GeneralMessageSetImpl.java Fri Dec 1 12:18:48 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/trunk/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/impl/MessageResultImpl.java Fri Dec 1 12:18:48 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/trunk/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/AbstractGeneralMailbox.java Fri Dec 1 12:18:48 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/trunk/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/mailbox/GeneralMailbox.java Fri Dec 1 12:18:48 2006
@@ -89,6 +89,9 @@
*/
MessageResult[] getMessages(GeneralMessageSet set, int result) throws MailboxManagerException;
+
+ void remove(GeneralMessageSet set)
+ throws MailboxManagerException;
}
Copied: james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java (from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java?view=diff&rev=481374&p1=james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java&r1=477670&p2=james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMap.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMap.java Fri Dec 1 12:18:48 2006
@@ -26,20 +26,20 @@
*
*/
-public interface UidToKeyBidiMap {
+public interface KeyBidiMap {
- boolean containsKey(String key);
+ boolean containsExternalKey(String externalKey);
- void put(String key, long uid);
+ void put(String externalKey, String internalKey);
- void removeByKey(String key);
+ void removeByExternalKey(String key);
- String[] getKeys();
+ String[] getExternalKeys();
- String getByUid(long uid);
+ String getByInternalKey(String internalKey);
- void retainAllListedAndAddedByKeys(String[] keysBefore, Collection keys);
+ void retainAllListedAndAddedByExternalKeys(String[] externalKeysBefore, Collection externalKeys);
- long getByKey(String key);
+ String getByExternalKey(String externalKey);
}
Copied: james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java (from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java?view=diff&rev=481374&p1=james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java&r1=477670&p2=james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/UidToKeyBidiMapImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/KeyBidiMapImpl.java Fri Dec 1 12:18:48 2006
@@ -1,3 +1,22 @@
+/****************************************************************
+ * 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.repository;
import java.util.ArrayList;
@@ -7,62 +26,53 @@
import java.util.HashSet;
import java.util.Map;
-public class UidToKeyBidiMapImpl implements UidToKeyBidiMap {
+public class KeyBidiMapImpl implements KeyBidiMap {
- private Map keyToUid;
+ private Map externalToInternal;
- private Map uidToKey;
+ private Map internalToExternal;
- public UidToKeyBidiMapImpl() {
- keyToUid = new HashMap();
- uidToKey = new HashMap();
+ public KeyBidiMapImpl() {
+ externalToInternal = new HashMap();
+ internalToExternal = new HashMap();
}
- public synchronized String[] getKeys() {
- final ArrayList al = new ArrayList(keyToUid.keySet());
+ public synchronized String[] getExternalKeys() {
+ final ArrayList al = new ArrayList(externalToInternal.keySet());
final String[] keys = (String[]) al.toArray(new String[0]);
return keys;
}
- public synchronized void retainAllListedAndAddedByKeys(
- final String[] before, final Collection listed) {
- Collection added = new HashSet(keyToUid.keySet());
- added.removeAll(Arrays.asList(before));
- Collection retain = new HashSet(listed);
+ public synchronized void retainAllListedAndAddedByExternalKeys(String[] externalKeysBefore, Collection externalKeys) {
+ Collection added = new HashSet(externalToInternal.keySet());
+ added.removeAll(Arrays.asList(externalKeysBefore));
+ Collection retain = new HashSet(externalKeys);
retain.addAll(added);
- keyToUid.keySet().retainAll(retain);
- uidToKey.keySet().retainAll(keyToUid.values());
+ externalToInternal.keySet().retainAll(retain);
+ internalToExternal.keySet().retainAll(externalToInternal.values());
}
- public synchronized void removeByKey(String key) {
- long uid = getByKey(key);
- if (uid > -1) {
- uidToKey.remove(new Long(uid));
- }
- keyToUid.remove(key);
+ public synchronized void removeByExternalKey(String externalKey) {
+ String internalKey = getByExternalKey(externalKey);
+ internalToExternal.remove(internalKey);
+ externalToInternal.remove(externalKey);
}
- public synchronized long getByKey(String key) {
- Long lo = (Long) keyToUid.get(key);
- long l = -1;
- if (lo != null) {
- l = lo.longValue();
- }
- return l;
+ public synchronized String getByExternalKey(String externalKey) {
+ return (String) externalToInternal.get(externalKey);
}
- public synchronized String getByUid(long uid) {
-
- return (String) uidToKey.get(new Long(uid));
+ public synchronized String getByInternalKey(String internalKey) {
+ return (String) internalToExternal.get(internalKey);
}
- public synchronized boolean containsKey(String key) {
- return keyToUid.containsKey(key);
+ public synchronized boolean containsExternalKey(String externalKey) {
+ return externalToInternal.containsKey(externalKey);
}
- public synchronized void put(String key, long uid) {
- keyToUid.put(key, new Long(uid));
- uidToKey.put(new Long(uid), key);
+ public synchronized void put(String externalKey, String internalKey) {
+ externalToInternal.put(externalKey, internalKey);
+ internalToExternal.put(internalKey, externalKey);
}
Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/repository/MailboxManagerMailRepository.java Fri Dec 1 12:18:48 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,22 +310,22 @@
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) {
- ((MailboxSession) mailbox).close();
- mailbox=null;
+ if (mailboxSession != null) {
+ mailboxSession.close();
+ mailboxSession = null;
}
} else {
throw new RuntimeException("use<0 !");
@@ -380,20 +333,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 = getMailboxManager().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;
}
}
@@ -401,7 +355,7 @@
* lazy loads a MailboxManager from MailboxManagerProvider
*
*/
-
+
protected MailboxManager getMailboxManager() throws MessagingException,
MailboxManagerException {
if (mailboxManager == null) {
@@ -424,9 +378,9 @@
}
public void configure(Configuration conf) throws ConfigurationException {
-
+
// fetch user name
-
+
String destinationUrl = conf.getAttribute("destinationURL");
if (destinationUrl.endsWith("/")) {
destinationUrl = destinationUrl.substring(0, destinationUrl
@@ -434,25 +388,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/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java Fri Dec 1 12:18:48 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;
+ }
+
}
Copied: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java (from r477670, james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java?view=diff&rev=481374&p1=james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java&r1=477670&p2=james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogEnabled.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AbstractLogFactoryAware.java Fri Dec 1 12:18:48 2006
@@ -1,15 +1,39 @@
+/****************************************************************
+ * 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.util;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.SimpleLog;
-public abstract class AbstractLogEnabled {
+public abstract class AbstractLogFactoryAware implements LogFactoryAware, LogEnabled {
private Log log;
+ private MyLogFactory logFactory;
protected Log getLog() {
if (log==null) {
- log=new SimpleLog(this.getClass().getName());
+ SimpleLog simpleLog=new SimpleLog(this.getClass().getName());
+ simpleLog.setLevel(SimpleLog.LOG_LEVEL_ALL);
+ log=simpleLog;
}
return log;
}
@@ -17,5 +41,30 @@
public void setLog(Log log) {
this.log=log;
}
+
+ public void setLogFactory(MyLogFactory logFactory) {
+ this.logFactory=logFactory;
+ }
+
+ protected MyLogFactory getLogFacory() {
+ return logFactory;
+ }
+
+ protected void setupChildLog(Object object, String childName) {
+ MyLogFactory childFactory=logFactory.getChildFactory(childName);
+ if (object instanceof LogFactoryAware) {
+ ((LogFactoryAware)object).setLogFactory(childFactory);
+ }
+ if (object instanceof LogAware) {
+ ((LogAware)object).setLog(childFactory.getLog());
+ }
+ }
+
+ public void enableLogging(Logger logger) {
+ this.logFactory=new AvalonLogFactory(logger);
+ this.log=logFactory.getLog();
+ }
+
+
}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/AvalonLogFactory.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,54 @@
+/****************************************************************
+ * 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.util;
+
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.impl.AvalonLogger;
+
+public class AvalonLogFactory implements MyLogFactory, LogEnabled {
+
+ private Logger logger;
+
+ public AvalonLogFactory() {
+ }
+
+ public AvalonLogFactory(Logger logger) {
+ this.logger=logger;
+ }
+
+ public MyLogFactory getChildFactory(String childName) {
+ return new AvalonLogFactory(logger.getChildLogger(childName));
+ }
+
+ public Log getChildLog(String childName) {
+ return new AvalonLogger(logger.getChildLogger(childName));
+ }
+
+ public Log getLog() {
+ return new AvalonLogger(logger);
+ }
+
+ public void enableLogging(Logger logger) {
+ this.logger=logger;
+ }
+
+}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogAware.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.util;
+
+import org.apache.commons.logging.Log;
+
+public interface LogAware {
+
+ public void setLog(Log log);
+
+}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/LogFactoryAware.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,26 @@
+/****************************************************************
+ * 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.util;
+
+public interface LogFactoryAware {
+
+ public void setLogFactory(MyLogFactory logFactory);
+
+}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/MyLogFactory.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,33 @@
+/****************************************************************
+ * 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.util;
+
+import org.apache.commons.logging.Log;
+
+interface MyLogFactory {
+
+ Log getChildLog(String childName);
+
+ Log getLog();
+
+ MyLogFactory getChildFactory(String childName);
+
+
+}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverter.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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.util;
+
+public interface UidToKeyConverter {
+
+ void setUidValidity(long uidValidity);
+
+ String toKey(long uid);
+
+ Long toUid(String key);
+
+}
Added: james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java (added)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/util/UidToKeyConverterImpl.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,77 @@
+/****************************************************************
+ * 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.util;
+
+public class UidToKeyConverterImpl extends AbstractLogFactoryAware implements
+ UidToKeyConverter {
+
+ public static final String PREFIX = "JAMES-UID-KEY-";
+
+ private long uidValidity;
+
+ public void setUidValidity(long uidValidity) {
+ this.uidValidity = uidValidity;
+ }
+
+ public String toKey(long uid) {
+ return PREFIX + "(" + uid + ";" + uidValidity + ")";
+ }
+
+ public Long toUid(String key) {
+ if (key != null) {
+ if (key.startsWith(PREFIX + "(")) {
+ key = key.substring(PREFIX.length() + 1);
+ if (key.endsWith(")")) {
+ key = key.substring(0, key.length() - 1);
+ int pos = key.indexOf(';');
+ if (pos > 0 && pos < key.length() - 1) {
+ try {
+ long theUid = Long.parseLong(key.substring(0, pos));
+ long theUidValidity = Long.parseLong(key
+ .substring(pos + 1));
+ if (theUidValidity == uidValidity) {
+ return new Long(theUid);
+ } else {
+ getLog().debug(
+ "toUid: uidValidity mismatch. Expected: "
+ + uidValidity + " was "
+ + theUidValidity);
+ }
+ } catch (NumberFormatException e) {
+ getLog().debug("toUid", e);
+ }
+ } else {
+ getLog().debug(
+ "toUid: failed. pos=" + pos + " length="
+ + key.length());
+ }
+ } else {
+ getLog().debug("toUid: failed. did not end with ')'");
+ }
+ } else {
+ getLog().debug("toUid: failed. did not start with PREFIX");
+ }
+ } else {
+ getLog().debug("toUid: failed. key is null");
+ }
+ return null;
+ }
+
+}
Modified: james/server/trunk/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java?view=diff&rev=481374&r1=481373&r2=481374
==============================================================================
--- james/server/trunk/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java (original)
+++ james/server/trunk/src/java/org/apache/james/mailboxmanager/wrapper/SessionMailboxWrapper.java Fri Dec 1 12:18:48 2006
@@ -73,4 +73,8 @@
return true;
}
+ public void remove(GeneralMessageSet set) throws MailboxManagerException {
+ mailbox.remove(toUidSet(set));
+ }
+
}
Added: james/server/trunk/src/test/org/apache/james/mailboxmanager/util/UidToKeyConverterTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/mailboxmanager/util/UidToKeyConverterTest.java?view=auto&rev=481374
==============================================================================
--- james/server/trunk/src/test/org/apache/james/mailboxmanager/util/UidToKeyConverterTest.java (added)
+++ james/server/trunk/src/test/org/apache/james/mailboxmanager/util/UidToKeyConverterTest.java Fri Dec 1 12:18:48 2006
@@ -0,0 +1,63 @@
+/****************************************************************
+ * 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.util;
+
+import junit.framework.TestCase;
+
+public class UidToKeyConverterTest extends TestCase {
+
+ UidToKeyConverterImpl uidToKeyConverterImpl;
+
+ long uidValidity=123;
+
+ public void setUp(){
+ uidToKeyConverterImpl=new UidToKeyConverterImpl();
+ uidToKeyConverterImpl.setUidValidity(uidValidity);
+ }
+
+
+ public void testUidToKey() {
+ assertEquals("JAMES-UID-KEY-(345;123)",uidToKeyConverterImpl.toKey(345));
+ }
+
+ public void testKeyToUidValid() {
+ assertEquals(Long.valueOf(3454),uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(3454;123)"));
+ uidToKeyConverterImpl.setUidValidity(1);
+ assertEquals(Long.valueOf(2),uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(2;1)"));
+ }
+
+ public void testKeyToUidWrongUidValidity() {
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(3454;1234)"));
+ }
+
+ public void testKeyToUidWrongFormat() {
+ assertNull(uidToKeyConverterImpl.toUid(null));
+ assertNull(uidToKeyConverterImpl.toUid(""));
+ assertNull(uidToKeyConverterImpl.toUid("JMES-UID-KEY-("));
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(;123)"));
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(3454;)"));
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(3454;123"));
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(345d4;123)"));
+ assertNull(uidToKeyConverterImpl.toUid("JAMES-UID-KEY-(34;54;123)"));
+
+ }
+
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org