Author: rdonkin
Date: Sun Nov 11 13:45:43 2007
New Revision: 593965

URL: http://svn.apache.org/viewvc?rev=593965&view=rev
Log:
Partial implementation of Serach for Torque.

Added:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/UnsupportedCriteriaException.java
    
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueCriteriaBuilder.java
Modified:
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/SearchParameters.java
    
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/SearchableMailbox.java
    
james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/display/HumanReadableTextKey.java
    
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
    
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/SearchParameters.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/SearchParameters.java?rev=593965&r1=593964&r2=593965&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/SearchParameters.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/SearchParameters.java
 Sun Nov 11 13:45:43 2007
@@ -223,47 +223,62 @@
        }
        
        public static class NotSearchCriteria extends SearchCriteria {
-               SearchCriteria inverse;
+               final List criteria;
                
                public NotSearchCriteria(SearchCriteria inverse) {
-                       this.inverse = inverse;
+                       this();
+            add(inverse);
                }
+        
+        public NotSearchCriteria() {
+            this.criteria = new ArrayList();
+        }
+        
+        public void add(SearchCriteria criterion) {
+            criteria.add(criterion);
+        }
                
                public String getName() {
                        return NOT;
                }
 
-               public SearchCriteria getInverse() {
-                       return inverse;
+               public List getCriteria() {
+                       return criteria;
                }
                
                public String toString() {
-                       return "[NOT "+inverse+"]";
+                       return "[NOT "+ criteria +"]";
                }
                
        }
        public static class OrSearchCriteria extends SearchCriteria {
-               SearchCriteria a,b;
+               final List criteria;
                
                public OrSearchCriteria (SearchCriteria a, SearchCriteria b) {
-                       this.a = a;
-                       this.b = b;
-               }
+                       this();
+                       add(a);
+            add(b);
+               }
+        
+        public OrSearchCriteria() {
+            criteria = new ArrayList();
+        }
+        
+        public void add(SearchCriteria criterion) {
+            criteria.add(criterion);
+        }
                
                public String getName() {
                        return OR;
                }
 
 
-               public SearchCriteria getFirst() {
-                       return a;
-               }
-               
-               public SearchCriteria getSecond() {
-                       return b;
+               public List getCriteria() {
+                       return criteria;
                }
+
                public String toString() {
-                       return "[OR "+a+' '+b+"]";
+                       return "[OR "+ criteria +"]";
                }
                
        }

Added: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/UnsupportedCriteriaException.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/UnsupportedCriteriaException.java?rev=593965&view=auto
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/UnsupportedCriteriaException.java
 (added)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/UnsupportedCriteriaException.java
 Sun Nov 11 13:45:43 2007
@@ -0,0 +1,33 @@
+/****************************************************************
+ * 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.mailboxmanager;
+
+/**
+ * Indicates that a search criteria is not supported.
+ */
+public class UnsupportedCriteriaException extends MailboxManagerException {
+
+    private static final long serialVersionUID = 3791907285083231285L;
+    
+    public UnsupportedCriteriaException(String string) {
+        super(string);
+    }
+
+}

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/SearchableMailbox.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/SearchableMailbox.java?rev=593965&r1=593964&r2=593965&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/SearchableMailbox.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/mailbox/SearchableMailbox.java
 Sun Nov 11 13:45:43 2007
@@ -35,6 +35,8 @@
      *         </ul>
      * @throws MailboxManagerException
      *             if anything went wrong
+     * @throws UnsupportedCriteriaException when any of the search parameters 
are 
+     * not supported by this mailbox
      */
     MessageResult[] search(GeneralMessageSet set,SearchParameters searchTerm, 
int result) throws MailboxManagerException;
 }

Modified: 
james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/display/HumanReadableTextKey.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/display/HumanReadableTextKey.java?rev=593965&r1=593964&r2=593965&view=diff
==============================================================================
--- 
james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/display/HumanReadableTextKey.java
 (original)
+++ 
james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/display/HumanReadableTextKey.java
 Sun Nov 11 13:45:43 2007
@@ -36,6 +36,10 @@
         = new HumanReadableTextKey("org.apache.james.imap.INVALID_LOGIN",
                 "failed. Invalid login/password.");
     
+    public static final HumanReadableTextKey UNSUPPORTED_SEARCH_CRITERIA 
+        = new 
HumanReadableTextKey("org.apache.james.imap.UNSUPPORTED_CRITERIA",
+                "failed. One or more search criteria is unsupported.");
+    
     private final String defaultValue;
     private final String key;
     public HumanReadableTextKey(final String key, final String defaultValue) {

Modified: 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java?rev=593965&r1=593964&r2=593965&view=diff
==============================================================================
--- 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
 (original)
+++ 
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java
 Sun Nov 11 13:45:43 2007
@@ -31,6 +31,7 @@
 import org.apache.james.api.imap.ImapConstants;
 import org.apache.james.api.imap.ImapMessage;
 import org.apache.james.api.imap.ProtocolException;
+import org.apache.james.api.imap.display.HumanReadableTextKey;
 import org.apache.james.api.imap.message.BodyFetchElement;
 import org.apache.james.api.imap.message.FetchData;
 import org.apache.james.api.imap.message.IdRange;
@@ -51,6 +52,7 @@
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.MessageResultUtils;
+import org.apache.james.mailboxmanager.UnsupportedCriteriaException;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
 
@@ -79,30 +81,33 @@
             final IdRange[] idSet, final FetchData fetch, ImapSession session,
             String tag, ImapCommand command, Responder responder) throws 
MailboxException,
             AuthorizationException, ProtocolException {
-        
-        int resultToFetch = getNeededMessageResult(fetch);
-        ImapMailboxSession mailbox = ImapSessionUtils.getMailbox(session);
-        for (int i = 0; i < idSet.length; i++) {
-            GeneralMessageSet messageSet = GeneralMessageSetImpl.range(idSet[i]
-                    .getLowVal(), idSet[i].getHighVal(), useUids);
-            MessageResult[] fetchResults;
-            try {
-                fetchResults = mailbox.getMessages(messageSet, resultToFetch);
-            } catch (MailboxManagerException e) {
-                throw new MailboxException(e);
-            }
-            for (int j = 0; j < fetchResults.length; j++) {
-                String msgData = outputMessage(fetch, fetchResults[j], mailbox,
-                        useUids);
-                // TODO: this is inefficient
-                // TODO: stream output upon response
-                FetchResponse response = new 
FetchResponse(fetchResults[j].getMsn(), msgData);
-                responder.respond(response);
+        try
+        {
+            int resultToFetch = getNeededMessageResult(fetch);
+            ImapMailboxSession mailbox = ImapSessionUtils.getMailbox(session);
+            for (int i = 0; i < idSet.length; i++) {
+                GeneralMessageSet messageSet = 
GeneralMessageSetImpl.range(idSet[i]
+                        .getLowVal(), idSet[i].getHighVal(), useUids);
+                MessageResult[] fetchResults;
+                    fetchResults = mailbox.getMessages(messageSet, 
resultToFetch);
+                for (int j = 0; j < fetchResults.length; j++) {
+                    String msgData = outputMessage(fetch, fetchResults[j], 
mailbox,
+                            useUids);
+                    // TODO: this is inefficient
+                    // TODO: stream output upon response
+                    FetchResponse response = new 
FetchResponse(fetchResults[j].getMsn(), msgData);
+                    responder.respond(response);
+                }
             }
+            
+            unsolicitedResponses(session, responder, useUids);
+            okComplete(command, tag, responder);
+        } catch (UnsupportedCriteriaException e) {
+            no(command, tag, responder, 
HumanReadableTextKey.UNSUPPORTED_SEARCH_CRITERIA);
+        } catch (MailboxManagerException e) {
+            throw new MailboxException(e);
         }
-        
-        unsolicitedResponses(session, responder, useUids);
-        okComplete(command, tag, responder);
+
     }
 
     private int getNeededMessageResult(FetchData fetch) {

Added: 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueCriteriaBuilder.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueCriteriaBuilder.java?rev=593965&view=auto
==============================================================================
--- 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueCriteriaBuilder.java
 (added)
+++ 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueCriteriaBuilder.java
 Sun Nov 11 13:45:43 2007
@@ -0,0 +1,85 @@
+/****************************************************************
+ * 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.mailboxmanager.torque;
+
+import javax.mail.Flags.Flag;
+
+import org.apache.james.mailboxmanager.torque.om.MessageFlagsPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageHeaderPeer;
+import org.apache.james.mailboxmanager.torque.om.MessageRowPeer;
+import org.apache.torque.util.Criteria;
+
+class TorqueCriteriaBuilder {
+
+    private final Criteria masterCriteria;
+    private boolean headersJoin = false;
+    private boolean flagsJoin = false;
+    
+    public TorqueCriteriaBuilder() {
+        masterCriteria = new Criteria();
+    }
+    
+    public Criteria getCriteria() {
+        return masterCriteria;
+    }
+    
+    public void andHeaderContains(final String header, final String value) {
+        joinHeaders();
+        final Criteria.Criterion nameCriterion = 
masterCriteria.getNewCriterion(MessageHeaderPeer.FIELD, header, Criteria.EQUAL);
+        if (value != null) {
+            final Criteria.Criterion valueCriterion = 
masterCriteria.getNewCriterion(MessageHeaderPeer.VALUE, value, Criteria.LIKE);
+            nameCriterion.and(valueCriterion);
+        }
+        masterCriteria.add(nameCriterion);
+    }
+    
+    public void andFlag(Flag flag, boolean value) {
+        joinFlags();
+        if (Flag.ANSWERED.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.ANSWERED, value);
+        } else if (Flag.DELETED.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.DELETED, value);
+        } else if (Flag.DRAFT.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.DRAFT, value);
+        } else if (Flag.FLAGGED.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.FLAGGED, value);
+        } else if (Flag.RECENT.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.RECENT, value);
+        } else if (Flag.SEEN.equals(flag)) {
+            masterCriteria.add(MessageFlagsPeer.SEEN, value);
+        }
+    }
+    
+    public void joinFlags() {
+        if (!flagsJoin) {
+            flagsJoin = true;
+            masterCriteria.addJoin(MessageRowPeer.MAILBOX_ID, 
MessageFlagsPeer.MAILBOX_ID);
+            masterCriteria.addJoin(MessageRowPeer.UID, MessageFlagsPeer.UID);
+        }
+    }
+    
+    public void joinHeaders() {
+        if (!headersJoin) {
+            headersJoin = true;
+            masterCriteria.addJoin(MessageRowPeer.MAILBOX_ID, 
MessageHeaderPeer.MAILBOX_ID);
+            masterCriteria.addJoin(MessageRowPeer.UID, MessageHeaderPeer.UID);
+        }
+    }
+}

Modified: 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java?rev=593965&r1=593964&r2=593965&view=diff
==============================================================================
--- 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
 (original)
+++ 
james/server/trunk/torque-mailboxmanager-function/src/main/java/org/apache/james/mailboxmanager/torque/TorqueMailbox.java
 Sun Nov 11 13:45:43 2007
@@ -40,6 +40,7 @@
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.SearchParameters;
+import org.apache.james.mailboxmanager.UnsupportedCriteriaException;
 import org.apache.james.mailboxmanager.MessageResult.Content;
 import org.apache.james.mailboxmanager.impl.GeneralMessageSetImpl;
 import org.apache.james.mailboxmanager.impl.MailboxEventDispatcher;
@@ -52,12 +53,14 @@
 import org.apache.james.mailboxmanager.torque.om.MessageFlags;
 import org.apache.james.mailboxmanager.torque.om.MessageFlagsPeer;
 import org.apache.james.mailboxmanager.torque.om.MessageHeader;
+import org.apache.james.mailboxmanager.torque.om.MessageHeaderPeer;
 import org.apache.james.mailboxmanager.torque.om.MessageRow;
 import org.apache.james.mailboxmanager.torque.om.MessageRowPeer;
 import org.apache.james.mailboxmanager.tracking.UidChangeTracker;
 import org.apache.james.mailboxmanager.tracking.UidRange;
 import org.apache.james.mailboxmanager.util.UidToKeyConverter;
 import org.apache.james.mailboxmanager.util.UidToKeyConverterImpl;
+import org.apache.mailet.RFC2822Headers;
 import org.apache.torque.NoRowsException;
 import org.apache.torque.TooManyRowsException;
 import org.apache.torque.TorqueException;
@@ -276,12 +279,7 @@
                 try {
                     Criteria c = criteriaForMessageSet(set);
                     
c.add(MessageFlagsPeer.MAILBOX_ID,getMailboxRow().getMailboxId());
-                    List l = MessageRowPeer.doSelectJoinMessageFlags(c);
-                    MessageResult[] messageResults = fillMessageResult(l, 
result
-                            | MessageResult.UID | MessageResult.FLAGS);
-                    checkForScanGap(range.getFromUid());
-                    getUidChangeTracker().found(range, messageResults, null);
-                    return messageResults;
+                    return getMessages(result, range, c);
                 } catch (TorqueException e) {
                     throw new MailboxManagerException(e);
                 } catch (MessagingException e) {
@@ -295,6 +293,15 @@
         }
     }
 
+    private MessageResult[] getMessages(int result, UidRange range, Criteria 
c) throws TorqueException, MessagingException, MailboxManagerException {
+        List l = MessageRowPeer.doSelectJoinMessageFlags(c);
+        MessageResult[] messageResults = fillMessageResult(l, result
+                | MessageResult.UID | MessageResult.FLAGS);
+        checkForScanGap(range.getFromUid());
+        getUidChangeTracker().found(range, messageResults, null);
+        return messageResults;
+    }
+
     private static UidRange uidRangeForMessageSet(GeneralMessageSet set)
             throws MailboxManagerException {
         if (set.getType() == GeneralMessageSet.TYPE_UID) {
@@ -814,13 +821,105 @@
                 if (!set.isValid() || 
set.getType()==GeneralMessageSet.TYPE_NOTHING) {
                     return new MessageResult[0];
                 }
-                final Log log = getLog();
-                // TODO implementation
-                if (log.isWarnEnabled()) {
-                    log.warn("Search is not yet implemented. Sorry.");
+                
+                TorqueCriteriaBuilder builder = new TorqueCriteriaBuilder();
+                
+                final List searchCriteria = parameters.getCriterias();
+                for (Iterator it=searchCriteria.iterator();it.hasNext();) {
+                    SearchParameters.SearchCriteria criterion = 
(SearchParameters.SearchCriteria) it.next();
+                    final String name = criterion.getName();
+                    if (SearchParameters.ALL.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.ANSWERED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.ANSWERED, true);
+                    } else if (SearchParameters.BCC.equals(name)) {
+                        SearchParameters.StringSearchCriteria 
stringSearchCriteria = (SearchParameters.StringSearchCriteria) criterion;
+                        final String value = stringSearchCriteria.getValue();
+                        builder.andHeaderContains(RFC2822Headers.BCC, value);
+                    } else if (SearchParameters.BEFORE.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.BODY.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.CC.equals(name)) {
+                        SearchParameters.StringSearchCriteria 
stringSearchCriteria = (SearchParameters.StringSearchCriteria) criterion;
+                        final String value = stringSearchCriteria.getValue();
+                        builder.andHeaderContains(RFC2822Headers.CC, value);
+                    } else if (SearchParameters.DELETED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.DELETED, true);
+                    } else if (SearchParameters.DRAFT.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.DRAFT, true);
+                    } else if (SearchParameters.FLAGGED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.FLAGGED, true);
+                    } else if (SearchParameters.FROM.equals(name)) {
+                        SearchParameters.StringSearchCriteria 
stringSearchCriteria = (SearchParameters.StringSearchCriteria) criterion;
+                        final String value = stringSearchCriteria.getValue();
+                        builder.andHeaderContains(RFC2822Headers.FROM, value);
+                    } else if (SearchParameters.HEADER.equals(name)) {
+                        SearchParameters.HeaderSearchCriteria 
headerSearchCriteria = (SearchParameters.HeaderSearchCriteria) criterion;
+                        final String value = headerSearchCriteria.getValue();
+                        final String fieldName = 
headerSearchCriteria.getFieldName();
+                        builder.andHeaderContains(fieldName, value);
+                    } else if (SearchParameters.KEYWORD.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.LARGER.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.NEW.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.NOT.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.OLD.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.ON.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.OR.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.RECENT.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.RECENT, true);
+                    } else if (SearchParameters.SEEN.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.SEEN, true);
+                    } else if (SearchParameters.SENTBEFORE.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.SENTON.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.SENTSINCE.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.SINCE.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.SMALLER.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.SUBJECT.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.TEXT.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.TO.equals(name)) {
+                        SearchParameters.StringSearchCriteria 
stringSearchCriteria = (SearchParameters.StringSearchCriteria) criterion;
+                        final String value = stringSearchCriteria.getValue();
+                        builder.andHeaderContains(RFC2822Headers.TO, value);
+                    } else if (SearchParameters.UID.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.UNANSWERED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.ANSWERED, false);
+                    } else if (SearchParameters.UNDELETED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.DELETED, false);
+                    } else if (SearchParameters.UNDRAFT.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.DRAFT, false);
+                    } else if (SearchParameters.UNFLAGGED.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.FLAGGED, false);
+                    } else if (SearchParameters.UNKEYWORD.equals(name)) {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    } else if (SearchParameters.UNSEEN.equals(name)) {
+                        builder.andFlag(javax.mail.Flags.Flag.SEEN, false);
+                    } else {
+                        throw new UnsupportedCriteriaException("Search 
criterion '" + name + "' is not supported");
+                    }
                 }
-                MessageResult[] results = {};
+                
+                final MessageResult[] results = getMessages(result, new 
UidRange(1, -1), builder.getCriteria());
                 return results;
+            } catch (TorqueException e) {
+                throw new MailboxManagerException(e);
+            } catch (MessagingException e) {
+                throw new MailboxManagerException(e);
             } finally {
                 lock.readLock().release();
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to