X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fstmt%2Freactor%2FRootStatementContext.java;h=7520c8ff730e1474094fc0a088205d3dc7bb7414;hb=9c6cbdaf5bb5e1ea8066558927e9ea674c0b9d51;hp=295d2cc8ca3ea6c5df4d1738920e52404a9476f2;hpb=e9f9f9f58e79ea99d4b76637087de1a5df4115db;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java index 295d2cc8ca..7520c8ff73 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/RootStatementContext.java @@ -7,41 +7,108 @@ */ package org.opendaylight.yangtools.yang.parser.stmt.reactor; +import com.google.common.base.Optional; +import java.util.Collection; +import org.opendaylight.yangtools.yang.common.QNameModule; +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.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - - -class RootStatementContext, E extends EffectiveStatement> - extends StatementContextBase { +import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +/** + * root statement class for a Yang source + */ +public class RootStatementContext, E extends EffectiveStatement> extends + StatementContextBase { private final SourceSpecificContext sourceContext; + private final A argument; - RootStatementContext(ContextBuilder builder, SourceSpecificContext sourceContext) throws SourceException { + RootStatementContext(final ContextBuilder builder, final SourceSpecificContext sourceContext) { super(builder); this.sourceContext = sourceContext; + this.argument = builder.getDefinition().parseArgumentValue(this, builder.getRawArgument()); + } + + RootStatementContext(final RootStatementContext original, final QNameModule newQNameModule, + final TypeOfCopy typeOfCopy) { + super(original); + + sourceContext = original.sourceContext; + this.argument = original.argument; + + copyDeclaredStmts(original, newQNameModule, typeOfCopy); + + copyEffectiveStmts(original, newQNameModule, typeOfCopy); + + } + + /** + * copies declared statements from original to this' substatements + * + * @param typeOfCopy + * determines whether copy is used by augmentation or uses + * @throws org.opendaylight.yangtools.yang.parser.spi.source.SourceException + */ + private void copyDeclaredStmts(final RootStatementContext original, final QNameModule newQNameModule, + final TypeOfCopy typeOfCopy) { + Collection> originalDeclaredSubstatements = original.declaredSubstatements(); + for (StmtContext stmtContext : originalDeclaredSubstatements) { + this.addEffectiveSubstatement(stmtContext.createCopy(newQNameModule, this, typeOfCopy)); + } + } + + /** + * copies effective statements from original to this' substatements + * + * @param typeOfCopy + * determines whether copy is used by augmentation or uses + * @throws org.opendaylight.yangtools.yang.parser.spi.source.SourceException + */ + private void copyEffectiveStmts(final RootStatementContext original, final QNameModule newQNameModule, + final TypeOfCopy typeOfCopy) { + Collection> originalEffectiveSubstatements = original.effectiveSubstatements(); + for (StmtContext stmtContext : originalEffectiveSubstatements) { + this.addEffectiveSubstatement(stmtContext.createCopy(newQNameModule, this, typeOfCopy)); + } } + /** + * @return null as root cannot have parent + */ @Override - public StatementContextBase getParentContext() { + public StatementContextBase getParentContext() { return null; } + /** + * @return namespace storage of source context + */ @Override public NamespaceStorageNode getParentNamespaceStorage() { return sourceContext; } + /** + * @return registry of source context + */ @Override public Registry getBehaviourRegistry() { return sourceContext; } @Override - public RootStatementContext getRoot() { + public StorageNodeType getStorageNodeType() { + return StorageNodeType.ROOT_STATEMENT_LOCAL; + } + /** + * @return this as its own root + */ + @Override + public RootStatementContext getRoot() { return this; } @@ -49,6 +116,59 @@ class RootStatementContext, E extends Effectiv return sourceContext; } + @Override + public A getStatementArgument() { + return argument; + } + + /** + * @return copy of this considering {@link TypeOfCopy} (augment, uses) + * + * @throws org.opendaylight.yangtools.yang.parser.spi.source.SourceException instance of SourceException + */ + @Override + public StatementContextBase createCopy(final StatementContextBase newParent, + final TypeOfCopy typeOfCopy) { + return createCopy(null, newParent, typeOfCopy); + } + + /** + * @return copy of this considering {@link TypeOfCopy} (augment, uses) + * + * @throws org.opendaylight.yangtools.yang.parser.spi.source.SourceException instance of SourceException + */ + @Override + public StatementContextBase createCopy(final QNameModule newQNameModule, + final StatementContextBase newParent, final TypeOfCopy typeOfCopy) { + RootStatementContext copy = new RootStatementContext<>(this, newQNameModule, typeOfCopy); + + copy.addAllToCopyHistory(this.getCopyHistory()); + copy.addToCopyHistory(typeOfCopy); + + if(this.getOriginalCtx() != null) { + copy.setOriginalCtx(this.getOriginalCtx()); + } else { + copy.setOriginalCtx(this); + } + definition().onStatementAdded(copy); + return copy; + } + + @Override + public Optional getSchemaPath() { + return Optional.of(SchemaPath.ROOT); + } + /** + * @return true + */ + @Override + public boolean isRootContext() { + return true; + } + @Override + public boolean isConfiguration() { + return true; + } }