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 [3/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/...

Added: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Message.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Message.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Message.java (added)
+++ james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/Message.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,324 @@
+/****************************************************************
+ * 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 java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+import javax.mail.Flags;
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+
+@Entity
+@IdClass(Message.MessageId.class)
+@NamedQueries({
+    @NamedQuery(name="resetRecentMessages",
+            query="UPDATE Message message SET message.recent = FALSE WHERE message.mailboxId = :idParam AND message.recent = FALSE"),
+    @NamedQuery(name="findRecentMessagesInMailbox",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.recent = TRUE"),
+    @NamedQuery(name="findUnseenMessagesInMailboxOrderByUid",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.seen = FALSE ORDER BY message.uid ASC"),
+    @NamedQuery(name="findMessagesInMailbox",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam"),
+    @NamedQuery(name="findMessagesInMailboxBetweenUIDs",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND :toParam"),        
+    @NamedQuery(name="findMessagesInMailboxWithUID",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid=:uidParam"),                    
+    @NamedQuery(name="findMessagesInMailboxAfterUID",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid>=:uidParam"),                    
+    @NamedQuery(name="findDeletedMessagesInMailbox",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.deleted=TRUE"),                   
+    @NamedQuery(name="findDeletedMessagesInMailboxBetweenUIDs",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND :toParam AND message.deleted=TRUE"),        
+    @NamedQuery(name="findDeletedMessagesInMailboxWithUID",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid=:uidParam AND message.deleted=TRUE"),                    
+    @NamedQuery(name="findDeletedMessagesInMailboxAfterUID",
+            query="SELECT message FROM Message message WHERE message.mailboxId = :idParam AND message.uid>=:uidParam AND message.deleted=TRUE"),                    
+    @NamedQuery(name="countUnseenMessagesInMailbox",
+            query="SELECT COUNT(message) FROM Message message WHERE message.mailboxId = :idParam AND message.seen=FALSE"),                     
+    @NamedQuery(name="countMessagesInMailbox",
+            query="SELECT COUNT(message) FROM Message message WHERE message.mailboxId = :idParam")                     
+})
+public class Message {
+
+    private static final String TOSTRING_SEPARATOR = " ";
+
+    /** Identifies composite key */
+    public static class MessageId implements Serializable {
+        private static final long serialVersionUID = 7847632032426660997L;
+        /** The value for the mailboxId field */
+        public long mailboxId;
+        /** The value for the uid field */
+        public long uid;
+
+        public MessageId() {}
+
+        @Override
+        public int hashCode() {
+            final int PRIME = 31;
+            int result = 1;
+            result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+            result = PRIME * result + (int) (uid ^ (uid >>> 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 MessageId other = (MessageId) obj;
+            if (mailboxId != other.mailboxId)
+                return false;
+            if (uid != other.uid)
+                return false;
+            return true;
+        }
+    }
+
+    /** The value for the mailboxId field */
+    @Id private long mailboxId;
+
+    /** The value for the uid field */
+    @Id private long uid;
+
+    /** The value for the internalDate field */
+    @Basic(optional=false) private Date internalDate;
+
+    /** The value for the size field */
+    @Basic(optional=false) private int size = 0;
+
+    /** The value for the answered field */
+    @Basic(optional=false) private boolean answered = false;
+
+    /** The value for the deleted field */
+    @Basic(optional=false) private boolean deleted = false;
+
+    /** The value for the draft field */
+    @Basic(optional=false) private boolean draft = false;
+
+    /** The value for the flagged field */
+    @Basic(optional=false) private boolean flagged = false;
+
+    /** The value for the recent field */
+    @Basic(optional=false) private boolean recent = false;
+
+    /** The value for the seen field */
+    @Basic(optional=false) private boolean seen = false;
+
+    /** The value for the body field. Lazy loaded */
+    @Basic(optional=false, fetch=FetchType.LAZY) private byte[] body;
+    /** Headers for this message */
+    @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY) private List<Header> headers;
+
+    /**
+     * For enhancement only.
+     */
+    @Deprecated
+    public Message() {}
+
+    public Message(long mailboxId, long uid, Date internalDate, int size, Flags flags, byte[] body, final List<Header> headers) {
+        super();
+        this.mailboxId = mailboxId;
+        this.uid = uid;
+        this.internalDate = internalDate;
+        this.size = size;
+        this.body = body;
+        setFlags(flags);
+        this.headers = new ArrayList<Header>(headers);
+    }
+
+    /**
+     * Constructs a copy of the given message.
+     * All properties are cloned except mailbox and UID.
+     * @param mailboxId new mailbox ID
+     * @param uid new UID
+     * @param original message to be copied, not null
+     */
+    public Message(long mailboxId, long uid, Message original) {
+        super();
+        this.mailboxId = mailboxId;
+        this.uid = uid;
+        this.internalDate = original.getInternalDate();
+        this.size = original.getSize();
+        this.answered = original.isAnswered();
+        this.deleted = original.isDeleted();
+        this.draft = original.isDraft();
+        this.flagged = original.isFlagged();
+        this.recent = original.isRecent();
+        this.seen = original.isSeen();
+        this.body = original.getBody();
+        final List<Header> originalHeaders = original.getHeaders();
+        if (originalHeaders == null) {
+            this.headers = new ArrayList<Header>();
+        } else {
+            this.headers = new ArrayList<Header>(originalHeaders.size());
+            for (Header header:originalHeaders) {
+                this.headers.add(new Header(header));
+            }
+        }
+    }
+
+    public Date getInternalDate() {
+        return internalDate;
+    }
+
+    public long getMailboxId() {
+        return mailboxId;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public long getUid() {
+        return uid;
+    }
+
+    public byte[] getBody() {
+        return body;
+    }
+
+    public boolean isAnswered() {
+        return answered;
+    }
+
+    public boolean isDeleted() {
+        return deleted;
+    }
+
+    public boolean isDraft() {
+        return draft;
+    }
+
+    public boolean isFlagged() {
+        return flagged;
+    }
+
+    public boolean isRecent() {
+        return recent;
+    }
+
+    public boolean isSeen() {
+        return seen;
+    }
+
+    /**
+     * Gets a read-only list of headers.
+     * @return unmodifiable list of headers, not null
+     */
+    public List<Header> getHeaders() {
+        return Collections.unmodifiableList(headers);
+    }
+    
+    public void setFlags(Flags flags) {
+        answered = flags.contains(Flags.Flag.ANSWERED);
+        deleted = flags.contains(Flags.Flag.DELETED);
+        draft = flags.contains(Flags.Flag.DRAFT);
+        flagged = flags.contains(Flags.Flag.FLAGGED);
+        recent = flags.contains(Flags.Flag.RECENT);
+        seen = flags.contains(Flags.Flag.SEEN);
+    }
+
+    /**
+     * Creates a new flags instance populated
+     * with the current flag data.
+     * @return new instance, not null
+     */
+    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() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+        result = PRIME * result + (int) (uid ^ (uid >>> 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 Message other = (Message) obj;
+        if (mailboxId != other.mailboxId)
+            return false;
+        if (uid != other.uid)
+            return false;
+        return true;
+    }
+
+    public String toString()
+    {
+        final String retValue = 
+            "mailbox("
+            + "mailboxId = " + this.mailboxId + TOSTRING_SEPARATOR
+            + "uid = " + this.uid + TOSTRING_SEPARATOR
+            + "internalDate = " + this.internalDate + TOSTRING_SEPARATOR
+            + "size = " + this.size + TOSTRING_SEPARATOR
+            + "answered = " + this.answered + TOSTRING_SEPARATOR
+            + "deleted = " + this.deleted + TOSTRING_SEPARATOR
+            + "draft = " + this.draft + TOSTRING_SEPARATOR
+            + "flagged = " + this.flagged + TOSTRING_SEPARATOR
+            + "recent = " + this.recent + TOSTRING_SEPARATOR
+            + "seen = " + this.seen + TOSTRING_SEPARATOR
+            + " )";
+
+        return retValue;
+    }
+}

Copied: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/openjpa/OpenJPAMailboxMapper.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/om/openjpa/OpenJPAMailboxMapper.java?p2=james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/openjpa/OpenJPAMailboxMapper.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/om/openjpa/OpenJPAMailboxMapper.java Wed Dec 31 02:44:55 2008
@@ -17,116 +17,37 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.jpa.om;
+package org.apache.james.imap.jpa.om.openjpa;
 
-import java.util.List;
+import javax.persistence.EntityManager;
 
-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 org.apache.james.imap.jpa.map.MailboxMapper;
+import org.apache.james.imap.jpa.om.Mailbox;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
 
 /**
  * Data access management for mailbox.
  */
-public class MailboxMapper {
-
-    public void save(MailboxRow mailbox) throws TorqueException {
-        mailbox.save();
-    }
-
-    /**
-     * 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());
+public class OpenJPAMailboxMapper extends MailboxMapper {
+    
+    public OpenJPAMailboxMapper(EntityManager entityManager) {
+        super(entityManager);
+    }
+
+    public Mailbox consumeNextUid(long mailboxId) {
+        OpenJPAEntityManager oem = OpenJPAPersistence.cast(entityManager);
+        final boolean originalLocking = oem.getOptimistic();
+        oem.setOptimistic(false);
+        oem.getTransaction().begin();
+        try {
+            Mailbox mailbox = (Mailbox) entityManager.createNamedQuery("findMailboxById").setParameter("idParam", mailboxId).getSingleResult();
+            mailbox.consumeUid();
+            oem.persist(mailbox);
+            oem.getTransaction().commit();
+            return mailbox;
+        } finally {
+            oem.setOptimistic(originalLocking);
         }
-        return criteria;
     }
-
-    public MailboxRow findById(long mailboxId) throws TorqueException {
-        return MailboxRowPeer.retrieveByPK(mailboxId);
-    }
-
 }

Propchange: james/protocols/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/om/openjpa/OpenJPAMailboxMapper.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageBuilder.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageBuilder.java?rev=730371&view=auto
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageBuilder.java (added)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageBuilder.java Wed Dec 31 02:44:55 2008
@@ -0,0 +1,66 @@
+/****************************************************************
+ * 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;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.mail.Flags;
+
+import org.apache.james.imap.jpa.om.Header;
+import org.apache.james.imap.jpa.om.Message;
+
+public class MessageBuilder {
+    
+    public long mailboxId = 113;
+    public long uid = 776;
+    public Date internalDate = new Date();
+    public int size = 8867;
+    public Flags flags = new Flags();
+    public byte[] body = {};
+    public final List<Header> headers = new ArrayList<Header>();
+    public int lineNumber = 0;
+    
+    public Message build() {
+        Message result = new Message(mailboxId, uid, internalDate, size, flags, body, headers);
+        return result;
+    }
+    
+    public Header header(String field, String value) {
+        Header header = new Header(++lineNumber, field, value);
+        headers.add(header);
+        return header;
+    }
+
+    public void setKey(int mailboxId, int uid) {
+        this.uid = uid;
+        this.mailboxId = mailboxId;
+    }
+    
+    public void setFlags(boolean seen, boolean flagged, boolean answered,
+            boolean draft, boolean deleted, boolean recent) {
+        if (seen) flags.add(Flags.Flag.SEEN);
+        if (flagged) flags.add(Flags.Flag.FLAGGED);
+        if (answered) flags.add(Flags.Flag.ANSWERED);
+        if (draft) flags.add(Flags.Flag.DRAFT);
+        if (deleted) flags.add(Flags.Flag.DELETED);
+        if (recent) flags.add(Flags.Flag.RECENT);
+    }
+}

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageRowUtilsTest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageRowUtilsTest.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageRowUtilsTest.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/MessageRowUtilsTest.java Wed Dec 31 02:44:55 2008
@@ -21,10 +21,10 @@
 
 import junit.framework.TestCase;
 
-import org.apache.james.imap.jpa.om.MessageRow;
-
-public class MessageRowUtilsTest extends TestCase {
+import org.apache.james.imap.jpa.om.Message;
 
+public class MessageRowUtilsTest extends TestCase {    
+    
     protected void setUp() throws Exception {
         super.setUp();
     }
@@ -35,27 +35,27 @@
 
     public void testShouldReturnPositiveWhenFirstGreaterThanSecond()
             throws Exception {
-        MessageRow one = new MessageRow();
-        one.setUid(100);
-        MessageRow two = new MessageRow();
-        two.setUid(99);
+        Message one = buildMessage(100);
+        Message two = buildMessage(99);
         assertTrue(MessageRowUtils.getUidComparator().compare(one, two) > 0);
     }
 
+    private Message buildMessage(int uid) {
+        MessageBuilder builder = new MessageBuilder();
+        builder.uid = uid;
+        return builder.build();
+    }
+
     public void testShouldReturnNegativeWhenFirstLessThanSecond()
             throws Exception {
-        MessageRow one = new MessageRow();
-        one.setUid(98);
-        MessageRow two = new MessageRow();
-        two.setUid(99);
+        Message one = buildMessage(98);
+        Message two = buildMessage(99);
         assertTrue(MessageRowUtils.getUidComparator().compare(one, two) < 0);
     }
 
     public void testShouldReturnZeroWhenFirstEqualsSecond() throws Exception {
-        MessageRow one = new MessageRow();
-        one.setUid(90);
-        MessageRow two = new MessageRow();
-        two.setUid(90);
+        Message one = buildMessage(90);
+        Message two = buildMessage(90);
         assertEquals(0, MessageRowUtils.getUidComparator().compare(one, two));
     }
 }

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderComplexMultipartTest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderComplexMultipartTest.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderComplexMultipartTest.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderComplexMultipartTest.java Wed Dec 31 02:44:55 2008
@@ -197,7 +197,7 @@
             throws Exception {
         List headers = headers(position);
         assertEquals(1, headers.size());
-        Header header = (Header) headers.get(0);
+        ResultHeader header = (ResultHeader) headers.get(0);
         assertEquals(CONTENT_TYPE, header.getName());
         assertEquals(contentType, header.getValue());
     }

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderMultipartAlternativeTest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderMultipartAlternativeTest.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderMultipartAlternativeTest.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/PartContentBuilderMultipartAlternativeTest.java Wed Dec 31 02:44:55 2008
@@ -118,7 +118,7 @@
             throws Exception {
         List headers = headers(mail, position);
         assertEquals(1, headers.size());
-        Header header = (Header) headers.get(0);
+        ResultHeader header = (ResultHeader) headers.get(0);
         assertEquals(CONTENT_TYPE, header.getName());
         assertEquals(contentType, header.getValue());
     }

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsMultipartMixedTest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsMultipartMixedTest.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsMultipartMixedTest.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsMultipartMixedTest.java Wed Dec 31 02:44:55 2008
@@ -26,9 +26,7 @@
 import junit.framework.TestCase;
 
 import org.apache.james.api.imap.ImapConstants;
-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.Message;
 import org.apache.james.mailboxmanager.SearchQuery;
 
 public class SearchUtilsMultipartMixedTest extends TestCase {
@@ -105,7 +103,7 @@
             + "  Than both your poets can in praise devise.\r\n"
             + "\r\n--2.50290787509--\r\n" + "\r\n--1729--\r\n";
 
-    MessageRow row;
+    Message row;
 
     MessageSearches searches;
 
@@ -113,19 +111,15 @@
 
     protected void setUp() throws Exception {
         super.setUp();
-        row = new MessageRow();
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_FROM,
-                "Alex <alex@example.org"));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_TO,
-                "Harry <harry@example.org"));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_SUBJECT,
-                "A Mixed Multipart Mail"));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_DATE,
-                "Thu, 14 Feb 2008 12:00:00 +0000 (GMT)"));
-        row.addMessageHeader(new MessageHeader("Content-Type",
-                "multipart/mixed;boundary=1729"));
-        row.addMessageBody(new MessageBody(Charset.forName("us-ascii").encode(
-                BODY).array()));
+        final MessageBuilder builder = new MessageBuilder();
+        
+        builder.header(ImapConstants.RFC822_FROM, "Alex <alex@example.org");
+        builder.header(ImapConstants.RFC822_TO, "Harry <harry@example.org");
+        builder.header(ImapConstants.RFC822_SUBJECT, "A Mixed Multipart Mail");
+        builder.header(ImapConstants.RFC822_DATE, "Thu, 14 Feb 2008 12:00:00 +0000 (GMT)");
+        builder.header("Content-Type", "multipart/mixed;boundary=1729");
+        builder.body = Charset.forName("us-ascii").encode(BODY).array();
+        row = builder.build();
         searches = new MessageSearches();
         recent = new ArrayList();
     }

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsRFC822Test.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsRFC822Test.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsRFC822Test.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsRFC822Test.java Wed Dec 31 02:44:55 2008
@@ -26,9 +26,7 @@
 import junit.framework.TestCase;
 
 import org.apache.james.api.imap.ImapConstants;
-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.Message;
 import org.apache.james.mailboxmanager.SearchQuery;
 
 public class SearchUtilsRFC822Test extends TestCase {
@@ -45,7 +43,7 @@
             + "It has " + RHUBARD + ".\r\n" + "It has " + CUSTARD + ".\r\n"
             + "It needs naught else.\r\n";
 
-    MessageRow row;
+    Message row;
 
     MessageSearches searches;
 
@@ -54,17 +52,13 @@
     protected void setUp() throws Exception {
         super.setUp();
         recent = new ArrayList();
-        row = new MessageRow();
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_FROM,
-                "Alex <alex@example.org"));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_TO,
-                FROM_ADDRESS));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_SUBJECT,
-                "A " + SUBJECT_PART + " Multipart Mail"));
-        row.addMessageHeader(new MessageHeader(ImapConstants.RFC822_DATE,
-                "Thu, 14 Feb 2008 12:00:00 +0000 (GMT)"));
-        row.addMessageBody(new MessageBody(Charset.forName("us-ascii").encode(
-                BODY).array()));
+        MessageBuilder builder = new MessageBuilder();
+        builder.header(ImapConstants.RFC822_FROM, "Alex <alex@example.org");
+        builder.header(ImapConstants.RFC822_TO, FROM_ADDRESS);
+        builder.header(ImapConstants.RFC822_SUBJECT, "A " + SUBJECT_PART + " Multipart Mail");
+        builder.header(ImapConstants.RFC822_DATE, "Thu, 14 Feb 2008 12:00:00 +0000 (GMT)");
+        builder.body = Charset.forName("us-ascii").encode(BODY).array();
+        row = builder.build();
         searches = new MessageSearches();
     }
 

Modified: james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsTest.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsTest.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsTest.java (original)
+++ james/protocols/imap/trunk/jpa/src/test/java/org/apache/james/imap/jpa/SearchUtilsTest.java Wed Dec 31 02:44:55 2008
@@ -28,11 +28,8 @@
 import junit.framework.TestCase;
 
 import org.apache.james.api.imap.ImapConstants;
-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.Message;
 import org.apache.james.mailboxmanager.SearchQuery;
-import org.apache.torque.TorqueException;
 
 public class SearchUtilsTest extends TestCase {
 
@@ -52,17 +49,17 @@
 
     private static final String TEXT = RHUBARD + RHUBARD + RHUBARD;
 
-    MessageRow row;
+    MessageBuilder builder;
 
     MessageSearches searches;
 
-    Collection recent;
+    Collection<Long> recent;
 
     protected void setUp() throws Exception {
         super.setUp();
-        recent = new ArrayList();
-        row = new MessageRow();
-        row.setUid(1009);
+        recent = new ArrayList<Long>();
+        builder = new MessageBuilder();
+        builder.uid = 1009;
         searches = new MessageSearches();
     }
 
@@ -71,7 +68,8 @@
     }
 
     public void testMatchSizeLessThan() throws Exception {
-        row.setSize(SIZE);
+        builder.size = SIZE;
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.sizeLessThan(SIZE - 1), row,
                 recent));
         assertFalse(searches.isMatch(SearchQuery.sizeLessThan(SIZE), row,
@@ -83,7 +81,8 @@
     }
 
     public void testMatchSizeMoreThan() throws Exception {
-        row.setSize(SIZE);
+        builder.size = SIZE;
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.sizeGreaterThan(SIZE - 1), row,
                 recent));
         assertFalse(searches.isMatch(SearchQuery.sizeGreaterThan(SIZE), row,
@@ -95,7 +94,8 @@
     }
 
     public void testMatchSizeEquals() throws Exception {
-        row.setSize(SIZE);
+        builder.size = SIZE;
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.sizeEquals(SIZE - 1), row,
                 recent));
         assertTrue(searches.isMatch(SearchQuery.sizeEquals(SIZE), row, recent));
@@ -106,7 +106,8 @@
     }
 
     public void testMatchInternalDateEquals() throws Exception {
-        row.setInternalDate(SUN_SEP_9TH_2001);
+        builder.internalDate = SUN_SEP_9TH_2001;
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.internalDateOn(9, 9, 2000),
                 row, recent));
         assertFalse(searches.isMatch(SearchQuery.internalDateOn(8, 9, 2001),
@@ -120,7 +121,8 @@
     }
 
     public void testMatchInternalDateBefore() throws Exception {
-        row.setInternalDate(SUN_SEP_9TH_2001);
+        builder.internalDate = SUN_SEP_9TH_2001;
+        Message row = builder.build();
         assertFalse(searches.isMatch(
                 SearchQuery.internalDateBefore(9, 9, 2000), row, recent));
         assertFalse(searches.isMatch(
@@ -134,7 +136,8 @@
     }
 
     public void testMatchInternalDateAfter() throws Exception {
-        row.setInternalDate(SUN_SEP_9TH_2001);
+        builder.internalDate = SUN_SEP_9TH_2001;
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.internalDateAfter(9, 9, 2000),
                 row, recent));
         assertTrue(searches.isMatch(SearchQuery.internalDateAfter(8, 9, 2001),
@@ -148,7 +151,8 @@
     }
 
     public void testMatchHeaderDateAfter() throws Exception {
-        addHeader(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 9,
                 9, 2000), row, recent));
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 8,
@@ -164,7 +168,8 @@
     }
 
     public void testShouldMatchCapsHeaderDateAfter() throws Exception {
-        addHeader(DATE_FIELD.toUpperCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toUpperCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 9,
                 9, 2000), row, recent));
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 8,
@@ -180,7 +185,8 @@
     }
 
     public void testShouldMatchLowersHeaderDateAfter() throws Exception {
-        addHeader(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 9,
                 9, 2000), row, recent));
         assertTrue(searches.isMatch(SearchQuery.headerDateAfter(DATE_FIELD, 8,
@@ -196,7 +202,8 @@
     }
 
     public void testMatchHeaderDateOn() throws Exception {
-        addHeader(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 9, 9,
                 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 8, 9,
@@ -212,7 +219,8 @@
     }
 
     public void testShouldMatchCapsHeaderDateOn() throws Exception {
-        addHeader(DATE_FIELD.toUpperCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toUpperCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 9, 9,
                 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 8, 9,
@@ -228,7 +236,8 @@
     }
 
     public void testShouldMatchLowersHeaderDateOn() throws Exception {
-        addHeader(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 9, 9,
                 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateOn(DATE_FIELD, 8, 9,
@@ -244,7 +253,8 @@
     }
 
     public void testMatchHeaderDateBefore() throws Exception {
-        addHeader(DATE_FIELD, RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 9, 9, 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
@@ -260,7 +270,8 @@
     }
 
     public void testShouldMatchCapsHeaderDateBefore() throws Exception {
-        addHeader(DATE_FIELD.toUpperCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 9, 9, 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
@@ -276,7 +287,8 @@
     }
 
     public void testShouldMatchLowersHeaderDateBefore() throws Exception {
-        addHeader(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        builder.header(DATE_FIELD.toLowerCase(), RFC822_SUN_SEP_9TH_2001);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
                 9, 9, 2000), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerDateBefore(DATE_FIELD,
@@ -292,7 +304,8 @@
     }
 
     public void testMatchHeaderContainsCaps() throws Exception {
-        addHeader(SUBJECT_FIELD, TEXT.toUpperCase());
+        builder.header(SUBJECT_FIELD, TEXT.toUpperCase());
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
@@ -306,7 +319,8 @@
     }
 
     public void testMatchHeaderContainsLowers() throws Exception {
-        addHeader(SUBJECT_FIELD, TEXT.toLowerCase());
+        builder.header(SUBJECT_FIELD, TEXT.toUpperCase());
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
@@ -320,7 +334,8 @@
     }
 
     public void testMatchHeaderContains() throws Exception {
-        addHeader(SUBJECT_FIELD, TEXT);
+        builder.header(SUBJECT_FIELD, TEXT.toUpperCase());
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
@@ -334,7 +349,8 @@
     }
 
     public void testShouldMatchLowerHeaderContains() throws Exception {
-        addHeader(SUBJECT_FIELD.toLowerCase(), TEXT);
+        builder.header(SUBJECT_FIELD.toLowerCase(), TEXT);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
@@ -348,7 +364,8 @@
     }
 
     public void testShouldMatchCapsHeaderContains() throws Exception {
-        addHeader(SUBJECT_FIELD.toUpperCase(), TEXT);
+        builder.header(SUBJECT_FIELD.toUpperCase(), TEXT);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
                 CUSTARD), row, recent));
         assertFalse(searches.isMatch(SearchQuery.headerContains(DATE_FIELD,
@@ -362,7 +379,8 @@
     }
 
     public void testMatchHeaderExists() throws Exception {
-        addHeader(SUBJECT_FIELD, TEXT);
+        builder.header(SUBJECT_FIELD, TEXT);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
         assertTrue(searches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
@@ -370,7 +388,8 @@
     }
 
     public void testShouldMatchLowersHeaderExists() throws Exception {
-        addHeader(SUBJECT_FIELD.toLowerCase(), TEXT);
+        builder.header(SUBJECT_FIELD.toLowerCase(), TEXT);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
         assertTrue(searches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
@@ -378,7 +397,8 @@
     }
 
     public void testShouldMatchUppersHeaderExists() throws Exception {
-        addHeader(SUBJECT_FIELD.toUpperCase(), TEXT);
+        builder.header(SUBJECT_FIELD.toLowerCase(), TEXT);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.headerExists(DATE_FIELD), row,
                 recent));
         assertTrue(searches.isMatch(SearchQuery.headerExists(SUBJECT_FIELD),
@@ -386,7 +406,8 @@
     }
 
     public void testShouldMatchUidRange() throws Exception {
-        row.setPrimaryKey(1, 1729);
+        builder.setKey(1, 1729);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.uid(range(1, 1)), row, recent));
         assertFalse(searches.isMatch(SearchQuery.uid(range(1728, 1728)), row,
                 recent));
@@ -415,7 +436,8 @@
     }
 
     public void testShouldMatchSeenFlagSet() throws Exception {
-        setFlags(true, false, false, false, false, false);
+        builder.setFlags(true, false, false, false, false, false);
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
@@ -431,7 +453,8 @@
     }
 
     public void testShouldMatchAnsweredFlagSet() throws Exception {
-        setFlags(false, false, true, false, false, false);
+        builder.setFlags(false, false, true, false, false, false);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
@@ -447,7 +470,8 @@
     }
 
     public void testShouldMatchFlaggedFlagSet() throws Exception {
-        setFlags(false, true, false, false, false, false);
+        builder.setFlags(false, true, false, false, false, false);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
         assertTrue(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
@@ -463,7 +487,8 @@
     }
 
     public void testShouldMatchDraftFlagSet() throws Exception {
-        setFlags(false, false, false, true, false, false);
+        builder.setFlags(false, false, false, true, false, false);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
@@ -479,7 +504,8 @@
     }
 
     public void testShouldMatchDeletedFlagSet() throws Exception {
-        setFlags(false, false, false, false, true, false);
+        builder.setFlags(false, false, false, false, true, false);
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.FLAGGED),
@@ -495,7 +521,8 @@
     }
 
     public void testShouldMatchSeenRecentSet() throws Exception {
-        setFlags(false, false, false, false, false, false);
+        builder.setFlags(false, false, false, false, false, false);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertFalse(searches.isMatch(SearchQuery.flagIsSet(Flags.Flag.SEEN),
                 row, recent));
@@ -512,7 +539,8 @@
     }
 
     public void testShouldMatchSeenFlagUnSet() throws Exception {
-        setFlags(false, true, true, true, true, true);
+        builder.setFlags(false, true, true, true, true, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertTrue(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -529,7 +557,8 @@
     }
 
     public void testShouldMatchAnsweredFlagUnSet() throws Exception {
-        setFlags(true, true, false, true, true, true);
+        builder.setFlags(true, true, false, true, true, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertFalse(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -546,7 +575,8 @@
     }
 
     public void testShouldMatchFlaggedFlagUnSet() throws Exception {
-        setFlags(true, false, true, true, true, true);
+        builder.setFlags(true, false, true, true, true, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertFalse(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -563,7 +593,8 @@
     }
 
     public void testShouldMatchDraftFlagUnSet() throws Exception {
-        setFlags(true, true, true, false, true, true);
+        builder.setFlags(true, true, true, false, true, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertFalse(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -580,7 +611,8 @@
     }
 
     public void testShouldMatchDeletedFlagUnSet() throws Exception {
-        setFlags(true, true, true, true, false, true);
+        builder.setFlags(true, true, true, true, false, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid()));
         assertFalse(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -597,7 +629,8 @@
     }
 
     public void testShouldMatchSeenRecentUnSet() throws Exception {
-        setFlags(true, true, true, true, true, true);
+        builder.setFlags(true, true, true, true, true, true);
+        Message row = builder.build();
         recent.add(new Long(row.getUid() + 1));
         assertFalse(searches.isMatch(SearchQuery.flagIsUnSet(Flags.Flag.SEEN),
                 row, recent));
@@ -614,10 +647,12 @@
     }
 
     public void testShouldMatchAll() throws Exception {
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.all(), row, recent));
     }
 
     public void testShouldMatchNot() throws Exception {
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.not(SearchQuery.all()), row,
                 recent));
         assertTrue(searches.isMatch(SearchQuery.not(SearchQuery
@@ -625,6 +660,7 @@
     }
 
     public void testShouldMatchOr() throws Exception {
+        Message row = builder.build();
         assertTrue(searches.isMatch(SearchQuery.or(SearchQuery.all(),
                 SearchQuery.headerExists(DATE_FIELD)), row, recent));
         assertTrue(searches.isMatch(SearchQuery.or(SearchQuery
@@ -637,6 +673,7 @@
     }
 
     public void testShouldMatchAnd() throws Exception {
+        Message row = builder.build();
         assertFalse(searches.isMatch(SearchQuery.and(SearchQuery.all(),
                 SearchQuery.headerExists(DATE_FIELD)), row, recent));
         assertFalse(searches.isMatch(SearchQuery.and(SearchQuery
@@ -647,20 +684,7 @@
         assertTrue(searches.isMatch(SearchQuery.and(SearchQuery.all(),
                 SearchQuery.all()), row, recent));
     }
-
-    private void setFlags(boolean seen, boolean flagged, boolean answered,
-            boolean draft, boolean deleted, boolean recent)
-            throws TorqueException {
-        final MessageFlags messageFlags = new MessageFlags();
-        messageFlags.setSeen(seen);
-        messageFlags.setFlagged(flagged);
-        messageFlags.setAnswered(answered);
-        messageFlags.setDraft(draft);
-        messageFlags.setDeleted(deleted);
-        messageFlags.setRecent(recent);
-        row.addMessageFlags(messageFlags);
-    }
-
+    
     private SearchQuery.NumericRange[] range(long low, long high) {
         SearchQuery.NumericRange[] results = { new SearchQuery.NumericRange(
                 low, high) };
@@ -674,12 +698,4 @@
                 new SearchQuery.NumericRange(lowTwo, highTwo) };
         return results;
     }
-
-    private void addHeader(String fieldName, String value)
-            throws TorqueException {
-        final MessageHeader messageHeader = new MessageHeader();
-        messageHeader.setField(fieldName);
-        messageHeader.setValue(value);
-        row.addMessageHeader(messageHeader);
-    }
 }

Modified: james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/mailboxmanager/SearchQuery.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/mailboxmanager/SearchQuery.java?rev=730371&r1=730370&r2=730371&view=diff
==============================================================================
--- james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/mailboxmanager/SearchQuery.java (original)
+++ james/protocols/imap/trunk/mailbox/src/main/java/org/apache/james/mailboxmanager/SearchQuery.java Wed Dec 31 02:44:55 2008
@@ -416,13 +416,13 @@
 
     private final Set recentMessageUids = new HashSet();
 
-    private final List criterias = new ArrayList();
+    private final List<Criterion> criterias = new ArrayList<Criterion>();
 
     public void andCriteria(Criterion crit) {
         criterias.add(crit);
     }
 
-    public List getCriterias() {
+    public List<Criterion> getCriterias() {
         return criterias;
     }
 
@@ -437,7 +437,7 @@
         return recentMessageUids;
     }
 
-    // @Override
+    @Override
     public String toString() {
         return "Search:" + criterias.toString();
     }
@@ -445,7 +445,7 @@
     /**
      * @see java.lang.Object#hashCode()
      */
-    // @Override
+    @Override
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
@@ -457,7 +457,7 @@
     /**
      * @see java.lang.Object#equals(java.lang.Object)
      */
-    // @Override
+    @Override
     public boolean equals(Object obj) {
         if (this == obj)
             return true;

Propchange: james/protocols/imap/trunk/stage/org.apache.geronimo.specs/jars/geronimo-jta_1.1_spec-1.1.LICENSE
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: james/protocols/imap/trunk/stage/org.apache.geronimo.specs/jars/geronimo-jta_1.1_spec-1.1.NOTICE
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: james/protocols/imap/trunk/stage/org.apache.geronimo.specs/jars/geronimo-jta_1.1_spec-1.1.jar
------------------------------------------------------------------------------
    svn:mergeinfo = 

Propchange: james/protocols/imap/trunk/stage/org.apache.geronimo.specs/jars/geronimo-jta_1.1_spec-1.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



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