import com.google.common.annotations.Beta;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
/**
* Effective statement representation of 'yang-data' extension defined in
@Beta
public interface YangDataEffectiveStatement extends EffectiveStatement<String, YangDataStatement>, YangDataSchemaNode {
+ /**
+ * Return the container statement defined in this yang-data statement instance.
+ *
+ * @return container statement
+ */
+ ContainerEffectiveStatement getContainer();
}
import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
-import com.google.common.base.Preconditions;
+import com.google.common.base.Verify;
import java.util.Objects;
import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.rfc8040.model.api.YangDataEffectiveStatement;
import org.opendaylight.yangtools.rfc8040.model.api.YangDataStatement;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.UnknownEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerEffectiveStatementImpl;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
private final SchemaPath path;
private final QName maybeQNameArgument;
- private final ContainerSchemaNode containerSchemaNode;
+ private final @NonNull ContainerEffectiveStatement container;
YangDataEffectiveStatementImpl(final StmtContext<String, YangDataStatement, ?> ctx) {
super(ctx);
this.maybeQNameArgument = maybeQNameArgumentInit;
path = ctx.getParentContext().getSchemaPath().get().createChild(maybeQNameArgument);
- containerSchemaNode = Preconditions.checkNotNull(firstEffective(ContainerEffectiveStatementImpl.class));
+ container = findFirstEffectiveSubstatement(ContainerEffectiveStatement.class).get();
+
+ // TODO: this is strong binding of two API contracts. Unfortunately ContainerEffectiveStatement design is
+ // incomplete.
+ Verify.verify(container instanceof ContainerSchemaNode);
}
@Nonnull
return path;
}
+ @Override
+ public ContainerEffectiveStatement getContainer() {
+ return container;
+ }
+
@Nonnull
@Override
- public ContainerSchemaNode getContainer() {
- return containerSchemaNode;
+ public ContainerSchemaNode getContainerSchemaNode() {
+ // Verified in the constructor
+ return (ContainerSchemaNode) container;
}
@Override
@Override
public String toString() {
- return MoreObjects.toStringHelper(this).add("qname", maybeQNameArgument).add("path", path).toString();
+ return MoreObjects.toStringHelper(this).omitNullValues()
+ .add("qname", maybeQNameArgument)
+ .add("path", path)
+ .add("container", container).toString();
}
}
assertNotNull(myYangDataANode);
assertNotNull(myYangDataBNode);
- assertNotNull(myYangDataANode.getContainer());
- assertNotNull(myYangDataBNode.getContainer());
+ assertNotNull(myYangDataANode.getContainerSchemaNode());
+ assertNotNull(myYangDataBNode.getContainerSchemaNode());
}
@Test
final YangDataSchemaNode myYangDataNode = (YangDataSchemaNode) unknownSchemaNode;
assertNotNull(myYangDataNode);
- final ContainerSchemaNode contInYangData = myYangDataNode.getContainer();
+ final ContainerSchemaNode contInYangData = myYangDataNode.getContainerSchemaNode();
assertNotNull(contInYangData);
assertTrue(contInYangData.isConfiguration());
final ContainerSchemaNode innerCont = (ContainerSchemaNode) contInYangData.getDataChildByName(
final YangDataSchemaNode myYangDataNode = (YangDataSchemaNode) unknownSchemaNode;
assertNotNull(myYangDataNode);
- final ContainerSchemaNode contInYangData = myYangDataNode.getContainer();
+ final ContainerSchemaNode contInYangData = myYangDataNode.getContainerSchemaNode();
assertNotNull(contInYangData);
final ContainerSchemaNode innerCont = (ContainerSchemaNode) contInYangData.getDataChildByName(
QName.create(foobar.getQNameModule(), "inner-cont"));