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 rd...@apache.org on 2008/12/31 11:44:57 UTC

svn commit: r730371 [2/3] - in /james/protocols/imap/trunk: ./ build-tools/ deployment/src/test/java/org/apache/james/imap/functional/ deployment/src/test/java/org/apache/james/imap/functional/jpa/ jpa/ jpa/src/main/java/org/apache/james/imap/jpa/ jpa/...

Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageRowUtils.java Wed Dec 31 02:44:55 2008
@@ -32,9 +32,8 @@
 
 import javax.mail.Flags;
 
-import org.apache.james.imap.jpa.om.MessageBody;
-import org.apache.james.imap.jpa.om.MessageHeader;
-import org.apache.james.imap.jpa.om.MessageRow;
+import org.apache.james.imap.jpa.om.Header;
+import org.apache.james.imap.jpa.om.Message;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResult.Content;
@@ -43,7 +42,6 @@
 import org.apache.james.mailboxmanager.impl.MessageFlags;
 import org.apache.james.mailboxmanager.impl.MessageResultImpl;
 import org.apache.james.mime4j.MimeException;
-import org.apache.torque.TorqueException;
 
 public class MessageRowUtils {
 
@@ -54,197 +52,167 @@
     static final Charset US_ASCII = Charset.forName("US-ASCII");
 
     /**
-     * Converts {@link MessageRow} to {@link MessageFlags}.
+     * Converts {@link Message} to {@link MessageFlags}.
      * 
-     * @param messageRows
-     *            <code>Collectio</code> of {@link MessageRow}, not null
+     * @param messages not null
      * @return <code>MessageFlags</code>, not null
-     * @throws TorqueException
      */
-    public static MessageFlags[] toMessageFlags(final Collection messageRows)
-            throws TorqueException {
-        final MessageFlags[] results = new MessageFlags[messageRows.size()];
+    public static MessageFlags[] toMessageFlags(final Collection<Message> messages) {
+        final MessageFlags[] results = new MessageFlags[messages.size()];
         int i = 0;
-        for (final Iterator it = messageRows.iterator(); it.hasNext();) {
-            MessageRow row = (MessageRow) it.next();
-            final Flags flags = row.getMessageFlags().getFlagsObject();
-            final long uid = row.getUid();
+        for (Message message: messages) {
+            final Flags flags = message.createFlags();
+            final long uid = message.getUid();
             results[i++] = new MessageFlags(uid, flags);
         }
         return results;
     }
 
-    public static List createHeaders(MessageRow messageRow)
-            throws TorqueException {
-        final List headers = getSortedHeaders(messageRow);
-
-        final List results = new ArrayList(headers.size());
-        for (Iterator it = headers.iterator(); it.hasNext();) {
-            final MessageHeader messageHeader = (MessageHeader) it.next();
-            final Header header = new Header(messageHeader);
-            results.add(header);
+    public static List<ResultHeader> createHeaders(Message message) {
+        final List<Header> headers = getSortedHeaders(message);
+
+        final List<ResultHeader> results = new ArrayList<ResultHeader>(headers.size());
+        for (Header header: headers) {
+            final ResultHeader resultHeader = new ResultHeader(header);
+            results.add(resultHeader);
         }
         return results;
     }
 
-    private static List getSortedHeaders(MessageRow messageRow)
-            throws TorqueException {
-        final List headers = messageRow.getMessageHeaders();
-        Collections.sort(headers, new Comparator() {
-
-            public int compare(Object one, Object two) {
-                return ((MessageHeader) one).getLineNumber()
-                        - ((MessageHeader) two).getLineNumber();
-            }
-
-        });
+    private static List<Header> getSortedHeaders(Message message) {
+        final List<Header> headers = new ArrayList<Header>(message.getHeaders());
+        Collections.sort(headers);
         return headers;
     }
 
-    public static Content createBodyContent(MessageRow messageRow)
-            throws TorqueException {
-        final MessageBody body = (MessageBody) messageRow.getMessageBodys()
-                .get(0);
-        final byte[] bytes = body.getBody();
+    public static Content createBodyContent(Message message) {
+        final byte[] bytes = message.getBody();
         final ByteContent result = new ByteContent(bytes);
         return result;
     }
 
-    public static Content createFullContent(final MessageRow messageRow,
-            List headers) throws TorqueException {
+    public static Content createFullContent(final Message message, List headers) {
         if (headers == null) {
-            headers = createHeaders(messageRow);
+            headers = createHeaders(message);
         }
-        final MessageBody body = (MessageBody) messageRow.getMessageBodys()
-                .get(0);
-        final byte[] bytes = body.getBody();
+        final byte[] bytes = message.getBody();
         final FullContent results = new FullContent(bytes, headers);
         return results;
     }
 
-    public static MessageResult loadMessageResult(final MessageRow messageRow,
-            final FetchGroup fetchGroup) throws TorqueException,
-            MailboxManagerException {
+    public static MessageResult loadMessageResult(final Message message, final FetchGroup fetchGroup) 
+                throws MailboxManagerException {
 
         MessageResultImpl messageResult = new MessageResultImpl();
-        messageResult.setUid(messageRow.getUid());
+        messageResult.setUid(message.getUid());
         if (fetchGroup != null) {
             int content = fetchGroup.content();
             if ((content & FetchGroup.FLAGS) > 0) {
-                org.apache.james.imap.jpa.om.MessageFlags messageFlags = messageRow
-                        .getMessageFlags();
-                if (messageFlags != null) {
-                    messageResult.setFlags(messageFlags.getFlagsObject());
-                }
+                messageResult.setFlags(message.createFlags());
                 content -= FetchGroup.FLAGS;
             }
             if ((content & FetchGroup.SIZE) > 0) {
-                messageResult.setSize(messageRow.getSize());
+                messageResult.setSize(message.getSize());
                 content -= FetchGroup.SIZE;
             }
             if ((content & FetchGroup.INTERNAL_DATE) > 0) {
-                messageResult.setInternalDate(messageRow.getInternalDate());
+                messageResult.setInternalDate(message.getInternalDate());
                 content -= FetchGroup.INTERNAL_DATE;
             }
             if ((content & FetchGroup.HEADERS) > 0) {
-                addHeaders(messageRow, messageResult);
+                addHeaders(message, messageResult);
                 content -= FetchGroup.HEADERS;
             }
             if ((content & FetchGroup.BODY_CONTENT) > 0) {
-                addBody(messageRow, messageResult);
+                addBody(message, messageResult);
                 content -= FetchGroup.BODY_CONTENT;
             }
             if ((content & FetchGroup.FULL_CONTENT) > 0) {
-                addFullContent(messageRow, messageResult);
+                addFullContent(message, messageResult);
                 content -= FetchGroup.FULL_CONTENT;
             }
-            if ((content & FetchGroup.MIME_DESCRIPTOR) > 0) {
-                addMimeDescriptor(messageRow, messageResult);
-                content -= FetchGroup.MIME_DESCRIPTOR;
-            }
-            if (content != 0) {
-                throw new TorqueException("Unsupported result: " + content);
-            }
             try {
-                addPartContent(fetchGroup, messageRow, messageResult);
+                if ((content & FetchGroup.MIME_DESCRIPTOR) > 0) {
+                    addMimeDescriptor(message, messageResult);
+                    content -= FetchGroup.MIME_DESCRIPTOR;
+                }
+                if (content != 0) {
+                    throw new MailboxManagerException("Unsupported result: " + content);
+                }
+            
+                addPartContent(fetchGroup, message, messageResult);
             } catch (IOException e) {
-                throw new TorqueException("Cannot parse message", e);
+                throw new MailboxManagerException(e);
             }
         }
         return messageResult;
     }
 
-    private static void addMimeDescriptor(MessageRow messageRow,
-            MessageResultImpl messageResult) throws TorqueException {
-        try {
+    private static void addMimeDescriptor(Message message, MessageResultImpl messageResult) throws IOException {
             MessageResult.MimeDescriptor descriptor = MimeDescriptorImpl
-                    .build(toInput(messageRow));
+                    .build(toInput(message));
             messageResult.setMimeDescriptor(descriptor);
-        } catch (IOException e) {
-            throw new TorqueException("Cannot parse message", e);
-        }
     }
 
-    private static void addFullContent(final MessageRow messageRow,
-            MessageResultImpl messageResult) throws TorqueException,
-            MailboxManagerException {
+    private static void addFullContent(final Message messageRow, MessageResultImpl messageResult) 
+            throws MailboxManagerException {
         final List headers = messageResult.getHeaders();
         final Content content = createFullContent(messageRow, headers);
         messageResult.setFullContent(content);
     }
 
-    private static void addBody(final MessageRow messageRow,
-            MessageResultImpl messageResult) throws TorqueException {
-        final Content content = createBodyContent(messageRow);
+    private static void addBody(final Message message,
+            MessageResultImpl messageResult) {
+        final Content content = createBodyContent(message);
         messageResult.setBody(content);
     }
 
-    private static void addHeaders(final MessageRow messageRow,
-            MessageResultImpl messageResult) throws TorqueException {
-        final List headers = createHeaders(messageRow);
+    private static void addHeaders(final Message message,
+            MessageResultImpl messageResult) {
+        final List<ResultHeader> headers = createHeaders(message);
         messageResult.setHeaders(headers);
     }
 
     private static void addPartContent(final FetchGroup fetchGroup,
-            MessageRow row, MessageResultImpl messageResult)
-            throws TorqueException, MailboxManagerException, IOException,
+            Message message, MessageResultImpl messageResult)
+            throws MailboxManagerException, IOException,
             MimeException {
         Collection partContent = fetchGroup.getPartContentDescriptors();
         if (partContent != null) {
             for (Iterator it = partContent.iterator(); it.hasNext();) {
                 FetchGroup.PartContentDescriptor descriptor = (FetchGroup.PartContentDescriptor) it
                         .next();
-                addPartContent(descriptor, row, messageResult);
+                addPartContent(descriptor, message, messageResult);
             }
         }
     }
 
     private static void addPartContent(
-            FetchGroup.PartContentDescriptor descriptor, MessageRow row,
-            MessageResultImpl messageResult) throws TorqueException,
+            FetchGroup.PartContentDescriptor descriptor, Message message,
+            MessageResultImpl messageResult) throws 
             MailboxManagerException, IOException, MimeException {
         final MimePath mimePath = descriptor.path();
         final int content = descriptor.content();
         if ((content & MessageResult.FetchGroup.FULL_CONTENT) > 0) {
-            addFullContent(row, messageResult, mimePath);
+            addFullContent(message, messageResult, mimePath);
         }
         if ((content & MessageResult.FetchGroup.BODY_CONTENT) > 0) {
-            addBodyContent(row, messageResult, mimePath);
+            addBodyContent(message, messageResult, mimePath);
         }
         if ((content & MessageResult.FetchGroup.MIME_CONTENT) > 0) {
-            addMimeBodyContent(row, messageResult, mimePath);
+            addMimeBodyContent(message, messageResult, mimePath);
         }
         if ((content & MessageResult.FetchGroup.HEADERS) > 0) {
-            addHeaders(row, messageResult, mimePath);
+            addHeaders(message, messageResult, mimePath);
         }
         if ((content & MessageResult.FetchGroup.MIME_HEADERS) > 0) {
-            addMimeHeaders(row, messageResult, mimePath);
+            addMimeHeaders(message, messageResult, mimePath);
         }
     }
 
-    private static PartContentBuilder build(int[] path, final MessageRow row)
-            throws IOException, MimeException, TorqueException {
-        final InputStream stream = toInput(row);
+    private static PartContentBuilder build(int[] path, final Message message)
+            throws IOException, MimeException {
+        final InputStream stream = toInput(message);
         PartContentBuilder result = new PartContentBuilder();
         result.parse(stream);
         try {
@@ -260,13 +228,10 @@
         return result;
     }
 
-    public static InputStream toInput(final MessageRow row)
-            throws TorqueException {
-        final List headers = getSortedHeaders(row);
-        final StringBuffer headersToString = new StringBuffer(
-                headers.size() * 50);
-        for (Iterator it = headers.iterator(); it.hasNext();) {
-            MessageHeader header = (MessageHeader) it.next();
+    public static InputStream toInput(final Message message) {
+        final List<Header> headers = getSortedHeaders(message);
+        final StringBuffer headersToString = new StringBuffer(headers.size() * 50);
+        for (Header header: headers) {
             headersToString.append(header.getField());
             headersToString.append(": ");
             headersToString.append(header.getValue());
@@ -274,9 +239,8 @@
         }
         headersToString.append("\r\n");
 
-        byte[] bodyContent = row.getBodyContent();
-        final MessageInputStream stream = new MessageInputStream(
-                headersToString, bodyContent);
+        byte[] bodyContent = message.getBody();
+        final MessageInputStream stream = new MessageInputStream(headersToString, bodyContent);
         return stream;
     }
 
@@ -318,85 +282,82 @@
         return result;
     }
 
-    private static void addHeaders(MessageRow row,
+    private static void addHeaders(Message message,
             MessageResultImpl messageResult, MimePath mimePath)
-            throws TorqueException, IOException, MimeException {
+            throws IOException, MimeException {
         final int[] path = path(mimePath);
         if (path == null) {
-            addHeaders(row, messageResult);
+            addHeaders(message, messageResult);
         } else {
-            final PartContentBuilder builder = build(path, row);
+            final PartContentBuilder builder = build(path, message);
             final List headers = builder.getMessageHeaders();
             messageResult.setHeaders(mimePath, headers.iterator());
         }
     }
 
-    private static void addMimeHeaders(MessageRow row,
+    private static void addMimeHeaders(Message message,
             MessageResultImpl messageResult, MimePath mimePath)
-            throws TorqueException, IOException, MimeException {
+            throws IOException, MimeException {
         final int[] path = path(mimePath);
         if (path == null) {
-            addHeaders(row, messageResult);
+            addHeaders(message, messageResult);
         } else {
-            final PartContentBuilder builder = build(path, row);
+            final PartContentBuilder builder = build(path, message);
             final List headers = builder.getMimeHeaders();
             messageResult.setMimeHeaders(mimePath, headers.iterator());
         }
     }
 
-    private static void addBodyContent(MessageRow row,
-            MessageResultImpl messageResult, MimePath mimePath)
-            throws TorqueException, IOException, MimeException {
+    private static void addBodyContent(Message message,
+            MessageResultImpl messageResult, MimePath mimePath) throws IOException, MimeException {
         final int[] path = path(mimePath);
         if (path == null) {
-            addBody(row, messageResult);
+            addBody(message, messageResult);
         } else {
-            final PartContentBuilder builder = build(path, row);
+            final PartContentBuilder builder = build(path, message);
             final Content content = builder.getMessageBodyContent();
             messageResult.setBodyContent(mimePath, content);
         }
     }
 
-    private static void addMimeBodyContent(MessageRow row,
+    private static void addMimeBodyContent(Message message,
             MessageResultImpl messageResult, MimePath mimePath)
-            throws TorqueException, IOException, MimeException {
+            throws IOException, MimeException {
         final int[] path = path(mimePath);
-        final PartContentBuilder builder = build(path, row);
+        final PartContentBuilder builder = build(path, message);
         final Content content = builder.getMimeBodyContent();
         messageResult.setMimeBodyContent(mimePath, content);
     }
 
-    private static void addFullContent(MessageRow row,
+    private static void addFullContent(Message message,
             MessageResultImpl messageResult, MimePath mimePath)
-            throws TorqueException, MailboxManagerException, IOException,
+            throws MailboxManagerException, IOException,
             MimeException {
         final int[] path = path(mimePath);
         if (path == null) {
-            addFullContent(row, messageResult);
+            addFullContent(message, messageResult);
         } else {
-            final PartContentBuilder builder = build(path, row);
+            final PartContentBuilder builder = build(path, message);
             final Content content = builder.getFullContent();
             messageResult.setFullContent(mimePath, content);
         }
     }
 
     /**
-     * Gets a comparator that evaluates {@link MessageRow}'s on the basis of
+     * Gets a comparator that evaluates {@link Message}'s on the basis of
      * their UIDs.
      * 
      * @return {@link Comparator}, not null
      */
-    public static Comparator getUidComparator() {
+    public static Comparator<Message> getUidComparator() {
         return UidComparator.INSTANCE;
     }
 
-    private static final class UidComparator implements Comparator {
+    private static final class UidComparator implements Comparator<Message> {
         private static final UidComparator INSTANCE = new UidComparator();
 
-        public int compare(Object one, Object two) {
-            final MessageRow rowOne = (MessageRow) one;
-            final MessageRow rowTwo = (MessageRow) two;
-            final int result = (int) (rowOne.getUid() - rowTwo.getUid());
+        public int compare(Message one, Message two) {
+            final int result = (int) (one.getUid() - two.getUid());
             return result;
         }
 

Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MessageSearches.java Wed Dec 31 02:44:55 2008
@@ -34,16 +34,15 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.james.imap.jpa.om.MessageFlags;
-import org.apache.james.imap.jpa.om.MessageHeader;
-import org.apache.james.imap.jpa.om.MessageRow;
+import org.apache.james.imap.jpa.om.Header;
+import org.apache.james.imap.jpa.om.Message;
+import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.SearchQuery;
 import org.apache.james.mailboxmanager.SearchQuery.NumericRange;
 import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.field.datetime.DateTime;
 import org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
 import org.apache.james.mime4j.field.datetime.parser.ParseException;
-import org.apache.torque.TorqueException;
 
 /**
  * Uility methods to help perform search operations.
@@ -74,10 +73,10 @@
      * @param row
      *            <code>MessageRow</code>, not null
      * @return true if the row matches the given criteria, false otherwise
-     * @throws TorqueException
+     * @throws MailboxManagerException 
      */
-    public boolean isMatch(final SearchQuery query, final MessageRow row)
-            throws TorqueException {
+    public boolean isMatch(final SearchQuery query, final Message message)
+            throws MailboxManagerException {
         final List criteria = query.getCriterias();
         final Collection recentMessageUids = query.getRecentMessageUids();
         boolean result = true;
@@ -85,7 +84,7 @@
             for (Iterator it = criteria.iterator(); it.hasNext();) {
                 final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
                         .next();
-                if (!isMatch(criterion, row, recentMessageUids)) {
+                if (!isMatch(criterion, message, recentMessageUids)) {
                     result = false;
                     break;
                 }
@@ -99,31 +98,31 @@
      * 
      * @param query
      *            <code>SearchQuery.Criterion</code>, not null
-     * @param row
+     * @param message
      *            <code>MessageRow</code>, not null
      * @return true if the row matches the given criterion, false otherwise
-     * @throws TorqueException
+     * @throws MailboxManagerException 
      */
-    public boolean isMatch(SearchQuery.Criterion criterion, MessageRow row,
-            final Collection recentMessageUids) throws TorqueException {
+    public boolean isMatch(SearchQuery.Criterion criterion, Message message,
+            final Collection recentMessageUids) throws MailboxManagerException {
         final boolean result;
         if (criterion instanceof SearchQuery.InternalDateCriterion) {
-            result = matches((SearchQuery.InternalDateCriterion) criterion, row);
+            result = matches((SearchQuery.InternalDateCriterion) criterion, message);
         } else if (criterion instanceof SearchQuery.SizeCriterion) {
-            result = matches((SearchQuery.SizeCriterion) criterion, row);
+            result = matches((SearchQuery.SizeCriterion) criterion, message);
         } else if (criterion instanceof SearchQuery.HeaderCriterion) {
-            result = matches((SearchQuery.HeaderCriterion) criterion, row);
+            result = matches((SearchQuery.HeaderCriterion) criterion, message);
         } else if (criterion instanceof SearchQuery.UidCriterion) {
-            result = matches((SearchQuery.UidCriterion) criterion, row);
+            result = matches((SearchQuery.UidCriterion) criterion, message);
         } else if (criterion instanceof SearchQuery.FlagCriterion) {
-            result = matches((SearchQuery.FlagCriterion) criterion, row,
+            result = matches((SearchQuery.FlagCriterion) criterion, message,
                     recentMessageUids);
         } else if (criterion instanceof SearchQuery.TextCriterion) {
-            result = matches((SearchQuery.TextCriterion) criterion, row);
+            result = matches((SearchQuery.TextCriterion) criterion, message);
         } else if (criterion instanceof SearchQuery.AllCriterion) {
             result = true;
         } else if (criterion instanceof SearchQuery.ConjunctionCriterion) {
-            result = matches((SearchQuery.ConjunctionCriterion) criterion, row,
+            result = matches((SearchQuery.ConjunctionCriterion) criterion, message,
                     recentMessageUids);
         } else {
             throw new UnsupportedSearchException();
@@ -131,8 +130,7 @@
         return result;
     }
 
-    private boolean matches(SearchQuery.TextCriterion criterion, MessageRow row)
-            throws TorqueException {
+    private boolean matches(SearchQuery.TextCriterion criterion, Message message) throws MailboxManagerException  {
         try {
             final SearchQuery.ContainsOperator operator = criterion
                     .getOperator();
@@ -140,20 +138,20 @@
             final int type = criterion.getType();
             switch (type) {
                 case SearchQuery.TextCriterion.BODY:
-                    return bodyContains(value, row);
+                    return bodyContains(value, message);
                 case SearchQuery.TextCriterion.FULL_MESSAGE:
-                    return messageContains(value, row);
+                    return messageContains(value, message);
                 default:
                     throw new UnsupportedSearchException();
             }
         } catch (IOException e) {
-            throw new TorqueException(e);
+            throw new MailboxManagerException(e);
         }
     }
 
-    private boolean bodyContains(String value, MessageRow row)
-            throws TorqueException, IOException, MimeException {
-        final InputStream input = MessageRowUtils.toInput(row);
+    private boolean bodyContains(String value, Message message)
+            throws IOException, MimeException {
+        final InputStream input = MessageRowUtils.toInput(message);
         final boolean result = isInMessage(value, input, false);
         return result;
     }
@@ -169,37 +167,36 @@
         return result;
     }
 
-    private boolean messageContains(String value, MessageRow row)
-            throws TorqueException, IOException, MimeException {
-        final InputStream input = MessageRowUtils.toInput(row);
+    private boolean messageContains(String value, Message message)
+            throws IOException, MimeException {
+        final InputStream input = MessageRowUtils.toInput(message);
         final boolean result = isInMessage(value, input, true);
         return result;
     }
 
     private boolean matches(SearchQuery.ConjunctionCriterion criterion,
-            MessageRow row, final Collection recentMessageUids)
-            throws TorqueException {
+            Message message, final Collection recentMessageUids) throws MailboxManagerException {
         final int type = criterion.getType();
         final List criteria = criterion.getCriteria();
         switch (type) {
             case SearchQuery.ConjunctionCriterion.NOR:
-                return nor(criteria, row, recentMessageUids);
+                return nor(criteria, message, recentMessageUids);
             case SearchQuery.ConjunctionCriterion.OR:
-                return or(criteria, row, recentMessageUids);
+                return or(criteria, message, recentMessageUids);
             case SearchQuery.ConjunctionCriterion.AND:
-                return and(criteria, row, recentMessageUids);
+                return and(criteria, message, recentMessageUids);
             default:
                 return false;
         }
     }
 
-    private boolean and(final List criteria, final MessageRow row,
-            final Collection recentMessageUids) throws TorqueException {
+    private boolean and(final List criteria, final Message message, 
+            final Collection recentMessageUids) throws MailboxManagerException {
         boolean result = true;
         for (Iterator it = criteria.iterator(); it.hasNext();) {
             final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
                     .next();
-            final boolean matches = isMatch(criterion, row, recentMessageUids);
+            final boolean matches = isMatch(criterion, message, recentMessageUids);
             if (!matches) {
                 result = false;
                 break;
@@ -208,13 +205,13 @@
         return result;
     }
 
-    private boolean or(final List criteria, final MessageRow row,
-            final Collection recentMessageUids) throws TorqueException {
+    private boolean or(final List criteria, final Message message,
+            final Collection recentMessageUids) throws MailboxManagerException {
         boolean result = false;
         for (Iterator it = criteria.iterator(); it.hasNext();) {
             final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
                     .next();
-            final boolean matches = isMatch(criterion, row, recentMessageUids);
+            final boolean matches = isMatch(criterion, message, recentMessageUids);
             if (matches) {
                 result = true;
                 break;
@@ -223,13 +220,13 @@
         return result;
     }
 
-    private boolean nor(final List criteria, final MessageRow row,
-            final Collection recentMessageUids) throws TorqueException {
+    private boolean nor(final List criteria, final Message message,
+            final Collection recentMessageUids) throws MailboxManagerException {
         boolean result = true;
         for (Iterator it = criteria.iterator(); it.hasNext();) {
             final SearchQuery.Criterion criterion = (SearchQuery.Criterion) it
                     .next();
-            final boolean matches = isMatch(criterion, row, recentMessageUids);
+            final boolean matches = isMatch(criterion, message, recentMessageUids);
             if (matches) {
                 result = false;
                 break;
@@ -239,37 +236,34 @@
     }
 
     private boolean matches(SearchQuery.FlagCriterion criterion,
-            MessageRow row, final Collection recentMessageUids)
-            throws TorqueException {
+            Message message, final Collection recentMessageUids) {
         final SearchQuery.BooleanOperator operator = criterion.getOperator();
         final boolean isSet = operator.isSet();
         final Flags.Flag flag = criterion.getFlag();
-        final MessageFlags messageFlags = row.getMessageFlags();
         final boolean result;
         if (flag == Flags.Flag.ANSWERED) {
-            result = isSet == messageFlags.getAnswered();
+            result = isSet == message.isAnswered();
         } else if (flag == Flags.Flag.SEEN) {
-            result = isSet == messageFlags.getSeen();
+            result = isSet == message.isSeen();
         } else if (flag == Flags.Flag.DRAFT) {
-            result = isSet == messageFlags.getDraft();
+            result = isSet == message.isDraft();
         } else if (flag == Flags.Flag.FLAGGED) {
-            result = isSet == messageFlags.getFlagged();
+            result = isSet == message.isFlagged();
         } else if (flag == Flags.Flag.RECENT) {
-            final long uid = row.getUid();
+            final long uid = message.getUid();
             result = isSet == recentMessageUids.contains(new Long(uid));
         } else if (flag == Flags.Flag.DELETED) {
-            result = isSet == messageFlags.getDeleted();
+            result = isSet == message.isDeleted();
         } else {
             result = false;
         }
         return result;
     }
 
-    private boolean matches(SearchQuery.UidCriterion criterion, MessageRow row)
-            throws TorqueException {
+    private boolean matches(SearchQuery.UidCriterion criterion, Message message) {
         final SearchQuery.InOperator operator = criterion.getOperator();
         final NumericRange[] ranges = operator.getRange();
-        final long uid = row.getUid();
+        final long uid = message.getUid();
         final int length = ranges.length;
         boolean result = false;
         for (int i = 0; i < length; i++) {
@@ -282,31 +276,26 @@
         return result;
     }
 
-    private boolean matches(SearchQuery.HeaderCriterion criterion,
-            MessageRow row) throws TorqueException {
+    private boolean matches(SearchQuery.HeaderCriterion criterion, Message message) throws UnsupportedSearchException {
         final SearchQuery.HeaderOperator operator = criterion.getOperator();
         final String headerName = criterion.getHeaderName();
         final boolean result;
         if (operator instanceof SearchQuery.DateOperator) {
-            result = matches((SearchQuery.DateOperator) operator, headerName,
-                    row);
+            result = matches((SearchQuery.DateOperator) operator, headerName, message);
         } else if (operator instanceof SearchQuery.ContainsOperator) {
-            result = matches((SearchQuery.ContainsOperator) operator,
-                    headerName, row);
+            result = matches((SearchQuery.ContainsOperator) operator, headerName, message);
         } else if (operator instanceof SearchQuery.ExistsOperator) {
-            result = exists(headerName, row);
+            result = exists(headerName, message);
         } else {
             throw new UnsupportedSearchException();
         }
         return result;
     }
 
-    private boolean exists(String headerName, MessageRow row)
-            throws TorqueException {
+    private boolean exists(String headerName, Message message) {
         boolean result = false;
-        final List headers = row.getMessageHeaders();
-        for (Iterator it = headers.iterator(); it.hasNext();) {
-            final MessageHeader header = (MessageHeader) it.next();
+        final List<Header> headers = message.getHeaders();
+        for (Header header:headers) {
             final String name = header.getField();
             if (headerName.equalsIgnoreCase(name)) {
                 result = true;
@@ -317,13 +306,11 @@
     }
 
     private boolean matches(final SearchQuery.ContainsOperator operator,
-            final String headerName, final MessageRow row)
-            throws TorqueException {
+            final String headerName, final Message message) {
         final String text = operator.getValue().toUpperCase();
         boolean result = false;
-        final List headers = row.getMessageHeaders();
-        for (Iterator it = headers.iterator(); it.hasNext();) {
-            final MessageHeader header = (MessageHeader) it.next();
+        final List<Header> headers = message.getHeaders();
+        for (Header header:headers) {
             final String name = header.getField();
             if (headerName.equalsIgnoreCase(name)) {
                 final String value = header.getValue();
@@ -339,13 +326,12 @@
     }
 
     private boolean matches(final SearchQuery.DateOperator operator,
-            final String headerName, final MessageRow row)
-            throws TorqueException {
+            final String headerName, final Message message) throws UnsupportedSearchException {
         final int day = operator.getDay();
         final int month = operator.getMonth();
         final int year = operator.getYear();
         final int iso = toISODate(day, month, year);
-        final String value = headerValue(headerName, row);
+        final String value = headerValue(headerName, message);
         if (value == null) {
             return false;
         } else {
@@ -368,12 +354,10 @@
         }
     }
 
-    private String headerValue(final String headerName, final MessageRow row)
-            throws TorqueException {
-        final List headers = row.getMessageHeaders();
+    private String headerValue(final String headerName, final Message message) {
+        final List<Header> headers = message.getHeaders();
         String value = null;
-        for (Iterator it = headers.iterator(); it.hasNext();) {
-            final MessageHeader header = (MessageHeader) it.next();
+        for (Header header:headers) {
             final String name = header.getField();
             if (headerName.equalsIgnoreCase(name)) {
                 value = header.getValue();
@@ -391,10 +375,10 @@
         return isoFieldValue;
     }
 
-    private boolean matches(SearchQuery.SizeCriterion criterion, MessageRow row)
+    private boolean matches(SearchQuery.SizeCriterion criterion, Message message)
             throws UnsupportedSearchException {
         final SearchQuery.NumericOperator operator = criterion.getOperator();
-        final int size = row.getSize();
+        final int size = message.getSize();
         final long value = operator.getValue();
         final int type = operator.getType();
         switch (type) {
@@ -410,19 +394,19 @@
     }
 
     private boolean matches(SearchQuery.InternalDateCriterion criterion,
-            MessageRow row) throws UnsupportedSearchException {
+            Message message) throws UnsupportedSearchException {
         final SearchQuery.DateOperator operator = criterion.getOperator();
-        final boolean result = matchesInternalDate(operator, row);
+        final boolean result = matchesInternalDate(operator, message);
         return result;
     }
 
     private boolean matchesInternalDate(
-            final SearchQuery.DateOperator operator, final MessageRow row)
+            final SearchQuery.DateOperator operator, final Message message)
             throws UnsupportedSearchException {
         final int day = operator.getDay();
         final int month = operator.getMonth();
         final int year = operator.getYear();
-        final Date internalDate = row.getInternalDate();
+        final Date internalDate = message.getInternalDate();
         final int type = operator.getType();
         switch (type) {
             case SearchQuery.DateOperator.ON:

Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/MimeDescriptorImpl.java Wed Dec 31 02:44:55 2008
@@ -36,8 +36,7 @@
 
 public class MimeDescriptorImpl implements MessageResult.MimeDescriptor {
 
-    public static MimeDescriptorImpl build(final InputStream stream)
-            throws IOException {
+    public static MimeDescriptorImpl build(final InputStream stream) throws IOException {
         final MimeTokenStream parser = MimeTokenStream
                 .createMaximalDescriptorStream();
         parser.parse(stream);
@@ -53,7 +52,7 @@
                 && next != MimeTokenStream.T_END_OF_STREAM
                 && next != MimeTokenStream.T_START_MULTIPART) {
             if (next == MimeTokenStream.T_FIELD) {
-                headers.add(new Header(parser.getFieldName(), parser
+                headers.add(new ResultHeader(parser.getFieldName(), parser
                         .getFieldValue().trim()));
             }
             next = parser.next();
@@ -140,25 +139,25 @@
         for (final Iterator it = valuesByName.keySet().iterator(); it.hasNext();) {
             final String name = (String) it.next();
             final String value = (String) valuesByName.get(name);
-            contentTypeParameters.add(new Header(name, value));
+            contentTypeParameters.add(new ResultHeader(name, value));
         }
         final String codeset = descriptor.getCharset();
-        Header header;
+        ResultHeader header;
         if (codeset == null) {
             if ("TEXT".equals(type)) {
-                header = new Header("charset", "us-ascii");
+                header = new ResultHeader("charset", "us-ascii");
             } else {
                 header = null;
             }
         } else {
-            header = new Header("charset", codeset);
+            header = new ResultHeader("charset", codeset);
         }
         if (header != null) {
             contentTypeParameters.add(header);
         }
         final String boundary = descriptor.getBoundary();
         if (boundary != null) {
-            contentTypeParameters.add(new Header("boundary", boundary));
+            contentTypeParameters.add(new ResultHeader("boundary", boundary));
         }
         final List languages = descriptor.getContentLanguage();
         final String disposition = descriptor.getContentDispositionType();

Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/PartContentBuilder.java Wed Dec 31 02:44:55 2008
@@ -205,7 +205,7 @@
                     case MimeTokenStream.T_FIELD:
                         final String fieldValue = parser.getFieldValue().trim();
                         final String fieldName = parser.getFieldName();
-                        Header header = new Header(fieldName, fieldValue);
+                        ResultHeader header = new ResultHeader(fieldName, fieldValue);
                         results.add(header);
                         break;
                 }
@@ -233,7 +233,7 @@
                             final String fieldValue = parser.getFieldValue()
                                     .trim();
                             final String fieldName = parser.getFieldName();
-                            Header header = new Header(fieldName, fieldValue);
+                            ResultHeader header = new ResultHeader(fieldName, fieldValue);
                             results.add(header);
                             break;
                     }

Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/Header.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/ResultHeader.java Wed Dec 31 02:44:55 2008
@@ -28,23 +28,23 @@
 
 import javax.mail.MessagingException;
 
-import org.apache.james.imap.jpa.om.MessageHeader;
+import org.apache.james.imap.jpa.om.Header;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResult.Content;
 
-final class Header implements MessageResult.Header, MessageResult.Content {
+final class ResultHeader implements MessageResult.Header, MessageResult.Content {
     private final String name;
 
     private final String value;
 
     private final long size;
 
-    public Header(final MessageHeader header) {
+    public ResultHeader(final Header header) {
         this(header.getField(), header.getValue());
     }
 
-    public Header(String name, String value) {
+    public ResultHeader(String name, String value) {
         this.name = name;
         this.value = value;
         size = name.length() + value.length() + 2;

Modified: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/UnsupportedSearchException.java Wed Dec 31 02:44:55 2008
@@ -19,12 +19,12 @@
 
 package org.apache.james.imap.jpa;
 
-import org.apache.torque.TorqueException;
+import org.apache.james.mailboxmanager.MailboxManagerException;
 
 /**
  * Indicates that the requested search is not supported by this implementation.
  */
-public class UnsupportedSearchException extends TorqueException {
+public class UnsupportedSearchException extends MailboxManagerException {
 
     private static final long serialVersionUID = -7442949630563672557L;
 

Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MailboxMapper.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java Wed Dec 31 02:44:55 2008
@@ -17,116 +17,52 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.jpa.om;
+package org.apache.james.imap.jpa.map;
 
 import java.util.List;
 
-import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.MessageRange;
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.CountHelper;
-import org.apache.torque.util.Criteria;
+import javax.persistence.EntityManager;
+
+import org.apache.james.imap.jpa.om.Mailbox;
 
 /**
  * Data access management for mailbox.
  */
-public class MailboxMapper {
+public abstract class MailboxMapper extends Mapper {
+    
+    public MailboxMapper(EntityManager entityManager) {
+        super(entityManager);
+    }
+
+    public void save(Mailbox mailbox) {
+        entityManager.persist(mailbox);
+    }
+
+    public Mailbox findMailboxByName(String name) {
+        return (Mailbox) entityManager.createNamedQuery("findMailboxByName").setParameter("nameParam", name).getSingleResult();
+    }
+
+    public void delete(Mailbox mailbox) {
+        entityManager.remove(mailbox);
+    }
+
+    @SuppressWarnings("unchecked")
+    public List<Mailbox> findMailboxWithNameLike(String name) {
+        return entityManager.createNamedQuery("findMailboxWithNameLike").setParameter("nameParam", name).getResultList();
+    }
 
-    public void save(MailboxRow mailbox) throws TorqueException {
-        mailbox.save();
+    public void deleteAll() {
+        entityManager.createNamedQuery("deleteAll").executeUpdate();
     }
 
-    /**
-     * Finds a mailbox by name.
-     * @param name not null
-     * @return not null
-     * @throws TorqueException
-     */
-    public MailboxRow findByName(String name) throws TorqueException {
-        return MailboxRowPeer.retrieveByName(name);
-    }
-
-    /**
-     * Deletes the given mailbox.
-     * @param mailbox not null
-     * @throws TorqueException
-     */
-    public static void delete(MailboxRow mailbox) throws TorqueException {
-        MailboxRowPeer.doDelete(mailbox);
-    }
-
-    public List findNameLike(String name) throws TorqueException {
-        Criteria c = new Criteria();
-        c.add(MailboxRowPeer.NAME,
-                (Object) name,
-                Criteria.LIKE);
-        List l = MailboxRowPeer.doSelect(c);
-        return l;
-    }
-
-    public void deleteAll() throws TorqueException {
-        MailboxRowPeer.doDelete(new Criteria().and(
-                MailboxRowPeer.MAILBOX_ID, new Integer(-1),
-                Criteria.GREATER_THAN));
-    }
-
-    public int countOnName(String mailboxName) throws TorqueException {
-        int count;
-        Criteria c = new Criteria();
-        c.add(MailboxRowPeer.NAME, mailboxName);
-        CountHelper countHelper = new CountHelper();
-        count = countHelper.count(c);
-        return count;
-    }
-
-
-    public List findInMailbox(MessageRange set, long mailboxId) throws MailboxManagerException, TorqueException {
-        Criteria c = criteriaForMessageSet(set);
-        c.add(MessageFlagsPeer.MAILBOX_ID, mailboxId);
-        List rows = MessageMapper.doSelectJoinMessageFlags(c);
-        return rows;
-    }
-
-    public List findMarkedForDeletionInMailbox(final MessageRange set, final long mailboxId) throws TorqueException, MailboxManagerException {
-        final Criteria criteria = criteriaForMessageSet(set);
-        criteria.addJoin(MessageRowPeer.MAILBOX_ID, MessageFlagsPeer.MAILBOX_ID);
-        criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-        criteria.add(MessageFlagsPeer.DELETED, true);
-        criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
-        final List messageRows = MessageRowPeer.doSelect(criteria);
-        return messageRows;
-    }
-
-    private Criteria criteriaForMessageSet(MessageRange set) throws MailboxManagerException {
-        Criteria criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(MessageRowPeer.UID);
-        if (set.getType() == MessageRange.TYPE_ALL) {
-            // empty Criteria = everything
-        } else if (set.getType() == MessageRange.TYPE_UID) {
-
-            if (set.getUidFrom() == set.getUidTo()) {
-                criteria.add(MessageRowPeer.UID, set.getUidFrom());
-            } else {
-                Criteria.Criterion criterion1 = criteria.getNewCriterion(
-                        MessageRowPeer.UID, new Long(set.getUidFrom()),
-                        Criteria.GREATER_EQUAL);
-                if (set.getUidTo() > 0) {
-                    Criteria.Criterion criterion2 = criteria.getNewCriterion(
-                            MessageRowPeer.UID, new Long(set.getUidTo()),
-                            Criteria.LESS_EQUAL);
-                    criterion1.and(criterion2);
-                }
-                criteria.add(criterion1);
-            }
-        } else {
-            throw new MailboxManagerException("Unsupported MessageSet: "
-                    + set.getType());
-        }
-        return criteria;
+    public long countMailboxesWithName(String name) {
+        return (Long) entityManager.createNamedQuery("countMailboxesWithName").setParameter("nameParam", name).getSingleResult();
     }
 
-    public MailboxRow findById(long mailboxId) throws TorqueException {
-        return MailboxRowPeer.retrieveByPK(mailboxId);
+    public Mailbox findMailboxById(long mailboxId) {
+        return (Mailbox) entityManager.createNamedQuery("findMailboxById").setParameter("idParam", mailboxId).getSingleResult();
     }
 
+    /** Locking is required and is implementation specific */
+    public abstract Mailbox consumeNextUid(long mailboxId);
 }

Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MailboxMapper.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,39 @@
+/****************************************************************
+ * 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.jpa.map;
+
+import javax.persistence.EntityManager;
+
+abstract class Mapper {
+
+    protected final EntityManager entityManager;
+    
+    public Mapper(final EntityManager entityManager) {
+        super();
+        this.entityManager = entityManager;
+    }
+    
+    public void begin() {
+        entityManager.getTransaction().begin();
+    }
+    
+    public void commit() {
+        entityManager.getTransaction().commit();
+    }
+}

Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/Mapper.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java (from r730067, james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java)
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java&p1=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java&r1=730067&r2=730371&rev=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/MessageMapper.java (original)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java Wed Dec 31 02:44:55 2008
@@ -16,223 +16,185 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imap.jpa.om;
+package org.apache.james.imap.jpa.map;
 
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.List;
 
-import javax.mail.Flags;
+import javax.persistence.EntityManager;
 
+import org.apache.james.imap.jpa.om.Message;
+import org.apache.james.mailboxmanager.MessageRange;
 import org.apache.james.mailboxmanager.SearchQuery;
 import org.apache.james.mailboxmanager.SearchQuery.Criterion;
 import org.apache.james.mailboxmanager.SearchQuery.NumericRange;
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.torque.util.Transaction;
-
-import com.workingdogs.village.DataSetException;
-import com.workingdogs.village.Record;
-
-public class MessageMapper {
-    
-    public MailboxRow consumeNextUid(long mailboxId) throws SQLException, TorqueException {
-        Connection c = Transaction.begin(MailboxRowPeer.DATABASE_NAME);
-        int ti = c.getTransactionIsolation();
-        boolean ac = c.getAutoCommit();
-        c.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
-        c.setAutoCommit(false);
-        try {
-            String sql = "UPDATE " + MailboxRowPeer.TABLE_NAME + " set "
-                    + MailboxRowPeer.LAST_UID + " = " + MailboxRowPeer.LAST_UID
-                    + "+1 WHERE " + MailboxRowPeer.MAILBOX_ID + " = "
-                    + mailboxId;
-            MailboxRowPeer.executeStatement(sql, c);
-            MailboxRow mr = MailboxRowPeer.retrieveByPK(mailboxId, c);
-            Transaction.commit(c);
-            return mr;
-        } catch (TorqueException e) {
-            Transaction.safeRollback(c);
-            throw e;
-        } finally {
-            try {
-                c.setTransactionIsolation(ti);
-                c.setAutoCommit(ac);
-            } catch (Exception e) {
-                // TODO: Log?
-            }
-        }
+
+public class MessageMapper extends Mapper {
+    
+    public MessageMapper(EntityManager entityManager) {
+        super(entityManager);
     }
 
-    public void resetRecent(long mailboxId) throws TorqueException {
-        String sql = "UPDATE " + MessageFlagsPeer.TABLE_NAME + " set "
-                + MessageFlagsPeer.RECENT + " = 0 WHERE "
-                + MessageFlagsPeer.MAILBOX_ID + " = " + mailboxId
-                + " AND " + MessageFlagsPeer.RECENT + " = 1 ";
-        MessageFlagsPeer.executeStatement(sql);
-    }
-    
-    public int countMessages(long mailboxId) throws TorqueException, DataSetException {
-        return countMessages(new Flags(), true, mailboxId);
-    }
-    
-    public int countMessages(Flags flags, boolean value, long mailboxId)
-            throws TorqueException, DataSetException {
-        Criteria criteria = new Criteria();
-        criteria.addSelectColumn(" COUNT(" + MessageFlagsPeer.UID + ") ");
-        criteria.add(MessageFlagsPeer.MAILBOX_ID, mailboxId);
-        MessageMapper.addFlagsToCriteria(flags, value, criteria);
-        List result = MessageFlagsPeer.doSelectVillageRecords(criteria);
-        Record record = (Record) result.get(0);
-        int numberOfRecords = record.getValue(1).asInt();
-        return numberOfRecords;
-    }
-
-    public List find(SearchQuery query) throws TorqueException {
-        final Criteria criterion = preSelect(query);
-        final List rows = MessageMapper
-                .doSelectJoinMessageFlags(criterion);
-        return rows;
-    }
-    
-    private Criteria preSelect(SearchQuery query) {
-        final Criteria results = new Criteria();
-        final List criteria = query.getCriterias();
-        if (criteria.size() == 1) {
-            final Criterion criterion = (Criterion) criteria.get(0);
-            if (criterion instanceof SearchQuery.UidCriterion) {
-                final SearchQuery.UidCriterion uidCriterion = (SearchQuery.UidCriterion) criterion;
-                preSelectUid(results, uidCriterion);
-            }
+    public List<Message> findInMailbox(MessageRange set, long mailboxId) {
+        final List<Message> results;
+        switch (set.getType()) {
+            case MessageRange.TYPE_UID:
+                final long from = set.getUidFrom();
+                final long to = set.getUidTo();
+                if (from == to) {
+                    results = findMessagesInMailboxWithUID(mailboxId, from);
+                } else if (to > 0) {
+                    results = findMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+                } else {
+                    results = findMessagesInMailboxAfterUID(mailboxId, from);
+                }
+                break;
+            default:
+                //TODO: Log?
+            case MessageRange.TYPE_ALL:
+                results = findMessagesInMailbox(mailboxId);
+                break;
         }
         return results;
     }
 
-    
-    private void preSelectUid(final Criteria results,
-            final SearchQuery.UidCriterion uidCriterion) {
-        final NumericRange[] ranges = uidCriterion.getOperator().getRange();
-        for (int i = 0; i < ranges.length; i++) {
-            final long low = ranges[i].getLowValue();
-            final long high = ranges[i].getHighValue();
-            if (low == Long.MAX_VALUE) {
-                results.add(MessageRowPeer.UID, high, Criteria.LESS_EQUAL);
-            } else if (low == high) {
-                results.add(MessageRowPeer.UID, low);
-            } else {
-                final Criteria.Criterion fromCriterion = results
-                        .getNewCriterion(MessageRowPeer.UID, new Long(low),
-                                Criteria.GREATER_EQUAL);
-                if (high > 0 && high < Long.MAX_VALUE) {
-                    final Criteria.Criterion toCriterion = results
-                            .getNewCriterion(MessageRowPeer.UID,
-                                    new Long(high), Criteria.LESS_EQUAL);
-                    fromCriterion.and(toCriterion);
+    @SuppressWarnings("unchecked")
+    private List<Message> findMessagesInMailboxAfterUID(long mailboxId, long uid) {
+        return entityManager.createNamedQuery("findMessagesInMailboxAfterUID")
+            .setParameter("idParam", mailboxId)
+            .setParameter("uidParam", uid).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List<Message> findMessagesInMailboxWithUID(long mailboxId, long uid) {
+        return entityManager.createNamedQuery("findMessagesInMailboxWithUID")
+            .setParameter("idParam", mailboxId)
+            .setParameter("uidParam", uid).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List<Message> findMessagesInMailboxBetweenUIDs(long mailboxId, long from, long to) {
+        return entityManager.createNamedQuery("findMessagesInMailboxBetweenUIDs")
+            .setParameter("idParam", mailboxId)
+            .setParameter("fromParam", from)
+            .setParameter("toParam", to).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List<Message> findMessagesInMailbox(long mailboxId) {
+        return entityManager.createNamedQuery("findMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+    }
+
+    public List<Message> findMarkedForDeletionInMailbox(final MessageRange set, final long mailboxId) {
+        final List<Message> results;
+        switch (set.getType()) {
+            case MessageRange.TYPE_UID:
+                final long from = set.getUidFrom();
+                final long to = set.getUidTo();
+                if (from == to) {
+                    results = findDeletedMessagesInMailboxWithUID(mailboxId, from);
+                } else if (to > 0) {
+                    results = findDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+                } else {
+                    results = findDeletedMessagesInMailboxAfterUID(mailboxId, from);
                 }
-                results.add(fromCriterion);
-            }
+                break;
+            default:
+                //TODO: Log?
+            case MessageRange.TYPE_ALL:
+                results = findDeletedMessagesInMailbox(mailboxId);
+                break;
         }
+        return results;
     }
     
-    public void delete(MessageRow messageRow) throws TorqueException {
-        Criteria todelc = new Criteria();
-        todelc
-                .add(MessageRowPeer.MAILBOX_ID, messageRow
-                        .getMailboxId());
-        todelc.add(MessageRowPeer.UID, messageRow.getUid());
-        MessageRowPeer.doDelete(todelc);
-    }
-    
-    public List findUnseen(final long mailboxId) throws TorqueException {
-        Criteria criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(MessageRowPeer.UID);
-        criteria.setLimit(1);
-        criteria.setSingleRecord(true);
-
-        criteria.addJoin(MessageFlagsPeer.MAILBOX_ID,
-                MessageRowPeer.MAILBOX_ID);
-        criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-
-        MessageMapper.addFlagsToCriteria(new Flags(Flags.Flag.SEEN), false, criteria);
-        criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
-        
-        final List messageRows = MessageRowPeer.doSelect(criteria);
-        return messageRows;
-    }
-    
-    public List findRecent(final long mailboxId) throws TorqueException {
-        final Criteria criteria = new Criteria();
-        criteria.addJoin(MessageFlagsPeer.MAILBOX_ID,
-                MessageRowPeer.MAILBOX_ID);
-        criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-        
-        MessageMapper.addFlagsToCriteria(new Flags(Flags.Flag.RECENT), true,
-                criteria);
-        criteria.add(MessageRowPeer.MAILBOX_ID, mailboxId);
-        
-        final List messageRows = MessageRowPeer.doSelect(criteria);
-        return messageRows;
-    }
-    
-    static List doSelectJoinMessageFlags(Criteria criteria)
-            throws TorqueException {
-    
-        MessageRowPeer.addSelectColumns(criteria);
-        int offset = MessageRowPeer.numColumns + 1;
-        MessageFlagsPeer.addSelectColumns(criteria);
-    
-        criteria
-                .addJoin(MessageRowPeer.MAILBOX_ID, MessageFlagsPeer.MAILBOX_ID);
-        criteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
-    
-        List rows = BasePeer.doSelect(criteria);
-        List result = new ArrayList(rows.size());
-    
-        for (int i = 0; i < rows.size(); i++) {
-            Record row = (Record) rows.get(i);
-    
-            Class omClass = MessageRowPeer.getOMClass();
-            MessageRow messageRow = (MessageRow) MessageRowPeer.row2Object(row,
-                    1, omClass);
-    
-            omClass = MessageFlagsPeer.getOMClass();
-            MessageFlags messageFlags = (MessageFlags) MessageFlagsPeer
-                    .row2Object(row, offset, omClass);
-            messageRow.setMessageFlags(messageFlags);
+    @SuppressWarnings("unchecked")
+    private List<Message> findDeletedMessagesInMailbox(long mailboxId) {
+        return entityManager.createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+    }
     
-            result.add(messageRow);
-        }
-        return result;
+    @SuppressWarnings("unchecked")
+    private List<Message> findDeletedMessagesInMailboxAfterUID(long mailboxId, long uid) {
+        return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+            .setParameter("idParam", mailboxId)
+            .setParameter("uidParam", uid).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List<Message> findDeletedMessagesInMailboxWithUID(long mailboxId, long uid) {
+        return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+            .setParameter("idParam", mailboxId)
+            .setParameter("uidParam", uid).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private List<Message> findDeletedMessagesInMailboxBetweenUIDs(long mailboxId, long from, long to) {
+        return entityManager.createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
+            .setParameter("idParam", mailboxId)
+            .setParameter("fromParam", from)
+            .setParameter("toParam", to).getResultList();
     }
+    
 
-    static void addFlagsToCriteria(Flags flags, boolean value, Criteria c) {
-        if (flags.contains(Flags.Flag.ANSWERED)) {
-            c.add(MessageFlagsPeer.ANSWERED, value);
-        }
-        if (flags.contains(Flags.Flag.DELETED)) {
-            c.add(MessageFlagsPeer.DELETED, value);
-        }
-        if (flags.contains(Flags.Flag.DRAFT)) {
-            c.add(MessageFlagsPeer.DRAFT, value);
-        }
-        if (flags.contains(Flags.Flag.FLAGGED)) {
-            c.add(MessageFlagsPeer.FLAGGED, value);
-        }
-        if (flags.contains(Flags.Flag.RECENT)) {
-            c.add(MessageFlagsPeer.RECENT, value);
-        }
-        if (flags.contains(Flags.Flag.SEEN)) {
-            c.add(MessageFlagsPeer.SEEN, value);
-        }
+    public void resetRecentMessages(long mailboxId) {
+        entityManager.createNamedQuery("resetRecentMessages").setParameter("idParam", mailboxId).executeUpdate();
+    }
+    
+    public long countMessagesInMailbox(long mailboxId) {
+        return (Long) entityManager.createNamedQuery("countMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
+    }
+    
+    public long countUnseenMessagesInMailbox(long mailboxId){
+        return (Long) entityManager.createNamedQuery("countUnseenMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
     }
 
-    public void save(MessageFlags messageFlags) throws TorqueException {
-        messageFlags.save();
+    @SuppressWarnings("unchecked")
+    public List<Message> searchMailbox(long mailboxId, SearchQuery query) {
+        final String jql = formulateJQL(mailboxId, query);
+        return entityManager.createQuery(jql).getResultList();
+    }
+
+    private String formulateJQL(long mailboxId, SearchQuery query) {
+        final StringBuilder queryBuilder = new StringBuilder(50);
+        queryBuilder.append("SELECT message FROM Message message WHERE message.mailboxId = ").append(mailboxId);
+        final List<Criterion> criteria = query.getCriterias();
+        if (criteria.size() == 1) {
+            final Criterion firstCriterion = criteria.get(0);
+            if (firstCriterion instanceof SearchQuery.UidCriterion) {
+                final SearchQuery.UidCriterion uidCriterion = (SearchQuery.UidCriterion) firstCriterion;
+                final NumericRange[] ranges = uidCriterion.getOperator().getRange();
+                for (int i = 0; i < ranges.length; i++) {
+                    final long low = ranges[i].getLowValue();
+                    final long high = ranges[i].getHighValue();
+                    
+                    if (low == Long.MAX_VALUE) {
+                        queryBuilder.append(" AND message.uid<=").append(high);
+                    } else if (low == high) {
+                        queryBuilder.append(" AND message.uid=").append(low);
+                    } else {
+                        queryBuilder.append(" AND message.uid BETWEEN ").append(low).append(" AND ").append(high);
+                    }
+                }
+            }
+        }
+        final String jql = queryBuilder.toString();
+        return jql;
+    }
+    
+    public void delete(Message message)  {
+        entityManager.remove(message);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public List<Message> findUnseenMessagesInMailboxOrderByUid(final long mailboxId)  {
+        return entityManager.createNamedQuery("findUnseenMessagesInMailboxOrderByUid").setParameter("idParam", mailboxId).getResultList();
+    }
+    
+    @SuppressWarnings("unchecked")
+    public List<Message> findRecentMessagesInMailbox(final long mailboxId) {
+        return entityManager.createNamedQuery("findRecentMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
     }
 
-    public void save(MessageRow messageRow) throws TorqueException {
-        messageRow.save();
+    public void save(Message message) {
+        entityManager.persist(message);
     }
 }

Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/map/MessageMapper.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Header.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,119 @@
+/****************************************************************
+ * 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.jpa.om;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class Header implements Comparable<Header> {
+    
+    private static final String TOSTRING_SEP = " ";
+
+    @Id @GeneratedValue private long id;
+
+    /** The value for the lineNumber field */
+    @Basic(optional=false) private int lineNumber;
+
+    /** The value for the field field */
+    @Basic(optional=false) private String field;
+
+    /** The value for the value field */
+    @Column(length=512)
+    @Basic(optional=false) private String value;
+    
+    /**
+     * For JPA use only.
+     */
+    @Deprecated
+    public Header() {}
+    
+    /**
+     * Copies the content of an existing header.
+     * @param mailboxId mailbox ID
+     * @param uid UI
+     * @param header
+     */
+    public Header(Header header) {
+        this(header.getLineNumber(), header.field, header.getValue());
+    }
+    
+    public Header(int lineNumber, String field, String value) {
+        super();
+        this.lineNumber = lineNumber;
+        this.field = field;
+        this.value = value;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public int getLineNumber() {
+        return lineNumber;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + (int) (id ^ (id >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final Header other = (Header) obj;
+        if (id != other.id)
+            return false;
+        return true;
+    }
+
+    public String toString()
+    {
+        final String retValue =  "Header ( "
+            + "id = " + this.id + TOSTRING_SEP
+            + "lineNumber = " + this.lineNumber + TOSTRING_SEP
+            + "field = " + this.field + TOSTRING_SEP
+            + "value = " + this.value + TOSTRING_SEP
+            + " )";
+        return retValue;
+    }
+
+    /**
+     * Natural sort is mailbox, (message) UID then line number
+     */
+    public int compareTo(final Header header) {
+        final int result = lineNumber - header.lineNumber;
+        return result;
+    }
+}

Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Mailbox.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,147 @@
+/****************************************************************
+ * 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.jpa.om;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+
+@Entity
+@NamedQueries({
+    @NamedQuery(name="findMailboxById",
+        query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.mailboxId = :idParam"),
+    @NamedQuery(name="findMailboxByName",
+        query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name = :nameParam"),
+    @NamedQuery(name="countMailboxesWithName",
+        query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name = :nameParam"),
+    @NamedQuery(name="deleteAll",
+                query="DELETE FROM Mailbox mailbox"),
+    @NamedQuery(name="findMailboxWithNameLike",
+                query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam")            
+})
+public class Mailbox {
+    
+    private static final String TAB = " ";
+
+    /** The value for the mailboxId field */
+    @Id @GeneratedValue private long mailboxId;
+    
+    /** The value for the name field */
+    @Basic(optional=false) private String name;
+
+    /** The value for the uidValidity field */
+    @Basic(optional=false) private long uidValidity;
+
+    
+    /** The value for the lastUid field */
+    @Basic(optional=false) private long lastUid = 0;
+
+    
+    /** The value for the messageCount field */
+    @Basic(optional=false) private int messageCount = 0;
+
+    
+    /** The value for the size field */
+    @Basic(optional=false) private long size = 0;
+
+    /**
+     * JPA only
+     */
+    @Deprecated
+    public Mailbox() {
+        super();
+    }
+    
+    public Mailbox(String name, int uidValidity) {
+        this();
+        this.name= name;
+        this.uidValidity = uidValidity;
+    }
+
+    public long getLastUid() {
+        return lastUid;
+    }
+
+    public long getMailboxId() {
+        return mailboxId;
+    }
+
+    public int getMessageCount() {
+        return messageCount;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public long getSize() {
+        return size;
+    }
+
+    public long getUidValidity() {
+        return uidValidity;
+    }
+
+    public void consumeUid() {
+        ++lastUid;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String toString()
+    {
+        final String retValue = "Mailbox ( "
+            + "mailboxId = " + this.mailboxId + TAB
+            + "name = " + this.name + TAB
+            + "uidValidity = " + this.uidValidity + TAB
+            + "lastUid = " + this.lastUid + TAB
+            + "messageCount = " + this.messageCount + TAB
+            + "size = " + this.size + TAB
+            + " )";
+        return retValue;
+    }
+
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        final Mailbox other = (Mailbox) obj;
+        if (mailboxId != other.mailboxId)
+            return false;
+        return true;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org