Author: norman
Date: Tue May 24 10:27:55 2011
New Revision: 1126967
URL: http://svn.apache.org/viewvc?rev=1126967&view=rev
Log:
Expunged events now contains meta-data for the expunged messages. This makes it
easier to write MailboxListeners
Added:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
- copied, changed from r1125789,
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
Removed:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
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/MessageResult.java
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
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/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.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/ResultIterator.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.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=1126967&r1=1126966&r2=1126967&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
Tue May 24 10:27:55 2011
@@ -19,10 +19,8 @@
package org.apache.james.mailbox;
-import java.util.Date;
import java.util.List;
-import javax.mail.Flags;
/**
* Listens to <code>Mailbox</code> events.<br>
@@ -143,6 +141,13 @@ public interface MailboxListener {
public Expunged(MailboxSession session, MailboxPath path) {
super(session, path);
}
+
+ /**
+ * Return the flags which were set for the added message
+ *
+ * @return flags
+ */
+ public abstract MessageMetaData getMetaData(long uid);
}
/**
@@ -173,12 +178,6 @@ public interface MailboxListener {
*/
public abstract MessageMetaData getMetaData(long uid);
- public interface MessageMetaData {
- public long getUid();
- public Flags getFlags();
- public long getSize();
- public Date getInternalDate();
- }
}
}
Added:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java?rev=1126967&view=auto
==============================================================================
---
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
(added)
+++
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
Tue May 24 10:27:55 2011
@@ -0,0 +1,64 @@
+/****************************************************************
+ * 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.mailbox;
+
+import java.util.Date;
+
+import javax.mail.Flags;
+
+/**
+ * Represent the {@link MessageMetaData} for a message
+ *
+ *
+ */
+public interface MessageMetaData {
+
+ /**
+ * Return the uid of the message which the MessageResult belongs to
+ *
+ * @return uid
+ */
+ long getUid();
+
+ /**
+ * Return the {@link Flags}
+ *
+ * @return flags
+ */
+ Flags getFlags();
+
+ /**
+ * Return the size in bytes
+ *
+ * @return size
+ */
+ long getSize();
+
+ /**
+ * <p>
+ * IMAP defines this as the time when the message has arrived to the server
+ * (by smtp). Clients are also allowed to set the internalDate on append.
+ * </p>
+ * <p>
+ * Is this Mail.getLastUpdates() for James delivery? Should we use
+ * MimeMessage.getReceivedDate()?
+ * </p>
+ */
+ Date getInternalDate();
+}
Modified:
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
---
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
(original)
+++
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
Tue May 24 10:27:55 2011
@@ -19,11 +19,9 @@
package org.apache.james.mailbox;
-import java.util.Date;
import java.util.Iterator;
import java.util.Set;
-import javax.mail.Flags;
/**
* <p>
@@ -53,7 +51,7 @@ import javax.mail.Flags;
* </p>
*/
-public interface MessageResult extends Comparable<MessageResult>, Headers {
+public interface MessageResult extends Comparable<MessageResult>,
MessageMetaData, Headers {
/**
* Indicates the results fetched.
@@ -135,41 +133,6 @@ public interface MessageResult extends C
MimeDescriptor getMimeDescriptor() throws MailboxException;
/**
- * Return the uid of the message which the MessageResult belongs to
- *
- * @return uid
- */
- long getUid();
-
- /**
- * <p>
- * IMAP defines this as the time when the message has arrived to the server
- * (by smtp). Clients are also allowed to set the internalDate on append.
- * </p>
- * <p>
- * Is this Mail.getLastUpdates() for James delivery? Should we use
- * MimeMessage.getReceivedDate()?
- * </p>
- */
-
- Date getInternalDate();
-
- /**
- * TODO optional, to be decided <br>
- * maybe this is a good thing because IMAP often requests only the Flags
and
- * this way we don't need to create a lazy-loading MimeMessage instance
just
- * for the Flags.
- */
- Flags getFlags() throws MailboxException;
-
- /**
- * Return the size in bytes
- *
- * @return size
- */
- long getSize();
-
- /**
* Iterates the message headers for the given part in a multipart message.
*
* @param path
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=1126967&r1=1126966&r2=1126967&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
Tue May 24 10:27:55 2011
@@ -28,9 +28,9 @@ import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
import org.apache.james.mailbox.MailboxPath;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.UpdatedFlags;
/**
@@ -87,7 +87,7 @@ public class MailboxEventDispatcher impl
* @param uids
* @param path
*/
- public void expunged(final MailboxSession session, final List<Long> uids,
MailboxPath path) {
+ public void expunged(final MailboxSession session, Map<Long,
MessageMetaData> uids, MailboxPath path) {
final ExpungedImpl expunged = new ExpungedImpl(session, path, uids);
event(expunged);
}
@@ -179,9 +179,9 @@ public class MailboxEventDispatcher impl
private final static class ExpungedImpl extends MailboxListener.Expunged {
- private final List<Long> uids;
+ private final Map<Long, MessageMetaData> uids;
- public ExpungedImpl(MailboxSession session, final MailboxPath path,
final List<Long> uids) {
+ public ExpungedImpl(MailboxSession session, final MailboxPath path,
final Map<Long, MessageMetaData> uids) {
super(session, path);
this.uids = uids;
}
@@ -190,7 +190,15 @@ public class MailboxEventDispatcher impl
* @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids()
*/
public List<Long> getUids() {
- return uids;
+ return new ArrayList<Long>(uids.keySet());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.mailbox.MailboxListener.Expunged#getMetaData(long)
+ */
+ public MessageMetaData getMetaData(long uid) {
+ return uids.get(uid);
}
}
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/james/mailbox/jcr/mail/JCRMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&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 24 10:27:55 2011
@@ -22,8 +22,10 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
@@ -38,6 +40,7 @@ import org.apache.jackrabbit.commons.Jcr
import org.apache.jackrabbit.util.ISO9075;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.UpdatedFlags;
@@ -45,6 +48,7 @@ import org.apache.james.mailbox.jcr.Abst
import org.apache.james.mailbox.jcr.MailboxSessionJCRRepository;
import org.apache.james.mailbox.jcr.mail.model.JCRMessage;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.slf4j.Logger;
@@ -377,7 +381,7 @@ public class JCRMessageMapper extends Ab
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.MessageRange)
*/
- public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<String>
mailbox, MessageRange set) throws MailboxException {
+ public Map<Long, MessageMetaData>
expungeMarkedForDeletionInMailbox(Mailbox<String> mailbox, MessageRange set)
throws MailboxException {
try {
final List<Message<String>> results;
final long from = set.getUidFrom();
@@ -398,14 +402,14 @@ public class JCRMessageMapper extends Ab
results = findDeletedMessagesInMailboxBetweenUIDs(mailbox,
from, to);
break;
}
- List<Long> uids = new ArrayList<Long>();
+ Map<Long, MessageMetaData> uids = new HashMap<Long,
MessageMetaData>();
for (int i = 0; i < results.size(); i++) {
Message<String> m = results.get(i);
long uid = m.getUid();
+ uids.put(uid, new SimpleMessageMetaData(m));
delete(mailbox, m);
- uids.add(uid);
}
- return uids.iterator();
+ return uids;
} catch (RepositoryException e) {
throw new MailboxException("Unable to search MessageRange " + set
+ " in mailbox " + mailbox, 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/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&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 24 10:27:55 2011
@@ -19,8 +19,10 @@
package org.apache.james.mailbox.jpa.mail;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javax.mail.Flags;
import javax.persistence.EntityManagerFactory;
@@ -28,6 +30,7 @@ import javax.persistence.PersistenceExce
import javax.persistence.Query;
import org.apache.james.mailbox.MailboxException;
+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;
@@ -37,6 +40,7 @@ import org.apache.james.mailbox.jpa.mail
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.openjpa.persistence.ArgumentException;
@@ -136,36 +140,51 @@ public class JPAMessageMapper extends JP
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.MessageRange)
*/
- public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<Long>
mailbox, final MessageRange set) throws MailboxException {
+ public Map<Long, MessageMetaData>
expungeMarkedForDeletionInMailbox(Mailbox<Long> mailbox, final MessageRange
set) throws MailboxException {
try {
- final List<Long> results;
+ final Map<Long, MessageMetaData> data;
+ final List<Message<Long>> results;
final long from = set.getUidFrom();
final long to = set.getUidTo();
+
switch (set.getType()) {
case ONE:
results = findDeletedMessagesInMailboxWithUID(mailbox,
from);
+ data = createMetaData(results);
deleteDeletedMessagesInMailboxWithUID(mailbox, from);
break;
case RANGE:
results = findDeletedMessagesInMailboxBetweenUIDs(mailbox,
from, to);
+ data = createMetaData(results);
deleteDeletedMessagesInMailboxBetweenUIDs(mailbox, from,
to);
break;
case FROM:
results = findDeletedMessagesInMailboxAfterUID(mailbox,
from);
+ data = createMetaData(results);
deleteDeletedMessagesInMailboxAfterUID(mailbox, from);
break;
default:
case ALL:
results = findDeletedMessagesInMailbox(mailbox);
+ data = createMetaData(results);
deleteDeletedMessagesInMailbox(mailbox);
break;
}
- return results.iterator();
+ return data;
} catch (PersistenceException e) {
throw new MailboxException("Search of MessageRange " + set + "
failed in mailbox " + mailbox, e);
}
}
+
+ private Map<Long, MessageMetaData> createMetaData(List<Message<Long>>
uids) {
+ final Map<Long, MessageMetaData> data = new HashMap<Long,
MessageMetaData>();
+ for (int i = 0; i < uids.size(); i++) {
+ Message<Long> m = uids.get(i);
+ data.put(m.getUid(), new SimpleMessageMetaData(m));
+ }
+ return data;
+ }
private int deleteDeletedMessagesInMailbox(Mailbox<Long> mailbox) {
@@ -193,26 +212,26 @@ public class JPAMessageMapper extends JP
@SuppressWarnings("unchecked")
- private List<Long> findDeletedMessagesInMailbox(Mailbox<Long> mailbox) {
+ private List<Message<Long>> findDeletedMessagesInMailbox(Mailbox<Long>
mailbox) {
return
getEntityManager().createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam",
mailbox.getMailboxId()).getResultList();
}
@SuppressWarnings("unchecked")
- private List<Long> findDeletedMessagesInMailboxAfterUID(Mailbox<Long>
mailbox, long uid) {
+ private List<Message<Long>>
findDeletedMessagesInMailboxAfterUID(Mailbox<Long> mailbox, long uid) {
return
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxAfterUID")
.setParameter("idParam", mailbox.getMailboxId())
.setParameter("uidParam", uid).getResultList();
}
@SuppressWarnings("unchecked")
- private List<Long> findDeletedMessagesInMailboxWithUID(Mailbox<Long>
mailbox, long uid) {
+ private List<Message<Long>>
findDeletedMessagesInMailboxWithUID(Mailbox<Long> mailbox, long uid) {
return
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxWithUID")
.setParameter("idParam", mailbox.getMailboxId())
.setParameter("uidParam", uid).setMaxResults(1).getResultList();
}
@SuppressWarnings("unchecked")
- private List<Long> findDeletedMessagesInMailboxBetweenUIDs(Mailbox<Long>
mailbox, long from, long to) {
+ private List<Message<Long>>
findDeletedMessagesInMailboxBetweenUIDs(Mailbox<Long> mailbox, long from, long
to) {
return
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
.setParameter("idParam", mailbox.getMailboxId())
.setParameter("fromParam", from)
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
Tue May 24 10:27:55 2011
@@ -20,7 +20,6 @@ package org.apache.james.mailbox.jpa.mai
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -70,13 +69,13 @@ import org.apache.openjpa.persistence.jd
@NamedQuery(name="findMessagesInMailboxAfterUID",
query="SELECT message FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam"),
@NamedQuery(name="findDeletedMessagesInMailbox",
- query="SELECT message.uid FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.deleted=TRUE"),
+ query="SELECT message FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxBetweenUIDs",
- query="SELECT message.uid FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND
:toParam AND message.deleted=TRUE"),
+ query="SELECT message FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND
:toParam AND message.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxWithUID",
- query="SELECT message.uid FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid=:uidParam AND
message.deleted=TRUE"),
+ query="SELECT message FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid=:uidParam AND
message.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxAfterUID",
- query="SELECT message.uid FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam AND
message.deleted=TRUE"),
+ query="SELECT message FROM Message message WHERE
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam AND
message.deleted=TRUE"),
@NamedQuery(name="deleteDeletedMessagesInMailbox",
query="DELETE FROM Message message WHERE message.mailbox.mailboxId
= :idParam AND message.deleted=TRUE"),
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=1126967&r1=1126966&r2=1126967&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 24 10:27:55 2011
@@ -24,8 +24,10 @@ import java.io.FilenameFilter;
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.Map.Entry;
import java.util.SortedMap;
@@ -34,6 +36,7 @@ import javax.mail.Flags.Flag;
import org.apache.commons.io.FileUtils;
import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.MessageRange.Type;
import org.apache.james.mailbox.UpdatedFlags;
@@ -44,6 +47,7 @@ import org.apache.james.mailbox.maildir.
import org.apache.james.mailbox.maildir.mail.model.LazyLoadingMaildirMessage;
import org.apache.james.mailbox.maildir.mail.model.MaildirMessage;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
@@ -194,7 +198,7 @@ public class MaildirMessageMapper extend
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.MessageRange)
*/
- public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<Integer>
mailbox, MessageRange set) throws MailboxException {
+ public Map<Long, MessageMetaData>
expungeMarkedForDeletionInMailbox(Mailbox<Integer> mailbox, MessageRange set)
throws MailboxException {
List<Message<Integer>> results = new ArrayList<Message<Integer>>();
final long from = set.getUidFrom();
final long to = set.getUidTo();
@@ -214,14 +218,14 @@ public class MaildirMessageMapper extend
results = findMessagesInMailboxBetweenUIDs(mailbox,
MaildirMessageName.FILTER_DELETED_MESSAGES, from, to);
break;
}
- List<Long> uids = new ArrayList<Long>();
+ Map<Long, MessageMetaData> uids = new HashMap<Long, MessageMetaData>();
for (int i = 0; i < results.size(); i++) {
Message<Integer> m = results.get(i);
long uid = m.getUid();
+ uids.put(uid, new SimpleMessageMetaData(m));
delete(mailbox, m);
- uids.add(uid);
}
- return uids.iterator();
+ return uids;
}
private List<Message<Integer>> findMessagesInMailbox(Mailbox<Integer>
mailbox,
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=1126967&r1=1126966&r2=1126967&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 24 10:27:55 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.inmemor
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -29,10 +30,12 @@ import java.util.concurrent.ConcurrentHa
import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.inmemory.mail.model.SimpleMailboxMembership;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
@@ -144,8 +147,8 @@ public class InMemoryMessageMapper exten
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.MessageRange)
*/
- public Iterator<Long> expungeMarkedForDeletionInMailbox(final
Mailbox<Long> mailbox, MessageRange set) throws MailboxException {
- final List<Long> filteredResult = new ArrayList<Long>();
+ public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final
Mailbox<Long> mailbox, MessageRange set) throws MailboxException {
+ final Map<Long, MessageMetaData> filteredResult = new HashMap<Long,
MessageMetaData>();
findInMailbox(mailbox, set, new MailboxMembershipCallback<Long>() {
@@ -153,14 +156,15 @@ public class InMemoryMessageMapper exten
for (final Iterator<Message<Long>> it = results.iterator();
it.hasNext();) {
Message<Long> member = it.next();
if (member.isDeleted()) {
+ filteredResult.put(member.getUid(), new
SimpleMessageMetaData(member));
+
delete(mailbox, member);
- filteredResult.add(member.getUid());
}
}
}
});
- return filteredResult.iterator();
+ return filteredResult;
}
/*
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
Tue May 24 10:27:55 2011
@@ -97,17 +97,20 @@ public class ResultIterator<Id> implemen
private final long uid;
+ private final Flags flags;
+
public UnloadedMessageResult(final Message<Id> message,
final MailboxException exception) {
super();
internalDate = message.getInternalDate();
size = message.getFullContentOctets();
uid = message.getUid();
+ flags = message.createFlags();
this.exception = exception;
}
- public Flags getFlags() throws MailboxException {
- throw exception;
+ public Flags getFlags() {
+ return flags;
}
public Content getFullContent() throws MailboxException {
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=1126967&r1=1126966&r2=1126967&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
Tue May 24 10:27:55 2011
@@ -40,8 +40,8 @@ import javax.mail.util.SharedFileInputSt
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.MessageResult;
import org.apache.james.mailbox.SearchQuery;
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.MessageR
import org.apache.james.mailbox.SearchQuery.Criterion;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
import org.apache.james.mailbox.store.mail.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -149,14 +150,10 @@ public abstract class StoreMessageManage
* @see
org.apache.james.mailbox.Mailbox#expunge(org.apache.james.mailbox.MessageRange,
org.apache.james.mailbox.MailboxSession)
*/
public Iterator<Long> expunge(final MessageRange set, MailboxSession
mailboxSession) throws MailboxException {
- List<Long> uids = new ArrayList<Long>();
- Iterator<Long> uidIt = deleteMarkedInMailbox(set, mailboxSession);
- while(uidIt.hasNext()) {
- long uid = uidIt.next();
- uids.add(uid);
- }
+ Map<Long, MessageMetaData> uids = deleteMarkedInMailbox(set,
mailboxSession);
+
dispatcher.expunged(mailboxSession, uids, new
StoreMailboxPath<Id>(getMailboxEntity()));
- return uids.iterator();
+ return uids.keySet().iterator();
}
/*
@@ -622,12 +619,12 @@ public abstract class StoreMessageManage
}
- protected Iterator<Long> deleteMarkedInMailbox(final MessageRange range,
final MailboxSession session) throws MailboxException {
+ protected Map<Long, MessageMetaData> deleteMarkedInMailbox(final
MessageRange range, final MailboxSession session) throws MailboxException {
final MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
- return messageMapper.execute(new Mapper.Transaction<Iterator<Long>>() {
+ return messageMapper.execute(new Mapper.Transaction<Map<Long,
MessageMetaData>>() {
- public Iterator<Long> run() throws MailboxException {
+ public Map<Long, MessageMetaData> run() throws MailboxException {
return
messageMapper.expungeMarkedForDeletionInMailbox(getMailboxEntity(), range);
}
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
Tue May 24 10:27:55 2011
@@ -20,10 +20,12 @@ package org.apache.james.mailbox.store.m
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
import org.apache.james.mailbox.MessageRange;
import org.apache.james.mailbox.UpdatedFlags;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -56,7 +58,7 @@ public interface MessageMapper<Id> exten
* @return uids
* @throws MailboxException
*/
- public abstract Iterator<Long> expungeMarkedForDeletionInMailbox(
+ public abstract Map<Long, MessageMetaData>
expungeMarkedForDeletionInMailbox(
Mailbox<Id> mailbox, final MessageRange set)
throws MailboxException;
Copied:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
(from r1125789,
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java)
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java?p2=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java&p1=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java&r1=1125789&r2=1126967&rev=1126967&view=diff
==============================================================================
---
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
(original)
+++
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
Tue May 24 10:27:55 2011
@@ -17,13 +17,15 @@
* under the License. *
****************************************************************/
-package org.apache.james.mailbox.store;
+package org.apache.james.mailbox.store.mail;
import java.util.Date;
import javax.mail.Flags;
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
+import org.apache.james.mailbox.MessageMetaData;
+import org.apache.james.mailbox.store.mail.model.Message;
+
public class SimpleMessageMetaData implements MessageMetaData{
private long uid;
@@ -38,6 +40,11 @@ public class SimpleMessageMetaData imple
this.internalDate = internalDate;
}
+ public SimpleMessageMetaData(Message<?> message) {
+ this(message.getUid(), message.createFlags(),
message.getFullContentOctets(), message.getInternalDate());
+ }
+
+
/*
* (non-Javadoc)
* @see
org.apache.james.mailbox.MailboxListener.Added.MessageMetaData#getFlags()
@@ -70,4 +77,20 @@ public class SimpleMessageMetaData imple
return uid;
}
+ @Override
+ public boolean equals(Object obj) {
+ if(obj instanceof SimpleMessageMetaData) {
+ return uid == ((SimpleMessageMetaData) obj).getUid();
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + (int) (uid ^ (uid >>> 32));
+ return result;
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]