You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/03/09 15:24:43 UTC
svn commit: r920893 - in /james/imap/trunk:
jcr/src/main/java/org/apache/james/imap/jcr/
jcr/src/main/java/org/apache/james/imap/jcr/mail/
jcr/src/main/java/org/apache/james/imap/jcr/mail/model/ jcr/target/
jcr/target/classes/ jcr/target/classes/org/ j...
Author: norman
Date: Tue Mar 9 14:24:42 2010
New Revision: 920893
URL: http://svn.apache.org/viewvc?rev=920893&view=rev
Log:
some more code for JCR (IMAP-93)
javadocs
Added:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
james/imap/trunk/jcr/target/
james/imap/trunk/jcr/target/classes/
james/imap/trunk/jcr/target/classes/org/
james/imap/trunk/jcr/target/classes/org/apache/
james/imap/trunk/jcr/target/classes/org/apache/james/
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/AbstractMailboxMembership.java
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailboxMembership.java
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxManager.java
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/SimpleMailboxMembership.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ByteContent.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/CountingInputStream.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/FullContent.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/MailboxMembershipComparator.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ResultUtils.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/MailboxMembership.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/model/Subscription.java
Added: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java?rev=920893&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java (added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailbox.java Tue Mar 9 14:24:42 2010
@@ -0,0 +1,61 @@
+package org.apache.james.imap.jcr;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.jcr.Session;
+import javax.mail.Flags;
+
+import org.apache.james.imap.jcr.mail.model.JCRHeader;
+import org.apache.james.imap.mailbox.MailboxException;
+import org.apache.james.imap.store.StoreMailbox;
+import org.apache.james.imap.store.mail.MessageMapper;
+import org.apache.james.imap.store.mail.model.Header;
+import org.apache.james.imap.store.mail.model.Mailbox;
+import org.apache.james.imap.store.mail.model.MailboxMembership;
+import org.apache.james.imap.store.mail.model.PropertyBuilder;
+
+public class JCRMailbox extends StoreMailbox{
+
+ private final Session session;
+
+ public JCRMailbox(Mailbox mailbox, Session session) {
+ super(mailbox);
+ this.session = session;
+ }
+
+ @Override
+ protected MailboxMembership copyMessage(MailboxMembership originalMessage, long uid) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected Header createHeader(int lineNumber, String name, String value) {
+ return new JCRHeader(name, value, lineNumber);
+ }
+
+ @Override
+ protected MailboxMembership createMessage(Date internalDate, long uid, int size, int bodyStartOctet, byte[] document, Flags flags, List<Header> headers, PropertyBuilder propertyBuilder) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected MessageMapper createMessageMapper() {
+
+ return null;
+ }
+
+ @Override
+ protected Mailbox getMailboxRow() throws MailboxException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ protected Mailbox reserveNextUid() throws MailboxException {
+ return null;
+ }
+
+}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMailboxManager.java Tue Mar 9 14:24:42 2010
@@ -20,6 +20,7 @@ package org.apache.james.imap.jcr;
import javax.jcr.Session;
+import org.apache.james.imap.jcr.mail.JCRMailboxMapper;
import org.apache.james.imap.mailbox.MailboxException;
import org.apache.james.imap.store.Authenticator;
import org.apache.james.imap.store.StoreMailbox;
@@ -51,8 +52,7 @@ public class JCRMailboxManager extends S
@Override
protected MailboxMapper createMailboxMapper() {
- // TODO Auto-generated method stub
- return null;
+ return new JCRMailboxMapper(session);
}
@Override
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java Tue Mar 9 14:24:42 2010
@@ -18,15 +18,21 @@
****************************************************************/
package org.apache.james.imap.jcr.mail;
+import java.util.ArrayList;
import java.util.List;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryManager;
import org.apache.jackrabbit.util.Text;
import org.apache.james.imap.api.display.HumanReadableText;
import org.apache.james.imap.jcr.JCRImapConstants;
+import org.apache.james.imap.jcr.mail.model.JCRMailbox;
import org.apache.james.imap.mailbox.MailboxNotFoundException;
import org.apache.james.imap.mailbox.StorageException;
import org.apache.james.imap.store.mail.MailboxMapper;
@@ -50,7 +56,10 @@ public class JCRMailboxMapper extends No
/*
* (non-Javadoc)
- * @see org.apache.james.imap.store.mail.MailboxMapper#countMailboxesWithName(java.lang.String)
+ *
+ * @see
+ * org.apache.james.imap.store.mail.MailboxMapper#countMailboxesWithName
+ * (java.lang.String)
*/
public long countMailboxesWithName(String name) throws StorageException {
String nodeName = Text.unescapeIllegalJcrChars(name);
@@ -118,24 +127,91 @@ public class JCRMailboxMapper extends No
}
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.james.imap.store.mail.MailboxMapper#findMailboxById(long)
+ */
public Mailbox findMailboxById(long mailboxId) throws StorageException, MailboxNotFoundException {
- // TODO Auto-generated method stub
- return null;
+ try {
+ QueryManager manager = session.getWorkspace().getQueryManager();
+ String queryString = session.getRootNode().getPath() + JCRImapConstants.NODE_DELIMITER + PATH + "//element(" + mailboxId + ")," + JCRMailbox.ID_PROPERTY + ")";
+ Query query = manager.createQuery(queryString, Query.XPATH);
+
+ NodeIterator nodes = query.execute().getNodes();
+ if (nodes.hasNext() == false) {
+ throw new MailboxNotFoundException(mailboxId);
+ } else {
+ return JCRMailbox.from(nodes.nextNode());
+ }
+ } catch (PathNotFoundException e) {
+ throw new MailboxNotFoundException(mailboxId);
+ } catch (RepositoryException e) {
+ throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
+ }
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.imap.store.mail.MailboxMapper#findMailboxByName(java
+ * .lang.String)
+ */
public Mailbox findMailboxByName(String name) throws StorageException, MailboxNotFoundException {
- // TODO Auto-generated method stub
- return null;
+ try {
+ Node node = session.getRootNode().getNode(PATH + JCRImapConstants.NODE_DELIMITER + name);
+ return JCRMailbox.from(node);
+ } catch (PathNotFoundException e) {
+ throw new MailboxNotFoundException(name);
+ } catch (RepositoryException e) {
+ throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
+ }
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.imap.store.mail.MailboxMapper#findMailboxWithNameLike
+ * (java.lang.String)
+ */
public List<Mailbox> findMailboxWithNameLike(String name) throws StorageException {
- // TODO Auto-generated method stub
- return null;
+ List<Mailbox> mailboxList = new ArrayList<Mailbox>();
+ try {
+ NodeIterator it = session.getRootNode().getNodes(PATH + JCRImapConstants.NODE_DELIMITER + WILDCARD + name + WILDCARD);
+ while (it.hasNext()) {
+ mailboxList.add(JCRMailbox.from(it.nextNode()));
+ }
+ } catch (PathNotFoundException e) {
+ // nothing todo
+ } catch (RepositoryException e) {
+ throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
+ }
+ return mailboxList;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.apache.james.imap.store.mail.MailboxMapper#save(org.apache.james.
+ * imap.store.mail.model.Mailbox)
+ */
public void save(Mailbox mailbox) throws StorageException {
- // TODO Auto-generated method stub
-
+ String nodePath = PATH + JCRImapConstants.NODE_DELIMITER + Text.unescapeIllegalJcrChars(mailbox.getName());
+ try {
+ Node node;
+ if (session.getRootNode().hasNode(nodePath)) {
+ node = session.getRootNode().getNode(PATH);
+ } else {
+ node = session.getRootNode().addNode(PATH);
+ }
+ JCRMailbox.copy(node, mailbox);
+ session.save();
+ } catch (RepositoryException e) {
+ throw new StorageException(HumanReadableText.SAVE_FAILED, e);
+ }
}
}
Added: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=920893&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java (added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java Tue Mar 9 14:24:42 2010
@@ -0,0 +1,67 @@
+package org.apache.james.imap.jcr.mail;
+
+import java.util.List;
+
+import org.apache.james.imap.mailbox.MessageRange;
+import org.apache.james.imap.mailbox.SearchQuery;
+import org.apache.james.imap.mailbox.StorageException;
+import org.apache.james.imap.store.mail.MessageMapper;
+import org.apache.james.imap.store.mail.model.MailboxMembership;
+import org.apache.james.imap.store.transaction.NonTransactionalMapper;
+
+public class JCRMessageMapper extends NonTransactionalMapper implements MessageMapper{
+
+ @Override
+ public long countMessagesInMailbox() throws StorageException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long countUnseenMessagesInMailbox() throws StorageException {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public void delete(MailboxMembership message) throws StorageException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List<MailboxMembership> findInMailbox(MessageRange set) throws StorageException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<MailboxMembership> findMarkedForDeletionInMailbox(MessageRange set) throws StorageException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<MailboxMembership> findRecentMessagesInMailbox() throws StorageException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<MailboxMembership> findUnseenMessagesInMailboxOrderByUid() throws StorageException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void save(MailboxMembership message) throws StorageException {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List<MailboxMembership> searchMailbox(SearchQuery query) throws StorageException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
Added: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java?rev=920893&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java (added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMailboxMembership.java Tue Mar 9 14:24:42 2010
@@ -0,0 +1,90 @@
+package org.apache.james.imap.jcr.mail.model;
+
+import java.util.Date;
+
+import javax.mail.Flags;
+
+import org.apache.james.imap.store.mail.model.AbstractMailboxMembership;
+import org.apache.james.imap.store.mail.model.Document;
+
+public class JCRMailboxMembership extends AbstractMailboxMembership{
+
+ @Override
+ public Document getDocument() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getInternalDate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public long getMailboxId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public int getSize() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public long getUid() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public boolean isAnswered() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isDeleted() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isDraft() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isFlagged() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isRecent() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean isSeen() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public void setFlags(Flags flags) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void unsetRecent() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
Added: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java?rev=920893&view=auto
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java (added)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRMessage.java Tue Mar 9 14:24:42 2010
@@ -0,0 +1,94 @@
+package org.apache.james.imap.jcr.mail.model;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.james.imap.store.mail.model.Document;
+import org.apache.james.imap.store.mail.model.Header;
+import org.apache.james.imap.store.mail.model.Property;
+import org.apache.james.imap.store.mail.model.PropertyBuilder;
+
+
+public class JCRMessage implements Document{
+
+
+ private final byte[] content;
+ private final int contentOctets;
+ private final int bodyStartOctet;
+ private final ArrayList<JCRHeader> headers;
+ private final Long textualLineCount;
+ private final String mediaType;
+ private final String subType;
+ private final ArrayList<JCRProperty> properties;
+
+ private JCRMessage(byte[] content, final int bodyStartOctet, final List<JCRHeader> headers, final PropertyBuilder propertyBuilder) {
+ super();
+ this.content = content;
+ this.contentOctets = content.length;
+ this.bodyStartOctet = bodyStartOctet;
+ this.headers = new ArrayList<JCRHeader>(headers);
+ textualLineCount = propertyBuilder.getTextualLineCount();
+ this.mediaType = propertyBuilder.getMediaType();
+ this.subType = propertyBuilder.getSubType();
+ final List<Property> properties = propertyBuilder.toProperties();
+ this.properties = new ArrayList<JCRProperty>(properties.size());
+ int order = 0;
+ for (final Property property:properties) {
+ this.properties.add(new JCRProperty(property.getNamespace(), property.getLocalName(), property.getValue(), order++));
+ }
+
+ }
+
+ @Override
+ public ByteBuffer getBodyContent() {
+ return null;
+ }
+
+ @Override
+ public long getBodyOctets() {
+ return contentOctets;
+ }
+
+ @Override
+ public ByteBuffer getFullContent() {
+ return null;
+ }
+
+ @Override
+ public long getFullContentOctets() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ @Override
+ public List<Header> getHeaders() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getMediaType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public List<Property> getProperties() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getSubType() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Long getTextualLineCount() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/model/JCRProperty.java Tue Mar 9 14:24:42 2010
@@ -98,6 +98,7 @@ public class JCRProperty extends Abstrac
int order = new Long(node.getProperty(ORDER_PROPERTY).getLong()).intValue();
String localname = node.getProperty(LOCALNAME_PROPERTY).getString();
String value = node.getProperty(VALUE_PROPERTY).getString();
+
return new JCRProperty(namespace, localname, value, order);
}
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMailbox.java Tue Mar 9 14:24:42 2010
@@ -38,6 +38,11 @@ import org.apache.james.imap.store.mail.
import org.apache.james.imap.store.mail.model.MailboxMembership;
import org.apache.james.imap.store.mail.model.PropertyBuilder;
+/**
+ * Abstract base class which should be used from JPA implementations
+ *
+ *
+ */
public abstract class JPAMailbox extends StoreMailbox {
protected final EntityManagerFactory entityManagerFactory;
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailboxMembership.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailboxMembership.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailboxMembership.java Tue Mar 9 14:24:42 2010
@@ -33,8 +33,8 @@ import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
+import org.apache.james.imap.store.mail.model.AbstractMailboxMembership;
import org.apache.james.imap.store.mail.model.Document;
-import org.apache.james.imap.store.mail.model.MailboxMembership;
import org.apache.james.imap.store.mail.model.PropertyBuilder;
@Entity(name="Membership")
@@ -65,7 +65,7 @@ import org.apache.james.imap.store.mail.
@NamedQuery(name="countMessagesInMailbox",
query="SELECT COUNT(membership) FROM Membership membership WHERE membership.mailboxId = :idParam")
})
-public class JPAMailboxMembership implements MailboxMembership {
+public class JPAMailboxMembership extends AbstractMailboxMembership {
private static final String TOSTRING_SEPARATOR = " ";
@@ -274,32 +274,7 @@ public class JPAMailboxMembership implem
seen = flags.contains(Flags.Flag.SEEN);
}
- /**
- * @see org.apache.james.imap.store.mail.model.MailboxMembership#createFlags()
- */
- public Flags createFlags() {
- final Flags flags = new Flags();
-
- if (isAnswered()) {
- flags.add(Flags.Flag.ANSWERED);
- }
- if (isDeleted()) {
- flags.add(Flags.Flag.DELETED);
- }
- if (isDraft()) {
- flags.add(Flags.Flag.DRAFT);
- }
- if (isFlagged()) {
- flags.add(Flags.Flag.FLAGGED);
- }
- if (isRecent()) {
- flags.add(Flags.Flag.RECENT);
- }
- if (isSeen()) {
- flags.add(Flags.Flag.SEEN);
- }
- return flags;
- }
+
@Override
public int hashCode() {
Modified: james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java (original)
+++ james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java Tue Mar 9 14:24:42 2010
@@ -28,12 +28,28 @@ import javax.mail.Flags;
import org.apache.james.imap.mailbox.MessageResult.FetchGroup;
+/**
+ * Interface which represent a Mailbox
+ *
+ */
public interface Mailbox {
public static final long ANONYMOUS_SESSION = 0;
+ /**
+ * Return the count
+ *
+ * @param mailboxSession
+ * @return count
+ * @throws MailboxException
+ */
int getMessageCount(MailboxSession mailboxSession) throws MailboxException;
+ /**
+ * Return if the Mailbox is writable
+ *
+ * @return writable
+ */
boolean isWriteable();
/**
Modified: james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxManager.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxManager.java (original)
+++ james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/MailboxManager.java Tue Mar 9 14:24:42 2010
@@ -94,6 +94,13 @@ public interface MailboxManager {
*/
void createMailbox(String mailboxName, MailboxSession mailboxSession) throws MailboxException;
+ /**
+ * Delete the mailbox with the name
+ *
+ * @param mailboxName
+ * @param session
+ * @throws MailboxException
+ */
void deleteMailbox(String mailboxName, MailboxSession session) throws MailboxException;
/**
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/SimpleMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/SimpleMailboxMembership.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/SimpleMailboxMembership.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/SimpleMailboxMembership.java Tue Mar 9 14:24:42 2010
@@ -25,13 +25,14 @@ import java.util.List;
import javax.mail.Flags;
+import org.apache.james.imap.store.mail.model.AbstractMailboxMembership;
import org.apache.james.imap.store.mail.model.Document;
import org.apache.james.imap.store.mail.model.Header;
import org.apache.james.imap.store.mail.model.MailboxMembership;
import org.apache.james.imap.store.mail.model.Property;
import org.apache.james.imap.store.mail.model.PropertyBuilder;
-public class SimpleMailboxMembership implements MailboxMembership, Document, Comparable<MailboxMembership> {
+public class SimpleMailboxMembership extends AbstractMailboxMembership implements Document, Comparable<MailboxMembership> {
private final long uid;
private final long mailboxId;
@@ -88,29 +89,6 @@ public class SimpleMailboxMembership imp
}
- public synchronized Flags createFlags() {
- final Flags flags = new Flags();
- if (answered) {
- flags.add(Flags.Flag.ANSWERED);
- }
- if (deleted) {
- flags.add(Flags.Flag.DELETED);
- }
- if (draft) {
- flags.add(Flags.Flag.DRAFT);
- }
- if (flagged) {
- flags.add(Flags.Flag.FLAGGED);
- }
- if (recent) {
- flags.add(Flags.Flag.RECENT);
- }
- if (seen) {
- flags.add(Flags.Flag.SEEN);
- }
- return flags;
- }
-
public Document getDocument() {
return this;
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ByteContent.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ByteContent.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ByteContent.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ByteContent.java Tue Mar 9 14:24:42 2010
@@ -39,10 +39,18 @@ public final class ByteContent implement
size = contents.limit();
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Content#size()
+ */
public long size() {
return size;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Content#writeTo(java.nio.channels.WritableByteChannel)
+ */
public void writeTo(WritableByteChannel channel) throws IOException {
contents.rewind();
while (channel.write(contents) > 0) {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/CountingInputStream.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/CountingInputStream.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/CountingInputStream.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/CountingInputStream.java Tue Mar 9 14:24:42 2010
@@ -37,6 +37,10 @@ final class CountingInputStream extends
this.in = in;
}
+ /*
+ * (non-Javadoc)
+ * @see java.io.InputStream#read()
+ */
public int read() throws IOException {
int next = in.read();
if (next > 0) {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/FullContent.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/FullContent.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/FullContent.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/FullContent.java Tue Mar 9 14:24:42 2010
@@ -31,6 +31,10 @@ import java.util.List;
import org.apache.james.imap.mailbox.Content;
import org.apache.james.imap.mailbox.MessageResult;
+/**
+ * Content which holds the full content, including {@link Header} objets
+ *
+ */
public final class FullContent implements Content {
private final ByteBuffer contents;
@@ -57,10 +61,18 @@ public final class FullContent implement
return result;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Content#size()
+ */
public long size() {
return size;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Content#writeTo(java.nio.channels.WritableByteChannel)
+ */
public void writeTo(WritableByteChannel channel) throws IOException {
ByteBuffer newLine = ByteBuffer.wrap(ResultUtils.BYTES_NEW_LINE);
for (final Iterator<MessageResult.Header> it = headers.iterator(); it.hasNext();) {
@@ -77,6 +89,13 @@ public final class FullContent implement
writeAll(channel, contents);
}
+ /**
+ * Write all
+ *
+ * @param channel
+ * @param buffer
+ * @throws IOException
+ */
private void writeAll(WritableByteChannel channel, ByteBuffer buffer)
throws IOException {
while (channel.write(buffer) > 0) {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/MailboxMembershipComparator.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/MailboxMembershipComparator.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/MailboxMembershipComparator.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/MailboxMembershipComparator.java Tue Mar 9 14:24:42 2010
@@ -32,6 +32,10 @@ public final class MailboxMembershipComp
private MailboxMembershipComparator() {}
+ /*
+ * (non-Javadoc)
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ */
public int compare(MailboxMembership o1, MailboxMembership o2) {
final long uid = o1.getUid();
final long otherUid = o2.getUid();
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ResultUtils.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ResultUtils.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ResultUtils.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/ResultUtils.java Tue Mar 9 14:24:42 2010
@@ -43,6 +43,9 @@ import org.apache.james.imap.store.mail.
import org.apache.james.imap.store.mail.model.MailboxMembership;
import org.apache.james.mime4j.MimeException;
+/**
+ *
+ */
public class ResultUtils {
public static final byte[] BYTES_NEW_LINE = { 0x0D, 0x0A };
@@ -73,18 +76,38 @@ public class ResultUtils {
return headers;
}
+ /**
+ * Return the {@link Content} which holds only the Body for the given {@link MailboxMembership}
+ *
+ * @param membership
+ * @return bodyContent
+ */
public static Content createBodyContent(MailboxMembership membership) {
final ByteBuffer bytes = membership.getDocument().getBodyContent();
final ByteContent result = new ByteContent(bytes);
return result;
}
+ /**
+ * Return the {@link Content} which holds the full data for the given {@link MailboxMembership}
+ *
+ * @param membership
+ * @return content
+ */
public static Content createFullContent(final MailboxMembership membership) {
final ByteBuffer bytes = membership.getDocument().getFullContent();
final ByteContent results = new ByteContent(bytes);
return results;
}
+ /**
+ * Return the {@link MessageResult} for the given {@link MailboxMembership} and {@link FetchGroup}
+ *
+ * @param message
+ * @param fetchGroup
+ * @return result
+ * @throws MailboxException
+ */
public static MessageResult loadMessageResult(final MailboxMembership message, final FetchGroup fetchGroup)
throws MailboxException {
@@ -203,11 +226,23 @@ public class ResultUtils {
return result;
}
+ /**
+ * Return an {@link InputStream} which holds the content of the {@link org.apache.james.imap.store.mail.model.Document} which is linked in the {@link MailboxMembership}
+ *
+ * @param membership
+ * @return stream
+ */
public static InputStream toInput(final MailboxMembership membership) {
final org.apache.james.imap.store.mail.model.Document document = membership.getDocument();
return toInput(document);
}
+ /**
+ * Return an {@link InputStream} which holds the content of the given {@link org.apache.james.imap.store.mail.model.Document}
+ *
+ * @param document
+ * @return stream
+ */
public static InputStream toInput(final org.apache.james.imap.store.mail.model.Document document) {
final List<Header> headers = getSortedHeaders(document);
final StringBuffer headersToString = new StringBuffer(headers.size() * 50);
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/SimpleMailboxSession.java Tue Mar 9 14:24:42 2010
@@ -62,18 +62,34 @@ public class SimpleMailboxSession implem
this.localePreferences = localePreferences;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxSession#getLog()
+ */
public Log getLog() {
return log;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxSession#close()
+ */
public void close() {
open = false;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxSession#getSessionId()
+ */
public long getSessionId() {
return sessionId;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.MailboxSession#isOpen()
+ */
public boolean isOpen() {
return open;
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailbox.java Tue Mar 9 14:24:42 2010
@@ -74,21 +74,47 @@ public abstract class StoreMailbox imple
this.tracker = new UidChangeTracker(mailbox.getLastUid());
}
+ /**
+ * Copy the given {@link MailboxMembership} to a new instance with the given uid
+ *
+ * @param originalMessage
+ * @param uid
+ * @return membershipCopy
+ */
protected abstract MailboxMembership copyMessage(MailboxMembership originalMessage, long uid);
+ /**
+ * Create a new {@link MessageMapper} to use
+ *
+ * @return mapper
+ */
protected abstract MessageMapper createMessageMapper();
+
protected abstract Mailbox getMailboxRow() throws MailboxException;
+ /**
+ * Return the Id of the wrapped {@link Mailbox}
+ *
+ * @return id
+ */
public long getMailboxId() {
return mailboxId;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#getMessageCount(org.apache.james.imap.mailbox.MailboxSession)
+ */
public int getMessageCount(MailboxSession mailboxSession) throws MailboxException {
final MessageMapper messageMapper = createMessageMapper();
return (int) messageMapper.countMessagesInMailbox();
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#appendMessage(byte[], java.util.Date, org.apache.james.imap.mailbox.MailboxSession, boolean, javax.mail.Flags)
+ */
public long appendMessage(byte[] messageBytes, Date internalDate,
MailboxSession mailboxSession, boolean isRecent, Flags flagsToBeSet)
throws MailboxException {
@@ -236,13 +262,39 @@ public abstract class StoreMailbox imple
return bodyStartOctet;
}
+ /**
+ * Create a new {@link MailboxMembership} for the given data
+ *
+ * @param internalDate
+ * @param uid
+ * @param size
+ * @param bodyStartOctet
+ * @param document
+ * @param flags
+ * @param headers
+ * @param propertyBuilder
+ * @return membership
+ */
protected abstract MailboxMembership createMessage(Date internalDate, final long uid, final int size, int bodyStartOctet,
final byte[] document, final Flags flags, final List<Header> headers, PropertyBuilder propertyBuilder);
+ /**
+ * Create a new {@link Header} for the given data
+ *
+ * @param lineNumber
+ * @param name
+ * @param value
+ * @return header
+ */
protected abstract Header createHeader(int lineNumber, String name, String value);
+
protected abstract Mailbox reserveNextUid() throws MailboxException;
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#getMessages(org.apache.james.imap.mailbox.MessageRange, org.apache.james.imap.mailbox.MessageResult.FetchGroup, org.apache.james.imap.mailbox.MailboxSession)
+ */
public Iterator<MessageResult> getMessages(final MessageRange set, FetchGroup fetchGroup,
MailboxSession mailboxSession) throws MailboxException {
UidRange range = uidRangeForMessageSet(set);
@@ -275,12 +327,7 @@ public abstract class StoreMailbox imple
}
}
- public MessageResult fillMessageResult(MailboxMembership message, FetchGroup result) throws MessagingException,
- MailboxException {
- return ResultUtils.loadMessageResult(message, result);
- }
-
- public synchronized Flags getPermanentFlags() {
+ public Flags getPermanentFlags() {
Flags permanentFlags = new Flags();
permanentFlags.add(Flags.Flag.ANSWERED);
permanentFlags.add(Flags.Flag.DELETED);
@@ -337,6 +384,10 @@ public abstract class StoreMailbox imple
return count;
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#expunge(org.apache.james.imap.mailbox.MessageRange, org.apache.james.imap.mailbox.MailboxSession)
+ */
public Iterator<Long> expunge(MessageRange set, MailboxSession mailboxSession) throws MailboxException {
return doExpunge(set);
}
@@ -362,6 +413,10 @@ public abstract class StoreMailbox imple
return uids.iterator();
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#setFlags(javax.mail.Flags, boolean, boolean, org.apache.james.imap.mailbox.MessageRange, org.apache.james.imap.mailbox.MailboxSession)
+ */
public Map<Long, Flags> setFlags(Flags flags, boolean value, boolean replace,
MessageRange set, MailboxSession mailboxSession) throws MailboxException {
return doSetFlags(flags, value, replace, set, mailboxSession);
@@ -419,6 +474,10 @@ public abstract class StoreMailbox imple
}
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#search(org.apache.james.imap.mailbox.SearchQuery, org.apache.james.imap.mailbox.MailboxSession)
+ */
public Iterator<Long> search(SearchQuery query, MailboxSession mailboxSession) throws MailboxException {
final MessageMapper messageMapper = createMessageMapper();
final List<MailboxMembership> members = messageMapper.searchMailbox(query);
@@ -443,6 +502,10 @@ public abstract class StoreMailbox imple
return uids.iterator();
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.imap.mailbox.Mailbox#isWriteable()
+ */
public boolean isWriteable() {
return true;
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java Tue Mar 9 14:24:42 2010
@@ -25,31 +25,83 @@ import org.apache.james.imap.mailbox.Sto
import org.apache.james.imap.store.mail.model.Mailbox;
import org.apache.james.imap.store.transaction.TransactionalMapper;
+/**
+ * Mapper for {@link Mailbox}
+ *
+ */
public interface MailboxMapper extends TransactionalMapper{
+ /**
+ * Save the give {@link Mailbox} to the underlying storage
+ *
+ * @param mailbox
+ * @throws StorageException
+ */
public abstract void save(Mailbox mailbox) throws StorageException;
+ /**
+ * Return the {@link Mailbox} for the given name
+ *
+ * @param name
+ * @return mailbox
+ * @throws StorageException
+ * @throws MailboxNotFoundException
+ */
public abstract Mailbox findMailboxByName(String name)
throws StorageException, MailboxNotFoundException;
/**
- * Does the given mailbox have children?
+ * Return if the given {@link Mailbox} has children
+ *
* @param mailboxName not null
* @return true when the mailbox has children, false otherwise
* @throws StorageException
*/
public abstract boolean existsMailboxStartingWith(String mailboxName) throws StorageException;
+ /**
+ * Delete the given {@link Mailbox} from the underlying storage
+ *
+ * @param mailbox
+ * @throws StorageException
+ */
public abstract void delete(Mailbox mailbox) throws StorageException;
+ /**
+ * Return a List of {@link Mailbox} which name is like the given name
+ *
+ * @param name
+ * @return mailboxList
+ * @throws StorageException
+ */
public abstract List<Mailbox> findMailboxWithNameLike(String name)
throws StorageException;
+ /**
+ * Delete all {@link Mailbox} objects from the underlying storage
+ *
+ * @throws StorageException
+ */
public abstract void deleteAll() throws StorageException;
+ /**
+ * Return the count of {@link Mailbox} objects with the given name
+ *
+ * @param name
+ * @return count
+ * @throws StorageException
+ */
public abstract long countMailboxesWithName(String name)
throws StorageException;
+ /**
+ * Return the {@link Mailbox} for the given id
+ *
+ * @param mailboxId
+ * @return mailbox
+ * @throws StorageException
+ * @throws MailboxNotFoundException
+ */
public abstract Mailbox findMailboxById(long mailboxId)
throws StorageException, MailboxNotFoundException;
}
\ No newline at end of file
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java Tue Mar 9 14:24:42 2010
@@ -20,38 +20,95 @@ package org.apache.james.imap.store.mail
import java.util.List;
+import org.apache.james.imap.mailbox.Mailbox;
import org.apache.james.imap.mailbox.MessageRange;
import org.apache.james.imap.mailbox.SearchQuery;
import org.apache.james.imap.mailbox.StorageException;
+import org.apache.james.imap.store.mail.model.Document;
import org.apache.james.imap.store.mail.model.MailboxMembership;
import org.apache.james.imap.store.transaction.TransactionalMapper;
/**
- * Maps messages in a mailbox.
+ * Maps {@link Document} in a {@link Mailbox}.
*/
public interface MessageMapper extends TransactionalMapper {
+ /**
+ * Return a List of {@link MailboxMembership} which represent the given {@link MessageRange}
+ * @param set
+ * @return list
+ * @throws StorageException
+ */
public abstract List<MailboxMembership> findInMailbox(MessageRange set)
throws StorageException;
+ /**
+ * Return a List of {@link MailboxMembership} for the given {@link MessageRange} which are marked for deletion
+ * @param set
+ * @return list
+ * @throws StorageException
+ */
public abstract List<MailboxMembership> findMarkedForDeletionInMailbox(
final MessageRange set)
throws StorageException;
+ /**
+ * Return the count of messages in the mailbox
+ *
+ * @return count
+ * @throws StorageException
+ */
public abstract long countMessagesInMailbox()
throws StorageException;
+ /**
+ * Return the count of unseen messages in the mailbox
+ *
+ * @return unseenCount
+ * @throws StorageException
+ */
public abstract long countUnseenMessagesInMailbox()
throws StorageException;
+ /**
+ * Return a List of {@link MailboxMembership} which matched the {@link SearchQuery}
+ * @param query
+ * @return
+ * @throws StorageException
+ */
public abstract List<MailboxMembership> searchMailbox(SearchQuery query) throws StorageException;
+ /**
+ * Delete the given {@link MailboxMembership}
+ *
+ * @param message
+ * @throws StorageException
+ */
public abstract void delete(MailboxMembership message) throws StorageException;
+ /**
+ * Return a List of {@link MailboxMembership} which are unseen. The list is ordered by uid
+ *
+ * @return list
+ * @throws StorageException
+ */
public abstract List<MailboxMembership> findUnseenMessagesInMailboxOrderByUid() throws StorageException;
+ /**
+ * Return a List of {@link MailboxMembership} which are recent
+ *
+ * @return recentList
+ * @throws StorageException
+ */
public abstract List<MailboxMembership> findRecentMessagesInMailbox() throws StorageException;
+
+ /**
+ * Save the given {@link MailboxMembership} to the underlying storage
+ *
+ * @param message
+ * @throws StorageException
+ */
public abstract void save(MailboxMembership message) throws StorageException;
}
\ No newline at end of file
Added: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/AbstractMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/AbstractMailboxMembership.java?rev=920893&view=auto
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/AbstractMailboxMembership.java (added)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/AbstractMailboxMembership.java Tue Mar 9 14:24:42 2010
@@ -0,0 +1,57 @@
+/****************************************************************
+ * 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.imap.store.mail.model;
+
+import javax.mail.Flags;
+
+/**
+ * Abstract base class for MailboxMembership implementations
+ *
+ *
+ */
+public abstract class AbstractMailboxMembership implements MailboxMembership{
+
+
+ /**
+ * @see org.apache.james.imap.store.mail.model.MailboxMembership#createFlags()
+ */
+ public Flags createFlags() {
+ final Flags flags = new Flags();
+
+ if (isAnswered()) {
+ flags.add(Flags.Flag.ANSWERED);
+ }
+ if (isDeleted()) {
+ flags.add(Flags.Flag.DELETED);
+ }
+ if (isDraft()) {
+ flags.add(Flags.Flag.DRAFT);
+ }
+ if (isFlagged()) {
+ flags.add(Flags.Flag.FLAGGED);
+ }
+ if (isRecent()) {
+ flags.add(Flags.Flag.RECENT);
+ }
+ if (isSeen()) {
+ flags.add(Flags.Flag.SEEN);
+ }
+ return flags;
+ }
+}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/MailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/MailboxMembership.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/MailboxMembership.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/model/MailboxMembership.java Tue Mar 9 14:24:42 2010
@@ -29,24 +29,74 @@ public interface MailboxMembership {
public abstract Date getInternalDate();
+ /**
+ * Return the mailbox id of the linked mailbox
+ *
+ * @return mailboxId
+ */
public abstract long getMailboxId();
+ /**
+ * Return the size
+ *
+ * @return size
+ */
public abstract int getSize();
+ /**
+ * Return the uid
+ *
+ * @return uid
+ */
public abstract long getUid();
+ /**
+ * Return the linked Document
+ *
+ * @return document
+ */
public abstract Document getDocument();
+ /**
+ * Return if it was marked as answered
+ *
+ * @return answered
+ */
public abstract boolean isAnswered();
+ /**
+ * Return if it was mark as deleted
+ *
+ * @return deleted
+ */
public abstract boolean isDeleted();
+ /**
+ * Return if it was mark as draft
+ *
+ * @return draft
+ */
public abstract boolean isDraft();
+ /**
+ * Return if it was flagged
+ *
+ * @return flagged
+ */
public abstract boolean isFlagged();
+ /**
+ * Return if it was marked as recent
+ *
+ * @return recent
+ */
public abstract boolean isRecent();
+ /**
+ * Return if it was marked as seen
+ *
+ * @return seen
+ */
public abstract boolean isSeen();
/**
@@ -55,11 +105,17 @@ public interface MailboxMembership {
*/
public abstract void unsetRecent();
+ /**
+ * Set the Flags
+ *
+ * @param flags
+ */
public abstract void setFlags(Flags flags);
/**
* Creates a new flags instance populated
* with the current flag data.
+ *
* @return new instance, not null
*/
public abstract Flags createFlags();
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/transaction/TransactionalMapper.java Tue Mar 9 14:24:42 2010
@@ -21,6 +21,11 @@ package org.apache.james.imap.store.tran
import org.apache.james.imap.mailbox.MailboxException;
+/**
+ * Mapper which execute units of work in a {@link Transaction}
+ * @author norman
+ *
+ */
public interface TransactionalMapper {
/**
@@ -32,13 +37,13 @@ public interface TransactionalMapper {
public void execute(Transaction transaction) throws MailboxException;
/**
- * Transaction
+ * Unit of work executed in a Transaction
*
*/
public interface Transaction {
/**
- * Run code in a Transaction
+ * Run unit of work in a Transaction
*
* @throws MailboxException
*/
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/SubscriptionMapper.java Tue Mar 9 14:24:42 2010
@@ -25,7 +25,7 @@ import org.apache.james.imap.store.trans
import org.apache.james.imap.store.user.model.Subscription;
/**
- *
+ * Mapper for {@link Subscription}
*
*/
public interface SubscriptionMapper extends TransactionalMapper{
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/model/Subscription.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/model/Subscription.java?rev=920893&r1=920892&r2=920893&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/model/Subscription.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/user/model/Subscription.java Tue Mar 9 14:24:42 2010
@@ -18,6 +18,10 @@
****************************************************************/
package org.apache.james.imap.store.user.model;
+/**
+ *
+ * Subscription of a mailbox to a user
+ */
public interface Subscription {
/**
@@ -26,12 +30,14 @@ public interface Subscription {
* Note that subscriptions must be maintained
* beyond the lifetime of a particular instance
* of a mailbox.
+ *
* @return not null
*/
public abstract String getMailbox();
/**
* Gets the name of the subscribed user.
+ *
* @return not null
*/
public abstract String getUser();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org