/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.parser.stmt.reactor;
import static java.util.Objects.requireNonNull;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
final class SubstatementContext, E extends EffectiveStatement> extends
AbstractResumedStatement {
private final StatementContextBase, ?, ?> parent;
private final A argument;
private SubstatementContext(final SubstatementContext original,
final StatementContextBase, ?, ?> parent) {
super(original);
this.parent = requireNonNull(parent);
this.argument = original.argument;
}
SubstatementContext(final OriginalStmtCtx, ?, ?> parent, final StatementDefinitionContext def,
final StatementSourceReference ref, final String rawArgument) {
super(def, ref, rawArgument);
this.parent = requireNonNull(parent);
this.argument = def.parseArgumentValue(this, rawArgument());
}
@Override
SubstatementContext reparent(final StatementContextBase, ?, ?> newParent) {
return new SubstatementContext<>(this, newParent);
}
/*
* KEEP THINGS ORGANIZED!
*
* below methods exist in the same form in InferredStatementContext. If any adjustment is made here, make sure it is
* properly updated there.
*/
@Override
public A argument() {
return argument;
}
@Override
public StatementContextBase, ?, ?> getParentContext() {
return parent;
}
@Override
public StorageNodeType getStorageNodeType() {
return StorageNodeType.STATEMENT_LOCAL;
}
@Override
public StatementContextBase, ?, ?> getParentNamespaceStorage() {
return parent;
}
@Override
public RootStatementContext, ?, ?> getRoot() {
return parent.getRoot();
}
@Override
public EffectiveConfig effectiveConfig() {
return effectiveConfig(parent);
}
@Override
protected boolean isIgnoringIfFeatures() {
return isIgnoringIfFeatures(parent);
}
@Override
protected boolean isIgnoringConfig() {
return isIgnoringConfig(parent);
}
@Override
protected boolean isParentSupportedByFeatures() {
return parent.isSupportedByFeatures();
}
}