import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
-import javax.annotation.concurrent.ThreadSafe;
+import java.util.ServiceLoader;
+import javax.inject.Inject;
+import javax.inject.Singleton;
import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.kohsuke.MetaInfServices;
import org.opendaylight.mdsal.binding.api.ActionProviderService;
import org.opendaylight.mdsal.binding.api.ActionService;
import org.opendaylight.mdsal.binding.api.DataBroker;
-import org.opendaylight.mdsal.binding.api.DataTreeService;
import org.opendaylight.mdsal.binding.api.MountPointService;
import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.mdsal.binding.api.NotificationService;
import org.opendaylight.mdsal.dom.api.DOMActionProviderService;
import org.opendaylight.mdsal.dom.api.DOMActionService;
import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
import org.opendaylight.mdsal.dom.api.DOMMountPointService;
import org.opendaylight.mdsal.dom.api.DOMNotificationPublishService;
import org.opendaylight.mdsal.dom.api.DOMNotificationService;
import org.opendaylight.mdsal.dom.api.DOMRpcProviderService;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
+import org.opendaylight.yangtools.concepts.Immutable;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
/**
* Implementation of AdapterFactory.
* @author Robert Varga
*/
@Beta
+@Component(immediate = true, service = AdapterFactory.class)
+@MetaInfServices(value = AdapterFactory.class)
@NonNullByDefault
-@ThreadSafe
-public final class BindingAdapterFactory implements AdapterFactory {
- private final BindingToNormalizedNodeCodec codec;
+@Singleton
+public final class BindingAdapterFactory implements AdapterFactory, Immutable {
+ private final AdapterContext codec;
- public BindingAdapterFactory(final BindingToNormalizedNodeCodec codec) {
- this.codec = requireNonNull(codec);
+ public BindingAdapterFactory() {
+ this(ServiceLoader.load(AdapterContext.class).findFirst()
+ .orElseThrow(() -> new IllegalStateException("Failed to load BlockingBindingNormalizer")));
}
- /**
- * Create a {@link DataBroker} backed by a {@link DOMDataBroker}.
- *
- * @param domService Backing DOMDataBroker
- * @return A DataBroker
- * @throws NullPointerException if {@code domService} is null
- */
- @Override
- public DataBroker createDataBroker(final DOMDataBroker domService) {
- return new BindingDOMDataBrokerAdapter(domService, codec);
+ @Inject
+ @Activate
+ public BindingAdapterFactory(@Reference final AdapterContext codec) {
+ this.codec = requireNonNull(codec);
}
- /**
- * Create a {@link DataTreeService} backed by a {@link DOMDataTreeService}.
- *
- * @param domService Backing DOMDataTreeService
- * @return A DataTreeService
- * @throws NullPointerException if {@code domService} is null
- */
@Override
- public DataTreeService createDataTreeService(final DOMDataTreeService domService) {
- return BindingDOMDataTreeServiceAdapter.create(domService, codec);
+ public DataBroker createDataBroker(final DOMDataBroker domService) {
+ return new BindingDOMDataBrokerAdapter(codec, domService);
}
- /**
- * Create a {@link MountPointService} backed by a {@link DOMMountPointService}.
- *
- * @param domService Backing DOMMountPointService
- * @return A MountPointService
- * @throws NullPointerException if {@code domService} is null
- */
@Override
public MountPointService createMountPointService(final DOMMountPointService domService) {
- return new BindingDOMMountPointServiceAdapter(domService, codec);
+ return new BindingDOMMountPointServiceAdapter(codec, domService);
}
- /**
- * Create a {@link DataBroker} backed by a {@link DOMDataBroker}.
- *
- * @param domService Backing DOMDataBroker
- * @return A DataBroker
- * @throws NullPointerException if {@code domService} is null
- */
@Override
public NotificationService createNotificationService(final DOMNotificationService domService) {
- return new BindingDOMNotificationServiceAdapter(domService, codec);
+ return new BindingDOMNotificationServiceAdapter(codec, domService);
}
- /**
- * Create a {@link NotificationPublishService} backed by a {@link DOMNotificationPublishService}.
- *
- * @param domService Backing DOMNotificationPublishService
- * @return A NotificationPublishService
- * @throws NullPointerException if {@code domService} is null
- */
@Override
- public NotificationPublishService createNotificationPublishService(final DOMNotificationPublishService domService) {
- return new BindingDOMNotificationPublishServiceAdapter(domService, codec);
+ public NotificationPublishService createNotificationPublishService(
+ final DOMNotificationPublishService domService) {
+ return new BindingDOMNotificationPublishServiceAdapter(codec, domService);
}
- /**
- * Create a {@link RpcConsumerRegistry} backed by a {@link DOMRpcService}.
- *
- * @param domService Backing DOMRpcService
- * @return A RpcConsumerRegistry
- * @throws NullPointerException if {@code domService} is null
- */
@Override
public RpcConsumerRegistry createRpcConsumerRegistry(final DOMRpcService domService) {
- return new BindingDOMRpcServiceAdapter(domService, codec);
+ return new BindingDOMRpcServiceAdapter(codec, domService);
}
- /**
- * Create a {@link RpcProviderService} backed by a {@link DOMRpcProviderService}.
- *
- * @param domService Backing DOMRpcProviderService
- * @return A RpcProviderService
- * @throws NullPointerException if {@code domService} is null
- */
@Override
public RpcProviderService createRpcProviderService(final DOMRpcProviderService domService) {
- return new BindingDOMRpcProviderServiceAdapter(domService, codec);
+ return new BindingDOMRpcProviderServiceAdapter(codec, domService);
}
@Override