Author: btellier Date: Thu Dec 17 15:09:04 2015 New Revision: 1720592 URL: http://svn.apache.org/viewvc?rev=1720592&view=rev Log: JAMES-1618 Remove unnecessary regex matching
Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java?rev=1720592&r1=1720591&r2=1720592&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java Thu Dec 17 15:09:04 2015 @@ -29,10 +29,7 @@ import org.apache.james.managesieve.api. import org.apache.james.managesieve.api.commands.CoreCommands; import org.apache.james.managesieve.util.ParserUtils; -import java.util.InputMismatchException; import java.util.Iterator; -import java.util.NoSuchElementException; -import java.util.Scanner; /** * Parses the user input and calls the underlying command processor @@ -81,28 +78,27 @@ public class ArgumentParser { } public String deleteScript(Session session, String args) { - String scriptName = ParserUtils.getScriptName(args); - if (null == scriptName || scriptName.isEmpty()) { + Iterator<String> argumentIterator = Splitter.on(' ').omitEmptyStrings().split(args).iterator(); + if (!argumentIterator.hasNext()) { return "NO \"Missing argument: script name\""; } - - Scanner scanner = new Scanner(args.substring(scriptName.length()).trim()).useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next() + "\""; + String scriptName = ParserUtils.unquote(argumentIterator.next()); + if (argumentIterator.hasNext()) { + return "NO \"Too many arguments: " + argumentIterator.next() + "\""; } - return core.deleteScript(session, ParserUtils.unquote(scriptName)); + return core.deleteScript(session, scriptName); } public String getScript(Session session, String args) { - String scriptName = ParserUtils.getScriptName(args); - if (scriptName == null || scriptName.isEmpty()) { + Iterator<String> argumentIterator = Splitter.on(' ').omitEmptyStrings().split(args).iterator(); + if (!argumentIterator.hasNext()) { return "NO \"Missing argument: script name\""; } - Scanner scanner = new Scanner(args.substring(scriptName.length()).trim()).useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next() + "\""; + String scriptName = ParserUtils.unquote(argumentIterator.next()); + if (argumentIterator.hasNext()) { + return "NO \"Too many arguments: " + argumentIterator.next() + "\""; } - return core.getScript(session, ParserUtils.unquote(scriptName)); + return core.getScript(session, scriptName); } public String checkScript(Session session, String args) { @@ -130,24 +126,24 @@ public class ArgumentParser { } public String haveSpace(Session session, String args) { - String scriptName = ParserUtils.getScriptName(args); - if (null == scriptName || scriptName.isEmpty()) { + Iterator<String> argumentIterator = Splitter.on(' ').omitEmptyStrings().split(args.trim()).iterator(); + if (!argumentIterator.hasNext()) { return "NO \"Missing argument: script name\""; } - Scanner scanner = new Scanner(args.substring(scriptName.length()).trim()); + String scriptName = ParserUtils.unquote(argumentIterator.next()); long size; + if (!argumentIterator.hasNext()) { + return "NO \"Missing argument: script size\""; + } try { - size = scanner.nextLong(); - } catch (InputMismatchException ex) { + size = Long.parseLong(argumentIterator.next()); + } catch (NumberFormatException e) { return "NO \"Invalid argument: script size\""; - } catch (NoSuchElementException ex) { - return "NO \"Missing argument: script size\""; } - scanner.useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next().trim() + "\""; + if (argumentIterator.hasNext()) { + return "NO \"Too many arguments: " + argumentIterator.next().trim() + "\""; } - return core.haveSpace(session, ParserUtils.unquote(scriptName), size); + return core.haveSpace(session, scriptName, size); } public String listScripts(Session session, String args) { @@ -188,41 +184,31 @@ public class ArgumentParser { } public String renameScript(Session session, String args) { - String oldName = ParserUtils.getScriptName(args); - if (null == oldName || oldName.isEmpty()) { - return "NO \"Missing argument: old script name\""; - } - - String newName = ParserUtils.getScriptName(args.substring(oldName.length())); - if (null == newName || newName.isEmpty()) { + Iterator<String> argumentIterator = Splitter.on(' ').omitEmptyStrings().split(args).iterator(); + if (!argumentIterator.hasNext()) { + return "NO \"Missing argument: old script name\""; + } + String oldName = ParserUtils.unquote(argumentIterator.next()); + if (!argumentIterator.hasNext()) { return "NO \"Missing argument: new script name\""; - } - - Scanner scanner = new Scanner(args.substring(oldName.length() + 1 + newName.length()).trim()).useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next() + "\""; } - return core.renameScript(session, ParserUtils.unquote(oldName), ParserUtils.unquote(newName)); + String newName = ParserUtils.unquote(argumentIterator.next()); + if (argumentIterator.hasNext()) { + return "NO \"Too many arguments: " + argumentIterator.next() + "\""; + } + return core.renameScript(session, oldName, newName); } public String setActive(Session session, String args) { - String scriptName = ParserUtils.getScriptName(args); - if (null == scriptName || scriptName.isEmpty()) { + Iterator<String> argumentIterator = Splitter.on(' ').omitEmptyStrings().split(args).iterator(); + if (!argumentIterator.hasNext()) { return "NO \"Missing argument: script name\""; } - Scanner scanner = new Scanner(args.substring(scriptName.length()).trim()).useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next() + "\""; - } - return core.setActive(session, ParserUtils.unquote(scriptName)); - } - - public String getActive(Session session, String args) { - Scanner scanner = new Scanner(args.trim()).useDelimiter("\\A"); - if (scanner.hasNext()) { - return "NO \"Too many arguments: " + scanner.next() + "\""; + String scriptName = ParserUtils.unquote(argumentIterator.next()); + if (argumentIterator.hasNext()) { + return "NO \"Too many arguments: " + argumentIterator.next() + "\""; } - return core.getActive(session); + return core.setActive(session, scriptName); } public String startTLS(Session session) { Modified: james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java URL: http://svn.apache.org/viewvc/james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java?rev=1720592&r1=1720591&r2=1720592&view=diff ============================================================================== --- james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java (original) +++ james/project/trunk/protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java Thu Dec 17 15:09:04 2015 @@ -22,13 +22,8 @@ package org.apache.james.managesieve.uti import org.apache.james.managesieve.api.ArgumentException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class ParserUtils { - private static final Pattern SCRIPT_NAME_REGEX = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'"); - public static long getSize(String args) throws ArgumentException { if (args != null && args.length() > 3 && args.charAt(0) == '{' @@ -43,19 +38,6 @@ public class ParserUtils { throw new ArgumentException(args + " is an invalid size literal : it should be at least 4 char looking like {_+}"); } - public static String getScriptName(String args) { - Matcher regexMatcher = SCRIPT_NAME_REGEX.matcher(args); - regexMatcher.find(); - String name = null; - try { - name = regexMatcher.group(); - } catch(IllegalStateException ex) - { - // no op - } - return name; - } - public static String unquote(String quoted) { String result = quoted; if (quoted != null) { --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org