Author: btellier
Date: Tue Sep 22 10:39:31 2015
New Revision: 1704564
URL: http://svn.apache.org/viewvc?rev=1704564&view=rev
Log:
PROTOCOLS-108 Adding parser for Quota commands
Added:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
Modified:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
Added:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
(added)
+++
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.decode.parser;
+
+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.process.ImapSession;
+import org.apache.james.imap.decode.ImapRequestLineReader;
+import org.apache.james.imap.decode.base.AbstractImapCommandParser;
+import org.apache.james.imap.message.request.GetQuotaRequest;
+import org.apache.james.protocols.imap.DecodingException;
+
+/**
+ * GETQUOTA command parser
+ */
+public class GetQuotaCommandParser extends AbstractImapCommandParser {
+ public GetQuotaCommandParser() {
+
super(ImapCommand.authenticatedStateCommand(ImapConstants.GETQUOTA_COMMAND_NAME));
+ }
+
+ @Override
+ protected ImapMessage decode(ImapCommand command, ImapRequestLineReader
request, String tag, ImapSession session) throws DecodingException {
+ final String quotaRoot = request.atom();
+ request.eol();
+ return new GetQuotaRequest(tag, command, quotaRoot);
+ }
+}
Added:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
(added)
+++
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.decode.parser;
+
+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.process.ImapSession;
+import org.apache.james.imap.decode.ImapRequestLineReader;
+import org.apache.james.imap.decode.base.AbstractImapCommandParser;
+import org.apache.james.imap.message.request.GetQuotaRootRequest;
+import org.apache.james.protocols.imap.DecodingException;
+
+/**
+ * Get Quota root command parser
+ */
+public class GetQuotaRootCommandParser extends AbstractImapCommandParser {
+
+ public GetQuotaRootCommandParser() {
+
super(ImapCommand.authenticatedStateCommand(ImapConstants.GETQUOTAROOT_COMMAND_NAME));
+ }
+
+ @Override
+ protected ImapMessage decode(ImapCommand command, ImapRequestLineReader
request, String tag, ImapSession session) throws DecodingException {
+ final String mailboxName = request.mailbox();
+ request.eol();
+ return new GetQuotaRootRequest(tag, command, mailboxName);
+ }
+
+}
Modified:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java?rev=1704564&r1=1704563&r2=1704564&view=diff
==============================================================================
---
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
(original)
+++
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
Tue Sep 22 10:39:31 2015
@@ -28,6 +28,7 @@ import org.apache.james.imap.decode.Dele
import org.apache.james.imap.decode.ImapCommandParser;
import org.apache.james.imap.decode.ImapCommandParserFactory;
import org.apache.james.imap.decode.MessagingImapCommandParser;
+import org.apache.james.imap.processor.GetQuotaRootProcessor;
/**
* A factory for ImapCommand instances, provided based on the command name.
@@ -101,6 +102,11 @@ public class ImapParserFactory implement
_imapCommands.put(ImapConstants.ENABLE_COMMAND_NAME,
EnableCommandParser.class);
+ // RFC2087
+ // GETQUOTAROOT, GETQUOTA, SETQUOTA
+ _imapCommands.put(ImapConstants.GETQUOTAROOT_COMMAND_NAME,
GetQuotaRootCommandParser.class);
+ _imapCommands.put(ImapConstants.GETQUOTA_COMMAND_NAME,
GetQuotaCommandParser.class);
+ _imapCommands.put(ImapConstants.SETQUOTA_COMMAND_NAME,
SetQuotaCommandParser.class);
}
Added:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
(added)
+++
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.decode.parser;
+
+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.process.ImapSession;
+import org.apache.james.imap.decode.ImapRequestLineReader;
+import org.apache.james.imap.decode.base.AbstractImapCommandParser;
+import org.apache.james.imap.message.request.SetQuotaRequest;
+import org.apache.james.protocols.imap.DecodingException;
+
+/**
+ * SETQUOTA command parser
+ */
+public class SetQuotaCommandParser extends AbstractImapCommandParser {
+
+ public SetQuotaCommandParser() {
+
super(ImapCommand.authenticatedStateCommand(ImapConstants.SETQUOTA_COMMAND_NAME));
+ }
+
+ @Override
+ protected ImapMessage decode(ImapCommand command, ImapRequestLineReader
request, String tag, ImapSession session) throws DecodingException {
+ final String quotaRoot = request.atom();
+ SetQuotaRequest setQuotaRequest = new SetQuotaRequest(tag, command,
quotaRoot);
+ // We now parse resource limit declaration
+ // It has the following shape : (RESOURCE1 1024000) (RESOURCE2
2048000)\n
+ request.nextWordChar();
+ while ( request.nextChar() == '(') {
+ request.consume();
+ String resource = request.atom();
+ request.nextWordChar();
+ long limit = request.number(true);
+ request.nextWordChar();
+ request.consumeChar(')');
+ setQuotaRequest.addResourceLimit(resource, limit);
+ // Consume white spaces
+ // Do not use nextWorldChar as it throws an exception on end of
lines
+ while(request.nextChar() == ' ') {
+ request.consume();
+ }
+ }
+ request.eol();
+ return setQuotaRequest;
+ }
+
+}
Added:
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
(added)
+++
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,49 @@
+/****************************************************************
+ * 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.decode.parser;
+
+import org.apache.james.imap.api.ImapCommand;
+import org.apache.james.imap.decode.ImapRequestStreamLineReader;
+import org.apache.james.imap.message.request.GetQuotaRequest;
+import org.apache.james.protocols.imap.DecodingException;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * GetQuotaRootParser Test
+ */
+public class GetQuotaParserTest {
+
+ @Test
+ public void testQuotaParsing() throws DecodingException {
+ GetQuotaCommandParser parser = new GetQuotaCommandParser();
+ ImapCommand command = ImapCommand.anyStateCommand("Command");
+ String commandString = "quotaRoot \n";
+ InputStream inputStream = new
ByteArrayInputStream(commandString.getBytes());
+ ImapRequestStreamLineReader lineReader = new
ImapRequestStreamLineReader(inputStream, null);
+ GetQuotaRequest request = (GetQuotaRequest) parser.decode(command,
lineReader, "A003", null);
+ GetQuotaRequest expected = new GetQuotaRequest("A003", command,
"quotaRoot");
+ assertEquals(expected.getQuotaRoot(), request.getQuotaRoot());
+ }
+}
Added:
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
(added)
+++
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,62 @@
+/****************************************************************
+ * 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.decode.parser;
+
+import org.apache.james.imap.api.ImapCommand;
+import org.apache.james.imap.decode.ImapRequestStreamLineReader;
+import org.apache.james.imap.message.request.GetQuotaRootRequest;
+import org.apache.james.protocols.imap.DecodingException;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for GetQuotaRootCommandParser
+ */
+public class GetQuotaRootParserTest {
+
+ @Test
+ public void testNonQuotedMailbox() throws DecodingException {
+ GetQuotaRootCommandParser parser = new GetQuotaRootCommandParser();
+ ImapCommand command = ImapCommand.anyStateCommand("Command");
+ String commandString = "INBOX\n";
+ InputStream inputStream = new
ByteArrayInputStream(commandString.getBytes());
+ ImapRequestStreamLineReader lineReader = new
ImapRequestStreamLineReader(inputStream, null);
+ GetQuotaRootRequest request = (GetQuotaRootRequest)
parser.decode(command, lineReader, "A003", null);
+ GetQuotaRootRequest expected = new GetQuotaRootRequest("A003",
command, "INBOX");
+ assertEquals(expected.getMailboxName(), request.getMailboxName());
+ }
+
+ @Test
+ public void testQuotedMailbox() throws DecodingException {
+ GetQuotaRootCommandParser parser = new GetQuotaRootCommandParser();
+ ImapCommand command = ImapCommand.anyStateCommand("Command");
+ String commandString = "\"INBOX\" \n";
+ InputStream inputStream = new
ByteArrayInputStream(commandString.getBytes());
+ ImapRequestStreamLineReader lineReader = new
ImapRequestStreamLineReader(inputStream, null);
+ GetQuotaRootRequest request = (GetQuotaRootRequest)
parser.decode(command, lineReader, "A003", null);
+ GetQuotaRootRequest expected = new GetQuotaRootRequest("A003",
command, "INBOX");
+ assertEquals(expected.getMailboxName(), request.getMailboxName());
+ }
+
+}
Added:
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java?rev=1704564&view=auto
==============================================================================
---
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
(added)
+++
james/protocols/trunk/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
Tue Sep 22 10:39:31 2015
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.decode.parser;
+
+import org.apache.james.imap.api.ImapCommand;
+import org.apache.james.imap.decode.ImapRequestStreamLineReader;
+import org.apache.james.imap.message.request.SetQuotaRequest;
+import org.apache.james.protocols.imap.DecodingException;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * SETQUOTA command parser test...
+ */
+public class SetQuotaCommandParserTest {
+
+ @Test
+ public void testQuotaParsing() throws DecodingException {
+ SetQuotaCommandParser parser = new SetQuotaCommandParser();
+ ImapCommand command = ImapCommand.anyStateCommand("Command");
+ String commandString = "quotaRoot (STORAGE 512) ( MESSAGE 1024 ) \n";
+ InputStream inputStream = new
ByteArrayInputStream(commandString.getBytes());
+ ImapRequestStreamLineReader lineReader = new
ImapRequestStreamLineReader(inputStream, null);
+ SetQuotaRequest request = (SetQuotaRequest) parser.decode(command,
lineReader, "A003", null);
+ assertEquals("quotaRoot", request.getQuotaRoot());
+ List<SetQuotaRequest.ResourceLimit> list = request.getResourceLimits();
+ assertEquals("STORAGE", list.get(0).getResource());
+ assertEquals(512, list.get(0).getLimit());
+ assertEquals("MESSAGE", list.get(1).getResource());
+ assertEquals(1024, list.get(1).getLimit());
+ assertEquals(2, list.size());
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]