X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-spi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Fspi%2FSchemaTreeNamespace.java;fp=yang%2Fyang-parser-rfc7950%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frfc7950%2Fnamespace%2FChildSchemaNodeNamespace.java;h=793bc39511eb0ee33bd80cca8f36df54129c3e9e;hb=6682a8e2a8c02ed7a66bddb8b7a86009ffbbb98d;hp=b8a7e5172408636857ae38899c699a4016b8aae6;hpb=7f6bc373cf34fc17511ac6ac7efce630822ec74a;p=yangtools.git diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/ChildSchemaNodeNamespace.java b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java similarity index 77% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/ChildSchemaNodeNamespace.java rename to yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java index b8a7e51724..793bc39511 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/namespace/ChildSchemaNodeNamespace.java +++ b/yang/yang-parser-spi/src/main/java/org/opendaylight/yangtools/yang/parser/spi/SchemaTreeNamespace.java @@ -5,17 +5,20 @@ * 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.rfc7950.namespace; +package org.opendaylight.yangtools.yang.parser.spi; import com.google.common.annotations.Beta; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; 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.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeAwareEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaTreeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementNamespace; @@ -24,22 +27,41 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; /** - * Statement local namespace, which holds direct schema node descendants. + * Statement local namespace, which holds direct schema node descendants. This corresponds to the contents of the schema + * tree as exposed through {@link SchemaTreeAwareEffectiveStatement}. */ +// FIXME: 7.0.0: this contract seems to fall on the reactor side of things rather than parser-spi. Consider moving this +// into yang-(parser-)reactor-api. @Beta -public final class ChildSchemaNodeNamespace, E extends EffectiveStatement> - extends NamespaceBehaviour, ChildSchemaNodeNamespace> +public final class SchemaTreeNamespace, + E extends SchemaTreeEffectiveStatement> + extends NamespaceBehaviour, SchemaTreeNamespace> implements StatementNamespace { - public ChildSchemaNodeNamespace() { - super((Class) ChildSchemaNodeNamespace.class); + private static final @NonNull SchemaTreeNamespace INSTANCE = new SchemaTreeNamespace<>(); + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private SchemaTreeNamespace() { + super((Class) SchemaTreeNamespace.class); + } + + @SuppressWarnings("unchecked") + public static , E extends SchemaTreeEffectiveStatement> + @NonNull SchemaTreeNamespace getInstance() { + return (SchemaTreeNamespace) INSTANCE; } @Override public StmtContext get(final QName key) { - // TODO Auto-generated method stub + // FIXME: 7.0.0: this method needs to be well-defined return null; } + /** + * {@inheritDoc} + * + *

+ * This method is analogous to {@link SchemaTreeAwareEffectiveStatement#findSchemaTreeNode(QName)}. + */ @Override public StmtContext getFrom(final NamespaceStorageNode storage, final QName key) { // Get the backing storage node for the requested storage @@ -59,7 +81,7 @@ public final class ChildSchemaNodeNamespace, @Override public Map> getAllFrom(final NamespaceStorageNode storage) { - // TODO Auto-generated method stub + // FIXME: 7.0.0: this method needs to be well-defined return null; } @@ -67,7 +89,7 @@ public final class ChildSchemaNodeNamespace, @Override public void addTo(final NamespaceStorageNode storage, final QName key, final StmtContext value) { final StmtContext prev = globalOrStatementSpecific(storage).putToLocalStorageIfAbsent( - ChildSchemaNodeNamespace.class, key, value); + SchemaTreeNamespace.class, key, value); if (prev != null) { throw new SourceException(value.getStatementSourceReference(), @@ -95,7 +117,7 @@ public final class ChildSchemaNodeNamespace, QName nextPath = iterator.next(); @SuppressWarnings("unchecked") - StmtContext current = (StmtContext) root.getFromNamespace(ChildSchemaNodeNamespace.class, + StmtContext current = (StmtContext) root.getFromNamespace(SchemaTreeNamespace.class, nextPath); if (current == null) { return Optional.ofNullable(tryToFindUnknownStatement(nextPath.getLocalName(), root)); @@ -104,7 +126,7 @@ public final class ChildSchemaNodeNamespace, nextPath = iterator.next(); @SuppressWarnings("unchecked") final StmtContext nextNodeCtx = (StmtContext) current.getFromNamespace( - ChildSchemaNodeNamespace.class, nextPath); + SchemaTreeNamespace.class, nextPath); if (nextNodeCtx == null) { return Optional.ofNullable(tryToFindUnknownStatement(nextPath.getLocalName(), current)); }