Author: norman
Date: Sat Apr 30 15:21:08 2011
New Revision: 1098120
URL: http://svn.apache.org/viewvc?rev=1098120&view=rev
Log:
Make it possible to get the flags for added message via the Added event
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
---
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
(original)
+++
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
Sat Apr 30 15:21:08 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javax.mail.Flags;
@@ -165,6 +166,13 @@ public interface MailboxListener {
public Added(MailboxSession session, MailboxPath path) {
super(session, path);
}
+
+ /**
+ * Return the flags which were set for the added message
+ *
+ * @return flags
+ */
+ public abstract Map<Long, Flags> getFlags();
}
}
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
---
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
(original)
+++
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
Sat Apr 30 15:21:08 2011
@@ -23,9 +23,12 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
+import javax.mail.Flags;
+
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxPath;
import org.apache.james.mailbox.MailboxSession;
@@ -71,7 +74,7 @@ public class MailboxEventDispatcher impl
* @param sessionId
* @param path
*/
- public void added(MailboxSession session, List<Long> uids, MailboxPath
path) {
+ public void added(MailboxSession session, Map<Long, Flags> uids,
MailboxPath path) {
pruneClosed();
final AddedImpl added = new AddedImpl(session, path, uids);
event(added);
@@ -150,10 +153,12 @@ public class MailboxEventDispatcher impl
private final static class AddedImpl extends MailboxListener.Added {
private final List<Long> uids;
+ private Map<Long, Flags> added;
- public AddedImpl(final MailboxSession session, final MailboxPath path,
final List<Long> uids) {
+ public AddedImpl(final MailboxSession session, final MailboxPath path,
final Map<Long, Flags> added) {
super(session, path);
- this.uids = uids;
+ this.uids = new ArrayList<Long>(added.keySet());
+ this.added = added;
}
/*
@@ -163,6 +168,14 @@ public class MailboxEventDispatcher impl
public List<Long> getUids() {
return uids;
}
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.mailbox.MailboxListener.Added#getFlags()
+ */
+ public Map<Long, Flags> getFlags() {
+ return added;
+ }
}
private final static class ExpungedImpl extends MailboxListener.Expunged {
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
Sat Apr 30 15:21:08 2011
@@ -25,9 +25,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -287,8 +287,10 @@ public abstract class StoreMessageManage
long nextUid = uidProvider.nextUid(mailboxSession,
getMailboxEntity());
final Message<Id> message = createMessage(nextUid, internalDate,
size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers,
propertyBuilder);
long uid = appendMessageToStore(message, mailboxSession);
-
- dispatcher.added(mailboxSession, Arrays.asList(uid), new
StoreMailboxPath<Id>(getMailboxEntity()));
+
+ Map<Long, Flags> uids = new HashMap<Long, Flags>();
+ uids.put(uid, flags);
+ dispatcher.added(mailboxSession, uids, new
StoreMailboxPath<Id>(getMailboxEntity()));
return uid;
} catch (IOException e) {
throw new MailboxException("Unable to parse message", e);
@@ -501,15 +503,10 @@ public abstract class StoreMessageManage
*/
public List<MessageRange> copyTo(MessageRange set, StoreMessageManager<Id>
toMailbox, MailboxSession session) throws MailboxException {
try {
- Iterator<Long> copiedUids = copy(set, toMailbox, session);
- List<Long> uids = new ArrayList<Long>();
- while(copiedUids.hasNext()) {
- long uid = copiedUids.next();
- uids.add(uid);
- }
- dispatcher.added(session, uids, new
StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
+ Map<Long, Flags> copiedUids = copy(set, toMailbox, session);
+ dispatcher.added(session, copiedUids, new
StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
- return MessageRange.toRanges(uids);
+ return MessageRange.toRanges(new
ArrayList<Long>(copiedUids.keySet()));
} catch (MailboxException e) {
throw new MailboxException("Unable to parse message", e);
}
@@ -723,20 +720,24 @@ public abstract class StoreMessageManage
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.AbstractStoreMessageManager#copy(org.apache.james.mailbox.MessageRange,
org.apache.james.mailbox.store.AbstractStoreMessageManager,
org.apache.james.mailbox.MailboxSession)
*/
- protected Iterator<Long> copy(MessageRange set, final
StoreMessageManager<Id> to, final MailboxSession session) throws
MailboxException {
+ private Map<Long, Flags> copy(MessageRange set, final
StoreMessageManager<Id> to, final MailboxSession session) throws
MailboxException {
try {
MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
- final List<Long> copiedMessages = new ArrayList<Long>();
+ final Map<Long, Flags> copiedMessages = new HashMap<Long, Flags>();
messageMapper.findInMailbox(getMailboxEntity(), set, new
MailboxMembershipCallback<Id>() {
public void onMailboxMembers(List<Message<Id>> originalRows)
throws MailboxException {
Iterator<Long> ids = to.copy(originalRows, session);
- while (ids.hasNext())
- copiedMessages.add(ids.next());
+ int i = 0;
+ while (ids.hasNext()) {
+
+ copiedMessages.put(ids.next(),
originalRows.get(i).createFlags());
+ i++;
+ }
}
});
- return copiedMessages.iterator();
+ return copiedMessages;
} catch (MailboxException e) {
throw new MailboxException("Unable to parse message", e);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]