@Override public Relative createChild(final QName element) { return new Relative(this, requireNonNull(element)); } }
@Override public Collection<SchemaNodeIdentifier> parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) { final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder(); int tokens = 0; for (String keyToken : LIST_KEY_SPLITTER.split(value)) { builder.add(SchemaNodeIdentifier.SAME.createChild(StmtContextUtils.parseNodeIdentifier(ctx, keyToken))); tokens++; } // Throws NPE on nulls, retains first inserted value, cannot be modified final Collection<SchemaNodeIdentifier> ret = builder.build(); SourceException.throwIf(ret.size() != tokens, ctx.getStatementSourceReference(), "Key argument '%s' contains duplicates", value); return ret; }
@Override public void startUniqueNode(final UniqueConstraint uniqueConstraint) { writer.startStatement(YangStmtMapping.UNIQUE); final StringBuilder uniqueStr = new StringBuilder(); final Collection<Relative> tag = uniqueConstraint.getTag(); final Iterator<Relative> iter = tag.iterator(); while (iter.hasNext()) { uniqueStr.append( String.join("/", Iterables.transform(iter.next().getPathFromRoot(), qn -> qn.getLocalName()))); if (iter.hasNext()) { uniqueStr.append(' '); } } writer.writeArgument(uniqueStr.toString()); }
@Override public Collection<SchemaNodeIdentifier> adaptArgumentValue( final StmtContext<Collection<SchemaNodeIdentifier>, KeyStatement, EffectiveStatement<Collection<SchemaNodeIdentifier>, KeyStatement>> ctx, final QNameModule targetModule) { final Builder<SchemaNodeIdentifier> builder = ImmutableSet.builder(); boolean replaced = false; for (final SchemaNodeIdentifier arg : ctx.coerceStatementArgument()) { final QName qname = arg.getLastComponent(); if (!targetModule.equals(qname.getModule())) { final QName newQname = ctx.getFromNamespace(QNameCacheNamespace.class, qname.withModule(targetModule)); builder.add(SchemaNodeIdentifier.SAME.createChild(newQname)); replaced = true; } else { builder.add(arg); } } // This makes sure we reuse the collection when a grouping is // instantiated in the same module return replaced ? builder.build() : ctx.getStatementArgument(); }
/** * A relative schema node identifier. */ public static final class Relative extends SchemaNodeIdentifier { private Relative(final SchemaNodeIdentifier parent, final QName qname) { super(parent, qname); } @Override public boolean isAbsolute() { return false; } @Override public Relative createChild(final QName element) { return new Relative(this, requireNonNull(element)); } }
/** * A relative schema node identifier. */ public static final class Relative extends SchemaNodeIdentifier { private Relative(final SchemaNodeIdentifier parent, final QName qname) { super(parent, qname); } @Override public boolean isAbsolute() { return false; } @Override public Relative createChild(final QName element) { return new Relative(this, requireNonNull(element)); } }
@Override public Relative createChild(final QName element) { return new Relative(this, requireNonNull(element)); } }