From a1a533ad48b9c048e8ff84003fc08346ccf27a76 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 8 Oct 2020 08:10:00 +0200 Subject: [PATCH] Add SchemaPath->SchemaNodeIdentifier conversions There are a number of users who are still crossing SchemaPath->SchemaNodeIdentifier boundary. Add a utility method for making that task easier. Change-Id: I612a404f525f875ba6807ccfd696e2c2a6825449 Signed-off-by: Robert Varga --- .../yangtools/yang/model/api/SchemaPath.java | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java index 2704d21b3a..267e9786e4 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.model.api; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; @@ -16,11 +17,15 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.UnmodifiableIterator; import java.util.Arrays; +import java.util.List; import java.util.NoSuchElementException; import java.util.Objects; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; +import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Descendant; /** * Represents unique path to the every node inside the module. @@ -207,7 +212,7 @@ public abstract class SchemaPath implements Immutable { * @return list of qname instances which represents * path from the root to the schema node. */ - public Iterable getPathFromRoot() { + public List getPathFromRoot() { if (qname == null) { return ImmutableList.of(); } @@ -269,6 +274,46 @@ public abstract class SchemaPath implements Immutable { */ public abstract boolean isAbsolute(); + /** + * Return this path as a {@link SchemaNodeIdentifier}. + * + * @return A SchemaNodeIdentifier. + * @throws IllegalStateException if this path is empty + */ + public final SchemaNodeIdentifier asSchemaNodeIdentifier() { + checkState(qname != null, "Cannot convert empty %s", this); + final List path = getPathFromRoot(); + return isAbsolute() ? Absolute.of(path) : Descendant.of(path); + } + + /** + * Return this path as an {@link Absolute} SchemaNodeIdentifier. + * + * @return An SchemaNodeIdentifier. + * @throws IllegalStateException if this path is empty or is not absolute. + */ + public final Absolute asAbsolute() { + final SchemaNodeIdentifier ret = asSchemaNodeIdentifier(); + if (ret instanceof Absolute) { + return (Absolute) ret; + } + throw new IllegalStateException("Path " + this + " is relative"); + } + + /** + * Return this path as an {@link Descendant} SchemaNodeIdentifier. + * + * @return An SchemaNodeIdentifier. + * @throws IllegalStateException if this path is empty or is not relative. + */ + public final Descendant asDescendant() { + final SchemaNodeIdentifier ret = asSchemaNodeIdentifier(); + if (ret instanceof Descendant) { + return (Descendant) ret; + } + throw new IllegalStateException("Path " + this + " is absolute"); + } + @Override public final int hashCode() { return hash; -- 2.36.6