Merge "Fix modules Restconf call for mounted devices"
[controller.git] / opendaylight / md-sal / sal-restconf-broker / src / main / java / org / opendaylight / controller / sal / restconf / broker / SalRemoteServiceBroker.java
index 988bfd8ca51da148d0979b9eb06941368ba2ace3..0553b2f0dc2b86bfe16b1fff7871bdc1283294dc 100644 (file)
@@ -8,25 +8,72 @@
 package org.opendaylight.controller.sal.restconf.broker;
 
 
-import org.opendaylight.controller.sal.core.api.Broker;
-import org.opendaylight.controller.sal.core.api.Consumer;
-import org.opendaylight.controller.sal.core.api.Provider;
+import com.google.common.collect.ImmutableClassToInstanceMap;
+import org.opendaylight.controller.md.sal.binding.util.BindingContextUtils;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
+import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.sal.binding.api.BindingAwareService;
+import org.opendaylight.controller.sal.binding.api.NotificationService;
+import org.opendaylight.controller.sal.binding.api.RpcConsumerRegistry;
+import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
+import org.opendaylight.controller.sal.restconf.broker.impl.RemoteServicesFactory;
+import org.opendaylight.yangtools.restconf.client.api.RestconfClientContext;
 import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkState;
 
-public class SalRemoteServiceBroker implements Broker,AutoCloseable {
+public class SalRemoteServiceBroker implements BindingAwareBroker,AutoCloseable {
 
+
+    private static final Logger logger = LoggerFactory.getLogger(SalRemoteServiceBroker.class.toString());
+    private ImmutableClassToInstanceMap<BindingAwareService> supportedConsumerServices;
+
+    private final String identifier;
+
+    private RpcConsumerRegistry rpcBroker;
+    private NotificationService notificationBroker;
+    private DataBrokerService dataBroker;
+    private final RemoteServicesFactory servicesFactory;
+
+    public SalRemoteServiceBroker(String instanceName,RestconfClientContext clientContext){
+        this.identifier = instanceName;
+        this.servicesFactory = new RemoteServicesFactory(clientContext);
+    }
+
+    public void start() {
+        logger.info("Starting Binding Aware Broker: {}", identifier);
+
+        supportedConsumerServices = ImmutableClassToInstanceMap.<BindingAwareService> builder()
+                .put(NotificationService.class, servicesFactory.getNotificationService()) //
+                .put(DataBrokerService.class,servicesFactory.getDataBrokerService() ) //
+                .put(RpcConsumerRegistry.class,servicesFactory.getRpcConsumerRegistry() ).build();
+    }
+
+    public ProviderContext registerProvider(BindingAwareProvider provider) {
+        throw new UnsupportedOperationException();
+    }
     @Override
     public void close() throws Exception {
-
+        //TODO decide if serviceFactory should close clientContext or it has to be closed by consumer
+    }
+    @Override
+    public ConsumerContext registerConsumer(BindingAwareConsumer consumer) {
+        checkState(supportedConsumerServices != null, "Broker is not initialized.");
+        return BindingContextUtils.createConsumerContextAndInitialize(consumer, supportedConsumerServices);
     }
 
     @Override
-    public ConsumerSession registerConsumer(Consumer cons, BundleContext context) {
-        return null;
+    public ConsumerContext registerConsumer(BindingAwareConsumer consumer,
+            BundleContext ctx) {
+        return registerConsumer(consumer);
     }
 
     @Override
-    public ProviderSession registerProvider(Provider prov, BundleContext context) {
-        return null;
+    public ProviderContext registerProvider(BindingAwareProvider provider,
+            BundleContext ctx) {
+        return registerProvider(provider);
     }
+
 }