*/
package org.opendaylight.yangtools.yang.parser.stmt.reactor;
-import java.util.List;
-
-import java.util.LinkedList;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-import org.opendaylight.yangtools.yang.common.QNameModule;
+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;
+import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.StorageNodeType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-class RootStatementContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>>
- extends StatementContextBase<A, D, E> {
+/**
+ * root statement class for a Yang source
+ */
+public class RootStatementContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> extends
+ StatementContextBase<A, D, E> {
private final SourceSpecificContext sourceContext;
private final A argument;
- RootStatementContext(ContextBuilder<A, D, E> builder,
- SourceSpecificContext sourceContext) throws SourceException {
+ RootStatementContext(final ContextBuilder<A, D, E> builder, final SourceSpecificContext sourceContext) {
super(builder);
this.sourceContext = sourceContext;
- this.argument = builder.getDefinition().parseArgumentValue(this,
- builder.getRawArgument());
+ this.argument = builder.getDefinition().parseArgumentValue(this, builder.getRawArgument());
}
- RootStatementContext(RootStatementContext<A, D, E> original,
- QNameModule newQNameModule, TypeOfCopy typeOfCopy)
- throws SourceException {
+ RootStatementContext(final RootStatementContext<A, D, E> original, final QNameModule newQNameModule,
+ final TypeOfCopy typeOfCopy) {
super(original);
sourceContext = original.sourceContext;
}
- private void copyDeclaredStmts(RootStatementContext<A, D, E> original,
- QNameModule newQNameModule, TypeOfCopy typeOfCopy)
- throws SourceException {
- Collection<? extends StmtContext<?, ?, ?>> originalDeclaredSubstatements = original
- .declaredSubstatements();
+ /**
+ * 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<A, D, E> original, final QNameModule newQNameModule,
+ final TypeOfCopy typeOfCopy) {
+ Collection<? extends StmtContext<?, ?, ?>> originalDeclaredSubstatements = original.declaredSubstatements();
for (StmtContext<?, ?, ?> stmtContext : originalDeclaredSubstatements) {
- this.addEffectiveSubstatement(stmtContext.createCopy(
- newQNameModule, this, typeOfCopy));
+ this.addEffectiveSubstatement(stmtContext.createCopy(newQNameModule, this, typeOfCopy));
}
}
- private void copyEffectiveStmts(RootStatementContext<A, D, E> original,
- QNameModule newQNameModule, TypeOfCopy typeOfCopy)
- throws SourceException {
- Collection<? extends StmtContext<?, ?, ?>> originalEffectiveSubstatements = original
- .effectiveSubstatements();
+ /**
+ * 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<A, D, E> original, final QNameModule newQNameModule,
+ final TypeOfCopy typeOfCopy) {
+ Collection<? extends StmtContext<?, ?, ?>> originalEffectiveSubstatements = original.effectiveSubstatements();
for (StmtContext<?, ?, ?> stmtContext : originalEffectiveSubstatements) {
- this.addEffectiveSubstatement(stmtContext.createCopy(
- newQNameModule, this, typeOfCopy));
+ this.addEffectiveSubstatement(stmtContext.createCopy(newQNameModule, this, typeOfCopy));
}
}
+ /**
+ * @return null as root cannot have parent
+ */
@Override
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 StorageNodeType getStorageNodeType() {
+ return StorageNodeType.ROOT_STATEMENT_LOCAL;
+ }
+ /**
+ * @return this as its own root
+ */
@Override
public RootStatementContext<?, ?, ?> getRoot() {
return this;
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<A, D, E> createCopy(QNameModule newQNameModule,
- StatementContextBase<?, ?, ?> newParent, TypeOfCopy typeOfCopy)
- throws SourceException {
- RootStatementContext<A, D, E> copy = new RootStatementContext<>(this,
- newQNameModule, typeOfCopy);
- copy.setTypeOfCopy(typeOfCopy);
- copy.setOriginalCtx(this);
+ public StatementContextBase<A, D, E> createCopy(final QNameModule newQNameModule,
+ final StatementContextBase<?, ?, ?> newParent, final TypeOfCopy typeOfCopy) {
+ RootStatementContext<A, D, E> 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 List<Object> getArgumentsFromRoot() {
- List<Object> argumentList = new LinkedList<Object>();
- argumentList.add(argument);
- return argumentList;
+ public Optional<SchemaPath> getSchemaPath() {
+ return Optional.of(SchemaPath.ROOT);
}
+ /**
+ * @return true
+ */
@Override
public boolean isRootContext() {
return true;
}
+
+ @Override
+ public boolean isConfiguration() {
+ return true;
+ }
}