return new StorageSpecific<>(identifier, StorageNodeType.SOURCE_LOCAL_SPECIAL);
}
+ public static <K, V, N extends IdentifierNamespace<K, V>> NamespaceBehaviour<K, V, N> statementLocal(
+ Class<N> identifier) {
+ return new StorageSpecific<>(identifier, StorageNodeType.STATEMENT_LOCAL);
+ }
+
/**
*
* Creates tree-scoped namespace behaviour for supplied namespace type.
} else {
copy.setOriginalCtx(this);
}
-
+ definition().onStatementAdded(copy);
return copy;
}
if (potential == null) {
potential = new SubstatementContext(StatementContextBase.this, this);
substatements.put(createIdentifier(), potential);
+ getDefinition().onStatementAdded(potential);
}
potential.resetLists();
switch (this.getStamementSource().getStatementSource()) {
}
public boolean onStatementAdded(Mutable<A,D,E> stmt) {
+ support.onStatementAdded(stmt);
return false;
}
copy.setOriginalCtx(this);
}
+ definition().onStatementAdded(copy);
return copy;
}
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class AnyxmlStatementImpl extends AbstractDeclaredStatement<QName> implements AnyxmlStatement {
return Utils.qNameFromArgument(ctx,value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, AnyxmlStatement, EffectiveStatement<QName, AnyxmlStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public AnyxmlStatement createDeclared(StmtContext<QName, AnyxmlStatement,?> ctx) {
return new AnyxmlStatementImpl(ctx);
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.CaseEffectiveStatementImpl;
return Utils.qNameFromArgument(ctx, value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, CaseStatement, EffectiveStatement<QName, CaseStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override public CaseStatement createDeclared(
StmtContext<QName, CaseStatement, ?> ctx) {
return new CaseStatementImpl(ctx);
--- /dev/null
+/**
+ * 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.rfc6020;
+
+import org.opendaylight.yangtools.yang.common.QName;
+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.StatementNamespace;
+
+/**
+ * Statement local namespace, which holds direct schema node descendants.
+ *
+ * @param <D>
+ * @param <E>
+ */
+public interface ChildSchemaNodes<D extends DeclaredStatement<QName>,E extends EffectiveStatement<QName, D>> extends StatementNamespace<QName, D, E>{
+
+}
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
return Utils.qNameFromArgument(ctx, value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, ChoiceStatement, EffectiveStatement<QName, ChoiceStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public ChoiceStatement createDeclared(
StmtContext<QName, ChoiceStatement, ?> ctx) {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class ContainerStatementImpl extends AbstractDeclaredStatement<QName> implements ContainerStatement {
return Utils.qNameFromArgument(ctx,value);
}
+ @Override
+ public void onStatementAdded(
+ Mutable<QName, ContainerStatement, EffectiveStatement<QName, ContainerStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public ContainerStatement createDeclared(StmtContext<QName, ContainerStatement,?> ctx) {
return new ContainerStatementImpl(ctx);
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class InputStatementImpl extends AbstractDeclaredStatement<QName>
implements InputStatement {
return Utils.qNameFromArgument(ctx, "input");
}
+ @Override
+ public void onStatementAdded(Mutable<QName, InputStatement, EffectiveStatement<QName, InputStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public InputStatement createDeclared(
StmtContext<QName, InputStatement, ?> ctx) {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
super(Rfc6020Mapping.LEAF_LIST);
}
+ @Override
+ public void onStatementAdded(
+ Mutable<QName, LeafListStatement, EffectiveStatement<QName, LeafListStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public QName parseArgumentValue(StmtContext<?, ?, ?> ctx, String value)
throws SourceException {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
return Utils.qNameFromArgument(ctx,value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, LeafStatement, EffectiveStatement<QName, LeafStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override public LeafStatement createDeclared(
StmtContext<QName, LeafStatement, ?> ctx) {
return new LeafStatementImpl(ctx);
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
return Utils.qNameFromArgument(ctx, value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, ListStatement, EffectiveStatement<QName, ListStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public ListStatement createDeclared(
StmtContext<QName, ListStatement, ?> ctx) {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class NotificationStatementImpl extends AbstractDeclaredStatement<QName>
implements NotificationStatement {
return Utils.qNameFromArgument(ctx, value);
}
+ @Override
+ public void onStatementAdded(
+ Mutable<QName, NotificationStatement, EffectiveStatement<QName, NotificationStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public NotificationStatement createDeclared(
StmtContext<QName, NotificationStatement, ?> ctx) {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class OutputStatementImpl extends AbstractDeclaredStatement<QName>
implements OutputStatement {
return Utils.qNameFromArgument(ctx, "output");
}
+ @Override
+ public void onStatementAdded(Mutable<QName, OutputStatement, EffectiveStatement<QName, OutputStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public OutputStatement createDeclared(
StmtContext<QName, OutputStatement, ?> ctx) {
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable;
public class RpcStatementImpl extends AbstractDeclaredStatement<QName>
implements RpcStatement {
return Utils.qNameFromArgument(ctx, value);
}
+ @Override
+ public void onStatementAdded(Mutable<QName, RpcStatement, EffectiveStatement<QName, RpcStatement>> stmt) {
+ stmt.getParentContext().addToNs(ChildSchemaNodes.class, stmt.getStatementArgument(), stmt);
+ }
+
@Override
public RpcStatement createDeclared(
StmtContext<QName, RpcStatement, ?> ctx) {
SimpleDateFormatUtil.DEFAULT_DATE_REV) : qNameModule;
}
- @Nullable
- public static StatementContextBase<?, ?, ?> findNode(final StatementContextBase<?, ?, ?> rootStmtCtx,
- final Iterable<QName> path) {
-
- StatementContextBase<?, ?, ?> parent = rootStmtCtx;
-
- Iterator<QName> pathIter = path.iterator();
- while (pathIter.hasNext()) {
- QName nextPathQName = pathIter.next();
- StatementContextBase<?, ?, ?> foundSubstatement = getSubstatementByQName(parent, nextPathQName);
-
- if (foundSubstatement == null) {
- return null;
- }
- if (!pathIter.hasNext()) {
- return foundSubstatement;
- }
-
- parent = foundSubstatement;
- }
-
- return null;
- }
-
- public static StatementContextBase<?, ?, ?> getSubstatementByQName(final StatementContextBase<?, ?, ?> parent,
- final QName nextPathQName) {
-
- Collection<StatementContextBase<?, ?, ?>> declaredSubstatement = parent.declaredSubstatements();
- Collection<StatementContextBase<?, ?, ?>> effectiveSubstatement = parent.effectiveSubstatements();
-
- Collection<StatementContextBase<?, ?, ?>> allSubstatements = new LinkedList<>();
- allSubstatements.addAll(declaredSubstatement);
- allSubstatements.addAll(effectiveSubstatement);
-
- for (StatementContextBase<?, ?, ?> substatement : allSubstatements) {
- if (nextPathQName.equals(substatement.getStatementArgument())) {
- return substatement;
- }
- }
-
- return null;
- }
-
@Nullable
public static StatementContextBase<?, ?, ?> findNode(final StatementContextBase<?, ?, ?> rootStmtCtx,
final SchemaNodeIdentifier node) {
- return findNode(rootStmtCtx, node.getPathFromRoot());
+ StatementContextBase<?, ?, ?> current = rootStmtCtx;
+ Iterator<QName> arguments = node.getPathFromRoot().iterator();
+ while(current != null && arguments.hasNext()) {
+ current = (StatementContextBase<?, ?, ?>) current.getFromNamespace(ChildSchemaNodes.class, arguments.next());
+ }
+ return current;
}
public static SchemaPath getSchemaPath(final StmtContext<?, ?, ?> ctx) {
import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.global;
import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.sourceLocal;
+import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.statementLocal;
import static org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.treeScoped;
import static org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
.addSupport(new YinElementStatementImpl.Definition())
.addSupport(new ArgumentStatementImpl.Definition())
.addSupport(new ExtensionStatementImpl.Definition())
+ .addSupport(global(ChildSchemaNodes.class))
.addSupport(global(ExtensionNamespace.class))
.addSupport(new TypedefStatementImpl.Definition())
.addSupport(treeScoped(TypeNamespace.class))