blob: 53459a904a860a67a3878f3ec065084556bdce41 [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed 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 com.google.gwt.validation.client.constraints;
import com.google.gwt.regexp.shared.MatchResult;
import com.google.gwt.regexp.shared.RegExp;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Pattern.Flag;
/**
* <strong>EXPERIMENTAL</strong> and subject to change. Do not use this in
* production code.
* <p>
* {@link Pattern} constraint validator implementation.
* <p>
* Note this implementation uses {@link RegExp} which differs from
* {@link java.util.regex.Pattern}.
*/
public class PatternValidator implements ConstraintValidator<Pattern, String> {
private RegExp pattern;
public void initialize(Pattern annotation) {
Pattern.Flag flags[] = annotation.flags();
String flagString = "";
for (Pattern.Flag flag : flags) {
flagString += toString(flag);
}
pattern = RegExp.compile(annotation.regexp(), flagString);
}
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
MatchResult match = pattern.exec(value);
if (match == null) {
return false;
}
// Must match the entire string
return match.getGroup(0).length() == value.length();
}
private String toString(Flag flag) {
String value;
switch (flag) {
case CASE_INSENSITIVE:
case UNICODE_CASE:
value = "i";
break;
case MULTILINE:
value = "m";
break;
default:
throw new IllegalArgumentException(flag
+ " is not a suppoted gwt Pattern (RegExp) flag");
}
return value;
}
}