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 extends StmtContext, ?, ?>> 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 extends StmtContext, ?, ?>> 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;
+ }
}