| /* |
| * 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; |
| |
| /** |
| * {@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; |
| |
| @Override |
| public final 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); |
| } |
| |
| @Override |
| public final 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 final 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; |
| } |
| } |