*/
package org.opendaylight.yangtools.yang.data.impl.codec;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
+import java.util.Optional;
import java.util.regex.Pattern;
+import org.opendaylight.yangtools.yang.model.api.type.ModifierKind;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
class CompiledPatternContext {
private final Pattern pattern;
private final String errorMessage;
+ private final String regEx;
+ private final boolean invert;
CompiledPatternContext(final PatternConstraint yangConstraint) {
- pattern = Pattern.compile("^" + yangConstraint.getRegularExpression() + "$");
- final String yangMessage = yangConstraint.getErrorMessage();
- if (Strings.isNullOrEmpty(yangMessage)) {
- errorMessage = "Value %s does not match regular expression <" + pattern.pattern() + ">";
+ pattern = Pattern.compile(yangConstraint.getJavaPatternString());
+ errorMessage = yangConstraint.getErrorMessage().orElse(null);
+ regEx = errorMessage == null ? yangConstraint.getRegularExpressionString() : null;
+
+ final Optional<ModifierKind> optModifier = yangConstraint.getModifier();
+ if (optModifier.isPresent()) {
+ final ModifierKind modifier = optModifier.get();
+ switch (modifier) {
+ case INVERT_MATCH:
+ invert = true;
+ break;
+ default:
+ throw new IllegalStateException("Unhandled modifier " + modifier);
+ }
} else {
- errorMessage = yangMessage;
+ invert = false;
}
}
- public void validate(final String s) {
- Preconditions.checkArgument(pattern.matcher(s).matches(), errorMessage, s);
- }
+ void validate(final String str) {
+ if (pattern.matcher(str).matches() == invert) {
+ if (errorMessage != null) {
+ throw new IllegalArgumentException(errorMessage);
+ }
-}
\ No newline at end of file
+ throw new IllegalArgumentException("Value " + str + " " + (invert ? "matches" : "does not match")
+ + " regular expression '" + regEx + "'");
+ }
+ }
+}