- 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 SchemaPath path = currentSerializer().getActionPath(actionInterface);
- final ObjectRegistration<DOMActionImplementation> reg = getDelegate().registerActionImplementation(
- new Impl(adapterContext(),
- NodeIdentifier.create(YangConstants.operationOutputQName(path.getLastComponent().getModule())),
- actionInterface, implementation), ImmutableSet.of());
- return new AbstractObjectRegistration<>(implementation) {
- @Override
- protected void removeRegistration() {
- reg.close();
- }
- };
+ public <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>>
+ Registration registerImplementation(final ActionSpec<A, P> spec, final A implementation,
+ 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);
+ final DOMActionInstance instance = validNodes.isEmpty()
+ // Register on the entire datastore
+ ? DOMActionInstance.of(actionPath, DOMDataTreeIdentifier.of(datastore, YangInstanceIdentifier.of()))
+ // Register on specific instances
+ : DOMActionInstance.of(actionPath, validNodes.stream()
+ .map(node -> serializer.toDOMDataTreeIdentifier(DataTreeIdentifier.of(datastore, node)))
+ .collect(Collectors.toUnmodifiableSet()));
+
+
+ return getDelegate().registerActionImplementation(impl, instance);