From 23cf7d9f6fcea816d1e938e37b52165781710634 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 21 Feb 2018 14:51:03 +0100 Subject: [PATCH] Do not fake an errorMessage for pattern constraints Eagerly-formatting a replacement error message is actively hurting callers of getErrorMessage(), which really expect that method to return model-defined error message. Fix that. JIRA: YANGTOOLS-850 Change-Id: Iddb5f9ae529f1ed49eed735a8931ee396334f578 Signed-off-by: Robert Varga --- .../yang/data/impl/codec/CompiledPatternContext.java | 2 +- .../data/impl/codecs/StringPatternCheckingCodecTest.java | 2 +- .../yangtools/yang/model/util/PatternConstraintImpl.java | 5 ++--- .../yang/model/util/PatternConstraintImplTest.java | 2 +- .../rfc7950/stmt/pattern/PatternConstraintImpl.java | 8 ++++---- .../yangtools/yang/stmt/EffectiveStatementTypeTest.java | 3 +-- 6 files changed, 10 insertions(+), 12 deletions(-) diff --git a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java index afddefdcd7..3806bf35f7 100644 --- a/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java +++ b/yang/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/CompiledPatternContext.java @@ -45,7 +45,7 @@ class CompiledPatternContext { throw new IllegalArgumentException(errorMessage); } - throw new IllegalArgumentException("Value " + str + " " + (invert ? "matches" : "does not match") + throw new IllegalArgumentException("Value '" + str + "' " + (invert ? "matches" : "does not match") + " regular expression '" + regEx + "'"); } } diff --git a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringPatternCheckingCodecTest.java b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringPatternCheckingCodecTest.java index 4cf56becb5..e053e30c1c 100644 --- a/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringPatternCheckingCodecTest.java +++ b/yang/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codecs/StringPatternCheckingCodecTest.java @@ -57,7 +57,7 @@ public class StringPatternCheckingCodecTest { fail("Exception should have been thrown."); } catch (final IllegalArgumentException ex) { LOG.debug("IllegalArgumentException was thrown as expected", ex); - assertEquals("Supplied value does not match the regular expression ^(?:[A-Z]+)$.", ex.getMessage()); + assertEquals("Value 'abcd' does not match regular expression '[A-Z]+'", ex.getMessage()); } } } diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java index 19bc54c1b1..780a59f5c1 100644 --- a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java +++ b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImpl.java @@ -46,8 +46,7 @@ final class PatternConstraintImpl implements PatternConstraint, Immutable { this.description = description.orElse(null); this.reference = reference.orElse(null); this.errorAppTag = errorAppTag != null ? errorAppTag : "invalid-regular-expression"; - this.errorMessage = errorMessage != null ? errorMessage : String.format( - "Supplied value does not match the regular expression %s.", regex); + this.errorMessage = errorMessage; this.modifier = modifier.orElse(null); } @@ -107,7 +106,7 @@ final class PatternConstraintImpl implements PatternConstraint, Immutable { @Override public String toString() { - return MoreObjects.toStringHelper(this).add("regex", regex).add("description", description) + return MoreObjects.toStringHelper(this).omitNullValues().add("regex", regex).add("description", description) .add("reference", reference).add("errorAppTag", errorAppTag).add("errorMessage", errorMessage) .add("modifier", modifier).toString(); } diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java index b475e8243c..a98fc2ac4c 100644 --- a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java +++ b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/PatternConstraintImplTest.java @@ -36,7 +36,7 @@ public class PatternConstraintImplTest { assertEquals("Description should be 'test description'.", Optional.of("test description"), patternConstraint.getDescription()); assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag()); - assertTrue(patternConstraint.getErrorMessage().isPresent()); + assertFalse(patternConstraint.getErrorMessage().isPresent()); assertEquals(Optional.of("RFC 6020"), patternConstraint.getReference()); assertEquals("Regular expression should be equls '\\D'.", "\\D", patternConstraint.getJavaPatternString()); assertNotEquals("Hash codes shouldn't be equals.", patternConstraint.hashCode(), patternConstraint2.hashCode()); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java index 2d1f229aa9..2bb4fef2a6 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/pattern/PatternConstraintImpl.java @@ -12,10 +12,11 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; import java.util.Objects; import java.util.Optional; +import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.model.api.type.ModifierKind; import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint; -final class PatternConstraintImpl implements PatternConstraint { +final class PatternConstraintImpl implements PatternConstraint, Immutable { private final String regEx; private final String rawRegEx; @@ -37,8 +38,7 @@ final class PatternConstraintImpl implements PatternConstraint { this.description = description; this.reference = reference; this.errorAppTag = errorAppTag != null ? errorAppTag : "invalid-regular-expression"; - this.errorMessage = errorMessage != null ? errorMessage : String.format( - "Supplied value does not match the regular expression %s.", regex); + this.errorMessage = errorMessage; this.modifier = modifier; } @@ -101,7 +101,7 @@ final class PatternConstraintImpl implements PatternConstraint { @Override public String toString() { - return MoreObjects.toStringHelper(this).add("regex", regEx).add("description", description) + return MoreObjects.toStringHelper(this).omitNullValues().add("regex", regEx).add("description", description) .add("reference", reference).add("errorAppTag", errorAppTag).add("errorMessage", errorMessage) .add("modifier", modifier).toString(); } diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java index 33211f566d..901e9181f7 100644 --- a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java +++ b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/EffectiveStatementTypeTest.java @@ -437,8 +437,7 @@ public class EffectiveStatementTypeTest { assertEquals("^(?:[0-9a-fA-F]*)$", patternConstraint.getJavaPatternString()); assertFalse(patternConstraint.getReference().isPresent()); assertFalse(patternConstraint.getDescription().isPresent()); - assertEquals(Optional.of("Supplied value does not match the regular expression ^(?:[0-9a-fA-F]*)$."), - patternConstraint.getErrorMessage()); + assertEquals(Optional.empty(), patternConstraint.getErrorMessage()); assertEquals(Optional.of("invalid-regular-expression"), patternConstraint.getErrorAppTag()); assertNotNull(patternConstraint.toString()); assertNotNull(patternConstraint.hashCode()); -- 2.36.6