Index: api/src/main/java/org/apache/james/imap/api/ImapConstants.java =================================================================== --- api/src/main/java/org/apache/james/imap/api/ImapConstants.java (revision 1056658) +++ api/src/main/java/org/apache/james/imap/api/ImapConstants.java (working copy) @@ -109,12 +109,8 @@ public static final String SUPPORTS_IDLE = "IDLE"; - public static final char HIERARCHY_DELIMITER_CHAR = '.'; - public static final char NAMESPACE_PREFIX_CHAR = '#'; - public static final String HIERARCHY_DELIMITER = String.valueOf(HIERARCHY_DELIMITER_CHAR); - public static final String NAMESPACE_PREFIX = String.valueOf(NAMESPACE_PREFIX_CHAR); public static final String INBOX_NAME = "INBOX"; Index: api/src/main/java/org/apache/james/imap/api/ImapSessionUtils.java =================================================================== --- api/src/main/java/org/apache/james/imap/api/ImapSessionUtils.java (revision 1056658) +++ api/src/main/java/org/apache/james/imap/api/ImapSessionUtils.java (working copy) @@ -17,7 +17,7 @@ * under the License. * ****************************************************************/ -package org.apache.james.imap.processor.base; +package org.apache.james.imap.api; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.mailbox.MailboxSession; Index: message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java =================================================================== --- message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java (working copy) @@ -46,6 +46,7 @@ import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.DayMonthYear; import org.apache.james.imap.api.message.response.StatusResponseFactory; +import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.decode.DecoderUtils; import org.apache.james.imap.decode.ImapCommandParser; import org.apache.james.imap.decode.ImapRequestLineReader; @@ -110,11 +111,11 @@ * ImapRequestLineReader, not null * @return ImapCommandMessage, not null */ - public final ImapMessage parse(ImapRequestLineReader request, String tag, Log logger) { + public final ImapMessage parse(ImapRequestLineReader request, String tag, Log logger, ImapSession session) { ImapMessage result; try { - ImapMessage message = decode(command, request, tag, logger); + ImapMessage message = decode(command, request, tag, logger, session); result = message; } catch (DecodingException e) { @@ -133,13 +134,31 @@ * ImapRequestLineReader, not null * @param tag command tag, not null * @param logger TODO - * @param logger TODO * @return ImapCommandMessage, not null * @throws DecodingException * if the request cannot be parsed */ protected abstract ImapMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, Log logger) throws DecodingException; + + /** + * Parses a request into a command message for later processing. + * @param command + * ImapCommand to be parsed, not null + * @param request + * ImapRequestLineReader, not null + * @param tag command tag, not null + * @param logger TODO + * @param session imap session + * @return ImapCommandMessage, not null + * @throws DecodingException + * if the request cannot be parsed + */ + protected ImapMessage decode(ImapCommand command, + ImapRequestLineReader request, String tag, Log logger, ImapSession session) throws DecodingException { + return decode(command, request, tag, logger); + } + /** * Reads an argument of type "atom" from the request. Index: message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java =================================================================== --- message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java (working copy) @@ -21,6 +21,7 @@ import org.apache.commons.logging.Log; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.process.ImapSession; /** *

@@ -40,5 +41,5 @@ * @param logger context sensitive log, not null * @return ImapCommandMessage */ - ImapMessage parse(ImapRequestLineReader request, String tag, Log logger); + ImapMessage parse(ImapRequestLineReader request, String tag, Log logger, ImapSession session); } Index: message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java =================================================================== --- message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java (working copy) @@ -116,7 +116,7 @@ logger.info("Missing command implementation."); message = unknownCommand(tag, session); } else { - message = command.parse(request, tag, logger); + message = command.parse(request, tag, logger, session); } return message; } Index: message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java =================================================================== --- message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java (working copy) @@ -19,14 +19,16 @@ package org.apache.james.imap.decode.parser; import org.apache.commons.logging.Log; -import org.apache.james.imap.api.ImapMessageFactory; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapMessageFactory; +import org.apache.james.imap.api.ImapSessionUtils; +import org.apache.james.imap.api.process.ImapSession; +import org.apache.james.imap.decode.DecodingException; import org.apache.james.imap.decode.ImapRequestLineReader; -import org.apache.james.imap.decode.DecodingException; import org.apache.james.imap.decode.base.AbstractImapCommandParser; -import org.apache.james.mailbox.MailboxConstants; +import org.apache.james.mailbox.MailboxSession; /** * Parse CREATE commands @@ -43,13 +45,16 @@ * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.commons.logging.Log) */ protected ImapMessage decode(ImapCommand command, - ImapRequestLineReader request, String tag, Log logger) throws DecodingException { + ImapRequestLineReader request, String tag, Log logger, ImapSession session) throws DecodingException { String mailboxName = mailbox(request); + + MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); + // RFC3501@6.3.3p2 // When mailbox name is suffixed with hierarchy separator // name created must remove tailing delimiter - if (mailboxName.endsWith(MailboxConstants.DEFAULT_DELIMITER_STRING)) { + if (mailboxName.endsWith(Character.toString(mailboxSession.getPathDelimiter()))) { mailboxName = mailboxName.substring(0, mailboxName.length() -1); } endLine(request); @@ -59,4 +64,11 @@ return result; } + @Override + protected ImapMessage decode(ImapCommand command, + ImapRequestLineReader request, String tag, Log logger) + throws DecodingException { + return null; // we should never be here + } + } Index: message/src/main/java/org/apache/james/imap/encode/base/ImapResponseComposerImpl.java =================================================================== --- message/src/main/java/org/apache/james/imap/encode/base/ImapResponseComposerImpl.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/encode/base/ImapResponseComposerImpl.java (working copy) @@ -352,7 +352,7 @@ * @see org.apache.james.imap.encode.ImapResponseComposer#listResponse(java.lang.String, java.util.List, java.lang.String, java.lang.String) */ public void listResponse(String typeName, List attributes, - String hierarchyDelimiter, String name) throws IOException { + char hierarchyDelimiter, String name) throws IOException { untagged(); message(typeName); openParen(); @@ -364,12 +364,11 @@ } closeParen(); - if (hierarchyDelimiter == null) { + if (hierarchyDelimiter == Character.UNASSIGNED) { message(NIL); } else { - quote(hierarchyDelimiter); + quote(Character.toString(hierarchyDelimiter)); } - quote(name); end(); Index: message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java =================================================================== --- message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java (working copy) @@ -161,7 +161,7 @@ * mailbox name */ public abstract void listResponse(String typeName, List attributes, - String hierarchyDelimiter, String name) throws IOException; + char hierarchyDelimiter, String name) throws IOException; /** * Writes the message provided to the client, prepended with the request Index: message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java =================================================================== --- message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java (working copy) @@ -38,7 +38,7 @@ final String name = response.getName(); - composer.listResponse(responseTypeName, attributes, ImapConstants.HIERARCHY_DELIMITER, name); + composer.listResponse(responseTypeName, attributes, response.getHierarchyDelimiter(), name); } private static List getNameAttributes(final AbstractListingResponse response) { Index: message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java =================================================================== --- message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java (working copy) @@ -19,7 +19,6 @@ package org.apache.james.imap.message.response; -import org.apache.james.imap.api.ImapConstants; /** * LIST and LSUB return identical data. @@ -38,14 +37,15 @@ private final boolean unmarked; - private final String hierarchyDelimiter = ImapConstants.HIERARCHY_DELIMITER; + private final char hierarchyDelimiter; private final String name; public AbstractListingResponse(final boolean noInferiors, final boolean noSelect, final boolean marked, final boolean unmarked, boolean hasChildren, - boolean hasNoChildren, final String name) { + boolean hasNoChildren, final String name, + final char hierarchyDelimiter) { super(); this.noInferiors = noInferiors; this.noSelect = noSelect; @@ -54,6 +54,7 @@ this.children = hasChildren; this.noChildren = hasNoChildren; this.name = name; + this.hierarchyDelimiter = hierarchyDelimiter; } /** @@ -61,7 +62,7 @@ * * @return hierarchy delimiter, or null if no hierarchy exists */ - public final String getHierarchyDelimiter() { + public final char getHierarchyDelimiter() { return hierarchyDelimiter; } @@ -142,7 +143,7 @@ final int PRIME = 31; int result = 1; result = PRIME * result + (children ? 1231 : 1237); - result = PRIME * result + ((hierarchyDelimiter == null) ? 0 : hierarchyDelimiter.hashCode()); + result = PRIME * result + hierarchyDelimiter; result = PRIME * result + (marked ? 1231 : 1237); result = PRIME * result + ((name == null) ? 0 : name.hashCode()); result = PRIME * result + (noChildren ? 1231 : 1237); @@ -163,10 +164,7 @@ final AbstractListingResponse other = (AbstractListingResponse) obj; if (children != other.children) return false; - if (hierarchyDelimiter == null) { - if (other.hierarchyDelimiter != null) - return false; - } else if (!hierarchyDelimiter.equals(other.hierarchyDelimiter)) + if (hierarchyDelimiter != other.hierarchyDelimiter) return false; if (marked != other.marked) return false; Index: message/src/main/java/org/apache/james/imap/message/response/ListResponse.java =================================================================== --- message/src/main/java/org/apache/james/imap/message/response/ListResponse.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/message/response/ListResponse.java (working copy) @@ -28,7 +28,7 @@ public ListResponse(final boolean noInferiors, final boolean noSelect, final boolean marked, final boolean unmarked, - boolean hasChildren, boolean hasNoChildren, final String name) { - super(noInferiors, noSelect, marked, unmarked, hasChildren, hasNoChildren, name); + boolean hasChildren, boolean hasNoChildren, final String name, final char delimiter) { + super(noInferiors, noSelect, marked, unmarked, hasChildren, hasNoChildren, name, delimiter); } } Index: message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java =================================================================== --- message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java (revision 1056658) +++ message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java (working copy) @@ -25,7 +25,7 @@ */ public final class LSubResponse extends AbstractListingResponse implements ImapResponseMessage { - public LSubResponse(final String name, final boolean noSelect) { - super(false, noSelect, false, false, false, false, name); + public LSubResponse(final String name, final boolean noSelect, final char delimiter) { + super(false, noSelect, false, false, false, false, name, delimiter); } } Index: message/src/test/java/org/apache/james/imap/encode/AbstractTestImapResponseComposer.java =================================================================== --- message/src/test/java/org/apache/james/imap/encode/AbstractTestImapResponseComposer.java (revision 1056658) +++ message/src/test/java/org/apache/james/imap/encode/AbstractTestImapResponseComposer.java (working copy) @@ -49,55 +49,55 @@ @Test public void testQuotedDelimiter() throws Exception { checkListResponseEncode("* LSUB () \"\\\"\" \"#news\"\r\n", "LSUB", - null, "\"", "#news"); + null, '\"', "#news"); checkListResponseEncode("* LIST () \"\\\"\" \"#INBOX\"\r\n", "LIST", - null, "\"", "#INBOX"); + null, '\"', "#INBOX"); checkListResponseEncode("* LSUB () \"\\\\\" \"#news\"\r\n", "LSUB", - null, "\\", "#news"); + null, '\\', "#news"); checkListResponseEncode("* LIST () \"\\\\\" \"#INBOX\"\r\n", "LIST", - null, "\\", "#INBOX"); + null, '\\', "#INBOX"); } @Test public void testNilDelimiter() throws Exception { checkListResponseEncode("* LSUB () NIL \"#news\"\r\n", "LSUB", null, - null, "#news"); + (char)Character.UNASSIGNED, "#news"); checkListResponseEncode("* LIST () NIL \"#INBOX\"\r\n", "LIST", null, - null, "#INBOX"); + (char)Character.UNASSIGNED, "#INBOX"); } @Test public void testSimple() throws Exception { checkListResponseEncode("* LSUB () \".\" \"#news\"\r\n", "LSUB", null, - ".", "#news"); + '.', "#news"); checkListResponseEncode("* LIST () \".\" \"#INBOX\"\r\n", "LIST", null, - ".", "#INBOX"); + '.', "#INBOX"); checkListResponseEncode("* LSUB () \".\" \"#news.sub\"\r\n", "LSUB", - null, ".", "#news.sub"); + null, '.', "#news.sub"); checkListResponseEncode("* LIST () \".\" \"#INBOX.sub\"\r\n", "LIST", - null, ".", "#INBOX.sub"); + null, '.', "#INBOX.sub"); } @Test public void testSpecialNames() throws Exception { checkListResponseEncode( "* LSUB () \"\\\\\" \"#news\\\\sub\\\\directory\"\r\n", "LSUB", - null, "\\", "#news\\sub\\directory"); + null, '\\', "#news\\sub\\directory"); checkListResponseEncode( "* LIST () \"\\\\\" \"#INBOX\\\\sub\\\\directory\"\r\n", - "LIST", null, "\\", "#INBOX\\sub\\directory"); + "LIST", null, '\\', "#INBOX\\sub\\directory"); checkListResponseEncode( "* LSUB () \".\" \"#news.sub directory.what\"\r\n", "LSUB", - null, ".", "#news.sub directory.what"); + null, '.', "#news.sub directory.what"); checkListResponseEncode( "* LIST () \".\" \"#INBOX.sub directory.what\"\r\n", "LIST", - null, ".", "#INBOX.sub directory.what"); + null, '.', "#INBOX.sub directory.what"); checkListResponseEncode( "* LSUB () \".\" \"#news.\\\"sub directory\\\".what\"\r\n", - "LSUB", null, ".", "#news.\"sub directory\".what"); + "LSUB", null, '.', "#news.\"sub directory\".what"); checkListResponseEncode( "* LIST () \".\" \"#INBOX.\\\"sub directory\\\".what\"\r\n", - "LIST", null, ".", "#INBOX.\"sub directory\".what"); + "LIST", null, '.', "#INBOX.\"sub directory\".what"); } @Test @@ -109,10 +109,10 @@ attributes.add("\\four"); checkListResponseEncode( "* LSUB (\\one \\two \\three \\four) \".\" \"#news\"\r\n", - "LSUB", attributes, ".", "#news"); + "LSUB", attributes, '.', "#news"); checkListResponseEncode( "* LIST (\\one \\two \\three \\four) \".\" \"#INBOX\"\r\n", - "LIST", attributes, ".", "#INBOX"); + "LIST", attributes, '.', "#INBOX"); } @Test @@ -206,7 +206,7 @@ protected abstract byte[] encodeSearchResponse(long[] ids) throws Exception; private void checkListResponseEncode(String expected, String typeName, - List attributes, String hierarchyDelimiter, String name) + List attributes, char hierarchyDelimiter, String name) throws Exception { StringBuffer buffer = new StringBuffer(); byte[] output = encodeListResponse(typeName, attributes, @@ -219,7 +219,7 @@ } protected abstract byte[] encodeListResponse(String typeName, - List attributes, String hierarchyDelimiter, String name) + List attributes, char hierarchyDelimiter, String name) throws Exception; private void checkStatusResponseEncode(String expected, Long messages, Index: message/src/test/java/org/apache/james/imap/encode/base/ImapResponseComposerImplTest.java =================================================================== --- message/src/test/java/org/apache/james/imap/encode/base/ImapResponseComposerImplTest.java (revision 1056658) +++ message/src/test/java/org/apache/james/imap/encode/base/ImapResponseComposerImplTest.java (working copy) @@ -43,7 +43,7 @@ protected byte[] encodeListResponse(String typeName, List attributes, - String hierarchyDelimiter, String name) throws Exception { + char hierarchyDelimiter, String name) throws Exception { composer.listResponse(typeName, attributes, hierarchyDelimiter, name); return writer.getBytes(); } Index: message/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java =================================================================== --- message/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java (revision 1056658) +++ message/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java (working copy) @@ -49,7 +49,7 @@ context.checking (new Expectations() {{ oneOf(mock).listResponse(with(equal(typeNameParameters)), with(equal(attributesOutput)), - with(equal(".")), with(equal(nameParameter))); + with(equal('.')), with(equal(nameParameter))); }}); } @@ -57,7 +57,7 @@ public void testShouldAddHasChildrenToAttributes() throws Exception { // Setup attributesOutput.add("\\HasChildren"); - ListResponse input = new ListResponse(false, false, false, false, true, false, nameParameter); + ListResponse input = new ListResponse(false, false, false, false, true, false, nameParameter, '.'); // Exercise ListingEncodingUtils.encodeListingResponse(typeNameParameters, mock, input); @@ -67,7 +67,7 @@ public void testShouldAddHasNoChildrenToAttributes() throws Exception { // Setup attributesOutput.add("\\HasNoChildren"); - ListResponse input = new ListResponse(false, false, false, false, false, true, nameParameter); + ListResponse input = new ListResponse(false, false, false, false, false, true, nameParameter, '.'); // Exercise ListingEncodingUtils.encodeListingResponse(typeNameParameters, mock, input); Index: message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java =================================================================== --- message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java (revision 1056658) +++ message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java (working copy) @@ -19,16 +19,14 @@ package org.apache.james.imap.encode; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; -import org.apache.james.imap.encode.ImapEncoder; -import org.apache.james.imap.encode.ImapResponseComposer; -import org.apache.james.imap.encode.LSubResponseEncoder; import org.apache.james.imap.message.response.LSubResponse; import org.apache.james.imap.message.response.ListResponse; import org.jmock.Expectations; @@ -60,8 +58,8 @@ @Test public void testIsAcceptable() { assertFalse(encoder.isAcceptable(new ListResponse(true, true, true, - true, false, false, "name"))); - assertTrue(encoder.isAcceptable(new LSubResponse("name", true))); + true, false, false, "name", '.'))); + assertTrue(encoder.isAcceptable(new LSubResponse("name", true, '.'))); assertFalse(encoder.isAcceptable(context.mock(ImapMessage.class))); assertFalse(encoder.isAcceptable(null)); } @@ -70,26 +68,26 @@ @SuppressWarnings("unchecked") public void testName() throws Exception { context.checking(new Expectations() {{ - oneOf(composer).listResponse(with(equal("LSUB")),with(aNull(List.class)), with(equal(".")), with(equal("INBOX.name"))); + oneOf(composer).listResponse(with(equal("LSUB")),with(aNull(List.class)), with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new LSubResponse("INBOX.name", false), composer, new FakeImapSession()); + encoder.encode(new LSubResponse("INBOX.name", false, '.'), composer, new FakeImapSession()); } @Test @SuppressWarnings("unchecked") public void testDelimiter() throws Exception { context.checking(new Expectations() {{ - oneOf(composer).listResponse(with(equal("LSUB")),with(aNull(List.class)), with(equal(".")), with(equal("INBOX.name"))); + oneOf(composer).listResponse(with(equal("LSUB")),with(aNull(List.class)), with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new LSubResponse("INBOX.name", false), composer, new FakeImapSession()); + encoder.encode(new LSubResponse("INBOX.name", false, '.'), composer, new FakeImapSession()); } @Test public void testNoSelect() throws Exception { final String[] values = { ImapConstants.NAME_ATTRIBUTE_NOSELECT }; context.checking(new Expectations() {{ - oneOf(composer).listResponse(with(equal("LSUB")),with(equal(Arrays.asList(values))), with(equal(".")), with(equal("INBOX.name"))); + oneOf(composer).listResponse(with(equal("LSUB")),with(equal(Arrays.asList(values))), with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new LSubResponse("INBOX.name", true), composer, new FakeImapSession()); + encoder.encode(new LSubResponse("INBOX.name", true, '.'), composer, new FakeImapSession()); } } Index: message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java =================================================================== --- message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java (revision 1056658) +++ message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java (working copy) @@ -60,8 +60,8 @@ @Test public void testIsAcceptable() { assertTrue(encoder.isAcceptable(new ListResponse(true, true, true, - true, false, false, "name"))); - assertFalse(encoder.isAcceptable(new LSubResponse("name", true))); + true, false, false, "name", '.'))); + assertFalse(encoder.isAcceptable(new LSubResponse("name", true, '.'))); assertFalse(encoder.isAcceptable(context.mock(ImapMessage.class))); assertFalse(encoder.isAcceptable(null)); } @@ -73,10 +73,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(aNull(List.class)), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(false, false, false, false, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(false, false, false, false, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @Test @@ -86,10 +86,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(aNull(List.class)), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(false, false, false, false, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(false, false, false, false, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @@ -103,10 +103,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(equal(Arrays.asList(all))), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(true, true, true, true, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(true, true, true, true, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @Test @@ -116,10 +116,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(equal(Arrays.asList(values))), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(true, false, false, false, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(true, false, false, false, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @Test @@ -129,10 +129,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(equal(Arrays.asList(values))), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(false, true, false, false, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(false, true, false, false, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @Test @@ -142,10 +142,10 @@ oneOf(composer).listResponse( with(equal("LIST")), with(equal(Arrays.asList(values))), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(false, false, true, false, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(false, false, true, false, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } @Test @@ -155,9 +155,9 @@ oneOf(composer).listResponse( with(equal("LIST")), with(equal(Arrays.asList(values))), - with(equal(".")), + with(equal('.')), with(equal("INBOX.name"))); }}); - encoder.encode(new ListResponse(false, false, false, true, false, false, "INBOX.name"), composer, new FakeImapSession()); + encoder.encode(new ListResponse(false, false, false, true, false, false, "INBOX.name", '.'), composer, new FakeImapSession()); } } Index: processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java (working copy) @@ -26,6 +26,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.ImapRequest; @@ -40,7 +41,6 @@ import org.apache.james.imap.message.response.FetchResponse; 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; @@ -283,12 +283,13 @@ public MailboxPath buildFullPath(final ImapSession session, String mailboxName) { String namespace = null; String name = null; + final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); if (mailboxName == null || mailboxName.length() == 0) { return new MailboxPath("", "", ""); } if (mailboxName.charAt(0) == ImapConstants.NAMESPACE_PREFIX_CHAR) { - int namespaceLength = mailboxName.indexOf(MailboxConstants.DEFAULT_DELIMITER); + int namespaceLength = mailboxName.indexOf(mailboxSession.getPathDelimiter()); if (namespaceLength > -1) { namespace = mailboxName.substring(0, namespaceLength); if (mailboxName.length() > namespaceLength) @@ -317,29 +318,29 @@ * @param mailboxPath * @return */ - private String joinMailboxPath(MailboxPath mailboxPath) { + private String joinMailboxPath(MailboxPath mailboxPath, char delimiter) { StringBuffer sb = new StringBuffer(""); if (mailboxPath.getNamespace() != null && !mailboxPath.getNamespace().equals("")) { sb.append(mailboxPath.getNamespace()); } if (mailboxPath.getUser() != null && !mailboxPath.getUser().equals("")) { if (sb.length() > 0) - sb.append(MailboxConstants.DEFAULT_DELIMITER); + sb.append(delimiter); sb.append(mailboxPath.getUser()); } if (mailboxPath.getName() != null && !mailboxPath.getName().equals("")) { if (sb.length() > 0) - sb.append(MailboxConstants.DEFAULT_DELIMITER); + sb.append(delimiter); sb.append(mailboxPath.getName()); } return sb.toString(); } - public String mailboxName(final boolean relative, final MailboxPath path) { + public String mailboxName(final boolean relative, final MailboxPath path, final char delimiter) { if (relative) { return path.getName(); } else { - return joinMailboxPath(path); + return joinMailboxPath(path, delimiter); } } Index: processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java (working copy) @@ -25,6 +25,7 @@ import javax.mail.Flags; import org.apache.james.imap.api.ImapCommand; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponse; @@ -37,7 +38,6 @@ import org.apache.james.imap.message.response.ExistsResponse; import org.apache.james.imap.message.response.FlagsResponse; import org.apache.james.imap.message.response.RecentResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.imap.processor.base.SelectedMailboxImpl; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; Index: processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java (working copy) @@ -19,11 +19,11 @@ package org.apache.james.imap.processor; import org.apache.james.imap.api.ImapCommand; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SubscriptionManager; Index: processor/src/main/java/org/apache/james/imap/processor/AppendProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/AppendProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/AppendProcessor.java (working copy) @@ -28,6 +28,7 @@ import org.apache.commons.logging.Log; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponse; @@ -36,7 +37,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.message.request.AppendRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxNotFoundException; Index: processor/src/main/java/org/apache/james/imap/processor/base/ImapSessionUtils.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/base/ImapSessionUtils.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/base/ImapSessionUtils.java (working copy) @@ -1,47 +0,0 @@ -/**************************************************************** - * 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 org.apache.james.imap.api.process.ImapSession; -import org.apache.james.mailbox.MailboxSession; - -public class ImapSessionUtils { - - public static final String MAILBOX_USER_ATTRIBUTE_SESSION_KEY = "org.apache.james.api.imap.MAILBOX_USER_ATTRIBUTE_SESSION_KEY"; - - public static final String MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY = "org.apache.james.api.imap.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY"; - - public static MailboxSession getMailboxSession(final ImapSession session) { - final MailboxSession result = (MailboxSession) session - .getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY); - return result; - } - - public static String getUserName(final ImapSession imapSession) { - final String result; - final MailboxSession mailboxSession = getMailboxSession(imapSession); - if (imapSession == null) { - result = null; - } else { - result = mailboxSession.getUser().getUserName(); - } - return result; - } -} Index: processor/src/main/java/org/apache/james/imap/processor/CloseProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/CloseProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/CloseProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.CloseRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; Index: processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java (working copy) @@ -21,6 +21,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.ImapRequest; @@ -30,7 +31,6 @@ import org.apache.james.imap.api.process.ImapSession; 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; Index: processor/src/main/java/org/apache/james/imap/processor/CreateProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/CreateProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/CreateProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.CreateRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxExistsException; import org.apache.james.mailbox.MailboxManager; Index: processor/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java (working copy) @@ -21,6 +21,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -28,7 +29,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.message.request.DeleteRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxNotFoundException; Index: processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java (working copy) @@ -23,6 +23,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -30,7 +31,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.message.request.ExpungeRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; Index: processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java (working copy) @@ -25,10 +25,9 @@ import java.util.Iterator; import java.util.List; -import javax.mail.MessagingException; - import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.BodyFetchElement; import org.apache.james.imap.api.message.FetchData; @@ -41,18 +40,17 @@ import org.apache.james.imap.message.request.FetchRequest; 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.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageRange; -import org.apache.james.mailbox.MessageRange.Type; import org.apache.james.mailbox.MessageResult; +import org.apache.james.mailbox.UnsupportedCriteriaException; +import org.apache.james.mailbox.MessageRange.Type; import org.apache.james.mailbox.MessageResult.FetchGroup; import org.apache.james.mailbox.MessageResult.MimePath; -import org.apache.james.mailbox.UnsupportedCriteriaException; import org.apache.james.mailbox.util.FetchGroupImpl; import org.apache.james.mime4j.field.address.parser.ParseException; Index: processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java (working copy) @@ -30,12 +30,12 @@ import javax.mail.Flags; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.message.BodyFetchElement; import org.apache.james.imap.api.message.FetchData; import org.apache.james.imap.api.process.ImapSession; 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; Index: processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java (working copy) @@ -29,6 +29,7 @@ import org.apache.james.imap.api.ContinuationReader; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponse; @@ -37,7 +38,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.IdleRequest; import org.apache.james.imap.message.response.ContinuationResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; Index: processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java (working copy) @@ -25,6 +25,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.ImapResponseMessage; @@ -33,13 +34,13 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.ListRequest; import org.apache.james.imap.message.response.ListResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxConstants; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxMetaData; import org.apache.james.mailbox.MailboxPath; import org.apache.james.mailbox.MailboxQuery; +import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxMetaData.Children; import org.apache.james.mailbox.util.SimpleMailboxMetaData; @@ -66,9 +67,9 @@ protected ImapResponseMessage createResponse(boolean noInferior, boolean noSelect, boolean marked, boolean unmarked, - boolean hasChildren, boolean hasNoChildren, String mailboxName) { + boolean hasChildren, boolean hasNoChildren, String mailboxName, char delimiter) { return new ListResponse(noInferior, noSelect, marked, unmarked, - hasChildren, hasNoChildren, mailboxName); + hasChildren, hasNoChildren, mailboxName, delimiter); } /** @@ -101,6 +102,7 @@ final List results; final String user = ImapSessionUtils.getUserName(session); + final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); if (mailboxName.length() == 0) { // An empty mailboxName signifies a request for the hierarchy @@ -110,7 +112,7 @@ if (referenceName.startsWith(ImapConstants.NAMESPACE_PREFIX)) { // A qualified reference name - get the root element isRelative = false; - int firstDelimiter = referenceName.indexOf(ImapConstants.HIERARCHY_DELIMITER_CHAR); + int firstDelimiter = referenceName.indexOf(mailboxSession.getPathDelimiter()); if (firstDelimiter == -1) { referenceRoot = referenceName; } @@ -126,7 +128,7 @@ // Get the mailbox for the reference name. MailboxPath rootPath = new MailboxPath(referenceRoot, "", ""); results = new ArrayList(1); - results.add(SimpleMailboxMetaData.createNoSelect(rootPath, ImapConstants.HIERARCHY_DELIMITER)); + results.add(SimpleMailboxMetaData.createNoSelect(rootPath, mailboxSession.getPathDelimiter())); } else { // If the mailboxPattern is fully qualified, ignore the reference name. @@ -145,8 +147,8 @@ basePath = buildFullPath(session, finalReferencename); } - results = getMailboxManager().search(new MailboxQuery(basePath, mailboxName, '*', '%'), - ImapSessionUtils.getMailboxSession(session)); + results = getMailboxManager().search(new MailboxQuery(basePath, mailboxName, '*', '%', mailboxSession.getPathDelimiter()), + mailboxSession); } for (final MailboxMetaData metaData: results) { @@ -160,8 +162,8 @@ } void processResult(final Responder responder, final boolean relative, final MailboxMetaData listResult) { - final String delimiter = listResult.getHierarchyDelimiter(); - final String mailboxName = mailboxName(relative, listResult.getPath()); + final char delimiter = listResult.getHierarchyDelimiter(); + final String mailboxName = mailboxName(relative, listResult.getPath(), delimiter); final Children inferiors = listResult.inferiors(); final boolean noInferior = MailboxMetaData.Children.NO_INFERIORS.equals(inferiors); @@ -182,7 +184,7 @@ break; } responder.respond(createResponse(noInferior, noSelect, marked, - unmarked, hasChildren, hasNoChildren, mailboxName)); + unmarked, hasChildren, hasNoChildren, mailboxName, delimiter)); } } Index: processor/src/main/java/org/apache/james/imap/processor/LoginProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/LoginProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/LoginProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.LoginRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.BadCredentialsException; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxExistsException; Index: processor/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.LogoutRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; Index: processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/LSubProcessor.java (working copy) @@ -25,6 +25,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -32,7 +33,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.LsubRequest; import org.apache.james.imap.message.response.LSubResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxConstants; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; @@ -76,29 +76,29 @@ } - final MailboxQuery expression = new MailboxQuery(basePath, mailboxName, '*', '%'); + final MailboxQuery expression = new MailboxQuery(basePath, mailboxName, '*', '%', mailboxSession.getPathDelimiter()); final Collection mailboxResponses = new ArrayList(); for (final String mailbox: mailboxes) { - respond(responder, expression, mailbox, true, mailboxes, mailboxResponses); + respond(responder, expression, mailbox, true, mailboxes, mailboxResponses, mailboxSession.getPathDelimiter()); } } private void respond(Responder responder, final MailboxQuery expression, final String mailboxName, final boolean originalSubscription, - final Collection mailboxes, final Collection mailboxResponses) { + final Collection mailboxes, final Collection mailboxResponses, final char delimiter) { if (expression.isExpressionMatch(mailboxName)) { if (!mailboxResponses.contains(mailboxName)) { - final LSubResponse response = new LSubResponse(mailboxName, !originalSubscription); + final LSubResponse response = new LSubResponse(mailboxName, !originalSubscription, delimiter); responder.respond(response); mailboxResponses.add(mailboxName); } } else { - final int lastDelimiter = mailboxName.lastIndexOf(ImapConstants.HIERARCHY_DELIMITER_CHAR); + final int lastDelimiter = mailboxName.lastIndexOf(delimiter); if (lastDelimiter > 0) { final String parentMailbox = mailboxName.substring(0, lastDelimiter); if (!mailboxes.contains(parentMailbox)) { - respond(responder, expression, parentMailbox, false, mailboxes, mailboxResponses); + respond(responder, expression, parentMailbox, false, mailboxes, mailboxResponses, delimiter); } } } @@ -111,8 +111,8 @@ * @param referenceName * IMAP reference name, possibly null */ - private void respondWithHierarchyDelimiter(final Responder responder) { - final LSubResponse response = new LSubResponse("", true); + private void respondWithHierarchyDelimiter(final Responder responder, final char delimiter) { + final LSubResponse response = new LSubResponse("", true, delimiter); responder.respond(response); } @@ -121,10 +121,11 @@ final LsubRequest request = (LsubRequest) message; final String referenceName = request.getBaseReferenceName(); final String mailboxPattern = request.getMailboxPattern(); - + final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); + try { if (mailboxPattern.length() == 0) { - respondWithHierarchyDelimiter(responder); + respondWithHierarchyDelimiter(responder, mailboxSession.getPathDelimiter()); } else { listSubscriptions(session, responder, referenceName, mailboxPattern); } Index: processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java (working copy) @@ -27,14 +27,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.NamespaceRequest; import org.apache.james.imap.message.response.NamespaceResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; -import org.apache.james.mailbox.MailboxConstants; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -69,7 +68,7 @@ */ private List buildPersonalNamespaces(final MailboxSession mailboxSession) { final List personalSpaces = new ArrayList(); - personalSpaces.add(new NamespaceResponse.Namespace(mailboxSession.getPersonalSpace(), MailboxConstants.DEFAULT_DELIMITER)); + personalSpaces.add(new NamespaceResponse.Namespace(mailboxSession.getPersonalSpace(), mailboxSession.getPathDelimiter())); return personalSpaces; } @@ -80,7 +79,7 @@ otherUsersSpaces = null; } else { otherUsersSpaces = new ArrayList(1); - otherUsersSpaces.add(new NamespaceResponse.Namespace(otherUsersSpace, MailboxConstants.DEFAULT_DELIMITER)); + otherUsersSpaces.add(new NamespaceResponse.Namespace(otherUsersSpace, mailboxSession.getPathDelimiter())); } return otherUsersSpaces; } @@ -91,7 +90,7 @@ if (!sharedSpaces.isEmpty()) { sharedNamespaces = new ArrayList(sharedSpaces.size()); for (String space: sharedSpaces) { - sharedNamespaces.add(new NamespaceResponse.Namespace(space, MailboxConstants.DEFAULT_DELIMITER)); + sharedNamespaces.add(new NamespaceResponse.Namespace(space, mailboxSession.getPathDelimiter())); } } return sharedNamespaces; Index: processor/src/main/java/org/apache/james/imap/processor/RenameProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/RenameProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/RenameProcessor.java (working copy) @@ -22,13 +22,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.RenameRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxExistsException; import org.apache.james.mailbox.MailboxManager; Index: processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java (working copy) @@ -30,6 +30,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.DayMonthYear; @@ -41,7 +42,6 @@ import org.apache.james.imap.api.process.SelectedMailbox; 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; Index: processor/src/main/java/org/apache/james/imap/processor/StatusProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/StatusProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/StatusProcessor.java (working copy) @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.StatusDataItems; import org.apache.james.imap.api.message.request.ImapRequest; @@ -30,7 +31,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.StatusRequest; import org.apache.james.imap.message.response.MailboxStatusResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPath; Index: processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java (working copy) @@ -25,6 +25,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.ImapRequest; @@ -34,7 +35,6 @@ import org.apache.james.imap.api.process.SelectedMailbox; 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; Index: processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.SubscribeRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SubscriptionException; Index: processor/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java (working copy) @@ -21,11 +21,11 @@ import org.apache.commons.logging.Log; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.SystemMessage; import org.apache.james.imap.processor.base.AbstractChainedProcessor; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxException; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; Index: processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java =================================================================== --- processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java (revision 1056658) +++ processor/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java (working copy) @@ -21,13 +21,13 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.UnsubscribeRequest; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.SubscriptionException; Index: processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java =================================================================== --- processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java (revision 1056658) +++ processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java (working copy) @@ -77,13 +77,13 @@ ListResponse createResponse(boolean noinferior, boolean noselect, boolean marked, boolean unmarked, boolean hasChildren, - boolean hasNoChildren, String hierarchyDelimiter, String mailboxName) { + boolean hasNoChildren, char hierarchyDelimiter, String mailboxName) { return new ListResponse(noinferior, noselect, marked, unmarked, - hasChildren, hasNoChildren, mailboxName); + hasChildren, hasNoChildren, mailboxName, hierarchyDelimiter); } void setUpResult(final MailboxMetaData.Children children, final MailboxMetaData.Selectability selectability, - final String hierarchyDelimiter, final MailboxPath path) { + final char hierarchyDelimiter, final MailboxPath path) { mockery.checking(new Expectations() {{ oneOf(result).inferiors();will(returnValue(children)); oneOf(result).getSelectability();will(returnValue(selectability)); @@ -94,54 +94,54 @@ @Test public void testHasChildren() throws Exception { - setUpResult(MailboxMetaData.Children.HAS_CHILDREN, MailboxMetaData.Selectability.NONE, ".", inboxPath); + setUpResult(MailboxMetaData.Children.HAS_CHILDREN, MailboxMetaData.Selectability.NONE, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(false, false, false, false, true, false, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(false, false, false, false, true, false, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } @Test public void testHasNoChildren() throws Exception { - setUpResult(MailboxMetaData.Children.HAS_NO_CHILDREN, MailboxMetaData.Selectability.NONE, ".", inboxPath); + setUpResult(MailboxMetaData.Children.HAS_NO_CHILDREN, MailboxMetaData.Selectability.NONE, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(false, false, false, false, false, true, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(false, false, false, false, false, true, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } @Test public void testNoInferiors() throws Exception { - setUpResult(MailboxMetaData.Children.NO_INFERIORS, MailboxMetaData.Selectability.NONE, ".", inboxPath); + setUpResult(MailboxMetaData.Children.NO_INFERIORS, MailboxMetaData.Selectability.NONE, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(true, false, false, false, false, false, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(true, false, false, false, false, false, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } @Test public void testNoSelect() throws Exception { - setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.NOSELECT, ".", inboxPath); + setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.NOSELECT, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(false, true, false, false, false, false, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(false, true, false, false, false, false, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } @Test public void testUnMarked() throws Exception { - setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.UNMARKED, ".", inboxPath); + setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.UNMARKED, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(false, false, false, true, false, false, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(false, false, false, true, false, false, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } @Test public void testMarked() throws Exception { - setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.MARKED, ".", inboxPath); + setUpResult(MailboxMetaData.Children.CHILDREN_ALLOWED_BUT_UNKNOWN, MailboxMetaData.Selectability.MARKED, '.', inboxPath); mockery.checking(new Expectations() {{ - oneOf(responder).respond(with(equal(createResponse(false, false, true, false, false, false, ".", "INBOX")))); + oneOf(responder).respond(with(equal(createResponse(false, false, true, false, false, false, '.', "INBOX")))); }}); processor.processResult(responder, false, result); } Index: processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java =================================================================== --- processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java (revision 1056658) +++ processor/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java (working copy) @@ -25,7 +25,7 @@ import java.util.Locale; import org.apache.james.imap.api.ImapCommand; -import org.apache.james.imap.api.ImapConstants; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -33,7 +33,6 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.request.LsubRequest; import org.apache.james.imap.message.response.LSubResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxMetaData; import org.apache.james.mailbox.MailboxSession; @@ -50,15 +49,17 @@ public class LSubProcessorTest { private static final String ROOT = "ROOT"; + + private static final char HIERARCHY_DELIMITER = '.'; private static final String PARENT = ROOT - + ImapConstants.HIERARCHY_DELIMITER + "PARENT"; + + HIERARCHY_DELIMITER + "PARENT"; private static final String CHILD_ONE = PARENT - + ImapConstants.HIERARCHY_DELIMITER + "CHILD_ONE"; + + HIERARCHY_DELIMITER + "CHILD_ONE"; private static final String CHILD_TWO = PARENT - + ImapConstants.HIERARCHY_DELIMITER + "CHILD_TWO"; + + HIERARCHY_DELIMITER + "CHILD_TWO"; private static final String MAILBOX_C = "C.MAILBOX"; @@ -118,8 +119,9 @@ mockery.checking(new Expectations() {{ allowing(session).getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY); will(returnValue(mailboxSession)); + allowing(mailboxSession).getPathDelimiter(); will(returnValue(HIERARCHY_DELIMITER)); oneOf(responder).respond(with( - equal(new LSubResponse("", true)))); + equal(new LSubResponse("", true, HIERARCHY_DELIMITER)))); }}); expectOk(); @@ -140,16 +142,16 @@ mockery.checking(new Expectations() {{ oneOf(responder).respond(with( - equal(new LSubResponse(CHILD_ONE, false)))); + equal(new LSubResponse(CHILD_ONE, false, HIERARCHY_DELIMITER)))); oneOf(responder).respond(with( - equal(new LSubResponse(CHILD_TWO, false)))); + equal(new LSubResponse(CHILD_TWO, false, HIERARCHY_DELIMITER)))); }}); - + expectSubscriptions(); expectOk(); LsubRequest request = new LsubRequest(command, "", PARENT - + ImapConstants.HIERARCHY_DELIMITER + "%", TAG); + + HIERARCHY_DELIMITER + "%", TAG); processor.doProcessRequest(request, session, TAG, command, responderImpl); } @@ -165,14 +167,14 @@ mockery.checking(new Expectations() {{ oneOf(responder).respond(with( - equal(new LSubResponse(PARENT, true)))); + equal(new LSubResponse(PARENT, true, HIERARCHY_DELIMITER)))); }}); expectSubscriptions(); expectOk(); LsubRequest request = new LsubRequest(command, "", ROOT - + ImapConstants.HIERARCHY_DELIMITER + "%", TAG); + + HIERARCHY_DELIMITER + "%", TAG); processor.doProcessRequest(request, session, TAG, command, responderImpl); } @@ -189,14 +191,14 @@ mockery.checking(new Expectations() {{ oneOf(responder).respond(with( - equal(new LSubResponse(PARENT, false)))); + equal(new LSubResponse(PARENT, false, HIERARCHY_DELIMITER)))); }}); expectSubscriptions(); expectOk(); LsubRequest request = new LsubRequest(command, "", ROOT - + ImapConstants.HIERARCHY_DELIMITER + "%", TAG); + + HIERARCHY_DELIMITER + "%", TAG); processor.doProcessRequest(request, session, TAG, command, responderImpl); } @@ -205,11 +207,11 @@ public void testSelectAll() throws Exception { mockery.checking(new Expectations() {{ oneOf(responder).respond(with(equal( - new LSubResponse(MAILBOX_A, false)))); + new LSubResponse(MAILBOX_A, false, HIERARCHY_DELIMITER)))); oneOf(responder).respond(with(equal( - new LSubResponse(MAILBOX_B, false)))); + new LSubResponse(MAILBOX_B, false, HIERARCHY_DELIMITER)))); oneOf(responder).respond(with(equal( - new LSubResponse(MAILBOX_C, false)))); + new LSubResponse(MAILBOX_C, false, HIERARCHY_DELIMITER)))); }}); subscriptions.add(MAILBOX_A); subscriptions.add(MAILBOX_B); @@ -236,8 +238,9 @@ private void expectSubscriptions() throws Exception { mockery.checking(new Expectations() {{ - oneOf(session).getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY); + exactly(2).of(session).getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY); will(returnValue(mailboxSession)); + allowing(mailboxSession).getPathDelimiter(); will(returnValue(HIERARCHY_DELIMITER)); oneOf(mailboxSession).getUser(); will(returnValue(new MailboxSession.User() { /* Index: processor/src/test/java/org/apache/james/imap/processor/NamespaceProcessorTest.java =================================================================== --- processor/src/test/java/org/apache/james/imap/processor/NamespaceProcessorTest.java (revision 1056658) +++ processor/src/test/java/org/apache/james/imap/processor/NamespaceProcessorTest.java (working copy) @@ -18,7 +18,8 @@ ****************************************************************/ package org.apache.james.imap.processor; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; @@ -28,6 +29,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.ImapSessionState; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -37,7 +39,6 @@ import org.apache.james.imap.api.process.ImapProcessor.Responder; import org.apache.james.imap.message.request.NamespaceRequest; import org.apache.james.imap.message.response.NamespaceResponse; -import org.apache.james.imap.processor.base.ImapSessionUtils; import org.apache.james.mailbox.MailboxConstants; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -109,6 +110,7 @@ allowing(mailboxSessionStub).getPersonalSpace(); will(returnValue(PERSONAL_PREFIX)); allowing(mailboxSessionStub).getOtherUsersSpace(); will(returnValue(USERS_PREFIX)); allowing(mailboxSessionStub).getSharedSpaces();will(returnValue(new ArrayList())); + allowing(mailboxSessionStub).getPathDelimiter();will(returnValue(MailboxConstants.DEFAULT_DELIMITER)); allowing(imapSessionStub).getState();will(returnValue(ImapSessionState.AUTHENTICATED)); allowing(statusResponseStub).taggedOk( with(any(String.class)), with(any(ImapCommand.class)), @@ -133,6 +135,7 @@ allowing(mailboxSessionStub).getPersonalSpace(); will(returnValue(PERSONAL_PREFIX)); allowing(mailboxSessionStub).getOtherUsersSpace(); will(returnValue(USERS_PREFIX)); allowing(mailboxSessionStub).getSharedSpaces();will(returnValue(Arrays.asList(SHARED_PREFIX))); + allowing(mailboxSessionStub).getPathDelimiter();will(returnValue(MailboxConstants.DEFAULT_DELIMITER)); allowing(imapSessionStub).getState();will(returnValue(ImapSessionState.AUTHENTICATED)); allowing(statusResponseStub).taggedOk( with(any(String.class)), with(any(ImapCommand.class)), Index: processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java =================================================================== --- processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java (revision 1056658) +++ processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java (working copy) @@ -27,6 +27,7 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; +import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.request.DayMonthYear; @@ -38,7 +39,6 @@ import org.apache.james.imap.api.process.SelectedMailbox; 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.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPath; import org.apache.james.mailbox.MailboxSession;