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=a8a02c84189d730ed8a0b55661c286d9a91bcd12;hb=c24d6e2f39acbb11e22b5676bb7481ed52bec461;hp=068e56688448698c3e66f234aba6a922b494fa8f;hpb=2c88759a59cfd7c61b124316dddde327c2d3ce18;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 068e566884..a8a02c8418 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
@@ -46,16 +46,18 @@ import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode;
* which conceptually is XPath expression minimized to uniquely identify element
* in data tree which conforms to constraints maintained by YANG Model,
* effectively this makes Instance Identifier a path to element in data tree.
+ *
*
* Constraints put in YANG specification on instance-identifier allowed it to be
* effectively represented in Java and it's evaluation does not require
* full-blown XPath processor.
- *
+ *
* Path Arguments
+ *
* Path to the node represented in instance identifier consists of
* {@link PathArgument} which carries necessary information to uniquely identify
* node on particular level in the subtree.
- *
+ *
*
* - {@link NodeIdentifier} - Identifier of node, which has cardinality
*
0..1
in particular subtree in data tree.
@@ -231,6 +233,13 @@ public abstract class YangInstanceIdentifier implements Path relativeTo(final YangInstanceIdentifier ancestor) {
+ if (this == ancestor) {
+ return Optional.of(EMPTY);
+ }
+ if (ancestor.isEmpty()) {
+ return Optional.of(this);
+ }
+
final Iterator> lit = getPathArguments().iterator();
final Iterator> oit = ancestor.getPathArguments().iterator();
int common = 0;
@@ -255,9 +264,12 @@ public abstract class YangInstanceIdentifier implements Path lit = getPathArguments().iterator();
final Iterator> oit = other.getPathArguments().iterator();
@@ -417,7 +429,7 @@ public abstract class YangInstanceIdentifier implements Path CACHE = CacheBuilder.newBuilder().weakValues()
.build(new CacheLoader() {
@Override
- public NodeIdentifier load(final QName key) {
+ public NodeIdentifier load(@Nonnull final QName key) {
return new NodeIdentifier(key);
}
});
@@ -507,11 +519,12 @@ public abstract class YangInstanceIdentifier implements Path keyValues) {
super(node);
// Retains ImmutableMap for empty maps. For larger sizes uses a shared key set.
- this.keyValues = ImmutableOffsetMap.copyOf(keyValues);
+ this.keyValues = ImmutableOffsetMap.unorderedCopyOf(keyValues);
}
public NodeIdentifierWithPredicates(final QName node, final QName key, final Object value) {
- this(node, SharedSingletonMap.of(key, value));
+ super(node);
+ this.keyValues = SharedSingletonMap.unorderedOf(key, value);
}
public Map getKeyValues() {
@@ -572,17 +585,17 @@ public abstract class YangInstanceIdentifier implements Path extends AbstractPathArgument {
private static final long serialVersionUID = -3637456085341738431L;
- private final Object value;
+ private final T value;
- public NodeWithValue(final QName node, final Object value) {
+ public NodeWithValue(final QName node, final T value) {
super(node);
this.value = value;
}
- public Object getValue() {
+ public T getValue() {
return value;
}
@@ -590,7 +603,7 @@ public abstract class YangInstanceIdentifier implements Path other = (NodeWithValue>) obj;
return Objects.deepEquals(value, other.value);
}
@@ -661,9 +674,7 @@ public abstract class YangInstanceIdentifier implements Path