import static java.util.Objects.requireNonNull;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ClassToInstanceMap;
import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableClassToInstanceMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableTable;
}
@NonNullByDefault
- private final class ActionAvailabilityFacade implements DOMActionAvailabilityExtension {
+ private final class ActionServiceFacade implements DOMActionService, DOMActionAvailabilityExtension {
@Override
- public <T extends AvailabilityListener> ListenerRegistration<T> registerAvailabilityListener(final T listener) {
- synchronized (DOMRpcRouter.this) {
- final ActionRegistration<T> ret = new ActionRegistration<>(DOMRpcRouter.this, listener,
- actionRoutingTable.getOperations(listener));
- actionListeners = ImmutableList.<ActionRegistration<?>>builder()
- .addAll(actionListeners)
- .add(ret)
- .build();
-
- listenerNotifier.execute(ret::initialTable);
- return ret;
- }
- }
- }
-
- @NonNullByDefault
- private final class ActionServiceFacade implements DOMActionService {
- private final ClassToInstanceMap<DOMActionServiceExtension> extensions = ImmutableClassToInstanceMap.of(
- DOMActionAvailabilityExtension.class, new ActionAvailabilityFacade());
-
- @Override
- public ClassToInstanceMap<DOMActionServiceExtension> getExtensions() {
- return extensions;
+ public Collection<DOMActionServiceExtension> supportedExtensions() {
+ return List.of(this);
}
@Override
: Futures.immediateFailedFuture(
new DOMActionNotAvailableException("No implementation of Action %s available", type));
}
+
+ @Override
+ public <T extends AvailabilityListener> ListenerRegistration<T> registerAvailabilityListener(final T listener) {
+ synchronized (DOMRpcRouter.this) {
+ final ActionRegistration<T> ret = new ActionRegistration<>(DOMRpcRouter.this, listener,
+ actionRoutingTable.getOperations(listener));
+ actionListeners = ImmutableList.<ActionRegistration<?>>builder()
+ .addAll(actionListeners)
+ .add(ret)
+ .build();
+
+ listenerNotifier.execute(ret::initialTable);
+ return ret;
+ }
+ }
}
@NonNullByDefault