Author: norman
Date: Mon Sep 13 17:24:14 2010
New Revision: 996607

URL: http://svn.apache.org/viewvc?rev=996607&view=rev
Log:
Use BAD response for invalid messageset (IMAP-209)

Added:
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
Modified:
    
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java

Modified: 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
 (original)
+++ 
james/imap/trunk/api/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
 Mon Sep 13 17:24:14 2010
@@ -55,6 +55,10 @@ public class HumanReadableText {
             "org.apache.james.imap.GENERIC_SUBSCRIPTION_FAILURE",
             "Cannot subscribe.");
 
+    public static final HumanReadableText INVALID_MESSAGESET = new 
HumanReadableText(
+            "org.apache.james.imap.INVALID_MESSAGESET",
+            "failed. Invalid messageset.");
+    
     public static final HumanReadableText INVALID_COMMAND = new 
HumanReadableText(
             "org.apache.james.imap.INVALID_COMMAND",
             "failed. Command not valid in this state.");

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 Mon Sep 13 17:24:14 2010
@@ -42,6 +42,7 @@ import org.apache.james.imap.message.res
 import org.apache.james.imap.message.response.RecentResponse;
 import org.apache.james.imap.processor.base.AbstractChainedProcessor;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.MailboxConstants;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
@@ -369,18 +370,20 @@ abstract public class AbstractMailboxPro
      * @return
      * @throws MailboxException
      */
-    protected MessageRange messageRange(SelectedMailbox selected, IdRange 
range, boolean useUids) throws MailboxException{
-       long lowVal = range.getLowVal();
+    protected MessageRange messageRange(SelectedMailbox selected, IdRange 
range, boolean useUids) throws MessageRangeException {
+        long lowVal = range.getLowVal();
         long highVal = range.getHighVal();
-       if (useUids == false) {
-               if (lowVal != Long.MAX_VALUE) {
+        if (useUids == false) {
+            if (lowVal != Long.MAX_VALUE) {
                 lowVal = selected.uid((int) lowVal);
-                if (lowVal == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MailboxException("No message found with msn " + lowVal);
-               }
-               if (highVal != Long.MAX_VALUE) {
+                if (lowVal == SelectedMailbox.NO_SUCH_MESSAGE)
+                    throw new MessageRangeException("No message found with msn 
" + lowVal);
+            }
+            if (highVal != Long.MAX_VALUE) {
                 highVal = selected.uid((int) highVal);
-                if (highVal == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MailboxException("No message found with msn " + highVal);
-               }
+                if (highVal == SelectedMailbox.NO_SUCH_MESSAGE)
+                    throw new MessageRangeException("No message found with msn 
" + highVal);
+            }
         }
         MessageRange mRange = MessageRange.range(lowVal, highVal);
         return mRange;

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
 Mon Sep 13 17:24:14 2010
@@ -31,6 +31,7 @@ import org.apache.james.imap.api.process
 import org.apache.james.imap.api.process.SelectedMailbox;
 import org.apache.james.imap.message.request.CopyRequest;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPath;
@@ -74,6 +75,8 @@ public class CopyProcessor extends Abstr
                 unsolicitedResponses(session, responder, useUids);
                 okComplete(command, tag, responder);
             }
+        } catch (MessageRangeException e) {
+            taggedBad(command, tag, responder, 
HumanReadableText.INVALID_MESSAGESET);
         } catch (MailboxException e) {
             no(command, tag, responder, 
HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING);
         }

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
 Mon Sep 13 17:24:14 2010
@@ -42,6 +42,7 @@ import org.apache.james.imap.api.process
 import org.apache.james.imap.message.request.SearchRequest;
 import org.apache.james.imap.message.response.SearchResponse;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MessageManager;
@@ -77,6 +78,8 @@ public class SearchProcessor extends Abs
             boolean omitExpunged = (!useUids);
             unsolicitedResponses(session, responder, omitExpunged, useUids);
             okComplete(command, tag, responder);
+        } catch (MessageRangeException e) {
+            taggedBad(command, tag, responder, 
HumanReadableText.INVALID_MESSAGESET);
         } catch (MailboxException e) {
             no(command, tag, responder, HumanReadableText.SEARCH_FAILED);
         }
@@ -94,7 +97,7 @@ public class SearchProcessor extends Abs
 
     private Collection<Long> findIds(final boolean useUids,
             final ImapSession session, MessageManager mailbox, final 
SearchQuery query)
-            throws MailboxException {
+            throws MailboxException, MessageRangeException {
         final Iterator<Long> it = mailbox.search(query, ImapSessionUtils
                 .getMailboxSession(session));
 
@@ -107,7 +110,7 @@ public class SearchProcessor extends Abs
                 number = new Long(uid);
             } else {
                 final int msn = session.getSelected().msn(uid);
-                if (msn == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MailboxException("No message found with uid " + uid);
+                if (msn == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MessageRangeException("No message found with uid " + uid);
                 number = new Long(msn);
             }
             results.add(number);
@@ -115,7 +118,7 @@ public class SearchProcessor extends Abs
         return results;
     }
 
-    private SearchQuery toQuery(final SearchKey key, final ImapSession 
session) throws MailboxException {
+    private SearchQuery toQuery(final SearchKey key, final ImapSession 
session) throws MessageRangeException {
         final SearchQuery result = new SearchQuery();
         final SelectedMailbox selected = session.getSelected();
         if (selected != null) {
@@ -127,7 +130,7 @@ public class SearchProcessor extends Abs
     }
 
     private SearchQuery.Criterion toCriterion(final SearchKey key,
-            final ImapSession session) throws MailboxException {
+            final ImapSession session) throws MessageRangeException {
         final int type = key.getType();
         final DayMonthYear date = key.getDate();
         switch (type) {
@@ -225,7 +228,7 @@ public class SearchProcessor extends Abs
     }
 
     private Criterion sequence(IdRange[] sequenceNumbers,
-            final ImapSession session, boolean msn) throws MailboxException {
+            final ImapSession session, boolean msn) throws 
MessageRangeException {
         final int length = sequenceNumbers.length;
         final SearchQuery.NumericRange[] ranges = new 
SearchQuery.NumericRange[length];
         for (int i = 0; i < length; i++) {
@@ -241,14 +244,14 @@ public class SearchProcessor extends Abs
                 } else {
                     final int highMsn = (int) highVal;
                     highUid = selected.uid(highMsn);
-                    if (highUid == -1) throw new MailboxException("No message 
found with msn " + highMsn);
+                    if (highUid == -1) throw new MessageRangeException("No 
message found with msn " + highMsn);
                 }
                 if (lowVal == Long.MAX_VALUE) {
                     lowUid = Long.MAX_VALUE;
                 } else {
                     final int lowMsn = (int) lowVal;
                     lowUid = selected.uid(lowMsn);
-                    if (highUid == -1) throw new MailboxException("No message 
found with msn " + lowUid);
+                    if (highUid == -1) throw new MessageRangeException("No 
message found with msn " + lowUid);
 
                 }
             } else {
@@ -260,7 +263,7 @@ public class SearchProcessor extends Abs
         return SearchQuery.uid(ranges);
     }
 
-    private Criterion or(List<SearchKey> keys, final ImapSession session) 
throws MailboxException {
+    private Criterion or(List<SearchKey> keys, final ImapSession session) 
throws MessageRangeException {
         final SearchKey keyOne = keys.get(0);
         final SearchKey keyTwo = keys.get(1);
         final Criterion criterionOne = toCriterion(keyOne, session);
@@ -269,14 +272,14 @@ public class SearchProcessor extends Abs
         return result;
     }
 
-    private Criterion not(List<SearchKey> keys, final ImapSession session) 
throws MailboxException {
+    private Criterion not(List<SearchKey> keys, final ImapSession session) 
throws MessageRangeException {
         final SearchKey key = keys.get(0);
         final Criterion criterion = toCriterion(key, session);
         final Criterion result = SearchQuery.not(criterion);
         return result;
     }
 
-    private Criterion and(List<SearchKey> keys, final ImapSession session) 
throws MailboxException {
+    private Criterion and(List<SearchKey> keys, final ImapSession session) 
throws MessageRangeException {
         final int size = keys.size();
         final List<Criterion> criteria = new ArrayList<Criterion>(size);
         for (final SearchKey key:keys) {

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
 Mon Sep 13 17:24:14 2010
@@ -35,6 +35,7 @@ import org.apache.james.imap.api.process
 import org.apache.james.imap.message.request.StoreRequest;
 import org.apache.james.imap.message.response.FetchResponse;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -111,6 +112,8 @@ public class StoreProcessor extends Abst
             final boolean omitExpunged = (!useUids);
             unsolicitedResponses(session, responder, omitExpunged, useUids);
             okComplete(command, tag, responder);
+        } catch (MessageRangeException e) {
+            taggedBad(command, tag, responder, 
HumanReadableText.INVALID_MESSAGESET);
         } catch (MailboxException e) {
             no(command, tag, responder, HumanReadableText.SAVE_FAILED);
         }

Added: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java?rev=996607&view=auto
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
 (added)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/MessageRangeException.java
 Mon Sep 13 17:24:14 2010
@@ -0,0 +1,29 @@
+/****************************************************************
+ * 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.processor.base;
+
+import javax.mail.MessagingException;
+
+public class MessageRangeException extends MessagingException{
+    
+    public MessageRangeException(String msg) {
+        super(msg);
+    }
+}

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 Mon Sep 13 17:24:14 2010
@@ -38,6 +38,7 @@ import org.apache.james.imap.message.req
 import org.apache.james.imap.message.response.FetchResponse;
 import org.apache.james.imap.processor.AbstractMailboxProcessor;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -102,6 +103,8 @@ public class FetchProcessor extends Abst
         } catch (UnsupportedCriteriaException e) {
             no(command, tag, responder,
                     HumanReadableText.UNSUPPORTED_SEARCH_CRITERIA);
+        } catch (MessageRangeException e) {
+            taggedBad(command, tag, responder, 
HumanReadableText.INVALID_MESSAGESET);
         } catch (MessagingException e) {
             no(command, tag, responder, HumanReadableText.SEARCH_FAILED);
         } catch (ParseException e) {

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java?rev=996607&r1=996606&r2=996607&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
 Mon Sep 13 17:24:14 2010
@@ -37,6 +37,7 @@ import org.apache.james.imap.api.process
 import org.apache.james.imap.api.process.SelectedMailbox;
 import org.apache.james.imap.message.response.FetchResponse;
 import org.apache.james.imap.processor.base.ImapSessionUtils;
+import org.apache.james.imap.processor.base.MessageRangeException;
 import org.apache.james.mailbox.Content;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxSession;
@@ -105,7 +106,7 @@ final class FetchResponseBuilder {
         final long resultUid = result.getUid();
         final int resultMsn = selected.msn(resultUid);
         
-        if (resultMsn == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MailboxException("No such message found with uid " + resultUid);
+        if (resultMsn == SelectedMailbox.NO_SUCH_MESSAGE) throw new 
MessageRangeException("No such message found with uid " + resultUid);
         
         setMsn(resultMsn);
 



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

Reply via email to