Bump yangtools to 3.0.0 08/80908/32
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 15 Mar 2019 17:51:45 +0000 (18:51 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 8 Apr 2019 21:48:22 +0000 (23:48 +0200)
This bumps dependencies to yangtools-3.0.0, adjusting for API changes
brought by that change:
- NormalizedNodes no longer have attributes
- DataTreeCandidateNode.getModifiedChild() returns an Optional
- ListenerRegistry is no longer an Iterable
- ClassloaderUtils is using Optional instead of nullable
- NormalizedNodeStreamWriter opens leaf/anyxml/leafsetentry nodes
- leafrefs are using PathExpression instead of RevisionAwareXPath
- path expressions are strictly validated
- QName does not allow '/'
- QueuedNotificationManager.BatchedInvoker operates on ImmutableList

Change-Id: I45b25faaea8b60de974e9ffa2b5761567115fd2a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
42 files changed:
artifacts/pom.xml
binding/binding-parent/pom.xml
binding/maven-sal-api-gen-plugin/pom.xml
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataObjectModification.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/LazySerializedContainerNodeTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/util/MockSchemaService.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingToNormalizedStreamWriter.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionTypeCodec.java
binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/util/AbstractBindingLazyContainerNode.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/NormalizedNodeSerializeDeserializeTest.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/AbstractTypeGenerator.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/LeafrefTypeWithNullToStringInXpath.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/LeafrefTypeWithNullXpath.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java
binding/mdsal-binding-generator-impl/src/test/resources/leafref-test-models/abstract-topology@2013-02-08.yang
binding/mdsal-binding-generator-impl/src/test/resources/test-type-provider-b.yang
binding/mdsal-binding-generator-impl/src/test/resources/test-type-provider.yang
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/BindingGeneratorUtilTest.java
binding/mdsal-binding-generator-util/src/test/java/org/opendaylight/mdsal/binding/model/util/generated/type/builder/GeneratedTypeBuilderTest.java
binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java
dom/dom-parent/pom.xml
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMMountPointServiceImpl.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouter.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/schema/ScanningSchemaServiceProvider.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMDataTreeListenerTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMNotificationRouterTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTreeProducerMultiShardTest.java
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/AbstractDOMShardTreeChangePublisher.java
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShardChangePublisher.java
dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMStoreTreeChangePublisher.java
features/feature-parent/pom.xml
features/odl-mdsal-binding-api/src/main/feature/feature.xml
features/odl-mdsal-binding-base/src/main/feature/feature.xml
features/odl-mdsal-binding-runtime/src/main/feature/feature.xml
features/odl-mdsal-common/src/main/feature/feature.xml
features/odl-mdsal-dom-api/src/main/feature/feature.xml
features/odl-mdsal-dom-broker/src/main/feature/feature.xml
features/odl-mdsal-eos-common/src/main/feature/feature.xml
model/ietf/ietf-type-util/pom.xml

index 8a7c2c377ac8054f0bf5aee15f5863d1d7e690ab..cc3955f21ba5b9fa806cb9ae2ef2845c5699802d 100644 (file)
             <dependency>
                 <groupId>org.opendaylight.mdsal.model</groupId>
                 <artifactId>ietf-type-util</artifactId>
-                <version>3.0.0-SNAPSHOT</version>
+                <version>3.0.0</version>
             </dependency>
 
             <!-- RFC7223 -->
index c9ef74cf8542eff7aa9bc2e9b56a9bead66c994e..f3924d0b2ca0bec5865ee1a3f76e123888592694 100644 (file)
@@ -58,7 +58,7 @@
                         <plugin>
                             <groupId>org.opendaylight.yangtools</groupId>
                             <artifactId>yang-maven-plugin</artifactId>
-                            <version>2.1.8</version>
+                            <version>3.0.0</version>
                             <dependencies>
                                 <dependency>
                                     <groupId>org.opendaylight.mdsal</groupId>
index 6ec9392a6149fe765c85a79124d03bf844256e2f..bff41dd745692f2d9b246a5c724e1661b3afa778 100644 (file)
@@ -34,7 +34,7 @@
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>2.1.8</version>
+                <version>3.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 42311591cace6d1cb0957a9a35a867b4c05adf4f..66f7548d924b90c028b8bdc3abfad705b2afcdd8 100644 (file)
@@ -244,7 +244,7 @@ final class LazyDataObjectModification<T extends DataObject> implements DataObje
         final Iterator<YangInstanceIdentifier.PathArgument> toEnter = domArgumentList.iterator();
         DataTreeCandidateNode current = domData;
         while (toEnter.hasNext() && current != null) {
-            current = current.getModifiedChild(toEnter.next());
+            current = current.getModifiedChild(toEnter.next()).orElse(null);
         }
         return current != null && current.getModificationType() != UNMODIFIED ? create(childCodec, current) : null;
     }
index 972c630d6ef9783542bcbb105f404978f6576c21..e71b601d2c3acd42f7fd17e670bea3f13a9bc4f7 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.mdsal.binding.dom.adapter;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doReturn;
@@ -63,13 +62,11 @@ public class LazySerializedContainerNodeTest {
         assertNotNull(lazySerializedContainerNode);
         assertEquals(leafNode, lazySerializedContainerNode.getChild(leafNode.getIdentifier()).get());
         assertFalse(lazySerializedContainerNode.getChild(mock(PathArgument.class)).isPresent());
-        assertTrue(lazySerializedContainerNode.getAttributes().isEmpty());
 
         assertTrue(lazySerializedContainerNode.getValue().isEmpty());
         assertEquals(lazySerializedContainerNode.getIdentifier().getNodeType(),
                 lazySerializedContainerNode.getNodeType());
         assertEquals(rpcName.getLastComponent(), lazySerializedContainerNode.getIdentifier().getNodeType());
-        assertNull(lazySerializedContainerNode.getAttributeValue(null));
         assertEquals(dataObject, lazySerializedContainerNode.bindingData());
     }
 }
\ No newline at end of file
index 4c78c46c043e925934447de33685850020150794..98a342eb35e6d0f948c74286d6f69572041da5cf 100644 (file)
@@ -51,7 +51,7 @@ public final class MockSchemaService implements DOMSchemaService, SchemaContextP
 
     public synchronized void changeSchema(final SchemaContext newContext) {
         schemaContext = newContext;
-        for (ListenerRegistration<SchemaContextListener> listener : listeners) {
+        for (ListenerRegistration<? extends SchemaContextListener> listener : listeners.getRegistrations()) {
             listener.getInstance().onGlobalContextUpdated(schemaContext);
         }
     }
index 84ab3e539a4bc45cbadcb8a6e05981a07e9f041e..777b0bcdde3c0c86dd5a1ee530d272c31b9991d5 100644 (file)
@@ -22,6 +22,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.concurrent.Callable;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
@@ -246,8 +247,11 @@ final class BindingCodecContext implements CodecContextFactory, BindingCodecTree
                 if (schema instanceof LeafSchemaNode) {
                     valueType = method.getReturnType();
                 } else if (schema instanceof LeafListSchemaNode) {
-                    final Type genericType = ClassLoaderUtils.getFirstGenericParameter(method.getGenericReturnType());
+                    final Optional<Type> optType = ClassLoaderUtils.getFirstGenericParameter(
+                        method.getGenericReturnType());
+                    checkState(optType.isPresent(), "Failed to find return type for %s", method);
 
+                    final Type genericType = optType.get();
                     if (genericType instanceof Class<?>) {
                         valueType = (Class<?>) genericType;
                     } else if (genericType instanceof ParameterizedType) {
@@ -313,8 +317,11 @@ final class BindingCodecContext implements CodecContextFactory, BindingCodecTree
 
     @Override
     public IdentifiableItemCodec getPathArgumentCodec(final Class<?> listClz, final ListSchemaNode schema) {
-        final Class<? extends Identifier<?>> identifier = ClassLoaderUtils.findFirstGenericArgument(listClz,
+        final Optional<Class<Identifier<?>>> optIdentifier = ClassLoaderUtils.findFirstGenericArgument(listClz,
                 Identifiable.class);
+        checkState(optIdentifier.isPresent(), "Failed to find identifier for %s", listClz);
+
+        final Class<Identifier<?>> identifier = optIdentifier.get();
         final Map<QName, ValueContext> valueCtx = new HashMap<>();
         for (final LeafNodeCodecContext<?> leaf : getLeafNodes(identifier, schema).values()) {
             final QName name = leaf.getDomPathArgument().getNodeType();
index 03cf03a1ced79a6afbe8e72a471c6bb818be510a..5c184e67ca50e87de6577bf7e4823d8d3b589ec1 100644 (file)
@@ -16,6 +16,7 @@ import java.util.ArrayDeque;
 import java.util.Deque;
 import java.util.Map;
 import java.util.Map.Entry;
+import javax.xml.transform.dom.DOMSource;
 import org.opendaylight.yangtools.concepts.Delegator;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
 import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
@@ -27,6 +28,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 
@@ -102,7 +104,7 @@ final class BindingToNormalizedStreamWriter implements BindingStreamEventWriter,
         // NormalizedNode writer does not have entry into case, but into choice
         // so for leaving case, we do not emit endNode.
         if (!(left instanceof CaseNodeCodecContext)) {
-            getDelegate().endNode();
+            delegate.endNode();
         }
     }
 
@@ -120,27 +122,33 @@ final class BindingToNormalizedStreamWriter implements BindingStreamEventWriter,
 
     @Override
     public void leafNode(final String localName, final Object value) throws IOException {
-        Entry<NodeIdentifier, Object> dom = serializeLeaf(localName, value);
-        getDelegate().leafNode(dom.getKey(), dom.getValue());
+        final Entry<NodeIdentifier, Object> dom = serializeLeaf(localName, value);
+        delegate.startLeafNode(dom.getKey());
+        delegate.scalarValue(dom.getValue());
+        delegate.endNode();
     }
 
     @Override
     public void anyxmlNode(final String name, final Object value) throws IOException {
-        Entry<NodeIdentifier, Object> dom = serializeLeaf(name, value);
-        getDelegate().anyxmlNode(dom.getKey(), dom.getValue());
+        final Entry<NodeIdentifier, Object> dom = serializeLeaf(name, value);
+        delegate.startAnyxmlNode(dom.getKey());
+        delegate.domSourceValue((DOMSource) dom.getValue());
+        delegate.endNode();
     }
 
     @Override
     public void leafSetEntryNode(final Object value) throws IOException {
-        LeafNodeCodecContext<?> ctx = (LeafNodeCodecContext<?>) current();
-        getDelegate().leafSetEntryNode(ctx.getSchema().getQName(),
-            ctx.getValueCodec().serialize(value));
+        final LeafNodeCodecContext<?> ctx = (LeafNodeCodecContext<?>) current();
+        final Object domValue = ctx.getValueCodec().serialize(value);
+        delegate.startLeafSetEntryNode(new NodeWithValue<>(ctx.getSchema().getQName(), domValue));
+        delegate.scalarValue(domValue);
+        delegate.endNode();
     }
 
     @Override
     public void startAugmentationNode(final Class<? extends Augmentation<?>> augmentationType)
             throws IOException {
-        getDelegate().startAugmentationNode(enter(augmentationType, AugmentationIdentifier.class));
+        delegate.startAugmentationNode(enter(augmentationType, AugmentationIdentifier.class));
     }
 
     @Override
@@ -151,63 +159,63 @@ final class BindingToNormalizedStreamWriter implements BindingStreamEventWriter,
     @Override
     public void startChoiceNode(final Class<? extends DataContainer> type, final int childSizeHint)
             throws IOException {
-        getDelegate().startChoiceNode(enter(type, NodeIdentifier.class), childSizeHint);
+        delegate.startChoiceNode(enter(type, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public void startContainerNode(final Class<? extends DataObject> object, final int childSizeHint)
             throws IOException {
-        getDelegate().startContainerNode(enter(object, NodeIdentifier.class), childSizeHint);
+        delegate.startContainerNode(enter(object, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public void startLeafSet(final String localName, final int childSizeHint) throws IOException {
         final NodeIdentifier id = enter(localName, NodeIdentifier.class);
         emitSchema(current().getSchema());
-        getDelegate().startLeafSet(id, childSizeHint);
+        delegate.startLeafSet(id, childSizeHint);
     }
 
     @Override
     public void startOrderedLeafSet(final String localName, final int childSizeHint) throws IOException {
-        getDelegate().startOrderedLeafSet(enter(localName, NodeIdentifier.class), childSizeHint);
+        delegate.startOrderedLeafSet(enter(localName, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public void startMapEntryNode(final Identifier<?> key, final int childSizeHint) throws IOException {
         duplicateSchemaEnter();
         NodeIdentifierWithPredicates identifier = ((KeyedListNodeCodecContext<?>) current()).serialize(key);
-        getDelegate().startMapEntryNode(identifier, childSizeHint);
+        delegate.startMapEntryNode(identifier, childSizeHint);
     }
 
     @Override
     public <T extends DataObject & Identifiable<?>> void startMapNode(final Class<T> mapEntryType,
             final int childSizeHint) throws IOException {
-        getDelegate().startMapNode(enter(mapEntryType, NodeIdentifier.class), childSizeHint);
+        delegate.startMapNode(enter(mapEntryType, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public <T extends DataObject & Identifiable<?>> void startOrderedMapNode(final Class<T> mapEntryType,
             final int childSizeHint) throws IOException {
-        getDelegate().startOrderedMapNode(enter(mapEntryType, NodeIdentifier.class), childSizeHint);
+        delegate.startOrderedMapNode(enter(mapEntryType, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public void startUnkeyedList(final Class<? extends DataObject> obj, final int childSizeHint) throws IOException {
-        getDelegate().startUnkeyedList(enter(obj, NodeIdentifier.class), childSizeHint);
+        delegate.startUnkeyedList(enter(obj, NodeIdentifier.class), childSizeHint);
     }
 
     @Override
     public void startUnkeyedListItem(final int childSizeHint) throws IOException {
-        getDelegate().startUnkeyedListItem(duplicateSchemaEnter(), childSizeHint);
+        delegate.startUnkeyedListItem(duplicateSchemaEnter(), childSizeHint);
     }
 
     @Override
     public void flush() throws IOException {
-        getDelegate().flush();
+        delegate.flush();
     }
 
     @Override
     public void close() throws IOException {
-        getDelegate().close();
+        delegate.close();
     }
 }
index 23355d784706e0ed79a1bf3b8c2e520cfcdac64a..c8200d2ba7fef8a587a6531b52352e521c2adcb7 100644 (file)
@@ -8,8 +8,8 @@
 package org.opendaylight.mdsal.binding.dom.codec.impl;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.base.Verify.verify;
-import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.Throwables;
 import com.google.common.base.Verify;
@@ -219,8 +219,10 @@ final class SchemaRootCodecContext<D extends DataObject> extends DataContainerCo
 
     private ActionCodecContext prepareActionContext(final int inputOffset, final int outputOffset,
             final int expectedArgsLength, final Class<? extends Action<?, ?, ?>> action, final Class<?> actionType) {
-        final ParameterizedType paramType = requireNonNull(ClassLoaderUtils.findParameterizedType(action, actionType),
-            () -> "There does not exist any ParameterType in " + action);
+        final Optional<ParameterizedType> optParamType = ClassLoaderUtils.findParameterizedType(action, actionType);
+        checkState(optParamType.isPresent(), "%s does not specialize %s", action, actionType);
+
+        final ParameterizedType paramType = optParamType.get();
         final Type[] args = paramType.getActualTypeArguments();
         checkArgument(args.length == expectedArgsLength, "Unexpected (%s) Action generatic arguments", args.length);
         final ActionDefinition schema = factory().getRuntimeContext().getActionDefinition(action);
index cf23b5019a185d5847e3bfc48aebe7752c8d33bd..aaa325c1b697f532493080d09c324f212fede096 100644 (file)
@@ -17,7 +17,7 @@ import org.opendaylight.mdsal.binding.yang.types.BaseYangTypes;
 import org.opendaylight.yangtools.concepts.Codec;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.PathExpression;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
@@ -74,7 +74,7 @@ final class UnionTypeCodec extends ReflectionBasedCodec {
             final TypeDefinition<?> subtype) throws NoSuchMethodException {
         final SchemaContext schemaContext = bindingCodecContext.getRuntimeContext().getSchemaContext();
         final Module module = schemaContext.findModule(subtype.getQName().getModule()).get();
-        final RevisionAwareXPath xpath = ((LeafrefTypeDefinition) subtype).getPathStatement();
+        final PathExpression xpath = ((LeafrefTypeDefinition) subtype).getPathStatement();
         // find schema node in schema context by xpath of leafref
         final SchemaNode dataNode;
         if (xpath.isAbsolute()) {
index 19c6c0d8b0bbb4df9f4415183486e1c6f5568312..e2a4b40fe2c13d139a4073525cd5f7986dfef5a3 100644 (file)
@@ -12,7 +12,6 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.annotations.Beta;
 import com.google.common.collect.ForwardingObject;
 import java.util.Collection;
-import java.util.Map;
 import java.util.Optional;
 import org.checkerframework.checker.lock.qual.GuardedBy;
 import org.eclipse.jdt.annotation.NonNull;
@@ -69,16 +68,6 @@ public abstract class AbstractBindingLazyContainerNode<T extends DataObject, C>
         return delegate();
     }
 
-    @Override
-    public Map<QName, String> getAttributes() {
-        return delegate().getAttributes();
-    }
-
-    @Override
-    public Object getAttributeValue(final QName name) {
-        return delegate().getAttributeValue(name);
-    }
-
     @Override
     public Collection<DataContainerChild<? extends PathArgument, ?>> getValue() {
         return delegate().getValue();
index 4c571e3e4a4e1f121cde5f0e4e592bc652c1342f..180be79a1b7adf41eaa76ce73134d68c7049aa3b 100644 (file)
@@ -73,7 +73,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
@@ -215,8 +215,7 @@ public class NormalizedNodeSerializeDeserializeTest extends AbstractBindingCodec
     }
 
     private static ContainerNode getNormalizedTopWithAugments(final AugmentationNode... augChild) {
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> builder =
-                ImmutableContainerNodeBuilder.create();
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> builder = ImmutableContainerNodeBuilder.create();
 
         for (AugmentationNode augmentationNode : augChild) {
             builder.withChild(augmentationNode);
index 2e2b1a499611d6cfa1e1f734fec83f1eaa7cb29f..a066e120279575c0fb4f553bc647353fd2c311a8 100644 (file)
@@ -1300,7 +1300,7 @@ abstract class AbstractTypeGenerator {
         final Module parentModule = findParentModule(schemaContext, leaf);
         Type returnType = null;
 
-        final TypeDefinition<?> typeDef = CompatUtils.compatLeafType(leaf);
+        final TypeDefinition<?> typeDef = CompatUtils.compatType(leaf);
         if (isInnerType(leaf, typeDef)) {
             if (typeDef instanceof EnumTypeDefinition) {
                 returnType = typeProvider.javaTypeForSchemaDefinitionType(typeDef, leaf, inGrouping);
@@ -1419,7 +1419,7 @@ abstract class AbstractTypeGenerator {
             final boolean isReadOnly) {
         if (leaf != null && toBuilder != null) {
             Type returnType;
-            final TypeDefinition<?> typeDef = CompatUtils.compatLeafType(leaf);
+            final TypeDefinition<?> typeDef = CompatUtils.compatType(leaf);
             if (typeDef instanceof UnionTypeDefinition) {
                 // GeneratedType for this type definition should have be already created
                 final ModuleContext mc = moduleContext(typeDef.getQName().getModule());
index 8f14010b44525d26204b76fde6cdcce2eee41100..10e838b4d4eef67ac8a73f2c565ecb2fb7835269 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.mdsal.binding.yang.types;
 
-import static com.google.common.base.Verify.verifyNotNull;
 import static java.util.Objects.requireNonNull;
 import static org.opendaylight.mdsal.binding.model.util.BindingTypes.TYPE_OBJECT;
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode;
@@ -63,7 +62,7 @@ import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.PathExpression;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -83,7 +82,7 @@ import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.ModuleDependencySort;
-import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
+import org.opendaylight.yangtools.yang.model.util.PathExpressionImpl;
 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
 import org.opendaylight.yangtools.yang.model.util.type.BaseTypes;
 import org.opendaylight.yangtools.yang.model.util.type.CompatUtils;
@@ -243,9 +242,9 @@ public abstract class AbstractTypeProvider implements TypeProvider {
 
     private boolean isLeafRefSelfReference(final LeafrefTypeDefinition leafref, final SchemaNode parentNode) {
         final SchemaNode leafRefValueNode;
-        final RevisionAwareXPath leafRefXPath = leafref.getPathStatement();
-        final RevisionAwareXPath leafRefStrippedXPath = new RevisionAwareXPathImpl(
-            GROUPS_PATTERN.matcher(leafRefXPath.toString()).replaceAll(""), leafRefXPath.isAbsolute());
+        final PathExpression leafRefXPath = leafref.getPathStatement();
+        final PathExpression leafRefStrippedXPath = new PathExpressionImpl(
+            GROUPS_PATTERN.matcher(leafRefXPath.getOriginalString()).replaceAll(""), leafRefXPath.isAbsolute());
 
         ///// skip leafrefs in augments - they're checked once augments are resolved
         final Iterator<QName> iterator = parentNode.getPath().getPathFromRoot().iterator();
@@ -501,10 +500,10 @@ public abstract class AbstractTypeProvider implements TypeProvider {
             final boolean inGrouping) {
         Preconditions.checkArgument(leafrefType != null, "Leafref Type Definition reference cannot be NULL!");
 
-        final RevisionAwareXPath xpath = leafrefType.getPathStatement();
+        final PathExpression xpath = leafrefType.getPathStatement();
         Preconditions.checkArgument(xpath != null, "The Path Statement for Leafref Type Definition cannot be NULL!");
 
-        final String strXPath = verifyNotNull(xpath.toString());
+        final String strXPath = xpath.getOriginalString();
         if (strXPath.indexOf('[') != -1) {
             // XXX: why are we special-casing this?
             return Types.objectType();
@@ -580,7 +579,7 @@ public abstract class AbstractTypeProvider implements TypeProvider {
     private static boolean leafContainsEnumDefinition(final SchemaNode dataNode) {
         if (dataNode instanceof LeafSchemaNode) {
             final LeafSchemaNode leaf = (LeafSchemaNode) dataNode;
-            return CompatUtils.compatLeafType(leaf) instanceof EnumTypeDefinition;
+            return CompatUtils.compatType(leaf) instanceof EnumTypeDefinition;
         }
         return false;
     }
@@ -720,7 +719,7 @@ public abstract class AbstractTypeProvider implements TypeProvider {
         if (dataNode != null) {
             if (dataNode instanceof LeafSchemaNode) {
                 final LeafSchemaNode leaf = (LeafSchemaNode) dataNode;
-                final TypeDefinition<?> type = CompatUtils.compatLeafType(leaf);
+                final TypeDefinition<?> type = CompatUtils.compatType(leaf);
                 returnType = javaTypeForSchemaDefinitionType(type, leaf);
             } else if (dataNode instanceof LeafListSchemaNode) {
                 final LeafListSchemaNode leafList = (LeafListSchemaNode) dataNode;
@@ -1352,7 +1351,7 @@ public abstract class AbstractTypeProvider implements TypeProvider {
     }
 
     public String getTypeDefaultConstruction(final LeafSchemaNode node, final String defaultValue) {
-        final TypeDefinition<?> type = CompatUtils.compatLeafType(node);
+        final TypeDefinition<?> type = CompatUtils.compatType(node);
         final QName typeQName = type.getQName();
         final TypeDefinition<?> base = baseTypeDefForExtendedType(type);
         requireNonNull(type, () -> "Cannot provide default construction for null type of " + node);
@@ -1536,8 +1535,8 @@ public abstract class AbstractTypeProvider implements TypeProvider {
         Preconditions.checkArgument(leafrefType.getPathStatement() != null,
                 "The Path Statement for Leafref Type Definition cannot be NULL!");
 
-        final RevisionAwareXPath xpath = leafrefType.getPathStatement();
-        final String strXPath = xpath.toString();
+        final PathExpression xpath = leafrefType.getPathStatement();
+        final String strXPath = xpath.getOriginalString();
 
         if (strXPath != null) {
             if (strXPath.indexOf('[') == -1) {
@@ -1561,7 +1560,7 @@ public abstract class AbstractTypeProvider implements TypeProvider {
     }
 
     private String unionToDef(final LeafSchemaNode node) {
-        final TypeDefinition<?> type = CompatUtils.compatLeafType(node);
+        final TypeDefinition<?> type = CompatUtils.compatType(node);
         String parentName;
         String className;
 
index 105b804dd10f5bbe0b2a201159ede5dfddb3c107..db64a13592721103367c7ca1ba9b4640d88b22b4 100644 (file)
@@ -11,11 +11,12 @@ import com.google.common.collect.ImmutableList;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.PathExpression;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
+import org.opendaylight.yangtools.yang.xpath.api.YangLocationPath;
 
 /**
  * Mock LeafrefDypeDefinition implementation with non-null referenced RevisionAwareXPath. Although RevisionAwareXPath
@@ -24,17 +25,22 @@ import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
  */
 public class LeafrefTypeWithNullToStringInXpath implements LeafrefTypeDefinition {
     @Override
-    public RevisionAwareXPath getPathStatement() {
-        return new RevisionAwareXPath() {
+    public PathExpression getPathStatement() {
+        return new PathExpression() {
             @Override
             public boolean isAbsolute() {
                 return false;
             }
 
             @Override
-            public String toString() {
+            public String getOriginalString() {
                 return null;
             }
+
+            @Override
+            public YangLocationPath getLocation() {
+                throw new UnsupportedOperationException();
+            }
         };
     }
 
index 83cbabec352152a519254f4d256218705e943f07..4f1ea743c295e2ddff99918c8f2bc94b24652d47 100644 (file)
@@ -5,14 +5,13 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.mdsal.binding.yang.types;
 
 import com.google.common.collect.ImmutableList;
 import java.util.List;
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.PathExpression;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
@@ -25,7 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
  */
 public class LeafrefTypeWithNullXpath implements LeafrefTypeDefinition {
     @Override
-    public RevisionAwareXPath getPathStatement() {
+    public PathExpression getPathStatement() {
         return null;
     }
 
index 72642e64900e525f5f7f737cc49e358887c2aa09..f7cb7dd6fde5686f7dbc5751f47c15a023b15661 100644 (file)
@@ -395,7 +395,7 @@ public class TypeProviderTest {
         provider.provideTypeForLeafref(leafrePath, this.schemaNode, false);
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test(expected = NullPointerException.class)
     public void provideTypeForLeafrefWithNullParentModuleTest() {
         final AbstractTypeProvider provider = new RuntimeTypeProvider(SCHEMA_CONTEXT);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(TEST_TYPE_PROVIDER, "bar",
index be3119255e762da399de9cc5a67c1c356b3a54b0..04555c9c29b6f3f2b141809180c8f760a9ada68c 100644 (file)
@@ -59,7 +59,7 @@ module abstract-topology {
 
         leaf cond-leafref {
             type leafref {
-                path "/tp:topology/tp:network-nodes/tp:network-node[node-id = 'super-node']";
+                path "/tp:topology/tp:network-nodes/tp:network-node[node-id = current()/super-node]";
             }
         }
 
@@ -144,4 +144,4 @@ module abstract-topology {
             }
         }
     }
-}
\ No newline at end of file
+}
index 6ad87db109dd134671620ab2c92e6632c025c62d..45e2f9e0c6d50d3fb400b15d5e0019d6fbca862d 100644 (file)
@@ -34,7 +34,7 @@ module test-type-provider-b {
 
     leaf conditional-leafref {
         type leafref {
-            path "/prov:foo/prov:bars/prov:bar-item[prov:id=10]";
+            path "/prov:foo/prov:bars/prov:bar-item[prov:id=current()/../id]";
         }
     }
 
@@ -43,4 +43,4 @@ module test-type-provider-b {
             path "/somewhere/i/bellong";
         }
     }
-}
\ No newline at end of file
+}
index 14eed88289f724f88d4d7906e9adb1c66fceea0a..ab4418c8bed2b5f26e83564281a16f7ca229de34 100644 (file)
@@ -270,7 +270,7 @@ module test-type-provider {
 
         leaf foo-cond-bar-item {
             type leafref {
-                path "../../foo/bars/bar-item[id=10]";
+                path "../../foo/bars/bar-item[id=current()/../bar-id]";
             }
         }
 
index ca8496ea64064b2793e35d60e3a3dc37bc7ea658..0d2f426d34e617f0c3217062783e3ed620d2312c 100644 (file)
@@ -52,7 +52,7 @@ import org.opendaylight.yangtools.yang.model.util.type.StringTypeBuilder;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class BindingGeneratorUtilTest {
-    private static final SchemaPath ROOT_PATH = SchemaPath.create(true, QName.create("test", "/root"));
+    private static final SchemaPath ROOT_PATH = SchemaPath.create(true, QName.create("test", "root"));
 
     @Rule
     public ExpectedException expectedEx = ExpectedException.none();
index aefe5ca94e2e4cad1d4edf4d9a6dcf1a3ac65b46..f8d696f09237074ba1fea5dbe86a1f0bfe15e4c4 100644 (file)
@@ -295,7 +295,7 @@ public class GeneratedTypeBuilderTest {
         generatedTypeBuilder.setDescription("My description ...");
         generatedTypeBuilder.setModuleName("myModuleName");
         generatedTypeBuilder.setReference("myReference");
-        generatedTypeBuilder.setSchemaPath(SchemaPath.create(true, QName.create("test", "/path")));
+        generatedTypeBuilder.setSchemaPath(SchemaPath.create(true, QName.create("test", "path")));
         assertNotNull(generatedTypeBuilder.addComment(TypeComments.javadoc("My comment..").get()));
 
         assertEquals(
@@ -308,7 +308,7 @@ public class GeneratedTypeBuilderTest {
         assertEquals("My description ...", instance.getDescription());
         assertEquals("myModuleName", instance.getModuleName());
         assertEquals("myReference", instance.getReference());
-        assertEquals(SchemaPath.create(true, QName.create("test", "/path")).getPathFromRoot(),
+        assertEquals(SchemaPath.create(true, QName.create("test", "path")).getPathFromRoot(),
             instance.getSchemaPath());
         assertEquals("My comment..", instance.getComment().getJavadoc());
     }
index 020906cfb3cfeab74a34455810aa96e28efe2c6b..af800bee26fbd08ac879ff93a7cd8ded32e791a2 100644 (file)
@@ -82,7 +82,9 @@ public final class BindingReflections {
      */
     public static Class<? extends Augmentable<?>> findAugmentationTarget(
             final Class<? extends Augmentation<?>> augmentation) {
-        return ClassLoaderUtils.findFirstGenericArgument(augmentation, Augmentation.class);
+        final Optional<Class<Augmentable<?>>> opt = ClassLoaderUtils.findFirstGenericArgument(augmentation,
+            Augmentation.class);
+        return opt.orElse(null);
     }
 
     /**
@@ -94,7 +96,7 @@ public final class BindingReflections {
      * @return Parent class, e.g. class of which the childClass is ChildOf.
      */
     public static Class<?> findHierarchicalParent(final Class<? extends ChildOf<?>> childClass) {
-        return ClassLoaderUtils.findFirstGenericArgument(childClass, ChildOf.class);
+        return ClassLoaderUtils.findFirstGenericArgument(childClass, ChildOf.class).orElse(null);
     }
 
     /**
@@ -107,7 +109,7 @@ public final class BindingReflections {
      */
     public static Class<?> findHierarchicalParent(final DataObject child) {
         if (child instanceof ChildOf) {
-            return ClassLoaderUtils.findFirstGenericArgument(child.implementedInterface(), ChildOf.class);
+            return ClassLoaderUtils.findFirstGenericArgument(child.implementedInterface(), ChildOf.class).orElse(null);
         }
         return null;
     }
@@ -152,8 +154,8 @@ public final class BindingReflections {
     public static Optional<Class<?>> resolveRpcOutputClass(final Method targetMethod) {
         checkState(isRpcMethod(targetMethod), "Supplied method is not a RPC invocation method");
         Type futureType = targetMethod.getGenericReturnType();
-        Type rpcResultType = ClassLoaderUtils.getFirstGenericParameter(futureType);
-        Type rpcResultArgument = ClassLoaderUtils.getFirstGenericParameter(rpcResultType);
+        Type rpcResultType = ClassLoaderUtils.getFirstGenericParameter(futureType).orElse(null);
+        Type rpcResultArgument = ClassLoaderUtils.getFirstGenericParameter(rpcResultType).orElse(null);
         if (rpcResultArgument instanceof Class && !Void.class.equals(rpcResultArgument)) {
             return Optional.of((Class) rpcResultArgument);
         }
@@ -434,11 +436,9 @@ public final class BindingReflections {
         if (List.class.isAssignableFrom(returnType)) {
             try {
                 return ClassLoaderUtils.callWithClassLoader(method.getDeclaringClass().getClassLoader(), () -> {
-                    Type listResult = ClassLoaderUtils.getFirstGenericParameter(method.getGenericReturnType());
-                    if (listResult instanceof Class && DataContainer.class.isAssignableFrom((Class) listResult)) {
-                        return Optional.of((Class) listResult);
-                    }
-                    return Optional.empty();
+                    return ClassLoaderUtils.getFirstGenericParameter(method.getGenericReturnType()).flatMap(
+                        result -> result instanceof Class && DataContainer.class.isAssignableFrom((Class) result)
+                            ? Optional.of((Class) result) : Optional.empty());
                 });
             } catch (Exception e) {
                 /*
index 0edd19c6e681624cdff3c86a2db5b3b05431ccd2..faf4dcadb67ae6083dd5878b3f29aa5b81663c90 100644 (file)
@@ -29,7 +29,7 @@
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>2.1.8</version>
+                <version>3.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index cb834f570a64eb033843791afe227871741d4816..672b03f7f2d2822a0e93857913fb6516e1f81bb8 100644 (file)
@@ -60,7 +60,7 @@ public class DOMMountPointServiceImpl implements DOMMountPointService {
             final DOMMountPoint prev = mountPoints.putIfAbsent(mountPointId, mountPoint);
             checkState(prev == null, "Mount point %s already exists as %s", mountPointId, prev);
         }
-        listeners.forEach(listener -> {
+        listeners.getRegistrations().forEach(listener -> {
             try {
                 listener.getInstance().onMountPointCreated(mountPointId);
             } catch (final Exception ex) {
@@ -85,7 +85,7 @@ public class DOMMountPointServiceImpl implements DOMMountPointService {
             }
         }
 
-        listeners.forEach(listener -> {
+        listeners.getRegistrations().forEach(listener -> {
             try {
                 listener.getInstance().onMountPointRemoved(mountPointId);
             } catch (final Exception ex) {
index 9aa8c52c0f7d26c31d08051f8fe8a3e21f693f42..c609f3389cd152542fd3b9614225069926547295 100644 (file)
@@ -157,14 +157,15 @@ public class DOMNotificationRouter implements AutoCloseable, DOMNotificationPubl
 
     @SuppressWarnings("checkstyle:IllegalCatch")
     private void notifyListenerTypesChanged(final Set<SchemaPath> typesAfter) {
-        final List<ListenerRegistration<DOMNotificationSubscriptionListener>> listenersAfter =
-                ImmutableList.copyOf(subscriptionListeners.getListeners());
+        final List<? extends DOMNotificationSubscriptionListener> listenersAfter =
+                subscriptionListeners.getRegistrations().stream().map(ListenerRegistration::getInstance)
+                .collect(ImmutableList.toImmutableList());
         executor.execute(() -> {
-            for (final ListenerRegistration<DOMNotificationSubscriptionListener> subListener : listenersAfter) {
+            for (final DOMNotificationSubscriptionListener subListener : listenersAfter) {
                 try {
-                    subListener.getInstance().onSubscriptionChanged(typesAfter);
+                    subListener.onSubscriptionChanged(typesAfter);
                 } catch (final Exception e) {
-                    LOG.warn("Uncaught exception during invoking listener {}", subListener.getInstance(), e);
+                    LOG.warn("Uncaught exception during invoking listener {}", subListener, e);
                 }
             }
         });
@@ -175,7 +176,7 @@ public class DOMNotificationRouter implements AutoCloseable, DOMNotificationPubl
             final L listener) {
         final Set<SchemaPath> initialTypes = listeners.keySet();
         executor.execute(() -> listener.onSubscriptionChanged(initialTypes));
-        return subscriptionListeners.registerWithType(listener);
+        return subscriptionListeners.register(listener);
     }
 
     private ListenableFuture<Void> publish(final long seq, final DOMNotification notification,
index 779bad823c7a6dc34d93e6b707b3479b11ceef7d..15ea6164a9d3eda02d18fff24166271c5e17ef3b 100644 (file)
@@ -55,7 +55,8 @@ public class ScanningSchemaServiceProvider extends AbstractDOMSchemaService.With
     @SuppressWarnings("checkstyle:IllegalCatch")
     public void notifyListeners(final SchemaContext schemaContext) {
         synchronized (lock) {
-            for (final ListenerRegistration<SchemaContextListener> registration : listeners) {
+            for (final ListenerRegistration<? extends SchemaContextListener> registration
+                    : listeners.getRegistrations()) {
                 try {
                     registration.getInstance().onGlobalContextUpdated(schemaContext);
                 } catch (final Exception e) {
@@ -79,7 +80,8 @@ public class ScanningSchemaServiceProvider extends AbstractDOMSchemaService.With
 
     public void removeListener(final SchemaContextListener schemaContextListener) {
         synchronized (lock) {
-            for (final ListenerRegistration<SchemaContextListener> listenerRegistration : listeners.getListeners()) {
+            for (final ListenerRegistration<? extends SchemaContextListener> listenerRegistration
+                    : listeners.getRegistrations()) {
                 if (listenerRegistration.getInstance().equals(schemaContextListener)) {
                     listenerRegistration.close();
                     break;
@@ -90,7 +92,7 @@ public class ScanningSchemaServiceProvider extends AbstractDOMSchemaService.With
 
     public boolean hasListeners() {
         synchronized (lock) {
-            return !Iterables.isEmpty(listeners.getListeners());
+            return !Iterables.isEmpty(listeners.getRegistrations());
         }
     }
 
@@ -116,7 +118,7 @@ public class ScanningSchemaServiceProvider extends AbstractDOMSchemaService.With
     @Override
     public void close() {
         synchronized (lock) {
-            listeners.forEach(ListenerRegistration::close);
+            listeners.getRegistrations().forEach(ListenerRegistration::close);
         }
     }
 }
index e42a3f4b6180e595dde509761071c8bfb027bcb4..86a424d7e961459fe760c58a058da1cebfb06319 100644 (file)
@@ -272,8 +272,7 @@ public class DOMDataTreeListenerTest {
         candidateRoot = candidate.getRootNode();
         checkChange(TEST_CONTAINER, TEST_CONTAINER_2, ModificationType.SUBTREE_MODIFIED, candidateRoot);
         final DataTreeCandidateNode modifiedChild = candidateRoot.getModifiedChild(
-                new YangInstanceIdentifier.NodeIdentifier(TestModel.OUTER_LIST_QNAME));
-        assertNotNull(modifiedChild);
+                new YangInstanceIdentifier.NodeIdentifier(TestModel.OUTER_LIST_QNAME)).get();
         checkChange(OUTER_LIST, OUTER_LIST_2, ModificationType.WRITE, modifiedChild);
         listenerReg.close();
     }
@@ -380,11 +379,11 @@ public class DOMDataTreeListenerTest {
         assertNotNull(candidate);
         candidateRoot = candidate.getRootNode();
         checkChange(OUTER_LIST, listAfter, ModificationType.SUBTREE_MODIFIED, candidateRoot);
-        final DataTreeCandidateNode entry1Canditate = candidateRoot.getModifiedChild(outerListEntryId1);
+        final DataTreeCandidateNode entry1Canditate = candidateRoot.getModifiedChild(outerListEntryId1).get();
         checkChange(outerListEntry1, null, ModificationType.DELETE, entry1Canditate);
-        final DataTreeCandidateNode entry2Canditate = candidateRoot.getModifiedChild(outerListEntryId2);
+        final DataTreeCandidateNode entry2Canditate = candidateRoot.getModifiedChild(outerListEntryId2).get();
         checkChange(null, outerListEntry2, ModificationType.WRITE, entry2Canditate);
-        final DataTreeCandidateNode entry3Canditate = candidateRoot.getModifiedChild(outerListEntryId3);
+        final DataTreeCandidateNode entry3Canditate = candidateRoot.getModifiedChild(outerListEntryId3).get();
         checkChange(null, outerListEntry3, ModificationType.WRITE, entry3Canditate);
         listenerReg.close();
     }
index 6f7ad9c3e5ba55c88f48956be3d475c8acb8c560..4a21a4416edb966f6abd06ac29e68b48a41a9f2a 100644 (file)
@@ -67,11 +67,11 @@ public class DOMNotificationRouterTest extends TestUtils {
         ListenerRegistry<DOMNotificationSubscriptionListener> subscriptionListeners =
                 domNotificationRouter.subscriptionListeners();
 
-        assertFalse(subscriptionListeners.iterator().hasNext());
+        assertFalse(subscriptionListeners.getRegistrations().iterator().hasNext());
         assertNotNull(domNotificationRouter.registerSubscriptionListener(domNotificationSubscriptionListener));
 
         subscriptionListeners = domNotificationRouter.subscriptionListeners();
-        assertTrue(subscriptionListeners.iterator().hasNext());
+        assertTrue(subscriptionListeners.getRegistrations().iterator().hasNext());
 
         final DOMNotification domNotification = mock(DOMNotification.class);
         doReturn("test").when(domNotification).toString();
index a497ffff6f2114f7503b2dc3dfd7a889d3482c45..1b7ba5e235b2867781844887bf166e91767ead40 100644 (file)
@@ -52,7 +52,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.LeafNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
 import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
@@ -423,7 +423,7 @@ public class ShardedDOMDataTreeProducerMultiShardTest {
                 ImmutableLeafNodeBuilder.<String>create().withNodeIdentifier(
                         new NodeIdentifier(TestModel.SHARDED_VALUE_2)).withValue("sharded value 2").build();
 
-        final DataContainerNodeAttrBuilder<NodeIdentifier, ContainerNode> containerNodeBuilder =
+        final DataContainerNodeBuilder<NodeIdentifier, ContainerNode> containerNodeBuilder =
                 ImmutableContainerNodeBuilder.create();
         final ContainerNode containerNode =
                 containerNodeBuilder
index 3fc183ee34b35da2453c72702ebfe4423a341d10..94a17882b9309e4b3bd689380406690e1380e4a8 100644 (file)
@@ -256,7 +256,7 @@ abstract class AbstractDOMShardTreeChangePublisher extends AbstractDOMStoreTreeC
             // strip nodes we do not need since this listener doesn't have to be registered at the root of the DataTree
             DataTreeCandidateNode modifiedChild = dataTree.prepare(modification).getRootNode();
             for (final PathArgument pathArgument : listenerPath.getPathArguments()) {
-                modifiedChild = modifiedChild.getModifiedChild(pathArgument);
+                modifiedChild = modifiedChild.getModifiedChild(pathArgument).orElse(null);
             }
 
             if (modifiedChild == null) {
index c2a4c1feaf8ae913f1fbe7b4396004085384aacc..a333033c90a3f5e92d98030f9db78351aedb5e3b 100644 (file)
@@ -7,16 +7,13 @@
  */
 package org.opendaylight.mdsal.dom.store.inmemory;
 
-import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.Executor;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistration;
 import org.opendaylight.mdsal.dom.spi.shard.ChildShardContext;
 import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager;
-import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager.BatchedInvoker;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
 import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
@@ -27,14 +24,6 @@ final class InMemoryDOMDataTreeShardChangePublisher extends AbstractDOMShardTree
 
     private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMDataTreeShardChangePublisher.class);
 
-    private static final BatchedInvoker<AbstractDOMDataTreeChangeListenerRegistration<?>, DataTreeCandidate>
-        MANAGER_INVOKER = (listener, notifications) -> {
-            final DOMDataTreeChangeListener inst = listener.getInstance();
-            if (inst != null) {
-                inst.onDataTreeChanged(ImmutableList.copyOf(notifications));
-            }
-        };
-
     private final QueuedNotificationManager<AbstractDOMDataTreeChangeListenerRegistration<?>, DataTreeCandidate>
         notificationManager;
 
@@ -44,8 +33,10 @@ final class InMemoryDOMDataTreeShardChangePublisher extends AbstractDOMShardTree
                                             final YangInstanceIdentifier rootPath,
                                             final Map<DOMDataTreeIdentifier, ChildShardContext> childShards) {
         super(dataTree, rootPath, childShards);
-        notificationManager = QueuedNotificationManager.create(executor, MANAGER_INVOKER, maxQueueSize,
-            "DataTreeChangeListenerQueueMgr");
+        notificationManager = QueuedNotificationManager.create(executor, (listener, notifications) -> {
+            // FIXME: we are not checking for listener being closed
+            listener.getInstance().onDataTreeChanged(notifications);
+        }, maxQueueSize, "DataTreeChangeListenerQueueMgr");
     }
 
     @Override
index 9b8e25cd30b48f27a413220a724b68d9ac37c058..60ca3ff209297d63ba7c73fe194e051609e60d5c 100644 (file)
@@ -9,7 +9,6 @@ package org.opendaylight.mdsal.dom.store.inmemory;
 
 import static com.google.common.base.Preconditions.checkState;
 
-import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import java.util.Optional;
 import java.util.concurrent.ExecutorService;
@@ -19,7 +18,6 @@ import org.opendaylight.mdsal.dom.spi.AbstractDOMDataTreeChangeListenerRegistrat
 import org.opendaylight.mdsal.dom.spi.store.AbstractDOMStoreTreeChangePublisher;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager;
-import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager.BatchedInvoker;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -30,21 +28,16 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 final class InMemoryDOMStoreTreeChangePublisher extends AbstractDOMStoreTreeChangePublisher {
-    private static final BatchedInvoker<AbstractDOMDataTreeChangeListenerRegistration<?>, DataTreeCandidate>
-        MANAGER_INVOKER = (listener, notifications) -> {
-            final DOMDataTreeChangeListener inst = listener.getInstance();
-            if (inst != null) {
-                inst.onDataTreeChanged(ImmutableList.copyOf(notifications));
-            }
-        };
     private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMStoreTreeChangePublisher.class);
 
     private final QueuedNotificationManager<AbstractDOMDataTreeChangeListenerRegistration<?>, DataTreeCandidate>
         notificationManager;
 
     InMemoryDOMStoreTreeChangePublisher(final ExecutorService listenerExecutor, final int maxQueueSize) {
-        notificationManager = QueuedNotificationManager.create(listenerExecutor, MANAGER_INVOKER, maxQueueSize,
-                "DataTreeChangeListenerQueueMgr");
+        notificationManager = QueuedNotificationManager.create(listenerExecutor, (listener, notifications) -> {
+            // FIXME: we are not checking for listener being closed
+            listener.getInstance().onDataTreeChanged(notifications);
+        }, maxQueueSize, "DataTreeChangeListenerQueueMgr");
     }
 
     private InMemoryDOMStoreTreeChangePublisher(final QueuedNotificationManager<
index ed62c6b4a970bc60dc96f2334a7e00a4ac43f1f7..5ec66d74cb4b051105e4a43dfd9e6b7b4d842f9a 100644 (file)
@@ -27,7 +27,7 @@
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yangtools-artifacts</artifactId>
-                <version>2.1.8</version>
+                <version>3.0.0</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
index 8efc0a75d05d9d43c8876b0adce4099b6f0783b6..bc93b987258053f1581d7f294a3eefc6fd2d92cf 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-binding-api">
     <feature name="odl-mdsal-binding-api">
-        <feature version="[2.0.10,3)">odl-yangtools-data-api</feature>
+        <feature version="[3,4)">odl-yangtools-data-api</feature>
     </feature>
 </features>
index 66c5a4b8ff240064064f173e2d39b8befadd2247..86bf6ea9b73e54a586fd5f9dde0b41dd821eca86 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-binding-base">
     <feature name="odl-mdsal-binding-base">
-        <feature version="[2.0.10,3)">odl-yangtools-common</feature>
+        <feature version="[3,4)">odl-yangtools-common</feature>
     </feature>
 </features>
index 51ceb2489832bf0422927326d28ea94bea0ffd71..2e0a7d25780a34f32aee136595ce3c06ebe902d8 100644 (file)
@@ -2,7 +2,7 @@
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-binding-runtime">
     <feature name="odl-mdsal-binding-runtime">
         <feature version="[5,6)">odl-javassist-3</feature>
-        <feature version="[2.1,3)">odl-yangtools-data</feature>
-        <feature version="[2.1,3)">odl-yangtools-parser</feature>
+        <feature version="[3,4)">odl-yangtools-data</feature>
+        <feature version="[3,4)">odl-yangtools-parser</feature>
     </feature>
 </features>
index 6effc13fb0ad7171e4f18f80c35c0af06dcc340b..82d27f612f772020fe91f45a9cc92a41bbfde9e2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-common">
     <feature name="odl-mdsal-common">
-        <feature version="[2.0.10,3)">odl-yangtools-common</feature>
+        <feature version="[3,4)">odl-yangtools-common</feature>
     </feature>
 </features>
index 3eeedccebbb5b9b8aa349ae9c2cde56c5a677823..a6f98963f162edfdd166c9e30a4c1c36e30ed24a 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-dom-api">
     <feature name="odl-mdsal-dom-api">
-        <feature version="[2.0.10,3)">odl-yangtools-data-api</feature>
+        <feature version="[3,4)">odl-yangtools-data-api</feature>
     </feature>
 </features>
index fd0f0c037fc2eff3e3612ca6168bab2683ccf974..375a19b66e5fd1df9844d00af37ae7c784c395b9 100644 (file)
@@ -2,7 +2,7 @@
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-dom-broker">
     <feature name="odl-mdsal-dom-broker">
         <feature version="[5,6)">odl-lmax-3</feature>
-        <feature version="[2.1,3)">odl-yangtools-data</feature>
-        <feature version="[2.1,3)">odl-yangtools-parser</feature>
+        <feature version="[3,4)">odl-yangtools-data</feature>
+        <feature version="[3,4)">odl-yangtools-parser</feature>
     </feature>
 </features>
index eb93182783ecb502c4e782698715c9e0a76fea14..bbed0cb0d37b4d9679c0864cd5a45cc5f2b72762 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <features xmlns="http://karaf.apache.org/xmlns/features/v1.4.0" name="odl-mdsal-eos-common">
     <feature name="odl-mdsal-eos-common">
-        <feature version="[2.0.10,3)">odl-yangtools-data-api</feature>
+        <feature version="[3,4)">odl-yangtools-data-api</feature>
     </feature>
 </features>
index 0b587ea26e8b9d7405b52d8495a835ce2307dd76..8abfc2359f6412d33e27184f5cf165eb5052e7d7 100644 (file)
@@ -18,7 +18,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.opendaylight.mdsal.model</groupId>
     <artifactId>ietf-type-util</artifactId>
-    <version>3.0.0-SNAPSHOT</version>
+    <version>3.0.0</version>
     <packaging>bundle</packaging>
 
     <dependencies>