X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fopenconfig-parser-support%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fopenconfig%2Fparser%2FAbstractHashedValueStatementSupport.java;h=8e792ebd98b99ac4b6007984761d2344b4d24cd5;hb=c9dc4f53f3b71943ffd5f9a12ad2f2b380dc93d0;hp=d51e00d8d4cf5fc65956bbcc49011d4572bf0aed;hpb=c8668229ad6e73d5ae03a52f4b87e8e4d2a67c6e;p=yangtools.git diff --git a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java index d51e00d8d4..8e792ebd98 100644 --- a/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java +++ b/yang/openconfig-parser-support/src/main/java/org/opendaylight/yangtools/openconfig/parser/AbstractHashedValueStatementSupport.java @@ -7,77 +7,106 @@ */ package org.opendaylight.yangtools.openconfig.parser; +import static java.util.Objects.requireNonNull; + +import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueEffectiveStatement; import org.opendaylight.yangtools.openconfig.model.api.OpenConfigHashedValueStatement; +import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.SchemaNodeDefaults; import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.spi.meta.AbstractDeclaredStatement.WithoutArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractVoidStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractEmptyStatementSupport; +import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; +import org.opendaylight.yangtools.yang.parser.spi.meta.SchemaPathSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; abstract class AbstractHashedValueStatementSupport - extends AbstractVoidStatementSupport { + extends AbstractEmptyStatementSupport { + + private static final class Declared extends WithSubstatements implements OpenConfigHashedValueStatement { + private final @NonNull StatementDefinition definition; - private static final class Declared extends AbstractDeclaredStatement - implements OpenConfigHashedValueStatement { - Declared(final StmtContext context) { - super(context); + Declared(final StatementDefinition definition, + final ImmutableList> substatements) { + super(substatements); + this.definition = requireNonNull(definition); } @Override - public Void getArgument() { - return null; + public StatementDefinition statementDefinition() { + return definition; } } private static final class Effective - extends UnknownEffectiveStatementBase + extends UnknownEffectiveStatementBase implements OpenConfigHashedValueEffectiveStatement { + private final @NonNull StatementDefinition definition; + private final @NonNull Immutable path; - private final SchemaPath path; - - Effective(final StmtContext ctx) { - super(ctx); - path = ctx.coerceParentContext().getSchemaPath().get().createChild( - ctx.getPublicDefinition().getStatementName()); + Effective(final Current stmt, + final ImmutableList> substatements) { + super(stmt, substatements); + definition = stmt.publicDefinition(); + path = SchemaPathSupport.toEffectivePath(stmt.getEffectiveParent().getSchemaPath() + .createChild(stmt.publicDefinition().getStatementName())); } @Override public QName getQName() { - return path.getLastComponent(); + return SchemaNodeDefaults.extractQName(path); } @Override + @Deprecated public SchemaPath getPath() { - return path; + return SchemaNodeDefaults.extractPath(this, path); + } + + @Override + public StatementDefinition statementDefinition() { + return definition; + } + + @Override + public OpenConfigHashedValueEffectiveStatement asEffectiveStatement() { + return this; } } private final SubstatementValidator validator; - AbstractHashedValueStatementSupport(final StatementDefinition definition) { - super(definition); + AbstractHashedValueStatementSupport(final StatementDefinition definition, final YangParserConfiguration config) { + super(definition, StatementPolicy.contextIndependent(), config); this.validator = SubstatementValidator.builder(definition).build(); } @Override - public final OpenConfigHashedValueStatement createDeclared( - final StmtContext ctx) { - return new Declared(ctx); + protected final SubstatementValidator getSubstatementValidator() { + return validator; } @Override - public final OpenConfigHashedValueEffectiveStatement createEffective( - final StmtContext ctx) { - return new Effective(ctx); + protected final OpenConfigHashedValueStatement createDeclared( + final StmtContext ctx, + final ImmutableList> substatements) { + return new Declared(getPublicView(), substatements); } @Override - protected SubstatementValidator getSubstatementValidator() { - return validator; + protected OpenConfigHashedValueEffectiveStatement createEffective( + final Current stmt, + final ImmutableList> substatements) { + return new Effective(stmt, substatements); } }