Author: norman
Date: Thu Jun 16 16:11:07 2011
New Revision: 1136515
URL: http://svn.apache.org/viewvc?rev=1136515&view=rev
Log:
Allow MailboxPathLocker to return an object after executing code. See MAILBOX-93
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
(original)
+++
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
Thu Jun 16 16:11:07 2011
@@ -35,12 +35,12 @@ public interface MailboxPathLocker {
* @param execution
* @throws MailboxException
*/
- public void executeWithLock(MailboxSession session, MailboxPath path,
LockAwareExecution execution) throws MailboxException;
+ public <T> T executeWithLock(MailboxSession session, MailboxPath path,
LockAwareExecution<T> execution) throws MailboxException;
/**
* Execute code while holding a lock
*/
- public interface LockAwareExecution {
+ public interface LockAwareExecution<T> {
/**
* Execute code block
@@ -49,7 +49,7 @@ public interface MailboxPathLocker {
* @param path
* @throws MailboxException
*/
- public void execute(MailboxSession session, MailboxPath path) throws
MailboxException;
+ public T execute() throws MailboxException;
}
}
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirFolder.java
Thu Jun 16 16:11:07 2011
@@ -147,12 +147,13 @@ public class MaildirFolder {
/**
* Returns the last uid used in this mailbox
+ * @param session
* @return lastUid
* @throws MailboxException
*/
- public long getLastUid() throws MailboxException {
+ public long getLastUid(MailboxSession session) throws MailboxException {
if (lastUid == -1) {
- readLastUid();
+ readLastUid(session);
}
return lastUid;
}
@@ -168,13 +169,15 @@ public class MaildirFolder {
/**
* Read the lastUid of the given mailbox from the file system.
+ *
+ * @param session
* @throws MailboxException if there are problems with the uidList file
*/
- private void readLastUid() throws MailboxException {
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ private void readLastUid(MailboxSession session) throws MailboxException {
+ locker.executeWithLock(session, path, new LockAwareExecution<Void>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public Void execute() throws MailboxException {
File uidList = uidFile;
FileReader fileReader = null;
BufferedReader reader = null;
@@ -186,6 +189,7 @@ public class MaildirFolder {
String line = reader.readLine();
if (line != null)
readUidListHeader(line);
+ return null;
} catch (IOException e) {
throw new MailboxException("Unable to read last uid", e);
} finally {
@@ -275,16 +279,18 @@ public class MaildirFolder {
/**
* Searches the uid list for a certain uid and returns the according
{@link MaildirMessageName}
+ *
+ * @param session
* @param uid The uid to search for
* @return The {@link MaildirMessageName} that belongs to the uid
* @throws IOException If the uidlist file cannot be found or read
*/
- public MaildirMessageName getMessageNameByUid(final Long uid) throws
MailboxException {
- final MaildirMessageName[] messageName = new MaildirMessageName[1];
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ public MaildirMessageName getMessageNameByUid(MailboxSession session,
final Long uid) throws MailboxException {
+
+ return locker.executeWithLock(session, path, new
LockAwareExecution<MaildirMessageName>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public MaildirMessageName execute() throws MailboxException {
FileReader fileReader = null;
BufferedReader reader = null;
File uidList = uidFile;
@@ -303,11 +309,13 @@ public class MaildirFolder {
}
if (line.substring(0, gap).equals(uidString)) {
- messageName[0] = new
MaildirMessageName(MaildirFolder.this, line.substring(gap + 1));
- break;
+ return new
MaildirMessageName(MaildirFolder.this, line.substring(gap + 1));
}
}
}
+
+ // TODO: Is this right!?
+ return null;
} catch (IOException e) {
throw new MailboxException("Unable to read messagename for
uid " + uid, e);
} finally {
@@ -316,26 +324,26 @@ public class MaildirFolder {
}
}
});
-
- return messageName[0];
}
/**
* Reads all uids between the two boundaries from the folder and returns
them as
* a sorted map together with their corresponding {@link
MaildirMessageName}s.
+ *
+ * @param session
* @param from The lower uid limit
* @param to The upper uid limit. <code>-1</code> disables the upper limit
* @return a {@link Map} whith all uids in the given range and associated
{@link MaildirMessageName}s
* @throws MailboxException if there is a problem with the uid list file
*/
- public SortedMap<Long, MaildirMessageName> getUidMap(final long from,
final long to)
+ public SortedMap<Long, MaildirMessageName> getUidMap(MailboxSession
session, final long from, final long to)
throws MailboxException {
- final SortedMap<Long, MaildirMessageName> uidMap = new TreeMap<Long,
MaildirMessageName>();
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ return locker.executeWithLock(session, path, new
LockAwareExecution<SortedMap<Long, MaildirMessageName>>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
-
+ public SortedMap<Long, MaildirMessageName> execute() throws
MailboxException {
+ final SortedMap<Long, MaildirMessageName> uidMap = new
TreeMap<Long, MaildirMessageName>();
+
File uidList = uidFile;
if (uidList.isFile()) {
@@ -355,16 +363,15 @@ public class MaildirFolder {
} else {
// the uidList does not exist
uidMap.putAll(truncateMap(createUidFile(), from, to));
- }
+ }
+ return uidMap;
}
});
-
- return uidMap;
}
- public SortedMap<Long, MaildirMessageName> getUidMap(FilenameFilter
filter, long from, long to)
+ public SortedMap<Long, MaildirMessageName> getUidMap(MailboxSession
session, FilenameFilter filter, long from, long to)
throws MailboxException {
- SortedMap<Long, MaildirMessageName> allUids = getUidMap(from, to);
+ SortedMap<Long, MaildirMessageName> allUids = getUidMap(session, from,
to);
SortedMap<Long, MaildirMessageName> filteredUids = new TreeMap<Long,
MaildirMessageName>();
for (Entry<Long, MaildirMessageName> entry : allUids.entrySet()) {
if (filter.accept(null, entry.getValue().getFullName()))
@@ -376,14 +383,17 @@ public class MaildirFolder {
/**
* Reads all uids from the uid list file which match the given filter
* and returns as many of them as a sorted map as the limit specifies.
+ *
+ *
+ * @param session
* @param filter The file names of all returned items match the filter.
* The dir argument to {@link FilenameFilter}.accept(dir, name) will
always be null.
* @param limit The number of items; a limit smaller then 1 disables the
limit
* @return A {@link Map} with all uids and associated {@link
MaildirMessageName}s
* @throws MailboxException if there is a problem with the uid list file
*/
- public SortedMap<Long, MaildirMessageName> getUidMap(FilenameFilter
filter, int limit) throws MailboxException {
- SortedMap<Long, MaildirMessageName> allUids = getUidMap(0, -1);
+ public SortedMap<Long, MaildirMessageName> getUidMap(MailboxSession
session, FilenameFilter filter, int limit) throws MailboxException {
+ SortedMap<Long, MaildirMessageName> allUids = getUidMap(session, 0,
-1);
SortedMap<Long, MaildirMessageName> filteredUids = new TreeMap<Long,
MaildirMessageName>();
int theLimit = limit;
if (limit < 1)
@@ -402,19 +412,23 @@ public class MaildirFolder {
/**
* Creates a map of recent messages.
+ *
+ * @param session
* @return A {@link Map} with all uids and associated {@link
MaildirMessageName}s of recent messages
* @throws MailboxException If there is a problem with the uid list file
*/
- public SortedMap<Long, MaildirMessageName> getRecentMessages() throws
MailboxException {
+ public SortedMap<Long, MaildirMessageName>
getRecentMessages(MailboxSession session) throws MailboxException {
final String[] recentFiles = getNewFolder().list();
final LinkedList<String> lines = new LinkedList<String>();
final int theLimit = recentFiles.length;
- final SortedMap<Long, MaildirMessageName> recentMessages = new
TreeMap<Long, MaildirMessageName>();
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ return locker.executeWithLock(session, path, new
LockAwareExecution<SortedMap<Long, MaildirMessageName>>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public SortedMap<Long, MaildirMessageName> execute() throws
MailboxException {
+ final SortedMap<Long, MaildirMessageName> recentMessages = new
TreeMap<Long, MaildirMessageName>();
+
File uidList = uidFile;
+
try {
if (!uidList.isFile()) {
uidList.createNewFile();
@@ -477,11 +491,10 @@ public class MaildirFolder {
}
} catch (IOException e) {
throw new MailboxException("Unable to read recent
messages", e);
- }
+ }
+ return recentMessages;
}
});
-
- return recentMessages;
}
@@ -675,16 +688,16 @@ public class MaildirFolder {
/**
* Appends a message to the uidlist and returns its uid.
+ * @param session
* @param name The name of the message's file
* @return The uid of the message
* @throws IOException
*/
- public long appendMessage(final String name) throws MailboxException {
- final long[] lockUid = new long[1];
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ public long appendMessage(final MailboxSession session, final String name)
throws MailboxException {
+ return locker.executeWithLock(session, path, new
LockAwareExecution<Long>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public Long execute() throws MailboxException {
File uidList = uidFile;
long uid = -1;
FileReader fileReader = null;
@@ -739,25 +752,25 @@ public class MaildirFolder {
if (uid == -1) {
throw new MailboxException("Unable to append msg");
} else {
- lockUid[0] = uid;
+ return uid;
}
}
});
- return lockUid[0];
}
/**
* Updates an entry in the uid list.
+ * @param session
* @param uid
* @param messageName
* @throws MailboxException
*/
- public void update(final long uid, final String messageName) throws
MailboxException {
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ public void update(final MailboxSession session, final long uid, final
String messageName) throws MailboxException {
+ locker.executeWithLock(session, path, new LockAwareExecution<Void>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public Void execute() throws MailboxException {
File uidList = uidFile;
FileReader fileReader = null;
BufferedReader reader = null;
@@ -783,7 +796,8 @@ public class MaildirFolder {
IOUtils.closeQuietly(writer);
IOUtils.closeQuietly(reader);
IOUtils.closeQuietly(fileReader);
- }
+ }
+ return null;
}
});
@@ -796,17 +810,16 @@ public class MaildirFolder {
* @return The {@link MaildirMessageName} of the deleted message
* @throws MailboxException If the file cannot be deleted of there is a
problem with the uid list
*/
- public MaildirMessageName delete(final long uid) throws MailboxException {
- final MaildirMessageName[] deletedMessage = new MaildirMessageName[1];
-
- locker.executeWithLock(null, path, new LockAwareExecution() {
+ public MaildirMessageName delete(final MailboxSession session, final long
uid) throws MailboxException {
+ return locker.executeWithLock(session, path, new
LockAwareExecution<MaildirMessageName>() {
@Override
- public void execute(MailboxSession session, MailboxPath path)
throws MailboxException {
+ public MaildirMessageName execute() throws MailboxException {
File uidList = uidFile;
FileReader fileReader = null;
BufferedReader reader = null;
PrintWriter writer = null;
+ MaildirMessageName deletedMessage = null;
try {
fileReader = new FileReader(uidList);
reader = new BufferedReader(fileReader);
@@ -822,33 +835,34 @@ public class MaildirFolder {
}
if (uid == Long.valueOf(line.substring(0,
line.indexOf(" ")))) {
- deletedMessage[0] = new
MaildirMessageName(MaildirFolder.this, line.substring(gap + 1, line.length()));
+ deletedMessage = new
MaildirMessageName(MaildirFolder.this, line.substring(gap + 1, line.length()));
messageCount--;
}
else {
lines.add(line);
}
}
- if (deletedMessage[0] != null) {
- if (!deletedMessage[0].getFile().delete())
- throw new IOException("Cannot delete file " +
deletedMessage[0].getFile().getAbsolutePath());
+ if (deletedMessage != null) {
+ if (!deletedMessage.getFile().delete())
+ throw new IOException("Cannot delete file " +
deletedMessage.getFile().getAbsolutePath());
writer = new PrintWriter(uidList);
writer.println(createUidListHeader());
for (String entry : lines)
writer.println(entry);
}
+ return deletedMessage;
+
} catch (IOException e) {
throw new MailboxException("Unable to delete msg with uid
" + uid, e);
} finally {
IOUtils.closeQuietly(writer);
IOUtils.closeQuietly(reader);
IOUtils.closeQuietly(fileReader);
- }
+ }
}
});
- return deletedMessage[0];
}
/**
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
Thu Jun 16 16:11:07 2011
@@ -87,9 +87,9 @@ public class MaildirStore {
* @return The Mailbox object populated with data from the file system
* @throws MailboxException If the mailbox folder doesn't exist or can't
be read
*/
- public Mailbox<Integer> loadMailbox(File root, String namespace, String
user, String folderName) throws MailboxException {
+ public Mailbox<Integer> loadMailbox(MailboxSession session, File root,
String namespace, String user, String folderName) throws MailboxException {
String mailboxName = getMailboxNameFromFolderName(folderName);
- return loadMailbox(new File(root, folderName), new
MailboxPath(namespace, user, mailboxName));
+ return loadMailbox(session, new File(root, folderName), new
MailboxPath(namespace, user, mailboxName));
}
/**
@@ -99,13 +99,13 @@ public class MaildirStore {
* @throws MailboxNotFoundException If the mailbox folder doesn't exist
* @throws MailboxException If the mailbox folder can't be read
*/
- public Mailbox<Integer> loadMailbox(MailboxPath mailboxPath)
+ public Mailbox<Integer> loadMailbox(MailboxSession session, MailboxPath
mailboxPath)
throws MailboxNotFoundException, MailboxException {
MaildirFolder folder = new MaildirFolder(getFolderName(mailboxPath),
mailboxPath, locker);
if (!folder.exists())
throw new MailboxNotFoundException(mailboxPath);
- return loadMailbox(folder.getRootFile(), mailboxPath);
+ return loadMailbox(session, folder.getRootFile(), mailboxPath);
}
/**
@@ -115,13 +115,13 @@ public class MaildirStore {
* @return The Mailbox object populated with data from the file system
* @throws MailboxException If the mailbox folder doesn't exist or can't
be read
*/
- private Mailbox<Integer> loadMailbox(File mailboxFile, MailboxPath
mailboxPath) throws MailboxException {
+ private Mailbox<Integer> loadMailbox(MailboxSession session, File
mailboxFile, MailboxPath mailboxPath) throws MailboxException {
long uidValidity;
long lastUid;
MaildirFolder folder = new
MaildirFolder(mailboxFile.getAbsolutePath(), mailboxPath, locker);
try {
uidValidity = folder.getUidValidity();
- lastUid = folder.getLastUid();
+ lastUid = folder.getLastUid(session);
return new MaildirMailbox(mailboxPath, uidValidity, lastUid,
folder.getHighestModSeq());
} catch (IOException e) {
@@ -239,7 +239,7 @@ public class MaildirStore {
*/
public long nextUid(MailboxSession session, Mailbox<Integer> mailbox)
throws MailboxException {
try {
- return createMaildirFolder(mailbox).getLastUid() +1;
+ return createMaildirFolder(mailbox).getLastUid(session) +1;
} catch (MailboxException e) {
throw new MailboxException("Unable to generate next uid", e);
}
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
Thu Jun 16 16:11:07 2011
@@ -85,7 +85,7 @@ public class MaildirMailboxMapper extend
*/
public Mailbox<Integer> findMailboxByPath(MailboxPath mailboxPath)
throws MailboxException, MailboxNotFoundException {
- Mailbox<Integer> mailbox = maildirStore.loadMailbox(mailboxPath);
+ Mailbox<Integer> mailbox = maildirStore.loadMailbox(session,
mailboxPath);
return cacheMailbox(mailbox);
}
@@ -103,12 +103,12 @@ public class MaildirMailboxMapper extend
ArrayList<Mailbox<Integer>> mailboxList = new
ArrayList<Mailbox<Integer>>();
for (File folder : folders)
if (folder.isDirectory()) {
- Mailbox<Integer> mailbox = maildirStore.loadMailbox(root,
mailboxPath.getNamespace(), mailboxPath.getUser(), folder.getName());
+ Mailbox<Integer> mailbox = maildirStore.loadMailbox(session,
root, mailboxPath.getNamespace(), mailboxPath.getUser(), folder.getName());
mailboxList.add(cacheMailbox(mailbox));
}
// INBOX is in the root of the folder
if
(Pattern.matches(mailboxPath.getName().replace(MaildirStore.WILDCARD, ".*"),
MailboxConstants.INBOX)) {
- Mailbox<Integer> mailbox = maildirStore.loadMailbox(root,
mailboxPath.getNamespace(), mailboxPath.getUser(), "");
+ Mailbox<Integer> mailbox = maildirStore.loadMailbox(session, root,
mailboxPath.getNamespace(), mailboxPath.getUser(), "");
mailboxList.add(0, cacheMailbox(mailbox));
}
return mailboxList;
@@ -264,7 +264,7 @@ public class MaildirMailboxMapper extend
// Special case for INBOX: Let's use the user's folder.
MailboxPath inboxMailboxPath = new
MailboxPath(session.getPersonalSpace(), userName, MailboxConstants.INBOX);
- mailboxList.add(maildirStore.loadMailbox(inboxMailboxPath));
+ mailboxList.add(maildirStore.loadMailbox(session,
inboxMailboxPath));
// List all INBOX sub folders.
@@ -280,7 +280,7 @@ public class MaildirMailboxMapper extend
MailboxPath mailboxPath = new
MailboxPath(MailboxConstants.USER_NAMESPACE,
userName,
mailbox.getName().substring(1));
- mailboxList.add(maildirStore.loadMailbox(mailboxPath));
+ mailboxList.add(maildirStore.loadMailbox(session,
mailboxPath));
}
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
Thu Jun 16 16:11:07 2011
@@ -105,7 +105,7 @@ public class MaildirMessageMapper extend
public void delete(Mailbox<Integer> mailbox, Message<Integer> message)
throws MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- folder.delete(message.getUid());
+ folder.delete(mailboxSession, message.getUid());
} catch (MailboxException e) {
throw new MailboxException("Unable to delete Message " + message +
" in Mailbox " + mailbox, e);
}
@@ -153,7 +153,7 @@ public class MaildirMessageMapper extend
throws MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- MaildirMessageName messageName = folder.getMessageNameByUid(uid);
+ MaildirMessageName messageName =
folder.getMessageNameByUid(mailboxSession, uid);
ArrayList<Message<Integer>> messages = new
ArrayList<Message<Integer>>();
if (messageName != null) {
@@ -172,9 +172,9 @@ public class MaildirMessageMapper extend
SortedMap<Long, MaildirMessageName> uidMap = null;
try {
if (filter != null)
- uidMap = folder.getUidMap(filter, from, to);
+ uidMap = folder.getUidMap(mailboxSession, filter, from, to);
else
- uidMap = folder.getUidMap(from, to);
+ uidMap = folder.getUidMap(mailboxSession, from, to);
ArrayList<Message<Integer>> messages = new
ArrayList<Message<Integer>>();
for (Entry<Long, MaildirMessageName> entry : uidMap.entrySet()) {
@@ -192,7 +192,7 @@ public class MaildirMessageMapper extend
FilenameFilter filter, int limit) throws MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- SortedMap<Long, MaildirMessageName> uidMap =
folder.getUidMap(filter, limit);
+ SortedMap<Long, MaildirMessageName> uidMap =
folder.getUidMap(mailboxSession, filter, limit);
ArrayList<Message<Integer>> filtered = new
ArrayList<Message<Integer>>(uidMap.size());
for (Entry<Long, MaildirMessageName> entry : uidMap.entrySet())
@@ -208,7 +208,7 @@ public class MaildirMessageMapper extend
Mailbox<Integer> mailbox, long uid) throws MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- MaildirMessageName messageName = folder.getMessageNameByUid(uid);
+ MaildirMessageName messageName =
folder.getMessageNameByUid(mailboxSession, uid);
ArrayList<Message<Integer>> messages = new
ArrayList<Message<Integer>>();
if (MaildirMessageName.FILTER_DELETED_MESSAGES.accept(null,
messageName.getFullName())) {
messages.add(new LazyLoadingMaildirMessage(mailbox, uid,
messageName));
@@ -229,7 +229,7 @@ public class MaildirMessageMapper extend
throws MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- SortedMap<Long, MaildirMessageName> recentMessageNames =
folder.getRecentMessages();
+ SortedMap<Long, MaildirMessageName> recentMessageNames =
folder.getRecentMessages(mailboxSession);
List<Message<Integer>> recentMessages = new
ArrayList<Message<Integer>>(recentMessageNames.size());
for (Entry<Long, MaildirMessageName> entry :
recentMessageNames.entrySet())
@@ -301,7 +301,7 @@ public class MaildirMessageMapper extend
protected long calculateLastUid(Mailbox<Integer> mailbox) throws
MailboxException {
MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
try {
- return folder.getLastUid();
+ return folder.getLastUid(mailboxSession);
} catch (MailboxException e) {
throw new MailboxException("Unable to get last uid for mailbox " +
mailbox, e);
}
@@ -429,7 +429,7 @@ public class MaildirMessageMapper extend
throw new MailboxException("Failure while save Message " + message
+ " in Mailbox " + mailbox, e);
}
try {
- uid = folder.appendMessage(newMessageFile.getName());
+ uid = folder.appendMessage(mailboxSession,
newMessageFile.getName());
maildirMessage.setUid(uid);
maildirMessage.setModSeq(newMessageFile.lastModified());
return new SimpleMessageMetaData(message);
@@ -501,7 +501,7 @@ public class MaildirMessageMapper extend
try {
AbstractMaildirMessage maildirMessage =
(AbstractMaildirMessage) member;
- MaildirMessageName messageName =
folder.getMessageNameByUid(maildirMessage.getUid());
+ MaildirMessageName messageName =
folder.getMessageNameByUid(mailboxSession, maildirMessage.getUid());
File messageFile = messageName.getFile();
// System.out.println("save existing " + message +
// " as " + messageFile.getName());
@@ -533,7 +533,7 @@ public class MaildirMessageMapper extend
updatedFlags.add(new UpdatedFlags(member.getUid(),
modSeq, originalFlags, newFlags));
long uid = maildirMessage.getUid();
- folder.update(uid, newMessageName);
+ folder.update(mailboxSession, uid, newMessageName);
} catch (IOException e) {
throw new MailboxException("Failure while save Message
" + member + " in Mailbox " + mailbox, e);
}
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
Thu Jun 16 16:11:07 2011
@@ -28,12 +28,12 @@ public abstract class AbstractMailboxPat
/*
* (non-Javadoc)
- * @see
org.apache.james.mailbox.store.MailboxPathLocker#executeWithLock(org.apache.james.mailbox.MailboxSession,
org.apache.james.mailbox.MailboxPath,
org.apache.james.mailbox.store.MailboxPathLocker.LockAwareExecution)
+ * @see
org.apache.james.mailbox.MailboxPathLocker#executeWithLock(org.apache.james.mailbox.MailboxSession,
org.apache.james.mailbox.MailboxPath,
org.apache.james.mailbox.MailboxPathLocker.LockAwareExecution)
*/
- public void executeWithLock(MailboxSession session, MailboxPath path,
LockAwareExecution execution) throws MailboxException {
+ public <T> T executeWithLock(MailboxSession session, MailboxPath path,
LockAwareExecution<T> execution) throws MailboxException {
try {
lock(session, path);
- execution.execute(session, path);
+ return execution.execute();
} finally {
unlock(session, path);
}
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
Thu Jun 16 16:11:07 2011
@@ -20,6 +20,7 @@
package org.apache.james.mailbox.store;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.james.mailbox.MailboxException;
@@ -36,7 +37,7 @@ import org.apache.james.mailbox.MailboxS
*/
public final class JVMMailboxPathLocker extends AbstractMailboxPathLocker {
- private final ConcurrentHashMap<MailboxPath, ReentrantLock> paths = new
ConcurrentHashMap<MailboxPath, ReentrantLock>();
+ private final ConcurrentHashMap<MailboxPath, Lock> paths = new
ConcurrentHashMap<MailboxPath, Lock>();
/*
@@ -44,10 +45,10 @@ public final class JVMMailboxPathLocker
* @see
org.apache.james.mailbox.store.AbstractMailboxPathLocker#lock(org.apache.james.mailbox.MailboxSession,
org.apache.james.mailbox.MailboxPath)
*/
protected void lock(MailboxSession session, MailboxPath path) throws
MailboxException {
- ReentrantLock lock = paths.get(path);
+ Lock lock = paths.get(path);
if (lock == null) {
lock = new ReentrantLock();
- ReentrantLock storedLock = paths.putIfAbsent(path, lock);
+ Lock storedLock = paths.putIfAbsent(path, lock);
if (storedLock != null) {
lock = storedLock;
}
@@ -60,7 +61,7 @@ public final class JVMMailboxPathLocker
* @see
org.apache.james.mailbox.store.AbstractMailboxPathLocker#unlock(org.apache.james.mailbox.MailboxSession,
org.apache.james.mailbox.MailboxPath)
*/
protected void unlock(MailboxSession session, MailboxPath path) throws
MailboxException {
- ReentrantLock lock = paths.get(path);
+ Lock lock = paths.get(path);
if (lock != null) {
lock.unlock();
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1136515&r1=1136514&r2=1136515&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
Thu Jun 16 16:11:07 2011
@@ -276,12 +276,12 @@ public abstract class StoreMailboxManage
// TODO: transaction
for (final MailboxPath mailbox :
mailboxPath.getHierarchyLevels(getDelimiter()))
- locker.executeWithLock(mailboxSession, mailbox, new
LockAwareExecution() {
+ locker.executeWithLock(mailboxSession, mailbox, new
LockAwareExecution<Void>() {
- public void execute(MailboxSession session, MailboxPath
mailbox) throws MailboxException {
- if (!mailboxExists(mailbox, session)) {
- final
org.apache.james.mailbox.store.mail.model.Mailbox<Id> m =
doCreateMailbox(mailbox, session);
- final MailboxMapper<Id> mapper =
mailboxSessionMapperFactory.getMailboxMapper(session);
+ public Void execute() throws MailboxException {
+ if (!mailboxExists(mailbox, mailboxSession)) {
+ final
org.apache.james.mailbox.store.mail.model.Mailbox<Id> m =
doCreateMailbox(mailbox, mailboxSession);
+ final MailboxMapper<Id> mapper =
mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
mapper.execute(new
TransactionalMapper.VoidTransaction() {
public void runVoid() throws MailboxException {
@@ -291,8 +291,10 @@ public abstract class StoreMailboxManage
});
// notify listeners
- dispatcher.mailboxAdded(session, m);
+ dispatcher.mailboxAdded(mailboxSession, m);
}
+ return null;
+
}
});
@@ -418,9 +420,9 @@ public abstract class StoreMailboxManage
// rename submailboxes
final MailboxPath children = new
MailboxPath(MailboxConstants.USER_NAMESPACE, from.getUser(), from.getName() +
getDelimiter() + "%");
- locker.executeWithLock(session, children, new
LockAwareExecution() {
+ locker.executeWithLock(session, children, new
LockAwareExecution<Void>() {
- public void execute(MailboxSession session, MailboxPath
children) throws MailboxException {
+ public Void execute() throws MailboxException {
final List<Mailbox<Id>> subMailboxes =
mapper.findMailboxWithPathLike(children);
for (Mailbox<Id> sub : subMailboxes) {
final String subOriginalName = sub.getName();
@@ -433,6 +435,8 @@ public abstract class StoreMailboxManage
if (log.isDebugEnabled())
log.debug("Rename mailbox sub-mailbox " +
subOriginalName + " to " + subNewName);
}
+ return null;
+
}
});
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]