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]