* @return path
*/
public List<PathArgument> getPath() {
+ return getPathArguments();
+ }
+
+ public List<PathArgument> getPathArguments() {
return this.path;
}
Class<N> listItem, K listKey);
<N extends DataObject & Augmentation<? super T>> InstanceIdentifierBuilder<N> augmentation(Class<N> container);
+
+ InstanceIdentifier<T> build();
}
List<PathArgument> immutablePath = Collections.unmodifiableList(new ArrayList<PathArgument>(path));
return new InstanceIdentifier(immutablePath, target);
}
+
+ @Override
+ public InstanceIdentifier<T> build() {
+ return toInstance();
+ }
@Override
public <N extends DataObject> InstanceIdentifierBuilder<N> node(Class<N> container) {
return false;
}
}
-
return true;
}
+
+ public boolean containsWildcarded(final InstanceIdentifier<?> other) {
+ if(other == null) {
+ throw new IllegalArgumentException("other should not be null");
+ }
+ final int localSize = this.path.size();
+ final List<PathArgument> otherPath = other.getPath();
+ if(localSize > other.path.size()) {
+ return false;
+ }
+ for(int i = 0;i<localSize;i++ ) {
+ final PathArgument localArgument = path.get(i);
+ if(!localArgument.getType().equals(otherPath.get(i).getType())) {
+ return false;
+ }
+ if(localArgument instanceof IdentifiableItem<?, ?> && !localArgument.equals(otherPath.get(i))) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isWildcarded() {
+ for(PathArgument pathArgument : path) {
+ if(Identifiable.class.isAssignableFrom(pathArgument.getType()) && !(pathArgument instanceof IdentifiableItem<?, ?>)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
--- /dev/null
+package org.opendaylight.yangtools.yang.binding.test;\r
+\r
+import static org.junit.Assert.*;\r
+\r
+import org.junit.Test;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.FooChild;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.InstantiatedFoo;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.Node;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.NodeChild;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.NodeChildKey;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.NodeKey;\r
+import org.opendaylight.yangtools.yang.binding.test.mock.Nodes;\r
+\r
+public class InstanceIdentifierTest {\r
+\r
+ @Test\r
+ public void constructWithPredicates() {\r
+ \r
+ InstanceIdentifier<Nodes> nodes = InstanceIdentifier.builder(Nodes.class).toInstance();\r
+ \r
+ assertNotNull(nodes);\r
+ assertEquals(Nodes.class, nodes.getTargetType());\r
+ \r
+ \r
+ InstanceIdentifier<Node> node = InstanceIdentifier.builder(nodes).node(Node.class).toInstance();\r
+ \r
+ assertNotNull(node);\r
+ assertEquals(Node.class, node.getTargetType());\r
+ \r
+ assertTrue(nodes.contains(node));\r
+ }\r
+\r
+ @Test\r
+ public void fluentConstruction() {\r
+\r
+ InstanceIdentifier<Nodes> nodes = InstanceIdentifier.builder(Nodes.class).toInstance();\r
+ InstanceIdentifier<Node> node = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).toInstance();\r
+\r
+ assertNotNull(node);\r
+ assertEquals(Node.class, node.getTargetType());\r
+\r
+ assertTrue(nodes.contains(node));\r
+ }\r
+ \r
+ \r
+ @Test\r
+ public void negativeContains() {\r
+ InstanceIdentifier<FooChild> fooChild = InstanceIdentifier.builder(Nodes.class).child(InstantiatedFoo.class).child(FooChild.class).build();\r
+ \r
+ InstanceIdentifier<Node> nodeTen = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(10)).toInstance();\r
+ InstanceIdentifier<Node> nodeOne = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(1)).toInstance();\r
+ InstanceIdentifier<Nodes> nodes = InstanceIdentifier.builder(Nodes.class).toInstance();\r
+ \r
+ assertFalse(fooChild.contains(nodeTen));\r
+ assertFalse(nodeTen.contains(nodes));\r
+ \r
+ assertFalse(nodeOne.contains(nodes));\r
+ assertTrue(nodes.contains(nodeOne));\r
+ }\r
+ \r
+ @Test\r
+ public void containsWildcarded() {\r
+ InstanceIdentifier<Nodes> nodes = InstanceIdentifier.builder(Nodes.class).toInstance();\r
+ InstanceIdentifier<Node> wildcarded = InstanceIdentifier.builder(Nodes.class).child(Node.class).build();\r
+ InstanceIdentifier<NodeChild> wildcardedChildren = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class) //\r
+ .child(NodeChild.class).build();\r
+ \r
+ assertTrue(wildcarded.isWildcarded());\r
+ assertTrue(wildcardedChildren.isWildcarded());\r
+ \r
+ \r
+ InstanceIdentifier<Node> nodeTen = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(10)).toInstance();\r
+ InstanceIdentifier<Node> nodeOne = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(1)).toInstance();\r
+ \r
+ assertFalse(nodeTen.isWildcarded());\r
+ assertFalse(nodeOne.isWildcarded());\r
+ assertTrue(nodes.containsWildcarded(nodeOne));\r
+ assertTrue(wildcarded.containsWildcarded(nodeOne));\r
+ assertTrue(wildcarded.containsWildcarded(nodeTen));\r
+ \r
+ \r
+ InstanceIdentifier<NodeChild> nodeTenChildWildcarded = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(10)).child(NodeChild.class).toInstance();\r
+ \r
+ assertTrue(nodeTenChildWildcarded.isWildcarded());\r
+ \r
+ InstanceIdentifier<NodeChild> nodeTenChild = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(10)).child(NodeChild.class, new NodeChildKey(10)).toInstance();\r
+ InstanceIdentifier<NodeChild> nodeOneChild = InstanceIdentifier.builder(Nodes.class) //\r
+ .child(Node.class,new NodeKey(1)).child(NodeChild.class, new NodeChildKey(1)).toInstance();\r
+\r
+ \r
+ assertFalse(nodeTenChildWildcarded.containsWildcarded(nodeOneChild));\r
+ assertTrue(nodeTenChildWildcarded.containsWildcarded(nodeTenChild));\r
+ \r
+ }\r
+ \r
+ \r
+ void childOfTest() {\r
+ InstanceIdentifier.builder(Nodes.class).child(InstantiatedFoo.class).child(FooChild.class);\r
+ }\r
+\r
+}\r