Author: norman Date: Mon Sep 25 12:55:02 2006 New Revision: 449795 URL: http://svn.apache.org/viewvc?view=rev&rev=449795 Log: Start to merge new version of javamailstore repository. See JAMES-637
Also start to merge javadocs to this version Added: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapterFactory.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java - copied, changed from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java - copied, changed from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java - copied, changed from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeper.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperAware.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperImpl.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java - copied, changed from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java - copied, changed from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java - copied, changed from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java - copied, changed from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/AbstractJavamailStoreMailRepository.java Mon Sep 25 12:55:02 2006 @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ + package org.apache.james.mailrepository.javamail; import java.io.File; @@ -54,7 +55,7 @@ */ public abstract class AbstractJavamailStoreMailRepository extends - AbstractLogEnabled implements MailRepository, StoreAware, Configurable, + AbstractLogEnabled implements MailRepository, StoreGateKeeperAware, FolderAdapterFactory, Configurable, Initializable,Contextualizable { /** @@ -76,7 +77,7 @@ * The underlaying Store can be used externaly via the StoreAware.getStore() * Method */ - private javax.mail.Store mailStore = null; + private StoreGateKeeper storeGateKeeper = null; /** * used internally to generate keys @@ -157,6 +158,7 @@ throw new ConfigurationException("Invalid url: " + destination); } + destination = protocol + withoutProtocol; log.debug("destination: " + destination); Properties mailSessionProps = new Properties(); @@ -165,10 +167,16 @@ // mailSessionProps.put("mail.store.maildir.autocreatedir", "true"); Session mailSession = Session.getDefaultInstance(mailSessionProps); try { - mailStore = mailSession.getStore(new URLName(destination)); + Store store=mailSession.getStore(new URLName(destination)); + store.connect(); + storeGateKeeper = new StoreGateKeeperImpl(store); + storeGateKeeper.setFolderAdapterFactory(this); } catch (NoSuchProviderException e) { throw new ConfigurationException("cannot find store provider for " + destination, e); + } catch (MessagingException e) { + throw new ConfigurationException("Error connecting store: " + + destination, e); } String checkType = conf.getAttribute("type"); @@ -180,14 +188,12 @@ } log.debug("JavaMailStoreMailRepository configured"); } - + /** - * connect the mailStore - * + * Does nothing * @see Initializable#initialize() */ public void initialize() throws Exception { - mailStore.connect(); log.debug("JavaMailStoreMailRepository initialized"); } @@ -298,8 +304,8 @@ * Remove a list of messages from disk The collection is simply a list of * mails to delete * - * @param mails a Collection of mails which should removed - * @throws MessagingException + * @param mails + * @throws MessagingException */ public void remove(final Collection mails) throws MessagingException { log.debug("UIDPlusFolder remove by Collection " + mails.size()); @@ -325,8 +331,8 @@ * * @return the Store */ - public Store getStore() { - return mailStore; + public StoreGateKeeper getStore() { + return storeGateKeeper; } /** @@ -352,52 +358,39 @@ this.log=log; } + /** * possibility to replace FolderGateKeeper implementation. Only used for * testing * * @param folderGateKeeper the FolgerGateKeeper to use */ - void setFolderGateKeeper(FolderGateKeeper folderGateKeeper) { - this.folderGateKeeper=folderGateKeeper; + void setFolderGateKeeper(FolderGateKeeper gk) { + this.folderGateKeeper=gk; } /** - * used by getFolderGateKeeper to get the right FolderInterface implementation - * - * @param folder JavaMail folder - * @return folderInterface the FolderInterface - * @throws NoSuchMethodException if the Folder is not suitable - */ - protected abstract FolderInterface createAdapter(Folder folder) throws NoSuchMethodException; - - /** * Lazy-load FolderGateKeeper with inbox folder. Inbox folder is created if * not present - * * @return FolderGateKeeper offering inbox folder for this mail repository */ protected FolderGateKeeper getFolderGateKeeper() { if (folderGateKeeper == null) { try { - Folder inbox = getStore().getFolder("INBOX"); - FolderInterface myInbox=createAdapter(inbox); - folderGateKeeper = new FolderGateKeeperImpl(myInbox); - + folderGateKeeper = getStore().getFolder("INBOX"); /* * Check whether the folder exists, if not create it */ - if (inbox.exists() == false) { - inbox.create(Folder.HOLDS_MESSAGES); + folderGateKeeper.use(); + if (folderGateKeeper.getFolder().exists() == false) { + folderGateKeeper.getFolder().create(Folder.HOLDS_MESSAGES); } + folderGateKeeper.free(); } catch (MessagingException e) { throw new RuntimeException( "cannot retrieve inbox for this repository", e); - } catch (NoSuchMethodException e) { - throw new RuntimeException( - "Folder implementation is not suitable", e); - } + } } return folderGateKeeper; } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapter.java Mon Sep 25 12:55:02 2006 @@ -100,14 +100,14 @@ } /** - * @see javax.mail.Folder#create(int) + * @see org.apache.james.mailrepository.javamail.FolderInterface#create(int) */ public boolean create(int arg0) throws MessagingException { return folder.create(arg0); } /** - * @see javax.mail.Folder#delete(boolean) + * @see org.apache.james.mailrepository.javamail.FolderInterface#delete(boolean) */ public boolean delete(boolean arg0) throws MessagingException { return folder.delete(arg0); @@ -121,14 +121,14 @@ } /** - * @see javax.mail.Folder#exists() + * @see org.apache.james.mailrepository.javamail.FolderInterface#exists() */ public boolean exists() throws MessagingException { return folder.exists(); } /** - * @see javax.mail.Folder#expunge() + * @see org.apache.james.mailrepository.javamail.FolderInterface#expunge() */ public Message[] expunge() throws MessagingException { return folder.expunge(); @@ -156,10 +156,17 @@ } /** - * @see javax.mail.Folder#getFullName() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getFullName() */ public String getFullName() { - return folder.getFullName(); + // FIXME ugly workaroung for buggy getFullName in javamaildir + String fn=folder.getFullName(); + if (fn.length()>1) { + if (fn.charAt(0)=='.') { + fn=fn.substring(1); + } + } + return fn; } /** @@ -205,19 +212,20 @@ } /** - * @see javax.mail.Folder#getName() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getName() */ public String getName() { return folder.getName(); } /** - * @see javax.mail.Folder#getNewMessageCount() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getNewMessageCount() */ public int getNewMessageCount() throws MessagingException { return folder.getNewMessageCount(); } + /** * @see javax.mail.Folder#getParent() */ @@ -226,7 +234,7 @@ } /** - * @see javax.mail.Folder#getPermanentFlags() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getPermanentFlags() */ public Flags getPermanentFlags() { return folder.getPermanentFlags(); @@ -247,14 +255,14 @@ } /** - * @see javax.mail.Folder#getType() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getType() */ public int getType() throws MessagingException { return folder.getType(); } /** - * @see javax.mail.Folder#getUnreadMessageCount() + * @see org.apache.james.mailrepository.javamail.FolderInterface#getUnreadMessageCount() */ public int getUnreadMessageCount() throws MessagingException { return folder.getUnreadMessageCount(); @@ -303,10 +311,10 @@ } /** - * @see javax.mail.Folder#list(String) + * @see org.apache.james.mailrepository.javamail.FolderInterface#list(java.lang.String) */ - public Folder[] list(String arg0) throws MessagingException { - return folder.list(arg0); + public FolderInterface[] list(String arg0) throws MessagingException { + return wrapFolders(folder.list(arg0)); } /** @@ -336,7 +344,7 @@ public void removeConnectionListener(ConnectionListener arg0) { folder.removeConnectionListener(arg0); } - + /** * @see javax.mail.Folder#removeFolderListener(FolderListener) */ @@ -359,7 +367,7 @@ } /** - * @see javax.mail.Folder#renameTo(Folder) + * @see org.apache.james.mailrepository.javamail.FolderInterface#renameTo(javax.mail.Folder) */ public boolean renameTo(Folder arg0) throws MessagingException { return folder.renameTo(arg0); @@ -414,4 +422,25 @@ return folder.toString(); } + /** + * Wrap Folder in this class + * + * @param folder the folder to wrap + * @return new instance of this class wrapped + */ + protected FolderInterface wrapFolder(Folder folder) { + return new FolderAdapter(folder); + } + + /** + * @see #wrapFolder(Folder) + */ + protected FolderInterface[] wrapFolders(Folder[] folders) { + FolderInterface[] fis=new FolderInterface[folders.length]; + for (int i = 0; i < folders.length; i++) { + fis[i]=wrapFolder(folders[i]); + + } + return fis; + } } Added: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapterFactory.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapterFactory.java?view=auto&rev=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapterFactory.java (added) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderAdapterFactory.java Mon Sep 25 12:55:02 2006 @@ -0,0 +1,35 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailrepository.javamail; + +import javax.mail.Folder; + +public interface FolderAdapterFactory { + + /** + * used by StoreGateKeeper to get the right FolderInterface implementation + * + * @param folder JavaMail folder + * @return + * @throws NoSuchMethodException if the Folder is not suitable + */ + FolderInterface createAdapter(Folder folder); + +} Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java (from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java&r1=447388&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeper.java Mon Sep 25 12:55:02 2006 @@ -16,8 +16,10 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ + package org.apache.james.mailrepository.javamail; +import javax.mail.Folder; import javax.mail.MessagingException; /** @@ -90,5 +92,30 @@ * if there are only 0 users */ public FolderInterface getFolder(); + + /** + * @see javax.mail.Folder#getFullName() + */ + public String getFullName() throws MessagingException; + + /** + * @see javax.mail.Folder + */ + public void create(int holds_folders) throws MessagingException; + + /** + * @see javax.mail.Folder#exists() + */ + public boolean exists() throws MessagingException; + + /** + * @see javax.mail.Folder#renameTo(Folder) + */ + void renameTo(Folder folder) throws MessagingException; + + /** + * @see javax.mail.Folder#renameTo(Folder) + */ + public void renameTo(String newName) throws MessagingException;; } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderGateKeeperImpl.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import javax.mail.Folder; @@ -29,28 +27,26 @@ * offers access to an underlaying Folder and manages open/close operations.<br> * The FolderGateKeeper can be handed over to different threads. * - * @see org.apache.james.mailrepository.javamail.FolderGateKeeper + * @sse FolderGateKeeper * */ public class FolderGateKeeperImpl implements FolderGateKeeper { - private FolderInterface folder; + private final FolderInterface folder; private int inUse = 0; boolean open = false; - /** - * Construct new FolderGateKeeperImpl - * - * @param folder the FolderInterface - */ - public FolderGateKeeperImpl(FolderInterface folder) { + private final StoreGateKeeper storeGateKeeper; + + public FolderGateKeeperImpl(FolderInterface folder,StoreGateKeeper storeGateKeeper) { if (folder.isOpen()) { throw new IllegalStateException( "FolderGateKeeper: initial state must be closed"); } this.folder = folder; + this.storeGateKeeper=storeGateKeeper; } /** @@ -89,6 +85,9 @@ * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#getOpenFolder() */ public synchronized FolderInterface getOpenFolder() throws MessagingException { + if ((folder.getType() & Folder.HOLDS_MESSAGES)==0) { + throw new RuntimeException("cannot open a Folder that does not hold messages"); + } if (inUse < 1) { throw new IllegalStateException( "called getFolder() but folder is not in use"); @@ -127,6 +126,55 @@ + open); } return folder; + } + + /** + * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#getFullName() + */ + public String getFullName() throws MessagingException { + use(); + String fn=getFolder().getFullName(); + free(); + return fn; + } + + /** + * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#create(int) + */ + public void create(int holds_folders) throws MessagingException { + use(); + getFolder().create(holds_folders); + free(); + } + + /** + * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#exists() + */ + public boolean exists() throws MessagingException { + use(); + boolean e=getFolder().exists(); + free(); + return e; + } + + + /** + * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#renameTo(javax.mail.Folder) + */ + public synchronized void renameTo(Folder destination) throws MessagingException { + if (inUse!=0) { + throw new IllegalStateException("cannot operate of folder that is in use"); + } else { + folder.renameTo(destination); + } + + } + + /** + * @see org.apache.james.mailrepository.javamail.FolderGateKeeper#renameTo(java.lang.String) + */ + public synchronized void renameTo(String newName) throws MessagingException { + storeGateKeeper.renameTo(this,newName); } } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/FolderInterface.java Mon Sep 25 12:55:02 2006 @@ -17,13 +17,12 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; +import javax.mail.Flags; +import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; -import javax.mail.event.MessageChangedListener; /** * Interface to javax.mail.Folder functionality to be able to replace @@ -66,5 +65,65 @@ * @see javax.mail.Folder#close(boolean) */ public void close(boolean b) throws MessagingException; + + /** + * @see javax.mail.Folder#exists() + */ + public boolean exists() throws MessagingException; + + /** + * @see javax.mail.Folder#create(int) + */ + public boolean create(int holds_messages) throws MessagingException; + + /** + * @see javax.mail.Folder#getType() + */ + public int getType() throws MessagingException; + + /** + * @see javax.mail.Folder#getFullName() + */ + public String getFullName(); + + /** + * @see javax.mail.Folder#expunge() + */ + public Message[] expunge() throws MessagingException; + + /** + * @see javax.mail.Folder#getUnreadMessageCount() + */ + public int getUnreadMessageCount() throws MessagingException; + + /** + * @see javax.mail.Folder#getNewMessageCount() + */ + public int getNewMessageCount() throws MessagingException; + + /** + * @see javax.mail.Folder#getPermanentFlags() + */ + public Flags getPermanentFlags(); + + /** + * @see javax.mail.Folder#getName() + */ + public String getName(); + + /** + * @see javax.mail.Folder#list(String) + */ + public FolderInterface[] list(String string) throws MessagingException; + + /** + * @see javax.mail.Folder#delete(boolean) + */ + public boolean delete(boolean recurse) throws MessagingException; + + /** + * @see javax.mail.Folder#renameTo(Folder) + */ + public boolean renameTo(Folder destination) throws MessagingException;; } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java (from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java&r1=449269&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/HashJavamailStoreMailRepository.java Mon Sep 25 12:55:02 2006 @@ -17,12 +17,8 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; -import java.io.ByteArrayOutputStream; -import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; @@ -70,13 +66,7 @@ private boolean getMessageCountOnClosed =true; - /** - * get the count of messages - * - * @return the count of messages - * - * @throws MessagingException - */ + protected int getMessageCount() throws MessagingException { try { getFolderGateKeeper().use(); @@ -304,6 +294,7 @@ protected MimeMessage getMessageFromInbox(String key) throws MessagingException { MsgObj mo = getKeyToMsgMap().getByKey(key); + log.debug("getMessageFromInbox: Looking for hash "+mo.hash); if (mo == null) { log.debug("Key not found"); return null; @@ -357,35 +348,12 @@ } return keyToMsgMap; } - - private static final class HasherOutputStream extends FilterOutputStream { - int hashCode = 0; - - public HasherOutputStream(OutputStream out) { - super(out); - } - - // TODO verify this method (off/len usage) - public void write(byte[] b, int off, int len) throws IOException { - for (int i = off; i < b.length && i < len+off; i++) { - hashCode += 77; - hashCode ^= b[i]; - } - super.write(b, off, len); - } - - public void write(byte[] b) throws IOException { - for (int i = 0; i < b.length; i++) { - hashCode += 77; - hashCode ^= b[i]; - } - super.write(b); - } - + + public static final class HasherOutputStream extends OutputStream { + int hashCode = 1; + public void write(int b) throws IOException { - hashCode += 77; - hashCode ^= b; - super.write(b); + hashCode = 41 * hashCode + b; } public int getHash() { @@ -393,6 +361,8 @@ } } + + protected class KeyToMsgMap { protected SortedMap noToMsgObj; @@ -462,25 +432,28 @@ * * @param key * key of message - * @param decrement + * @param decrease * if true, all message number greater than this are * decremented */ public synchronized void removeByKey(String key, boolean decrement) { MsgObj mo = getByKey(key); - keyToMsgObj.remove(mo.key); - noToMsgObj.remove(new Integer(mo.no)); - hashToMsgObj.remove(mo.hash); - if (decrement) { - // tailMap finds all entries that have message number greater - // than removed one and decrements them - MsgObj[] dmos = (MsgObj[]) noToMsgObj.tailMap( - new Integer(mo.no)).values().toArray(new MsgObj[0]); - for (int i = 0; i < dmos.length; i++) { - MsgObj dmo = dmos[i]; - noToMsgObj.remove(new Integer(dmo.no)); - dmo.no--; - noToMsgObj.put(new Integer(dmo.no), dmo); + if (mo != null) { + keyToMsgObj.remove(mo.key); + noToMsgObj.remove(new Integer(mo.no)); + hashToMsgObj.remove(mo.hash); + if (decrement) { + // tailMap finds all entries that have message number + // greater + // than removed one and decrements them + MsgObj[] dmos = (MsgObj[]) noToMsgObj.tailMap( + new Integer(mo.no)).values().toArray(new MsgObj[0]); + for (int i = 0; i < dmos.length; i++) { + MsgObj dmo = dmos[i]; + noToMsgObj.remove(new Integer(dmo.no)); + dmo.no--; + noToMsgObj.put(new Integer(dmo.no), dmo); + } } } } @@ -517,6 +490,7 @@ * @return fetched/created MsgObj * @throws MessagingException */ + public synchronized MsgObj put(final MimeMessage mm, String key, final int no) throws MessagingException { final Object hash = calcMessageHash(mm); @@ -588,20 +562,16 @@ * message to hash * @return an Object provides and correct equals method. * @throws MessagingException - */ + */ protected static Object calcMessageHash(MimeMessage mm) throws MessagingException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - // This nested class has been created because Java 2 v1.4 has - // no Arrays.hashCode() method. - // We can remove this as soon as we'll require Java 5. - HasherOutputStream hos = new HasherOutputStream(new CRLFOutputStream(baos)); + HasherOutputStream hos = new HasherOutputStream(); try { - mm.writeTo(hos); + mm.writeTo(new CRLFOutputStream(hos)); } catch (IOException e) { - throw new MessagingException("error while calculating hash ", e); + throw new MessagingException("error while calculating hash", e); } - + Integer i = new Integer(hos.getHash()); return i; } @@ -621,10 +591,9 @@ /** * just uses a FolderAdapter to wrap around folder * - * @see org.apache.james.mailrepository.javamail.AbstractJavamailStoreMailRepository#createAdapter(Folder) + * @see org.apache.james.mailrepository.javamailOLD.AbstractJavamailStoreMailRepository#createAdapter(Folder) */ - protected FolderInterface createAdapter(Folder folder) - throws NoSuchMethodException { + public FolderInterface createAdapter(Folder folder) { return new FolderAdapter(folder); } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockAdapter.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import org.apache.james.util.Lock; Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java (from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java&r1=447388&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/LockInterface.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; /** Added: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeper.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeper.java?view=auto&rev=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeper.java (added) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeper.java Mon Sep 25 12:55:02 2006 @@ -0,0 +1,36 @@ +/**************************************************************** + * 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.mailrepository.javamail; + +import javax.mail.MessagingException; + +public interface StoreGateKeeper { + + public FolderGateKeeper getFolder(String string) throws MessagingException; + + public void setFolderAdapterFactory(FolderAdapterFactory folderFactory); + + public FolderGateKeeper getDefaultFolder() throws MessagingException; + + public FolderGateKeeper[] list(String string) throws MessagingException; + + public void renameTo(FolderGateKeeper from, String to) throws MessagingException; + +} Added: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperAware.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperAware.java?view=auto&rev=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperAware.java (added) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperAware.java Mon Sep 25 12:55:02 2006 @@ -0,0 +1,35 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailrepository.javamail; + + + +/** + * Bridge, that allows JavamailStoreMailRepository implementations to offer the + * underlaying Javamail Store + * + * @author Joachim Draeger <jd at joachim-draeger.de> + */ + +public interface StoreGateKeeperAware { + + public StoreGateKeeper getStore(); + +} Added: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperImpl.java URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperImpl.java?view=auto&rev=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperImpl.java (added) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/StoreGateKeeperImpl.java Mon Sep 25 12:55:02 2006 @@ -0,0 +1,114 @@ +/**************************************************************** + * 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.mailrepository.javamail; + +import java.util.HashMap; +import java.util.Map; + +import javax.mail.Folder; +import javax.mail.MessagingException; +import javax.mail.Store; + +public class StoreGateKeeperImpl implements StoreGateKeeper { + + private Store store; + + Map folderGateKeeperMap = new HashMap(); + FolderGateKeeper defaultFolder = null; + + private FolderAdapterFactory folderFactory; + + public StoreGateKeeperImpl(Store store) { + this.store=store; + } + + /** + * @see org.apache.james.mailrepository.javamail.StoreGateKeeper#getFolder(java.lang.String) + */ + public synchronized FolderGateKeeper getFolder(String name) throws MessagingException { + if (name.length()==0) { + return null; + } + if (name.equalsIgnoreCase("INBOX")) { + name="INBOX"; + } + FolderGateKeeper fgk=(FolderGateKeeper) folderGateKeeperMap.get(name); + if (fgk==null) { + Folder f = store.getFolder(name); + fgk=new FolderGateKeeperImpl(folderFactory.createAdapter(f),this); + folderGateKeeperMap.put(name,fgk); + } + + return fgk; + } + + /** + * @see org.apache.james.mailrepository.javamail.StoreGateKeeper#getDefaultFolder() + */ + public synchronized FolderGateKeeper getDefaultFolder() throws MessagingException { + if (defaultFolder==null) { + Folder f = store.getDefaultFolder(); + defaultFolder=new FolderGateKeeperImpl(folderFactory.createAdapter(f),this); + } + return defaultFolder; + } + + /** + * @see org.apache.james.mailrepository.javamail.StoreGateKeeper#setFolderAdapterFactory(org.apache.james.mailrepository.javamail.FolderAdapterFactory) + */ + public void setFolderAdapterFactory(FolderAdapterFactory folderFactory) { + this.folderFactory=folderFactory; + + } + + /** + * @see org.apache.james.mailrepository.javamail.StoreGateKeeper#list(java.lang.String) + */ + public FolderGateKeeper[] list(String string) throws MessagingException { + getDefaultFolder().use(); + FolderInterface[] folders = getDefaultFolder().getFolder().list(string); + FolderGateKeeper[] keepers =new FolderGateKeeper[folders.length]; + for (int i = 0; i < keepers.length; i++) { + keepers[i]=getFolder(folders[i].getFullName()); + } + getDefaultFolder().free(); + + return keepers; + } + + /** + * @see org.apache.james.mailrepository.javamail.StoreGateKeeper#renameTo(org.apache.james.mailrepository.javamail.FolderGateKeeper, java.lang.String) + */ + public void renameTo(FolderGateKeeper from,String to) throws MessagingException { + String fromName=from.getFullName(); + FolderGateKeeper[] subFolders = list(from.getFullName()+".*"); + for (int i = 0; i < subFolders.length; i++) { + FolderGateKeeper subFolder=subFolders[i]; + String subFolderName=subFolder.getFullName(); + String newSubFolderName=to+subFolderName.substring(fromName.length()); + Folder subDestination=store.getFolder(newSubFolderName); + subFolder.renameTo(subDestination); + } + Folder destination=store.getFolder(to); + from.renameTo(destination); + + } + +} Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java (from r447388, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java&r1=447388&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolder.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import javax.mail.Message; Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java (from r449235, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java&r1=449235&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderAdapter.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import java.lang.reflect.InvocationTargetException; @@ -36,20 +34,19 @@ public class UIDPlusFolderAdapter extends FolderAdapter implements UIDPlusFolder { private Method addUIDMessagesMethod; + private Method addMessagesMethod; - /** - * Wrap the Folder - * - * @param folder the Folder - * @throws NoSuchMethodException - */ - public UIDPlusFolderAdapter(Folder folder) throws NoSuchMethodException { + public UIDPlusFolderAdapter(Folder folder) { super(folder); try { addUIDMessagesMethod=folder.getClass().getMethod("addUIDMessages", new Class[] { Message[].class }); + addMessagesMethod=folder.getClass().getMethod("addMessages", + new Class[] { Message[].class }); } catch (SecurityException e) { throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); } } @@ -76,7 +73,19 @@ * @see org.apache.james.mailrepository.javamail.UIDPlusFolder#addMessages(javax.mail.Message[]) */ public Message[] addMessages(Message[] msgs) throws MessagingException { - throw new RuntimeException("Method addMessages(Message[] msgs) not implemented"); + try { + return (Message[]) addMessagesMethod.invoke(folder, new Object[] { msgs }); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + Throwable cause=e.getCause(); + if (cause instanceof RuntimeException) { + throw (RuntimeException)cause; + } + throw new RuntimeException(e); + } } /** Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java (from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java&r1=449269&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UIDPlusFolderMailRepository.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import java.util.ArrayList; @@ -102,7 +100,11 @@ /** - * @see org.apache.james.services.MailRepository#store(org.apache.mailet.Mail) + * Stores a message in this repository. + * + * @param mc + * the mail message to store + * @throws MessagingException */ public void store(Mail mc) throws MessagingException { @@ -153,8 +155,7 @@ /** * lazy loads UidToKeyBidiMap - * - * @return uidToKeyBidiMap the UidToKeyBidiMap + * @return */ protected UidToKeyBidiMap getUidToKeyBidiMap() { if (uidToKeyBidiMap == null) { @@ -166,7 +167,7 @@ /** * Used for testing * - * @param uidToKeyBidiMap the UidToKeyBidMap + * @param uidToKeyBidiMap */ void setUidToKeyBidiMap(UidToKeyBidiMap uidToKeyBidiMap) { this.uidToKeyBidiMap = uidToKeyBidiMap; @@ -176,8 +177,12 @@ * Retrieves a message given a key. At the moment, keys can be obtained from * list() in superinterface Store.Repository * - * @see org.apache.james.services.MailRepository#retrieve(String) + * @param key + * the key of the message to retrieve + * @return the mail corresponding to this key, null if none exists + * @throws MessagingException */ + public Mail retrieve(String key) throws MessagingException { log.debug("UIDPlusFolder retrieve " + key); try { @@ -195,7 +200,10 @@ } /** - * @see org.apache.james.services.MailRepository#remove(java.lang.String) + * Removes a message identified by key. + * + * @param key + * the key of the message to be removed from the repository */ public void remove(String key) throws MessagingException { @@ -220,7 +228,12 @@ } /** - * @see org.apache.james.services.MailRepository#list() + * List string keys of messages in repository. + * + * @return an <code>Iterator</code> over the list of keys in the + * repository + * @throws MessagingException + * */ public Iterator list() throws MessagingException { log.debug("UIDPlusFolder list"); @@ -289,6 +302,7 @@ * * maybe it could be replaced by BidiMap from commons-collections 3.0+ * + * @author Joachim Draeger <jd at joachim-draeger.de> */ private class UidToKeyBidiMapImpl implements UidToKeyBidiMap { @@ -301,18 +315,12 @@ uidToKey = new HashMap(); } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#getKeys() - */ public synchronized String[] getKeys() { final ArrayList al = new ArrayList(keyToUid.keySet()); final String[] keys = (String[]) al.toArray(new String[0]); return keys; } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#retainAllListedAndAddedByKeys(java.lang.String[], java.util.Collection) - */ public synchronized void retainAllListedAndAddedByKeys( final String[] before, final Collection listed) { Collection added = new HashSet(keyToUid.keySet()); @@ -323,9 +331,6 @@ uidToKey.keySet().retainAll(keyToUid.values()); } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#removeByKey(java.lang.String) - */ public synchronized void removeByKey(String key) { long uid = getByKey(key); if (uid > -1) { @@ -334,9 +339,6 @@ keyToUid.remove(key); } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#getByKey(java.lang.String) - */ public synchronized long getByKey(String key) { Long lo = (Long) keyToUid.get(key); long l = -1; @@ -346,24 +348,15 @@ return l; } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#getByUid(long) - */ public synchronized String getByUid(long uid) { return (String) uidToKey.get(new Long(uid)); } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#containsKey(java.lang.String) - */ public synchronized boolean containsKey(String key) { return keyToUid.containsKey(key); } - /** - * @see org.apache.james.mailrepository.javamail.UidToKeyBidiMap#put(java.lang.String, long) - */ public synchronized void put(String key, long uid) { keyToUid.put(key, new Long(uid)); uidToKey.put(new Long(uid), key); @@ -374,9 +367,9 @@ /** * returns a UIDPlusFolderAdapter wrapper * - * @see org.apache.james.mailrepository.javamail.UIDPlusFolderAdapter#UIDPlusFolderAdapter(Folder) + * @see UIDPlusFolderAdapter */ - protected FolderInterface createAdapter(Folder folder) throws NoSuchMethodException { + public FolderInterface createAdapter(Folder folder) { return new UIDPlusFolderAdapter(folder); } Copied: james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java (from r449269, james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java) URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java?view=diff&rev=449795&p1=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java&r1=449269&p2=james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java&r2=449795 ============================================================================== --- james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java (original) +++ james/server/trunk/src/java/org/apache/james/mailrepository/javamail/UidToKeyBidiMap.java Mon Sep 25 12:55:02 2006 @@ -17,8 +17,6 @@ * under the License. * ****************************************************************/ - - package org.apache.james.mailrepository.javamail; import java.util.Collection; @@ -27,59 +25,21 @@ * Used to map uids to keys and keys to uids * */ + public interface UidToKeyBidiMap { - /** - * Return true if an uid is stored under the given key - * - * @param key the key - * @return true if an uid is stored under the given key - */ boolean containsKey(String key); - /** - * Store the given uid with the given key - * - * @param key the key to store the given uid with - * @param uid the uid - */ void put(String key, long uid); - /** - * Remove the uid stored under the given key - * - * @param key the key - */ void removeByKey(String key); - /** - * Return a String[] holding all stored keys - * - * @return keys a String[] holding all keys - */ String[] getKeys(); - /** - * Return the key for the given uid - * - * @param uid the uid - * @return key the key for the given uid - */ String getByUid(long uid); - /** - * - * @param keysBefore - * @param keys - */ void retainAllListedAndAddedByKeys(String[] keysBefore, Collection keys); - /** - * Get uid for the given key - * - * @param key the key - * @return uid the uid for the given key - */ long getByKey(String key); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]