Repository: bval
Updated Branches:
  refs/heads/bv2 b10dc6833 -> 51b9ab27b


pass email validation TCK tests by factoring out AbstractPatternValidator to 
validate @Email's additional regexp constraint


Project: http://git-wip-us.apache.org/repos/asf/bval/repo
Commit: http://git-wip-us.apache.org/repos/asf/bval/commit/617fb7c7
Tree: http://git-wip-us.apache.org/repos/asf/bval/tree/617fb7c7
Diff: http://git-wip-us.apache.org/repos/asf/bval/diff/617fb7c7

Branch: refs/heads/bv2
Commit: 617fb7c7535781522b92268166a195653f75502f
Parents: b10dc68
Author: Matt Benson <[email protected]>
Authored: Fri Mar 9 14:06:15 2018 -0600
Committer: Matt Benson <[email protected]>
Committed: Fri Mar 9 14:06:15 2018 -0600

----------------------------------------------------------------------
 .../constraints/AbstractPatternValidator.java   | 72 ++++++++++++++++++++
 .../apache/bval/constraints/EmailValidator.java | 25 +++++--
 .../bval/constraints/PatternValidator.java      | 38 ++++-------
 3 files changed, 106 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/bval/blob/617fb7c7/bval-jsr/src/main/java/org/apache/bval/constraints/AbstractPatternValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/AbstractPatternValidator.java
 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AbstractPatternValidator.java
new file mode 100644
index 0000000..888eb51
--- /dev/null
+++ 
b/bval-jsr/src/main/java/org/apache/bval/constraints/AbstractPatternValidator.java
@@ -0,0 +1,72 @@
+/*
+ * 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.bval.constraints;
+
+import java.lang.annotation.Annotation;
+import java.util.function.Function;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Pattern.Flag;
+
+import org.apache.bval.util.Validate;
+
+public abstract class AbstractPatternValidator<A extends Annotation, T extends 
CharSequence>
+    implements ConstraintValidator<A, T> {
+
+    public interface PatternDescriptor {
+        String regexp();
+
+        Flag[] flags();
+    }
+
+    private final Function<A, PatternDescriptor> toDescriptor;
+
+    protected Pattern pattern;
+
+    protected AbstractPatternValidator(Function<A, PatternDescriptor> 
toDescriptor) {
+        super();
+        this.toDescriptor = Validate.notNull(toDescriptor);
+    }
+
+    @Override
+    public void initialize(A constraintAnnotation) {
+        ConstraintValidator.super.initialize(constraintAnnotation);
+
+        final PatternDescriptor pd = toDescriptor.apply(constraintAnnotation);
+
+        final Flag flags[] = pd.flags();
+        int intFlag = 0;
+        for (Flag flag : flags) {
+            intFlag = intFlag | flag.getValue();
+        }
+        try {
+            pattern = Pattern.compile(pd.regexp(), intFlag);
+        } catch (PatternSyntaxException e) {
+            throw new IllegalArgumentException("Invalid regular expression.", 
e);
+        }
+    }
+
+    @Override
+    public boolean isValid(T value, ConstraintValidatorContext context) {
+        return value == null || pattern.matcher(value).matches();
+    }
+}

http://git-wip-us.apache.org/repos/asf/bval/blob/617fb7c7/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
index b20806b..dca7753 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/EmailValidator.java
@@ -18,18 +18,33 @@
  */
 package org.apache.bval.constraints;
 
-import org.apache.bval.routines.EMailValidationUtils;
-
-import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
+import javax.validation.constraints.Pattern.Flag;
+
+import org.apache.bval.routines.EMailValidationUtils;
 
 /**
  * Description: <br/>
  */
-public class EmailValidator implements 
ConstraintValidator<javax.validation.constraints.Email, CharSequence> {
+public class EmailValidator extends 
AbstractPatternValidator<javax.validation.constraints.Email, CharSequence> {
+
+    public EmailValidator() {
+        super(email -> new PatternDescriptor() {
+
+            @Override
+            public String regexp() {
+                return email.regexp();
+            }
+
+            @Override
+            public Flag[] flags() {
+                return email.flags();
+            }
+        });
+    }
 
     @Override
     public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
-        return EMailValidationUtils.isValid(value);
+        return EMailValidationUtils.isValid(value) && super.isValid(value, 
context);
     }
 }

http://git-wip-us.apache.org/repos/asf/bval/blob/617fb7c7/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
----------------------------------------------------------------------
diff --git 
a/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java 
b/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
index 8a53062..3d0fdd4 100644
--- a/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
+++ b/bval-jsr/src/main/java/org/apache/bval/constraints/PatternValidator.java
@@ -18,35 +18,25 @@
  */
 package org.apache.bval.constraints;
 
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorContext;
 import javax.validation.constraints.Pattern;
-import java.util.regex.PatternSyntaxException;
+import javax.validation.constraints.Pattern.Flag;
 
 /**
- * validator using a regular expression,
- * based on the jsr Pattern constraint annotation.
+ * validator using a regular expression, based on the jsr Pattern constraint 
annotation.
  */
-public class PatternValidator implements ConstraintValidator<Pattern, 
CharSequence> {
-    protected java.util.regex.Pattern pattern;
+public class PatternValidator extends AbstractPatternValidator<Pattern, 
CharSequence> {
+    public PatternValidator() {
+        super(p -> new PatternDescriptor() {
 
-    @Override
-    public void initialize(Pattern annotation) {
-        final Pattern.Flag flags[] = annotation.flags();
-        int intFlag = 0;
-        for (Pattern.Flag flag : flags) {
-            intFlag = intFlag | flag.getValue();
-        }
+            @Override
+            public String regexp() {
+                return p.regexp();
+            }
 
-        try {
-            pattern = java.util.regex.Pattern.compile(annotation.regexp(), 
intFlag);
-        } catch (PatternSyntaxException e) {
-            throw new IllegalArgumentException("Invalid regular expression.", 
e);
-        }
-    }
-
-    @Override
-    public boolean isValid(CharSequence value, ConstraintValidatorContext 
context) {
-        return value == null || pattern.matcher(value).matches();
+            @Override
+            public Flag[] flags() {
+                return p.flags();
+            }
+        });
     }
 }

Reply via email to