X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Frfc6020%2FUtils.java;h=c797294da592fc9268aa6e1ad0b9867899c9c7e0;hb=e403e34bcb508c48aa606a1cd81a386fb73c5db6;hp=a41a1a9de3f6cbe0a20cbd2abcaf2514e31278fd;hpb=e07eef7d0001ab022a010c9b123af2a3f3d3bcc2;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index a41a1a9de3..c797294da5 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -78,6 +78,7 @@ public final class Utils { private static final CharMatcher QUESTION_MARK_MATCHER = CharMatcher.is('?'); private static final Splitter SLASH_SPLITTER = Splitter.on('/').omitEmptyStrings().trimResults(); private static final Splitter SPACE_SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults(); + private static final Splitter COLON_SPLITTER = Splitter.on(":").omitEmptyStrings().trimResults(); private static final Pattern PATH_ABS = Pattern.compile("/[^/].*"); private static final Pattern BETWEEN_CURLY_BRACES_PATTERN = Pattern.compile("\\{(.+?)\\}"); private static final Set JAVA_UNICODE_BLOCKS = ImmutableSet.builder() @@ -341,6 +342,19 @@ public final class Utils { return keyNodes; } + static Collection parseUniqueConstraintArgument(final StmtContext ctx, + final String argumentValue) { + final Set uniqueConstraintNodes = new HashSet<>(); + for (String uniqueArgToken : SPACE_SPLITTER.split(argumentValue)) { + final SchemaNodeIdentifier nodeIdentifier = Utils.nodeIdentifierFromPath(ctx, uniqueArgToken); + SourceException.throwIf(nodeIdentifier.isAbsolute(), ctx.getStatementSourceReference(), + "Unique statement argument '%s' contains schema node identifier '%s' " + + "which is not in the descendant node identifier form.", argumentValue, uniqueArgToken); + uniqueConstraintNodes.add((SchemaNodeIdentifier.Relative) nodeIdentifier); + } + return ImmutableSet.copyOf(uniqueConstraintNodes); + } + private static String trimSingleLastSlashFromXPath(final String path) { return path.endsWith("/") ? path.substring(0, path.length() - 1) : path; } @@ -372,6 +386,14 @@ public final class Utils { return identifier; } + public static String trimPrefix(final String identifier) { + List namesParts = COLON_SPLITTER.splitToList(identifier); + if (namesParts.size() == 2) { + return namesParts.get(1); + } + return identifier; + } + /** * * Based on identifier read from source and collections of relevant prefixes and statement definitions mappings