Removed commented out code and also changed catalog
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5bd87e80 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5bd87e80 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5bd87e80 Branch: refs/heads/master Commit: 5bd87e80d862b0dc9fb9721e229f00346b6cb188 Parents: 6a00524 Author: Arno Noordover <a...@noordover.net> Authored: Mon May 23 14:44:22 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon May 23 17:21:24 2016 +0200 ---------------------------------------------------------------------- .../camel/converter/TimePatternConverter.java | 6 +-- .../camel/catalog/TimePatternConverter.java | 50 +++++++++++++++----- 2 files changed, 40 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5bd87e80/camel-core/src/main/java/org/apache/camel/converter/TimePatternConverter.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/converter/TimePatternConverter.java b/camel-core/src/main/java/org/apache/camel/converter/TimePatternConverter.java index 6729292..d70275e 100644 --- a/camel-core/src/main/java/org/apache/camel/converter/TimePatternConverter.java +++ b/camel-core/src/main/java/org/apache/camel/converter/TimePatternConverter.java @@ -25,12 +25,12 @@ import org.slf4j.LoggerFactory; /** * Converter from String syntax to milli seconds. + * Code is copied to org.apache.camel.catalog.TimePatternConverter in camel-catalog */ @Converter public final class TimePatternConverter { private static final Logger LOG = LoggerFactory.getLogger(TimePatternConverter.class); private static final String NUMBERS_ONLY_STRING_PATTERN = "^[-]?(\\d)+$"; - //private static final String REPLACEMENT_PATTERN = "[our|inute|econd](s)?"; private static final String HOUR_REGEX_PATTERN = "((\\d)*(\\d))h(our(s)?)?"; private static final String MINUTES_REGEX_PATTERN = "((\\d)*(\\d))m(in(ute(s)?)?)?"; private static final String SECONDS_REGEX_PATTERN = "((\\d)*(\\d))s(ec(ond(s)?)?)?"; @@ -55,10 +55,6 @@ public final class TimePatternConverter { // This String -> long converter will be used for all strings. milliseconds = Long.valueOf(source); } else { - //matcher = createMatcher(REPLACEMENT_PATTERN, source); - - LOG.trace("Replaced original source {} to {}", source, source); - matcher = createMatcher(HOUR_REGEX_PATTERN, source); if (matcher.find()) { milliseconds = milliseconds + (3600000 * Long.valueOf(matcher.group(1))); http://git-wip-us.apache.org/repos/asf/camel/blob/5bd87e80/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java index e49ee89..659b441 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java @@ -23,12 +23,10 @@ import java.util.regex.Pattern; * This class is a copy from camel-core so we can use it independent to validate uris with time patterns */ public final class TimePatternConverter { - private static final String NUMBERS_ONLY_STRING_PATTERN = "^[-]?(\\d)+$"; - private static final String REPLACEMENT_PATTERN = "[our|inute|econd](s)?"; - private static final String HOUR_REGEX_PATTERN = "((\\d)*(\\d))[h|H]"; - private static final String MINUTES_REGEX_PATTERN = "((\\d)*(\\d))[m|M]"; - private static final String SECONDS_REGEX_PATTERN = "((\\d)*(\\d))[s|S]"; + private static final String HOUR_REGEX_PATTERN = "((\\d)*(\\d))h(our(s)?)?"; + private static final String MINUTES_REGEX_PATTERN = "((\\d)*(\\d))m(in(ute(s)?)?)?"; + private static final String SECONDS_REGEX_PATTERN = "((\\d)*(\\d))s(ec(ond(s)?)?)?"; /** * Utility classes should not have a public constructor. @@ -39,6 +37,8 @@ public final class TimePatternConverter { public static long toMilliSeconds(String source) throws IllegalArgumentException { long milliseconds = 0; boolean foundFlag = false; + + checkCorrectnessOfPattern(source); Matcher matcher; matcher = createMatcher(NUMBERS_ONLY_STRING_PATTERN, source); @@ -47,16 +47,13 @@ public final class TimePatternConverter { // This String -> long converter will be used for all strings. milliseconds = Long.valueOf(source); } else { - matcher = createMatcher(REPLACEMENT_PATTERN, source); - String replacedSource = matcher.replaceAll(""); - - matcher = createMatcher(HOUR_REGEX_PATTERN, replacedSource); + matcher = createMatcher(HOUR_REGEX_PATTERN, source); if (matcher.find()) { milliseconds = milliseconds + (3600000 * Long.valueOf(matcher.group(1))); foundFlag = true; } - matcher = createMatcher(MINUTES_REGEX_PATTERN, replacedSource); + matcher = createMatcher(MINUTES_REGEX_PATTERN, source); if (matcher.find()) { long minutes = Long.valueOf(matcher.group(1)); if ((minutes > 59) && foundFlag) { @@ -66,7 +63,7 @@ public final class TimePatternConverter { milliseconds = milliseconds + (60000 * minutes); } - matcher = createMatcher(SECONDS_REGEX_PATTERN, replacedSource); + matcher = createMatcher(SECONDS_REGEX_PATTERN, source); if (matcher.find()) { long seconds = Long.valueOf(matcher.group(1)); if ((seconds > 59) && foundFlag) { @@ -86,6 +83,37 @@ public final class TimePatternConverter { return milliseconds; } + private static void checkCorrectnessOfPattern(String source) { + //replace only numbers once + Matcher matcher = createMatcher(NUMBERS_ONLY_STRING_PATTERN, source); + String replaceSource = matcher.replaceFirst(""); + + //replace hour string once + matcher = createMatcher(HOUR_REGEX_PATTERN, replaceSource); + if (matcher.find() && matcher.find()) { + throw new IllegalArgumentException("Hours should not be specified more then once: " + source); + } + replaceSource = matcher.replaceFirst(""); + + //replace minutes once + matcher = createMatcher(MINUTES_REGEX_PATTERN, replaceSource); + if (matcher.find() && matcher.find()) { + throw new IllegalArgumentException("Minutes should not be specified more then once: " + source); + } + replaceSource = matcher.replaceFirst(""); + + //replace seconds once + matcher = createMatcher(SECONDS_REGEX_PATTERN, replaceSource); + if (matcher.find() && matcher.find()) { + throw new IllegalArgumentException("Seconds should not be specified more then once: " + source); + } + replaceSource = matcher.replaceFirst(""); + + if (replaceSource.length() > 0) { + throw new IllegalArgumentException("Illegal characters: " + source); + } + } + private static Matcher createMatcher(String regexPattern, String source) { Pattern pattern = Pattern.compile(regexPattern, Pattern.CASE_INSENSITIVE); return pattern.matcher(source);