Use YangNames CharMatchers in parser 48/98048/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 22 Oct 2021 15:11:25 +0000 (17:11 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 22 Oct 2021 15:14:16 +0000 (17:14 +0200)
We have common matchers available from yangtools, use those instead
of brewing our own.

Change-Id: I4099aab90e0abbf45bc5ba8248b1e0658921ee7e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserConstants.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/ParserIdentifier.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/utils/parser/YangInstanceIdentifierDeserializer.java

index e2de0ed8ce5f1ecf0d1393c2aba472296358c53c..cd326b32bc0a4f968ef521d4c11fe24c20150c88 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.restconf.nb.rfc8040.utils.parser;
 
 import com.google.common.base.CharMatcher;
+import org.opendaylight.yangtools.yang.common.YangNames;
 
 /**
  * Various constants related to RFC3986 (URI) and RFC7950 (YANG) parsing in the context of RFC8040.
@@ -18,12 +19,8 @@ final class ParserConstants {
             // FIXME: this space should not be here, but that was a day-0 bug and we have asserts on this
             + " ";
 
-    // First character of RFC7950 "identifier" rule
-    static final CharMatcher YANG_IDENTIFIER_START =
-            CharMatcher.inRange('A', 'Z').or(CharMatcher.inRange('a', 'z').or(CharMatcher.is('_'))).precomputed();
     // Subsequent characters of RFC7950 "identifier" rule
-    static final CharMatcher YANG_IDENTIFIER_PART =
-            YANG_IDENTIFIER_START.or(CharMatcher.inRange('0', '9')).or(CharMatcher.anyOf("-.")).precomputed();
+    static final CharMatcher YANG_IDENTIFIER_PART = YangNames.NOT_IDENTIFIER_PART.negate().precomputed();
 
     private ParserConstants() {
         // Hidden on purpose
index 5b550dd711e568991e540026ac064f039e3ff13b..f6b6ad901ae507e65eeb9ad3f4e1551971c55c38 100644 (file)
@@ -35,6 +35,7 @@ import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.common.YangNames;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextNode;
 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
@@ -306,12 +307,12 @@ public final class ParserIdentifier {
         final String name = moduleName.next();
 
         RestconfDocumentedException.throwIf(
-            name.isEmpty() || !ParserConstants.YANG_IDENTIFIER_START.matches(name.charAt(0)),
+            name.isEmpty() || !YangNames.IDENTIFIER_START.matches(name.charAt(0)),
             "Identifier must start with character from set 'a-zA-Z_", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
         RestconfDocumentedException.throwIf(name.toUpperCase(Locale.ROOT).startsWith("XML"),
             "Identifier must NOT start with XML ignore case.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
         RestconfDocumentedException.throwIf(
-            !ParserConstants.YANG_IDENTIFIER_PART.matchesAllOf(name.substring(1)),
+            YangNames.NOT_IDENTIFIER_PART.matchesAnyOf(name.substring(1)),
             "Supplied name has not expected identifier format.", ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE);
 
         return name;
index 8b9ccb8eb15ce89b713eed03a97cf21fdcbee4d1..553f86da8c0b9fb7b26d5607039352ed3988ccb6 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.restconf.nb.rfc8040.codecs.RestCodec;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.YangNames;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
@@ -288,7 +289,7 @@ public final class YangInstanceIdentifierDeserializer {
     }
 
     private void checkValidIdentifierStart() {
-        checkValid(ParserConstants.YANG_IDENTIFIER_START.matches(currentChar()), ErrorTag.MALFORMED_MESSAGE,
+        checkValid(YangNames.IDENTIFIER_START.matches(currentChar()), ErrorTag.MALFORMED_MESSAGE,
             "Identifier must start with character from set 'a-zA-Z_'");
     }