+ private abstract static class CompatFactory<M extends org.opendaylight.mdsal.dom.api.DOMService,
+ C extends DOMService> {
+ private final Class<C> controllerClass;
+ private final Class<M> mdsalClass;
+
+ CompatFactory(final Class<C> controllerClass, final Class<M> mdsalClass) {
+ this.controllerClass = requireNonNull(controllerClass);
+ this.mdsalClass = requireNonNull(mdsalClass);
+ }
+
+ final void addService(final org.opendaylight.mdsal.dom.api.DOMMountPointService.DOMMountPointBuilder builder,
+ final ClassToInstanceMap<DOMService> services) {
+ if (!services.containsKey(mdsalClass)) {
+ final C controllerService = services.getInstance(controllerClass);
+ if (controllerService != null) {
+ final M mdsalService = createService(controllerService);
+ if (mdsalService != null) {
+ builder.addService(mdsalClass, mdsalService);
+ }
+ }
+ }
+ }
+
+ abstract M createService(C delegate);
+ }
+
+ private static final Map<Class<? extends DOMService>, CompatFactory<?, ?>> KNOWN_SERVICES = ImmutableMap.of(
+ DOMActionService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMActionService, DOMActionService>(
+ DOMActionService.class, org.opendaylight.mdsal.dom.api.DOMActionService.class) {
+ @Override
+ org.opendaylight.mdsal.dom.api.DOMActionService createService(final DOMActionService delegate) {
+ return delegate;
+ }
+ },
+ DOMDataBroker.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMDataBroker, DOMDataBroker>(
+ DOMDataBroker.class, org.opendaylight.mdsal.dom.api.DOMDataBroker.class) {
+ @Override
+ org.opendaylight.mdsal.dom.api.DOMDataBroker createService(final DOMDataBroker delegate) {
+ return new DOMDataBrokerAdapter(delegate);
+ }
+ },
+ DOMNotificationService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMNotificationService,
+ DOMNotificationService>(DOMNotificationService.class,
+ org.opendaylight.mdsal.dom.api.DOMNotificationService.class) {
+ @Override
+ org.opendaylight.mdsal.dom.api.DOMNotificationService createService(final DOMNotificationService delegate) {
+ return new DOMNotificationServiceAdapter(delegate);
+ }
+ },
+ DOMRpcService.class, new CompatFactory<org.opendaylight.mdsal.dom.api.DOMRpcService, DOMRpcService>(
+ DOMRpcService.class, org.opendaylight.mdsal.dom.api.DOMRpcService.class) {
+ @Override
+ org.opendaylight.mdsal.dom.api.DOMRpcService createService(final DOMRpcService delegate) {
+ return new DOMRpcServiceAdapter(delegate);
+ }
+ });
+