Fix ActionProviderService(Adapter)
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / ActionProviderServiceAdapter.java
index 43525b3048d49d56e4aeb4041efed3fa796ea82c..cef0c0bca211c9633df8354ef4ca3ad090c5e96c 100644 (file)
@@ -14,12 +14,14 @@ import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.mdsal.binding.api.ActionProviderService;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.dom.adapter.BindingDOMAdapterBuilder.Factory;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.DOMActionImplementation;
+import org.opendaylight.mdsal.dom.api.DOMActionInstance;
 import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
 import org.opendaylight.mdsal.dom.api.DOMActionResult;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
@@ -64,12 +66,16 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
     @Override
     public <O extends DataObject, P extends InstanceIdentifier<O>, T extends Action<P, ?, ?>, S extends T>
             ObjectRegistration<S> registerImplementation(final Class<T> actionInterface, final S implementation,
-                final LogicalDatastoreType datastore, final Set<DataTreeIdentifier<O>> validNodes) {
-        final Absolute path = currentSerializer().getActionPath(actionInterface);
-        final ObjectRegistration<DOMActionImplementation> reg = getDelegate().registerActionImplementation(
-            new Impl(adapterContext(),
-                NodeIdentifier.create(YangConstants.operationOutputQName(path.lastNodeIdentifier().getModule())),
-                actionInterface, implementation), ImmutableSet.of());
+                final LogicalDatastoreType datastore, final Set<InstanceIdentifier<O>> validNodes) {
+        final CurrentAdapterSerializer serializer = currentSerializer();
+        final Absolute actionPath = serializer.getActionPath(actionInterface);
+        final Impl impl = new Impl(adapterContext(), actionPath, actionInterface, implementation);
+
+        final ObjectRegistration<DOMActionImplementation> reg = getDelegate().registerActionImplementation(impl,
+            DOMActionInstance.of(actionPath, validNodes.stream()
+                .map(instance -> serializer.toDOMDataTreeIdentifier(DataTreeIdentifier.create(datastore, instance)))
+                .collect(Collectors.toUnmodifiableSet())));
+
         return new AbstractObjectRegistration<>(implementation) {
             @Override
             protected void removeRegistration() {
@@ -84,10 +90,11 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
         private final Action implementation;
         private final NodeIdentifier outputName;
 
-        Impl(final AdapterContext adapterContext, final NodeIdentifier outputName,
+        Impl(final AdapterContext adapterContext, final Absolute actionPath,
                 final Class<? extends Action<?, ?, ?>> actionInterface, final Action<?, ?, ?> implementation) {
             this.adapterContext = requireNonNull(adapterContext);
-            this.outputName = requireNonNull(outputName);
+            this.outputName = NodeIdentifier.create(
+                YangConstants.operationOutputQName(actionPath.lastNodeIdentifier().getModule()));
             this.actionInterface = requireNonNull(actionInterface);
             this.implementation = requireNonNull(implementation);
         }