* @throws IllegalArgumentException if any of the {@code validNodes} does not match {@code datastore}
* @throws UnsupportedOperationException if this service cannot handle requested datastore
*/
- <P extends DataObject, A extends Action<InstanceIdentifier<P>, ?, ?>, S extends A>
+ <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
@NonNull ObjectRegistration<S> registerImplementation(@NonNull ActionSpec<A, P> spec, @NonNull S implementation,
- @NonNull LogicalDatastoreType datastore, @NonNull Set<InstanceIdentifier<P>> validNodes);
+ @NonNull LogicalDatastoreType datastore, @NonNull Set<? extends InstanceIdentifier<P>> validNodes);
- default <P extends DataObject, T extends Action<InstanceIdentifier<P>, ?, ?>, S extends T>
+ default <P extends DataObject, T extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends T>
@NonNull ObjectRegistration<S> registerImplementation(final @NonNull ActionSpec<T, P> spec,
final @NonNull S implementation, final @NonNull LogicalDatastoreType datastore) {
return registerImplementation(spec, implementation, datastore, ImmutableSet.of());
}
- default <P extends DataObject, T extends Action<InstanceIdentifier<P>, ?, ?>, S extends T>
+ default <P extends DataObject, T extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends T>
@NonNull ObjectRegistration<S> registerImplementation(final @NonNull ActionSpec<T, P> spec,
final @NonNull S implementation) {
return registerImplementation(spec, implementation, LogicalDatastoreType.OPERATIONAL);
}
@Override
- public <P extends DataObject, A extends Action<InstanceIdentifier<P>, ?, ?>, S extends A>
+ public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
ObjectRegistration<S> registerImplementation(final ActionSpec<A, P> spec, final S implementation,
- final LogicalDatastoreType datastore, final Set<InstanceIdentifier<P>> validNodes) {
+ final LogicalDatastoreType datastore, final Set<? extends InstanceIdentifier<P>> validNodes) {
final CurrentAdapterSerializer serializer = currentSerializer();
final Absolute actionPath = serializer.getActionPath(spec);
final Impl impl = new Impl(adapterContext(), actionPath, spec.type(), implementation);
}
@Override
- public <P extends DataObject, A extends Action<InstanceIdentifier<P>, ?, ?>, S extends A>
+ public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>, S extends A>
ObjectRegistration<S> registerImplementation(final ActionSpec<A, P> spec, final S implementation,
- final LogicalDatastoreType datastore, final Set<InstanceIdentifier<P>> validNodes) {
+ final LogicalDatastoreType datastore, final Set<? extends InstanceIdentifier<P>> validNodes) {
return delegate().registerImplementation(spec, implementation, datastore, validNodes);
}
import static org.opendaylight.yangtools.yang.data.impl.schema.Builders.leafBuilder;
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.cont.Foo;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.foo.Input;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.foo.InputBuilder;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.foo.Output;
import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.cont.foo.OutputBuilder;
+import org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.Fooio;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
public abstract class AbstractActionAdapterTest extends AbstractAdapterTest {
protected static final Absolute FOO_PATH = Absolute.of(Cont.QNAME, Foo.QNAME);
+ protected static final Absolute FOOIO_PATH = Absolute.of(Lstio.QNAME, Fooio.QNAME);
protected static final NodeIdentifier FOO_INPUT = new NodeIdentifier(operationInputQName(Foo.QNAME.getModule()));
protected static final NodeIdentifier FOO_OUTPUT = new NodeIdentifier(operationOutputQName(Foo.QNAME.getModule()));
protected static final NodeIdentifier FOO_XYZZY = new NodeIdentifier(QName.create(Foo.QNAME, "xyzzy"));
import org.opendaylight.mdsal.dom.api.DOMActionInstance;
import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
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.lstio.Fooio;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class ActionProviderServiceAdapterTest extends AbstractActionAdapterTest {
private static final @NonNull Foo FOO = (path, input) -> RpcResultBuilder.success(BINDING_FOO_OUTPUT).buildFuture();
+ private static final @NonNull Fooio FOOIO = (path, input) -> RpcResultBuilder.success(
+ new org.opendaylight.yang.gen.v1.urn.odl.actions.norev.lstio.fooio.OutputBuilder().build()).buildFuture();
+ private static final @NonNull QName KEYIO_QNAME = QName.create(Lstio.QNAME, "keyio");
+ private static final String LIST_KEY = "list-key";
@Mock
private DOMActionProviderService actionProvider;
LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.create(new NodeIdentifier(Cont.QNAME)))));
}
+ @Test
+ public void testKeyedInstanceRegistration() {
+ final InstanceIdentifier<Lstio> identifier = InstanceIdentifier.builder(Lstio.class, new LstioKey(LIST_KEY))
+ .build();
+
+ adapter.registerImplementation(ActionSpec.builder(Lstio.class).build(Fooio.class), FOOIO,
+ LogicalDatastoreType.OPERATIONAL, Set.of(identifier));
+
+ final YangInstanceIdentifier lstioYIID = YangInstanceIdentifier.builder()
+ .node(Lstio.QNAME)
+ .nodeWithKey(Lstio.QNAME, KEYIO_QNAME, LIST_KEY)
+ .build();
+ verify(actionProvider).registerActionImplementation(any(),
+ eq(DOMActionInstance.of(FOOIO_PATH, LogicalDatastoreType.OPERATIONAL, lstioYIID)));
+ }
+
@Test
public void testWildcardRegistration() {
adapter.registerImplementation(ActionSpec.builder(Cont.class).build(Foo.class), FOO);