[prev in list] [next in list] [prev in thread] [next in thread]
List: james-dev
Subject: svn commit: r1129661 - in /james/mailbox/trunk:
From: norman () apache ! org
Date: 2011-05-31 13:24:09
Message-ID: 20110531132409.670252388901 () eris ! apache ! org
[Download RAW message or body]
Author: norman
Date: Tue May 31 13:24:08 2011
New Revision: 1129661
URL: http://svn.apache.org/viewvc?rev=1129661&view=rev
Log:
Last adjustments on the mailbox api for mod-sequences. See MAILBOX-74
Modified:
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/jam \
es/mailbox/jcr/mail/JCRMessageMapper.java?rev=1129661&r1=1129660&r2=1129661&view=diff \
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java \
(original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java \
Tue May 31 13:24:08 2011 @@ -600,7 +600,7 @@ public class JCRMessageMapper extends Ab
}
@Override
- protected void copy(Mailbox<String> mailbox, long uid, long modSeq, \
Message<String> original) throws MailboxException { + protected MessageMetaData \
copy(Mailbox<String> mailbox, long uid, long modSeq, Message<String> original) throws \
MailboxException { try {
String newMessagePath = \
getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + \
String.valueOf(uid); \
getSession().getWorkspace().copy(((JCRMessage)original).getNode().getPath(), \
getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + \
String.valueOf(uid)); @@ -608,14 +608,15 @@ public class JCRMessageMapper extends Ab
node.setProperty(JCRMessage.MAILBOX_UUID_PROPERTY, \
mailbox.getMailboxId()); node.setProperty(JCRMessage.UID_PROPERTY, uid);
node.setProperty(JCRMessage.MODSEQ_PROPERTY, modSeq);
-
+
+ return new SimpleMessageMetaData(new JCRMessage(node, \
mailboxSession.getLog())); } catch (RepositoryException e) {
throw new MailboxException("Unable to copy message " +original + " in \
mailbox " + mailbox, e); }
}
@Override
- protected void save(Mailbox<String> mailbox, Message<String> message) throws \
MailboxException { + protected MessageMetaData save(Mailbox<String> mailbox, \
Message<String> message) throws MailboxException { final JCRMessage membership = \
(JCRMessage) message; try {
@@ -683,6 +684,7 @@ public class JCRMessageMapper extends Ab
} else {
membership.merge(messageNode);
}
+ return new SimpleMessageMetaData(membership);
} catch (RepositoryException e) {
throw new MailboxException("Unable to save message " + message + " in \
mailbox " + mailbox, e); } catch (IOException e) {
Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/jam \
es/mailbox/jpa/mail/JPAMessageMapper.java?rev=1129661&r1=1129660&r2=1129661&view=diff \
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java \
(original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java \
Tue May 31 13:24:08 2011 @@ -405,14 +405,14 @@ public class JPAMessageMapper extends \
Ab
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, \
long, long, org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void copy(Mailbox<Long> mailbox, long uid, long modSeq, Message<Long> \
original) throws MailboxException { + protected MessageMetaData copy(Mailbox<Long> \
mailbox, long uid, long modSeq, Message<Long> original) throws MailboxException { \
Message<Long> copy; if (original instanceof JPAStreamingMessage) {
copy = new JPAStreamingMessage((JPAMailbox) mailbox, uid, modSeq, \
original); } else {
copy = new JPAMessage((JPAMailbox) mailbox, uid, modSeq, original);
}
- save(mailbox, copy);
+ return save(mailbox, copy);
}
@@ -420,7 +420,7 @@ public class JPAMessageMapper extends Ab
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(org.apache.james.mailbox.store.mail.model.Mailbox, \
org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void save(Mailbox<Long> mailbox, Message<Long> message) throws \
MailboxException { + protected MessageMetaData save(Mailbox<Long> mailbox, \
Message<Long> message) throws MailboxException {
try {
@@ -429,7 +429,7 @@ public class JPAMessageMapper extends Ab
((AbstractJPAMessage) \
message).setMailbox(getEntityManager().find(JPAMailbox.class, \
mailbox.getMailboxId()));
getEntityManager().persist(message);
-
+ return new SimpleMessageMetaData(message);
} catch (PersistenceException e) {
throw new MailboxException("Save of message " + message + " failed in \
mailbox " + mailbox, e); } catch (ArgumentException e) {
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=1129661&r1=1129660&r2=1129661&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 \
Tue May 31 13:24:08 2011 @@ -25,11 +25,13 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.Map.Entry;
+import javax.mail.Flags;
import javax.mail.Flags.Flag;
import org.apache.commons.io.FileUtils;
@@ -37,6 +39,7 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
+import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.maildir.MaildirFolder;
import org.apache.james.mailbox.maildir.MaildirMessageName;
@@ -309,9 +312,9 @@ public class MaildirMessageMapper extend
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, \
long, long, org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void copy(Mailbox<Integer> mailbox, long uid, long modSeq, \
Message<Integer> original) throws MailboxException { + protected MessageMetaData \
copy(Mailbox<Integer> mailbox, long uid, long modSeq, Message<Integer> original) \
throws MailboxException {
MaildirMessage theCopy = new MaildirMessage(mailbox, \
(AbstractMaildirMessage) original);
- save(mailbox, theCopy);
+ return save(mailbox, theCopy);
}
@@ -353,127 +356,89 @@ public class MaildirMessageMapper extend
/*
* (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(org.apache.james.mailbox.store.mail.model.Mailbox, \
org.apache.james.mailbox.store.mail.model.Message) + *
+ * @see
+ * org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(org.apache
+ * .james.mailbox.store.mail.model.Mailbox,
+ * org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void save(Mailbox<Integer> mailbox, Message<Integer> message) throws \
MailboxException {
- if (message instanceof LazyLoadingMaildirMessage) {
- // if the message is an instanceof LazyLoadingMaildirMessage we can be \
sure it was loaded out of the store and
- // so we need only to update the flags
- try {
- MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
- LazyLoadingMaildirMessage maildirMessage = \
(LazyLoadingMaildirMessage) message;
- MaildirMessageName messageName = \
folder.getMessageNameByUid(maildirMessage.getUid());
- File messageFile = messageName.getFile();
- // System.out.println("save existing " + message +
- // " as " + messageFile.getName());
- messageName.setFlags(maildirMessage.createFlags());
- // this automatically moves messages from new to cur if
- // needed
- String newMessageName = messageName.getFullName();
-
- File newMessageFile;
-
- // See MAILBOX-57
- if (message.createFlags().contains(Flag.RECENT)) {
- // message is recent so save it in the new folder
- newMessageFile = new File(folder.getNewFolder(), \
newMessageName);
- } else {
- newMessageFile = new File(folder.getCurFolder(), \
newMessageName);
- }
- long modSeq;
- // if the flags don't have change we should not try to move the
- // file
- if (newMessageFile.equals(messageFile) == false) {
- FileUtils.moveFile(messageFile, newMessageFile);
- modSeq = newMessageFile.lastModified();
-
- } else {
- modSeq = messageFile.lastModified();
- }
- maildirMessage.setModSeq(modSeq);
-
- long uid = maildirMessage.getUid();
- folder.update(uid, newMessageName);
- } catch (IOException e) {
- throw new MailboxException("Unable to save flags update for message \
" + message + " in mailbox " + mailbox, e);
- }
- } else {
- MaildirMessage maildirMessage = (MaildirMessage) message;
- MaildirFolder folder = maildirStore.createMaildirFolder(mailbox);
- long uid = 0;
- // a new message
- // save file to "tmp" folder
- File tmpFolder = folder.getTmpFolder();
- // The only case in which we could get problems with clashing names
- // is if the system clock
- // has been set backwards, then the server is restarted with the
- // same pid, delivers the same
- // number of messages since its start in the exact same millisecond
- // as done before and the
- // random number generator returns the same number.
- // In order to prevent this case we would need to check ALL files in
- // all folders and compare
- // them to this message name. We rather let this happen once in a
- // billion years...
- MaildirMessageName messageName = \
MaildirMessageName.createUniqueName(folder, \
message.getFullContentOctets());
- File messageFile = new File(tmpFolder, messageName.getFullName());
- FileOutputStream fos = null;
- InputStream input = null;
- try {
- messageFile.createNewFile();
- fos = new FileOutputStream(messageFile);
- input = message.getFullContent();
- byte[] b = new byte[BUF_SIZE];
- int len = 0;
- while ((len = input.read(b)) != -1)
- fos.write(b, 0, len);
- } catch (IOException ioe) {
- throw new MailboxException("Failure while save Message " + message + \
" in Mailbox " + mailbox, ioe);
- } finally {
- try {
- if (fos != null)
- fos.close();
- } catch (IOException e) {
- }
- try {
- if (input != null)
- input.close();
- } catch (IOException e) {
- }
- }
- File newMessageFile = null;
- // delivered via SMTP, goes to ./new without flags
- if (maildirMessage.isRecent()) {
- messageName.setFlags(message.createFlags());
- newMessageFile = new File(folder.getNewFolder(), \
messageName.getFullName());
- // System.out.println("save new recent " + message + " as " +
- // newMessageFile.getName());
- }
- // appended via IMAP (might already have flags etc, goes to ./cur
- // directly)
- else {
- messageName.setFlags(message.createFlags());
- newMessageFile = new File(folder.getCurFolder(), \
messageName.getFullName());
- // System.out.println("save new not recent " + message + " as "
- // + newMessageFile.getName());
- }
+ protected MessageMetaData save(Mailbox<Integer> mailbox, Message<Integer> \
message) throws MailboxException { + AbstractMaildirMessage maildirMessage = \
(AbstractMaildirMessage) message; + MaildirFolder folder = \
maildirStore.createMaildirFolder(mailbox); + long uid = 0;
+ // a new message
+ // save file to "tmp" folder
+ File tmpFolder = folder.getTmpFolder();
+ // The only case in which we could get problems with clashing names
+ // is if the system clock
+ // has been set backwards, then the server is restarted with the
+ // same pid, delivers the same
+ // number of messages since its start in the exact same millisecond
+ // as done before and the
+ // random number generator returns the same number.
+ // In order to prevent this case we would need to check ALL files in
+ // all folders and compare
+ // them to this message name. We rather let this happen once in a
+ // billion years...
+ MaildirMessageName messageName = MaildirMessageName.createUniqueName(folder, \
message.getFullContentOctets()); + File messageFile = new File(tmpFolder, \
messageName.getFullName()); + FileOutputStream fos = null;
+ InputStream input = null;
+ try {
+ messageFile.createNewFile();
+ fos = new FileOutputStream(messageFile);
+ input = message.getFullContent();
+ byte[] b = new byte[BUF_SIZE];
+ int len = 0;
+ while ((len = input.read(b)) != -1)
+ fos.write(b, 0, len);
+ } catch (IOException ioe) {
+ throw new MailboxException("Failure while save Message " + message + " \
in Mailbox " + mailbox, ioe); + } finally {
try {
- FileUtils.moveFile(messageFile, newMessageFile);
+ if (fos != null)
+ fos.close();
} catch (IOException e) {
- // TODO: Try copy and delete
- throw new MailboxException("Failure while save Message " + message + \
" in Mailbox " + mailbox, e); }
try {
- uid = folder.appendMessage(newMessageFile.getName());
- maildirMessage.setUid(uid);
+ if (input != null)
+ input.close();
} catch (IOException e) {
- throw new MailboxException("Failure while save Message " + message + \
" in Mailbox " + mailbox, e); }
}
+ File newMessageFile = null;
+ // delivered via SMTP, goes to ./new without flags
+ if (maildirMessage.isRecent()) {
+ messageName.setFlags(message.createFlags());
+ newMessageFile = new File(folder.getNewFolder(), \
messageName.getFullName()); + // System.out.println("save new recent " + \
message + " as " + + // newMessageFile.getName());
+ }
+ // appended via IMAP (might already have flags etc, goes to ./cur
+ // directly)
+ else {
+ messageName.setFlags(message.createFlags());
+ newMessageFile = new File(folder.getCurFolder(), \
messageName.getFullName()); + // System.out.println("save new not recent " \
+ message + " as " + // + newMessageFile.getName());
+ }
+ try {
+ FileUtils.moveFile(messageFile, newMessageFile);
+ } catch (IOException e) {
+ // TODO: Try copy and delete
+ throw new MailboxException("Failure while save Message " + message + " \
in Mailbox " + mailbox, e); + }
+ try {
+ uid = folder.appendMessage(newMessageFile.getName());
+ maildirMessage.setUid(uid);
+ maildirMessage.setModSeq(newMessageFile.lastModified());
+ return new SimpleMessageMetaData(message);
+ } catch (IOException e) {
+ throw new MailboxException("Failure while save Message " + message + " \
in Mailbox " + mailbox, e); + }
}
-
/**
* Do nothing as maildir store the uid and modseq everytime by it own
*/
@@ -508,5 +473,77 @@ public class MaildirMessageMapper extend
protected void rollback() throws MailboxException {
//nothing todo
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.mailbox.store.mail.MessageMapper#updateFlags(org.apache.james.mailbox.store.mail.model.Mailbox, \
javax.mail.Flags, boolean, boolean, org.apache.james.mailbox.MessageRange) + */
+ public Iterator<UpdatedFlags> updateFlags(final Mailbox<Integer> mailbox, final \
Flags flags, final boolean value, final boolean replace, MessageRange set) throws \
MailboxException { + final List<UpdatedFlags> updatedFlags = new \
ArrayList<UpdatedFlags>(); + final MaildirFolder folder = \
maildirStore.createMaildirFolder(mailbox); +
+ findInMailbox(mailbox, set, new MailboxMembershipCallback<Integer>() {
+
+ public void onMailboxMembers(List<Message<Integer>> members) throws \
MailboxException { + for (final Message<Integer> member : members) {
+ Flags originalFlags = member.createFlags();
+ if (replace) {
+ member.setFlags(flags);
+ } else {
+ Flags current = member.createFlags();
+ if (value) {
+ current.add(flags);
+ } else {
+ current.remove(flags);
+ }
+ member.setFlags(current);
+ }
+ Flags newFlags = member.createFlags();
+
+ try {
+ AbstractMaildirMessage maildirMessage = \
(AbstractMaildirMessage) member; + MaildirMessageName \
messageName = folder.getMessageNameByUid(maildirMessage.getUid()); + \
File messageFile = messageName.getFile(); + // \
System.out.println("save existing " + message + + // " as " + \
messageFile.getName()); + \
messageName.setFlags(maildirMessage.createFlags()); + // this \
automatically moves messages from new to cur if + // needed
+ String newMessageName = messageName.getFullName();
+
+ File newMessageFile;
+
+ // See MAILBOX-57
+ if (newFlags.contains(Flag.RECENT)) {
+ // message is recent so save it in the new folder
+ newMessageFile = new File(folder.getNewFolder(), \
newMessageName); + } else {
+ newMessageFile = new File(folder.getCurFolder(), \
newMessageName); + }
+ long modSeq;
+ // if the flags don't have change we should not try to move \
the file + if (newMessageFile.equals(messageFile) == false) {
+ FileUtils.moveFile(messageFile, newMessageFile );
+ modSeq = newMessageFile.lastModified();
+
+ } else {
+ modSeq = messageFile.lastModified();
+ }
+ maildirMessage.setModSeq(modSeq);
+
+ updatedFlags.add(new UpdatedFlags(member.getUid(), modSeq, \
originalFlags, newFlags)); +
+ long uid = maildirMessage.getUid();
+ folder.update(uid, newMessageName);
+ } catch (IOException e) {
+ throw new MailboxException("Failure while save Message " + \
member + " in Mailbox " + mailbox, e); + }
+
+ }
+ }
+ });
+
+ return updatedFlags.iterator();
+
+ }
}
Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/ \
james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1129661&r1=1129660&r2=1129661&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java \
(original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java \
Tue May 31 13:24:08 2011 @@ -214,8 +214,8 @@ public class InMemoryMessageMapper exten
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, \
long, long, org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void copy(Mailbox<Long> mailbox, long uid, long modSeq, Message<Long> \
original) throws MailboxException {
- save(mailbox, new SimpleMailboxMembership(mailbox.getMailboxId(), uid, \
modSeq, (SimpleMailboxMembership)original)); + protected MessageMetaData \
copy(Mailbox<Long> mailbox, long uid, long modSeq, Message<Long> original) throws \
MailboxException { + return save(mailbox, new \
SimpleMailboxMembership(mailbox.getMailboxId(), uid, modSeq, \
(SimpleMailboxMembership)original)); }
/*
@@ -239,8 +239,9 @@ public class InMemoryMessageMapper exten
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.AbstractMessageMapper#save(org.apache.james.mailbox.store.mail.model.Mailbox, \
org.apache.james.mailbox.store.mail.model.Message)
*/
- protected void save(Mailbox<Long> mailbox, Message<Long> message) throws \
MailboxException { + protected MessageMetaData save(Mailbox<Long> mailbox, \
Message<Long> message) throws MailboxException {
getMembershipByUidForMailbox(mailbox).put(message.getUid(), message);
+ return new SimpleMessageMetaData(message);
}
/**
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/j \
ames/mailbox/store/mail/AbstractMessageMapper.java?rev=1129661&r1=1129660&r2=1129661&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java \
(original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java \
Tue May 31 13:24:08 2011 @@ -18,8 +18,11 @@
****************************************************************/
package org.apache.james.mailbox.store.mail;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -39,8 +42,10 @@ import org.apache.james.mailbox.SearchQu
import org.apache.james.mailbox.SearchQuery.UidCriterion;
import org.apache.james.mailbox.store.MessageSearchIndex;
import org.apache.james.mailbox.store.SearchQueryIterator;
+import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
+import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.transaction.TransactionalMapper;
/**
@@ -250,11 +255,12 @@ public abstract class AbstractMessageMap
public MessageMetaData add(Mailbox<Id> mailbox, Message<Id> message) throws \
MailboxException { message.setUid(nextUid(mailbox));
message.setModSeq(nextModSeq(mailbox));
- save(mailbox, message);
+ MessageMetaData data = save(mailbox, message);
if (index != null) {
index.add(mailboxSession, mailbox, message);
}
- return new SimpleMessageMetaData(message);
+ return data;
+
}
@@ -262,11 +268,141 @@ public abstract class AbstractMessageMap
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox, \
org.apache.james.mailbox.store.mail.model.Message)
*/
- public MessageMetaData copy(Mailbox<Id> mailbox, Message<Id> original) throws \
MailboxException { + public MessageMetaData copy(final Mailbox<Id> mailbox, final \
Message<Id> original) throws MailboxException { long uid = nextUid(mailbox);
long modSeq = nextModSeq(mailbox);
- copy(mailbox, uid, modSeq, original);
- return new SimpleMessageMetaData(uid, modSeq, original.createFlags(), \
original.getFullContentOctets(), original.getInternalDate()); + final \
MessageMetaData metaData = copy(mailbox, uid, modSeq, original); + if (index \
!= null) { + // index the copied message by building a wrapper around the \
original message and the returned metadata + index.add(mailboxSession, \
mailbox, new Message<Id>() { +
+ @Override
+ public Flags createFlags() {
+ return original.createFlags();
+ }
+
+ @Override
+ public InputStream getBodyContent() throws IOException {
+ return original.getBodyContent();
+ }
+
+ @Override
+ public long getBodyOctets() {
+ return original.getBodyOctets();
+ }
+
+ @Override
+ public InputStream getFullContent() throws IOException {
+ return original.getFullContent();
+ }
+
+ @Override
+ public long getFullContentOctets() {
+ return original.getFullContentOctets();
+ }
+
+ @Override
+ public List<Header> getHeaders() {
+ return original.getHeaders();
+ }
+
+ @Override
+ public Date getInternalDate() {
+ return metaData.getInternalDate();
+ }
+
+ @Override
+ public Id getMailboxId() {
+ return mailbox.getMailboxId();
+ }
+
+ @Override
+ public String getMediaType() {
+ return original.getMediaType();
+ }
+
+ @Override
+ public long getModSeq() {
+ return metaData.getModSeq();
+ }
+
+ @Override
+ public List<Property> getProperties() {
+ return original.getProperties();
+ }
+
+ @Override
+ public String getSubType() {
+ return original.getSubType();
+ }
+
+ @Override
+ public Long getTextualLineCount() {
+ return original.getTextualLineCount();
+ }
+
+ @Override
+ public long getUid() {
+ return metaData.getUid();
+ }
+
+ @Override
+ public boolean isAnswered() {
+ return original.isAnswered();
+ }
+
+ @Override
+ public boolean isDeleted() {
+ return original.isDeleted();
+
+ }
+
+ @Override
+ public boolean isDraft() {
+ return original.isDraft();
+
+ }
+
+ @Override
+ public boolean isFlagged() {
+ return original.isFlagged();
+ }
+
+ @Override
+ public boolean isRecent() {
+ return original.isRecent();
+ }
+
+ @Override
+ public boolean isSeen() {
+ return original.isSeen();
+ }
+
+ @Override
+ public void setFlags(Flags flags) {
+ throw new UnsupportedOperationException("Read-Only Message");
+ }
+
+ @Override
+ public void setModSeq(long modSeq) {
+ throw new UnsupportedOperationException("Read-Only Message");
+ }
+
+ @Override
+ public void setUid(long uid) {
+ throw new UnsupportedOperationException("Read-Only Message");
+ }
+
+ @Override
+ public int compareTo(Message<Id> o) {
+ return (int) (metaData.getUid() - o.getUid());
+ }
+
+
+ });
+ }
+
+ return metaData;
}
@@ -370,13 +506,14 @@ public abstract class AbstractMessageMap
/**
- * Save the {@link Message} for the given {@link Mailbox}
+ * Save the {@link Message} for the given {@link Mailbox} and return the {@link \
MessageMetaData}
*
* @param mailbox
* @param message
+ * @return metaData
* @throws MailboxException
*/
- protected abstract void save(Mailbox<Id> mailbox, Message<Id> message) throws \
MailboxException; + protected abstract MessageMetaData save(Mailbox<Id> mailbox, \
Message<Id> message) throws MailboxException;
/**
@@ -386,9 +523,10 @@ public abstract class AbstractMessageMap
* @param uid
* @param modSeq
* @param original
+ * @return metaData
* @throws MailboxException
*/
- protected abstract void copy(Mailbox<Id> mailbox, long uid, long modSeq, \
Message<Id> original) throws MailboxException; + protected abstract \
MessageMetaData copy(Mailbox<Id> mailbox, long uid, long modSeq, Message<Id> \
original) throws MailboxException;
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic