Author: norman
Date: Fri Dec 3 20:22:42 2010
New Revision: 1041977
URL: http://svn.apache.org/viewvc?rev=1041977&view=rev
Log:
Merge MapperStoreMessageManager and StoreMessageManager. I thought it would be
a good idea to split them in the past but I did not come up with a good use
case yet, so better to follow KISS here.
Removed:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MapperStoreMessageManager.java
Modified:
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxManager.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
Modified:
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
(original)
+++
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
Fri Dec 3 20:22:42 2010
@@ -27,8 +27,8 @@ import org.apache.james.mailbox.MailboxS
import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
@@ -53,7 +53,7 @@ public class JCRMailboxManager extends S
@Override
- protected MapperStoreMessageManager<String>
createMessageManager(UidProvider<String> uidProvider, MailboxEventDispatcher
dispatcher, Mailbox<String> mailboxEntity, MailboxSession session) throws
MailboxException{
+ protected StoreMessageManager<String>
createMessageManager(UidProvider<String> uidProvider, MailboxEventDispatcher
dispatcher, Mailbox<String> mailboxEntity, MailboxSession session) throws
MailboxException{
return new JCRMessageManager(mapperFactory, uidProvider, dispatcher,
(JCRMailbox) mailboxEntity, logger, getDelimiter());
}
Modified:
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
(original)
+++
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
Fri Dec 3 20:22:42 2010
@@ -30,7 +30,7 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.jcr.mail.model.JCRHeader;
import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
import org.apache.james.mailbox.jcr.mail.model.JCRMessage;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
@@ -41,7 +41,7 @@ import org.apache.james.mailbox.util.Mai
* JCR implementation of a {...@link MapperStoreMessageManager}
*
*/
-public class JCRMessageManager extends MapperStoreMessageManager<String> {
+public class JCRMessageManager extends StoreMessageManager<String> {
private final Log log;
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
Fri Dec 3 20:22:42 2010
@@ -28,7 +28,7 @@ import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMembership;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -39,7 +39,7 @@ import org.apache.james.mailbox.util.Mai
/**
* Abstract base class which should be used from JPA 2.0 implementations
*/
-public class JPAMessageManager extends MapperStoreMessageManager<Long> {
+public class JPAMessageManager extends StoreMessageManager<Long> {
public JPAMessageManager(JPAMailboxSessionMapperFactory mapperFactory,
UidProvider<Long> uidProvider,
final MailboxEventDispatcher dispatcher,final Mailbox<Long>
mailbox) throws MailboxException {
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
Fri Dec 3 20:22:42 2010
@@ -27,7 +27,7 @@ import org.apache.james.mailbox.jpa.JPAM
import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
@@ -50,8 +50,8 @@ public class OpenJPAMailboxManager exten
}
@Override
- protected MapperStoreMessageManager<Long>
createMessageManager(UidProvider<Long> uidProvider, MailboxEventDispatcher
dispatcher, Mailbox<Long> mailboxRow, MailboxSession session) throws
MailboxException {
- MapperStoreMessageManager<Long> result = new
OpenJPAMessageManager((JPAMailboxSessionMapperFactory)
mailboxSessionMapperFactory, uidProvider, dispatcher, mailboxRow, useStreaming);
+ protected StoreMessageManager<Long> createMessageManager(UidProvider<Long>
uidProvider, MailboxEventDispatcher dispatcher, Mailbox<Long> mailboxRow,
MailboxSession session) throws MailboxException {
+ StoreMessageManager<Long> result = new
OpenJPAMessageManager((JPAMailboxSessionMapperFactory)
mailboxSessionMapperFactory, uidProvider, dispatcher, mailboxRow, useStreaming);
return result;
}
}
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxManager.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxManager.java
Fri Dec 3 20:22:42 2010
@@ -26,8 +26,8 @@ import org.apache.james.mailbox.maildir.
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
@@ -47,7 +47,7 @@ public class MaildirMailboxManager exten
}
@Override
- protected MapperStoreMessageManager<Integer>
createMessageManager(UidProvider<Integer> uidProvider, MailboxEventDispatcher
dispatcher,
+ protected StoreMessageManager<Integer>
createMessageManager(UidProvider<Integer> uidProvider, MailboxEventDispatcher
dispatcher,
Mailbox<Integer> mailboxEntiy, MailboxSession session) throws
MailboxException {
return new
MaildirMessageManager((MailboxSessionMapperFactory<Integer>)mailboxSessionMapperFactory,
uidProvider, dispatcher, mailboxEntiy);
}
Modified:
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
(original)
+++
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
Fri Dec 3 20:22:42 2010
@@ -28,8 +28,8 @@ import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.maildir.mail.model.MaildirHeader;
import org.apache.james.mailbox.maildir.mail.model.MaildirMessage;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
import org.apache.james.mailbox.store.MessageMapperFactory;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -37,7 +37,7 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
-public class MaildirMessageManager extends MapperStoreMessageManager<Integer> {
+public class MaildirMessageManager extends StoreMessageManager<Integer> {
public MaildirMessageManager(MessageMapperFactory<Integer> mapperFactory,
UidProvider<Integer> uidProvider,
MailboxEventDispatcher dispatcher, Mailbox<Integer> mailboxEntiy)
Modified:
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
(original)
+++
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
Fri Dec 3 20:22:42 2010
@@ -26,8 +26,8 @@ import org.apache.james.mailbox.inmemory
import org.apache.james.mailbox.store.Authenticator;
import org.apache.james.mailbox.store.JVMMailboxPathLocker;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
@@ -39,7 +39,7 @@ public class InMemoryMailboxManager exte
}
@Override
- protected MapperStoreMessageManager<Long>
createMessageManager(UidProvider<Long> uidProvider, MailboxEventDispatcher
dispatcher, Mailbox<Long> mailboxRow, MailboxSession session) throws
MailboxException {
+ protected StoreMessageManager<Long> createMessageManager(UidProvider<Long>
uidProvider, MailboxEventDispatcher dispatcher, Mailbox<Long> mailboxRow,
MailboxSession session) throws MailboxException {
return new
InMemoryStoreMessageManager((MailboxSessionMapperFactory<Long>)mailboxSessionMapperFactory,
uidProvider, dispatcher, (InMemoryMailbox)mailboxRow);
}
Modified:
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java?rev=1041977&r1=1041976&r2=1041977&view=diff
==============================================================================
---
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
(original)
+++
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
Fri Dec 3 20:22:42 2010
@@ -31,14 +31,14 @@ import org.apache.james.mailbox.inmemory
import org.apache.james.mailbox.inmemory.mail.model.SimpleHeader;
import org.apache.james.mailbox.inmemory.mail.model.SimpleMailboxMembership;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
-import org.apache.james.mailbox.store.MapperStoreMessageManager;
+import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
-public class InMemoryStoreMessageManager extends
MapperStoreMessageManager<Long> {
+public class InMemoryStoreMessageManager extends StoreMessageManager<Long> {
public InMemoryStoreMessageManager(MailboxSessionMapperFactory<Long>
mapperFactory, UidProvider<Long> uidProvider,
MailboxEventDispatcher dispatcher, InMemoryMailbox mailbox) 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=1041977&r1=1041976&r2=1041977&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
Fri Dec 3 20:22:42 2010
@@ -25,12 +25,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
+import java.util.TreeSet;
import javax.mail.Flags;
import javax.mail.MessagingException;
@@ -40,6 +42,9 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageRange;
+import org.apache.james.mailbox.MessageResult;
+import org.apache.james.mailbox.SearchQuery;
+import org.apache.james.mailbox.MessageResult.FetchGroup;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -47,6 +52,7 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
+import org.apache.james.mailbox.store.transaction.Mapper;
import org.apache.james.mailbox.util.MailboxEventDispatcher;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
@@ -68,11 +74,14 @@ public abstract class StoreMessageManage
private final MailboxEventDispatcher dispatcher;
protected final UidProvider<Id> uidProvider;
+
+ protected MessageMapperFactory<Id> mapperFactory;
- public StoreMessageManager(final UidProvider<Id> uidProvider, final
MailboxEventDispatcher dispatcher, final Mailbox<Id> mailbox) throws
MailboxException {
+ public StoreMessageManager(final MessageMapperFactory<Id> mapperFactory,
final UidProvider<Id> uidProvider, final MailboxEventDispatcher dispatcher,
final Mailbox<Id> mailbox) throws MailboxException {
this.mailbox = mailbox;
this.dispatcher = dispatcher;
this.uidProvider = uidProvider;
+ this.mapperFactory = mapperFactory;
}
@@ -110,18 +119,6 @@ public abstract class StoreMessageManage
return permanentFlags;
}
- /**
- * Return a List which holds all uids of recent messages and optional
reset the recent flag on the messages for the uids
- *
- * @param reset
- * @param mailboxSession
- * @return list
- * @throws MailboxException
- */
- protected abstract List<Long> recent(final boolean reset, MailboxSession
mailboxSession) throws MailboxException;
-
-
- protected abstract Iterator<Long> deleteMarkedInMailbox(MessageRange
range, MailboxSession session) throws MailboxException;
/*
* (non-Javadoc)
* @see
org.apache.james.mailbox.Mailbox#expunge(org.apache.james.mailbox.MessageRange,
org.apache.james.mailbox.MailboxSession)
@@ -283,8 +280,6 @@ public abstract class StoreMessageManage
}
- protected abstract long appendMessageToStore(MailboxMembership<Id>
message, MailboxSession session) throws MailboxException;
-
/**
* Return the position in the given {...@link InputStream} at which the
Body of the
* Message starts
@@ -393,25 +388,7 @@ public abstract class StoreMessageManage
return new MailboxMetaData(recent, permanentFlags, uidValidity,
uidNext, messageCount, unseenCount, firstUnseen, isWriteable(mailboxSession));
}
- /**
- * Return the uid of the first unseen message or null of none is found
- *
- * @param mailbox
- * @param session
- * @return uid
- * @throws MailboxException
- */
- protected abstract Long findFirstUnseenMessageUid(MailboxSession session)
throws MailboxException;
-
- /**
- * Return the count of unseen messages
- *
- * @param mailbox
- * @param session
- * @return
- * @throws MailboxException
- */
- protected abstract long countUnseenMessagesInMailbox(MailboxSession
session) throws MailboxException;
+
/*
* (non-Javadoc)
@@ -431,20 +408,6 @@ public abstract class StoreMessageManage
return newFlagsByUid;
}
- /**
- * Update the Flags for the given {...@link MessageRange}
- *
- * @param flags
- * @param value
- * @param replace
- * @param set
- * @param mailboxSession
- * @return
- * @throws MailboxException
- */
- protected abstract Iterator<UpdatedFlag> updateFlags(final Flags flags,
final boolean value, final boolean replace,
- final MessageRange set, MailboxSession mailboxSession) throws
MailboxException;
-
/**
@@ -471,16 +434,217 @@ public abstract class StoreMessageManage
}
}
+ protected long appendMessageToStore(final MailboxMembership<Id> message,
MailboxSession session) throws MailboxException {
+ final MessageMapper<Id> mapper =
mapperFactory.getMessageMapper(session);
+ return mapperFactory.getMessageMapper(session).execute(new
Mapper.Transaction<Long>() {
+
+ public Long run() throws MailboxException {
+ return mapper.save(getMailboxEntity(), message);
+ }
+
+ });
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.mailbox.Mailbox#getMessageCount(org.apache.james.mailbox.MailboxSession)
+ */
+ public long getMessageCount(MailboxSession mailboxSession) throws
MailboxException {
+ return
mapperFactory.getMessageMapper(mailboxSession).countMessagesInMailbox(getMailboxEntity());
+ }
+
+
+
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.mailbox.Mailbox#getMessages(org.apache.james.mailbox.MessageRange,
org.apache.james.mailbox.MessageResult.FetchGroup,
org.apache.james.mailbox.MailboxSession)
+ */
+ public Iterator<MessageResult> getMessages(final MessageRange set,
FetchGroup fetchGroup,
+ MailboxSession mailboxSession) throws MailboxException {
+ final List<MailboxMembership<Id>> rows =
mapperFactory.getMessageMapper(mailboxSession).findInMailbox(getMailboxEntity(),
set);
+ return new ResultIterator<Id>(rows.iterator(), fetchGroup);
+ }
+
+ /**
+ * Return a List which holds all uids of recent messages and optional
reset the recent flag on the messages for the uids
+ *
+ * @param reset
+ * @param mailboxSession
+ * @return list
+ * @throws MailboxException
+ */
+ protected List<Long> recent(final boolean reset, MailboxSession
mailboxSession) throws MailboxException {
+ final MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(mailboxSession);
+
+ return messageMapper.execute(new Mapper.Transaction<List<Long>>() {
+
+ public List<Long> run() throws MailboxException {
+ final List<MailboxMembership<Id>> members =
messageMapper.findRecentMessagesInMailbox(getMailboxEntity(), -1);
+ final List<Long> results = new ArrayList<Long>();
+
+ for (MailboxMembership<Id> member:members) {
+ results.add(member.getUid());
+ if (reset) {
+ member.unsetRecent();
+
+ // only call save if we need to
+ messageMapper.save(getMailboxEntity(), member);
+ }
+ }
+ return results;
+ }
+
+ });
+
+ }
+
+
+ protected Iterator<Long> deleteMarkedInMailbox(final MessageRange range,
final MailboxSession session) throws MailboxException {
+ final MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
+
+ return messageMapper.execute(new Mapper.Transaction<Iterator<Long>>() {
+
+ public Iterator<Long> run() throws MailboxException {
+ final Collection<Long> uids = new TreeSet<Long>();
+
+ final List<MailboxMembership<Id>> members =
messageMapper.findMarkedForDeletionInMailbox(getMailboxEntity(), range);
+ for (MailboxMembership<Id> message:members) {
+ uids.add(message.getUid());
+ messageMapper.delete(getMailboxEntity(), message);
+
+ }
+ return uids.iterator();
+ }
+
+ });
+ }
+
+
/**
- * Copy the messages in the given {...@link MessageRange} to the given
{...@link StoreMessageManager} and return a {...@link Iterator} which
- * holds the uids of the copied messages
+ * Update the Flags for the given {...@link MessageRange}
*
- * @param range
- * @param toMailbox
+ * @param flags
+ * @param value
+ * @param replace
+ * @param set
+ * @param mailboxSession
+ * @return
+ * @throws MailboxException
+ */
+ public Iterator<UpdatedFlag> updateFlags(final Flags flags, final boolean
value, final boolean replace,
+ final MessageRange set, MailboxSession mailboxSession) throws
MailboxException {
+ final MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(mailboxSession);
+
+ return messageMapper.execute(new
Mapper.Transaction<Iterator<UpdatedFlag>>(){
+
+ public Iterator<UpdatedFlag> run() throws MailboxException {
+ final List<UpdatedFlag> updatedFlags = new
ArrayList<UpdatedFlag>();
+
+ final List<MailboxMembership<Id>> members =
messageMapper.findInMailbox(getMailboxEntity(), set);
+ for (final MailboxMembership<Id> 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();
+ messageMapper.save(getMailboxEntity(), member);
+ updatedFlags.add(new
UpdatedFlag(member.getUid(),originalFlags, newFlags));
+ }
+
+ return updatedFlags.iterator();
+ }
+
+ });
+
+ }
+
+
+
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.mailbox.Mailbox#search(org.apache.james.mailbox.SearchQuery,
org.apache.james.mailbox.MailboxSession)
+ */
+ public Iterator<Long> search(SearchQuery query, MailboxSession
mailboxSession) throws MailboxException {
+ return
mapperFactory.getMessageMapper(mailboxSession).searchMailbox(getMailboxEntity(),
query);
+ }
+
+
+ private Iterator<Long> copy(final List<MailboxMembership<Id>>
originalRows, final MailboxSession session) throws MailboxException {
+ try {
+ final List<Long> copiedRows = new ArrayList<Long>();
+ final MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
+
+ for (final MailboxMembership<Id> originalMessage:originalRows) {
+ copiedRows.add(messageMapper.execute(new
Mapper.Transaction<Long>() {
+
+ public Long run() throws MailboxException {
+
+ return messageMapper.copy(getMailboxEntity(),
originalMessage);
+
+ }
+
+ }));
+ }
+ return copiedRows.iterator();
+ } catch (MessagingException e) {
+ throw new MailboxException("Unable to parse message", e);
+ }
+ }
+
+ /*
+ * (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, StoreMessageManager<Id>
to, MailboxSession session) throws MailboxException {
+ try {
+ MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
+ final List<MailboxMembership<Id>> originalRows =
messageMapper.findInMailbox(getMailboxEntity(), set);
+ return to.copy(originalRows, session);
+
+ } catch (MessagingException e) {
+ throw new MailboxException("Unable to parse message", e);
+ }
+ }
+
+
+
+ /**
+ * Return the count of unseen messages
+ *
+ * @param mailbox
+ * @param session
+ * @return
+ * @throws MailboxException
+ */
+ protected long countUnseenMessagesInMailbox(MailboxSession session) throws
MailboxException {
+ MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
+ return messageMapper.countUnseenMessagesInMailbox(getMailboxEntity());
+ }
+
+
+
+ /**
+ * Return the uid of the first unseen message or null of none is found
+ *
+ * @param mailbox
* @param session
- * @return uids
+ * @return uid
* @throws MailboxException
*/
- protected abstract Iterator<Long> copy(MessageRange range,
StoreMessageManager<Id> toMailbox, MailboxSession session) throws
MailboxException;
+ protected Long findFirstUnseenMessageUid(MailboxSession session) throws
MailboxException{
+ MessageMapper<Id> messageMapper =
mapperFactory.getMessageMapper(session);
+ return messageMapper.findFirstUnseenMessageUid(getMailboxEntity());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]