From a7100c4a3ce860e24d058deb88ea51bb50aa9c61 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 21 May 2023 13:31:50 +0200 Subject: [PATCH 1/1] Add DataSchemaContextTree.childByPath() Going through Optional is nice, but the structure of users lends itself to using @Nullable as well. JIRA: YANGTOOLS-1413 Change-Id: I49e217a4c66a29093a94dc1eab45b788b834c79b Signed-off-by: Robert Varga --- .../yang/data/tree/impl/InMemoryDataTree.java | 6 +++--- .../data/tree/impl/di/InMemoryDataTreeFactory.java | 6 +++--- .../yang/data/util/DataSchemaContextTree.java | 14 +++++++++++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/InMemoryDataTree.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/InMemoryDataTree.java index 7052d87df3..ec48eb11ae 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/InMemoryDataTree.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/InMemoryDataTree.java @@ -107,13 +107,13 @@ public final class InMemoryDataTree extends AbstractDataTreeTip implements DataT LOG.debug("Following schema contexts will be attempted {}", newSchemaContext); final var contextTree = DataSchemaContextTree.from(newSchemaContext); - final var rootContextNode = contextTree.findChild(getRootPath()); - if (!rootContextNode.isPresent()) { + final var rootContextNode = contextTree.childByPath(getRootPath()); + if (rootContextNode == null) { LOG.warn("Could not find root {} in new schema context, not upgrading", getRootPath()); return; } - final var rootSchemaNode = rootContextNode.orElseThrow().dataSchemaNode(); + final var rootSchemaNode = rootContextNode.dataSchemaNode(); if (!(rootSchemaNode instanceof DataNodeContainer)) { LOG.warn("Root {} resolves to non-container type {}, not upgrading", getRootPath(), rootSchemaNode); return; diff --git a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/di/InMemoryDataTreeFactory.java b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/di/InMemoryDataTreeFactory.java index dc2a065301..7ea9f7d812 100644 --- a/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/di/InMemoryDataTreeFactory.java +++ b/data/yang-data-tree-ri/src/main/java/org/opendaylight/yangtools/yang/data/tree/impl/di/InMemoryDataTreeFactory.java @@ -154,10 +154,10 @@ public final class InMemoryDataTreeFactory implements DataTreeFactory { private static DataSchemaNode getRootSchemaNode(final EffectiveModelContext schemaContext, final YangInstanceIdentifier rootPath) { final var contextTree = DataSchemaContextTree.from(schemaContext); - final var rootContextNode = contextTree.findChild(rootPath); - checkArgument(rootContextNode.isPresent(), "Failed to find root %s in schema context", rootPath); + final var rootContextNode = contextTree.childByPath(rootPath); + checkArgument(rootContextNode != null, "Failed to find root %s in schema context", rootPath); - final var rootSchemaNode = rootContextNode.orElseThrow().dataSchemaNode(); + final var rootSchemaNode = rootContextNode.dataSchemaNode(); checkArgument(rootSchemaNode instanceof DataNodeContainer, "Root %s resolves to non-container type %s", rootPath, rootSchemaNode); return rootSchemaNode; diff --git a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextTree.java b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextTree.java index 063ae6fbf6..05a415cfc5 100644 --- a/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextTree.java +++ b/data/yang-data-util/src/main/java/org/opendaylight/yangtools/yang/data/util/DataSchemaContextTree.java @@ -14,6 +14,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.concepts.CheckedValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -54,12 +55,23 @@ public final class DataSchemaContextTree extends AbstractEffectiveModelContextPr return TREES.getUnchecked(ctx); } + /** + * Find a child node as identified by an absolute {@link YangInstanceIdentifier}. + * + * @param path Path towards the child node + * @return Child node if present, or {@code null} when corresponding child is not found. + * @throws NullPointerException if {@code path} is {@code null} + */ + public @Nullable DataSchemaContext childByPath(final @NonNull YangInstanceIdentifier path) { + return root.childByPath(path); + } + /** * Find a child node as identified by an absolute {@link YangInstanceIdentifier}. * * @param path Path towards the child node * @return Child node if present, or empty when corresponding child is not found. - * @throws NullPointerException if {@code path} is null + * @throws NullPointerException if {@code path} is {@code null} */ public @NonNull Optional<@NonNull DataSchemaContext> findChild(final @NonNull YangInstanceIdentifier path) { // Optional.ofNullable() inline due to annotations -- 2.36.6