import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
import org.opendaylight.yangtools.yang.parser.stmt.reactor.NamespaceBehaviourWithListeners.ValueAddedListener;
-abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> extends
+public abstract class StatementContextBase<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> extends
NamespaceStorageSupport implements StmtContext.Mutable<A, D, E>, Identifiable<StatementIdentifier> {
interface OnNamespaceItemAdded extends EventListener{
private final StatementDefinitionContext<A, D, E> definition;
private final StatementIdentifier identifier;
private final StatementSourceReference statementDeclSource;
- private final A argument;
private LinkedHashMap<StatementIdentifier, StatementContextBase<?, ?, ?> > substatements = new LinkedHashMap<>();
this.definition = builder.getDefinition();
this.identifier = builder.getIdentifier();
this.statementDeclSource = builder.getStamementSource();
- this.argument = definition.parseArgumentValue(this, this.rawStatementArgument());
+ this.completedPhase = null;
+ }
+
+ StatementContextBase(StatementContextBase<A,D,E> original) {
+ this.definition = original.definition;
+ this.identifier = original.identifier;
+ this.statementDeclSource = original.statementDeclSource;
this.completedPhase = null;
}
}
@Override
- public A getStatementArgument() {
- return argument;
+ public Collection<StatementContextBase<?, ?, ?>> declaredSubstatements() {
+ return Collections.unmodifiableCollection(declared);
}
@Override
- public Collection<? extends StmtContext<?, ?, ?>> declaredSubstatements() {
- return Collections.unmodifiableCollection(declared);
+ public Collection<StatementContextBase<?, ?, ?>> effectiveSubstatements() {
+ return Collections.unmodifiableCollection(effective);
+ }
+
+ public void addEffectiveSubstatement(StatementContextBase<?, ?, ?> substatement){
+ effective.add(substatement);
+ }
+
+ public void addDeclaredSubstatement(StatementContextBase<?, ?, ?> substatement){
+ declared.add(substatement);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
};
}
+
+
@Override
public StorageNodeType getStorageNodeType() {
return StorageNodeType.STATEMENT_LOCAL;
for(StatementContextBase<?, ?, ?> child: declared) {
finished &= child.tryToCompletePhase(phase);
}
+ for(StatementContextBase<?, ?, ?> child: effective) {
+ finished &= child.tryToCompletePhase(phase);
+ }
if(finished) {
onPhaseCompleted(phase);
return true;