X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-data-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fdata%2Fapi%2FYangInstanceIdentifier.java;h=40265f83ffc9a801b1504ced3dbc71ce45974d69;hb=4d9034700f0ac327948c3be5ea347e628d82fd81;hp=6901cdbdbdb7e900e38586f9a26a79e038637dcb;hpb=62671f88f06fcf731009fdbd8180ddf7e45d1ab2;p=yangtools.git
diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java
index 6901cdbdbd..40265f83ff 100644
--- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java
+++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Sets;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.Serializable;
import java.lang.reflect.Array;
+import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -44,6 +45,7 @@ import org.opendaylight.yangtools.concepts.Path;
import org.opendaylight.yangtools.util.HashCodeBuilder;
import org.opendaylight.yangtools.util.ImmutableOffsetMap;
import org.opendaylight.yangtools.util.SharedSingletonMap;
+import org.opendaylight.yangtools.util.SingletonSet;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
@@ -81,7 +83,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
*
* @see RFC6020
*/
-// FIXME: 3.0.0: this concept needs to be moved to yang-common, as parser components need the ability to refer
+// FIXME: 4.0.0: this concept needs to be moved to yang-common, as parser components need the ability to refer
// to data nodes -- most notably XPath expressions and {@code default} statement arguments need to be able
// to represent these.
// FIXME: FixedYangInstanceIdentifier needs YangInstanceIdentifier initialized, but that includes initializing
@@ -91,7 +93,7 @@ public abstract class YangInstanceIdentifier implements Path TOSTRINGCACHE_UPDATER =
AtomicReferenceFieldUpdater.newUpdater(YangInstanceIdentifier.class, String.class, "toStringCache");
@@ -126,7 +128,7 @@ public abstract class YangInstanceIdentifier implements Path getPathArguments();
+ public abstract @NonNull List getPathArguments();
/**
* Returns an iterable of path arguments in reverse order. This is useful
@@ -158,7 +160,7 @@ public abstract class YangInstanceIdentifier implements Path getReversePathArguments();
+ public abstract @NonNull List getReversePathArguments();
/**
* Returns the last PathArgument. This is equivalent of iterating
@@ -168,7 +170,7 @@ public abstract class YangInstanceIdentifier implements Path path) {
+ public static @NonNull YangInstanceIdentifier create(final Iterable extends PathArgument> path) {
if (Iterables.isEmpty(path)) {
return EMPTY;
}
@@ -181,7 +183,7 @@ public abstract class YangInstanceIdentifier implements Path pathTowardsRoot) {
+ public static @NonNull YangInstanceIdentifier createReverse(final Deque pathTowardsRoot) {
final ImmutableList.Builder builder = ImmutableList.builderWithExpectedSize(
pathTowardsRoot.size());
pathTowardsRoot.descendingIterator().forEachRemaining(builder::add);
@@ -208,7 +210,7 @@ public abstract class YangInstanceIdentifier implements Path YangInstanceIdentifier createReverse(final Deque extends T> stackTowardsRoot,
+ public static @NonNull YangInstanceIdentifier createReverse(final Deque extends T> stackTowardsRoot,
final Function function) {
final ImmutableList.Builder builder = ImmutableList.builderWithExpectedSize(
stackTowardsRoot.size());
@@ -245,7 +247,7 @@ public abstract class YangInstanceIdentifier implements Path, Immutable, Serializable {
/**
- * If applicable returns unique QName of data node as defined in YANG
- * Schema.
- *
- *
- * This method may return null, if the corresponding schema node, does
- * not have QName associated, such as in cases of augmentations.
+ * Returns unique QName of data node as defined in YANG Schema, if available.
*
* @return Node type
+ * @throws UnsupportedOperationException if node type is not applicable, for example in case of an augmentation.
*/
- QName getNodeType();
+ @NonNull QName getNodeType();
/**
* Return the string representation of this object for use in context
@@ -461,14 +465,13 @@ public abstract class YangInstanceIdentifier implements Path keyValues;
+ private final @NonNull QName key;
+ private final @NonNull Object value;
- public NodeIdentifierWithPredicates(final QName node) {
- super(node);
- this.keyValues = ImmutableMap.of();
+ Singleton(final QName node, final QName key, final Object value) {
+ super(node);
+ this.key = requireNonNull(key);
+ this.value = requireNonNull(value);
+ }
+
+ @Override
+ public SingletonSet> entrySet() {
+ return SingletonSet.of(new SimpleImmutableEntry<>(key, value));
+ }
+
+ @Override
+ public SingletonSet keySet() {
+ return SingletonSet.of(key);
+ }
+
+ @Override
+ public SingletonSet