From: Robert Varga Date: Thu, 3 Mar 2022 08:49:24 +0000 (+0100) Subject: Correct ActionService generics X-Git-Tag: v9.0.0~9 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=mdsal.git;a=commitdiff_plain;h=7496691fabeb9d3b1276476740045d17fe473641 Correct ActionService generics We need to allow for any Action, even for KeyedListAction. Make sure to adjust generics accordingly and add a test. JIRA: MDSAL-726 Change-Id: I04c8fdf1c8803647c8640bbdd10c19304336b915 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java index be0b85c907..96542f7efe 100644 --- a/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java +++ b/binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java @@ -53,25 +53,25 @@ public interface ActionService extends BindingService { * @throws NullPointerException if {@code actionInterface} is null * @throws IllegalArgumentException when {@code actionInterface} does not conform to the Binding Specification */ -

, ?, ?>> A getActionHandle(ActionSpec spec, - Set> validNodes); +

, ?, ?>> A getActionHandle( + ActionSpec spec, Set> validNodes); - default

, ?, ?>> A getActionHandle( + default

, ?, ?>> A getActionHandle( final ActionSpec spec) { return getActionHandle(spec, ImmutableSet.of()); } - default

, ?, ?>> A getActionHandle( + default

, ?, ?>> A getActionHandle( final ActionSpec spec, final LogicalDatastoreType dataStore, final InstanceIdentifier

path) { return getActionHandle(spec, ImmutableSet.of(DataTreeIdentifier.create(dataStore, path))); } - default

, ?, ?>> A getActionHandle( + default

, ?, ?>> A getActionHandle( final ActionSpec spec, final InstanceIdentifier

path) { return getActionHandle(spec, LogicalDatastoreType.OPERATIONAL, path); } - default

, ?, ?>> A getActionHandle( + default

, ?, ?>> A getActionHandle( final ActionSpec spec, @SuppressWarnings("unchecked") final DataTreeIdentifier

... nodes) { return getActionHandle(spec, ImmutableSet.copyOf(nodes)); } diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java index 77416b5f1e..08f6ff6bd8 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapter.java @@ -52,7 +52,7 @@ final class ActionServiceAdapter } @Override - public

, ?, ?>> A getActionHandle( + public

, ?, ?>> A getActionHandle( final ActionSpec spec, final Set> nodes) { final var type = spec.type(); final var adapter = getAdapter(spec); diff --git a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionService.java b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionService.java index 0b9999f286..7f79dc858e 100644 --- a/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionService.java +++ b/binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/osgi/OSGiActionService.java @@ -34,7 +34,7 @@ public final class OSGiActionService extends AbstractAdaptedService, ?, ?>> A getActionHandle( + public

, ?, ?>> A getActionHandle( final ActionSpec spec, final Set<@NonNull DataTreeIdentifier

> validNodes) { return delegate().getActionHandle(spec, validNodes); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractActionAdapterTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractActionAdapterTest.java index bf543d5406..5b979b8aff 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractActionAdapterTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractActionAdapterTest.java @@ -38,4 +38,8 @@ public abstract class AbstractActionAdapterTest extends AbstractAdapterTest { protected static final Input BINDING_FOO_INPUT = new InputBuilder().setXyzzy("xyzzy").build(); protected static final Output BINDING_FOO_OUTPUT = new OutputBuilder().build(); + protected static final org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.fooio.Input BINDING_LSTIO_INPUT = + new org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.fooio.InputBuilder().build(); + protected static final org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.fooio.Output BINDING_LSTIO_OUTPUT = + new org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.fooio.OutputBuilder().build(); } diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapterTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapterTest.java index 76e28aa80f..1ec1c86e9c 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapterTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/ActionServiceAdapterTest.java @@ -29,9 +29,13 @@ import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMActionService; import org.opendaylight.mdsal.dom.spi.SimpleDOMActionResult; import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Cont; +import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.Lstio; +import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.LstioKey; import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.Foo; import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.foo.Output; +import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.Fooio; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; @RunWith(MockitoJUnitRunner.StrictStubs.class) @@ -67,4 +71,20 @@ public class ActionServiceAdapterTest extends AbstractActionAdapterTest { assertEquals(List.of(), bindingResult.getErrors()); assertEquals(BINDING_FOO_OUTPUT, bindingResult.getResult()); } + + @Test + public void testKeyedInvocation() throws ExecutionException { + final var handle = service.getActionHandle(ActionSpec.builder(Lstio.class).build(Fooio.class)); + final var future = handle.invoke((KeyedInstanceIdentifier) + InstanceIdentifier.builder(Lstio.class, new LstioKey("test")).build(), + BINDING_LSTIO_INPUT); + assertNotNull(future); + assertFalse(future.isDone()); + + domResult.set(new SimpleDOMActionResult(DOM_FOO_OUTPUT, List.of())); + final var bindingResult = Futures.getDone(future); + + assertEquals(List.of(), bindingResult.getErrors()); + assertEquals(BINDING_LSTIO_OUTPUT, bindingResult.getResult()); + } }