JAMES-2429 keep compiled Pattern once checked for validity
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9c67375e Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9c67375e Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9c67375e Branch: refs/heads/master Commit: 9c67375ea978e6f15535d9d63a81ba93ec4e1cfc Parents: c0ea100 Author: Matthieu Baechler <[email protected]> Authored: Thu Jun 14 15:21:59 2018 +0200 Committer: benwa <[email protected]> Committed: Tue Jun 19 16:52:40 2018 +0700 ---------------------------------------------------------------------- .../james/dlp/api/DLPConfigurationItem.java | 25 ++++++++++++-------- .../james/dlp/api/DLPConfigurationItemTest.java | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9c67375e/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java ---------------------------------------------------------------------- diff --git a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java index 6c48b8d..75c1b7d 100644 --- a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java +++ b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java @@ -148,24 +148,27 @@ public class DLPConfigurationItem { public DLPConfigurationItem build() { Preconditions.checkState(id.isPresent(), "`id` is mandatory"); Preconditions.checkState(expression.isPresent(), "`expression` is mandatory"); - Preconditions.checkState(isValidPattern(expression.get()), "`expression` must be a valid regex"); return new DLPConfigurationItem( id.get(), explanation, - expression.get(), + ensureValidPattern(expression.get()), new Targets( targetsSender.orElse(NOT_TARGETED), targetsRecipients.orElse(NOT_TARGETED), targetsContent.orElse(NOT_TARGETED))); } - private static boolean isValidPattern(String regex) { + private Pattern ensureValidPattern(String input) { + return isValidPattern(input) + .orElseThrow(() -> new IllegalStateException("`expression` must be a valid regex")); + } + + private static Optional<Pattern> isValidPattern(String regex) { try { - Pattern.compile(regex); - return true; + return Optional.of(Pattern.compile(regex)); } catch (PatternSyntaxException e) { - return false; + return Optional.empty(); } } } @@ -226,10 +229,10 @@ public class DLPConfigurationItem { private final Id id; private final Optional<String> explanation; - private final String regexp; + private final Pattern regexp; private final Targets targets; - private DLPConfigurationItem(Id id, Optional<String> explanation, String regexp, Targets targets) { + private DLPConfigurationItem(Id id, Optional<String> explanation, Pattern regexp, Targets targets) { this.id = id; this.explanation = explanation; this.regexp = regexp; @@ -240,7 +243,7 @@ public class DLPConfigurationItem { return explanation; } - public String getRegexp() { + public Pattern getRegexp() { return regexp; } @@ -257,9 +260,11 @@ public class DLPConfigurationItem { if (o instanceof DLPConfigurationItem) { DLPConfigurationItem dlpConfigurationItem = (DLPConfigurationItem) o; + Optional<String> regexp = Optional.ofNullable(this.regexp).map(Pattern::pattern); + Optional<String> otherRegexp = Optional.ofNullable(dlpConfigurationItem.regexp).map(Pattern::pattern); return Objects.equals(this.id, dlpConfigurationItem.id) && Objects.equals(this.explanation, dlpConfigurationItem.explanation) - && Objects.equals(this.regexp, dlpConfigurationItem.regexp) + && Objects.equals(regexp, otherRegexp) && Objects.equals(this.targets, dlpConfigurationItem.targets); } return false; http://git-wip-us.apache.org/repos/asf/james-project/blob/9c67375e/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java b/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java index b0d8f9b..8887568 100644 --- a/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java +++ b/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java @@ -124,7 +124,7 @@ public class DLPConfigurationItemTest { .expression(REGEX) .build(); - assertThat(dlpConfigurationItem.getRegexp()).isEqualTo(REGEX); + assertThat(dlpConfigurationItem.getRegexp().pattern()).isEqualTo(REGEX); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
