Merge "Fixed for bug 1197"
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / main / java / org / opendaylight / controller / config / yang / md / sal / binding / impl / DataBrokerImplModule.java
index 8cbfbb6da2b48cf8f9198d31533a290889ffedff..4a4e8000781381f906888369a8db0ac6b683e525 100644 (file)
@@ -1,29 +1,21 @@
-/**
- * Generated file
-
- * Generated from: yang module name: opendaylight-sal-binding-broker-impl  yang module local name: binding-data-broker
- * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
- * Generated at: Wed Nov 20 17:33:01 CET 2013
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
  *
- * Do not modify this file unless it is present under src/main directory
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 package org.opendaylight.controller.config.yang.md.sal.binding.impl;
 
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-
-import org.opendaylight.controller.md.sal.common.impl.routing.AbstractDataReadRouter;
-import org.opendaylight.controller.sal.binding.impl.DataBrokerImpl;
-import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentDataServiceConnector;
-import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
-import org.opendaylight.controller.sal.core.api.Broker;
-import org.opendaylight.controller.sal.core.api.data.DataProviderService;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.osgi.framework.BundleContext;
 
-import com.google.common.util.concurrent.MoreExecutors;
+import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder;
+import org.opendaylight.controller.sal.binding.impl.RootDataBrokerImpl;
+import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingDomConnectorDeployer;
+import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentConnector;
+import org.opendaylight.controller.sal.binding.impl.forward.DomForwardedDataBrokerImpl;
+import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;
+import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMappingService;
 
 /**
 *
@@ -31,16 +23,14 @@ import com.google.common.util.concurrent.MoreExecutors;
 public final class DataBrokerImplModule extends
         org.opendaylight.controller.config.yang.md.sal.binding.impl.AbstractDataBrokerImplModule {
 
-    private BundleContext bundleContext;
-
-    public DataBrokerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier,
-            org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+    public DataBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
+            final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
 
-    public DataBrokerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier,
-            org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
-            DataBrokerImplModule oldModule, java.lang.AutoCloseable oldInstance) {
+    public DataBrokerImplModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier,
+            final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver,
+            final DataBrokerImplModule oldModule, final java.lang.AutoCloseable oldInstance) {
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
@@ -51,33 +41,39 @@ public final class DataBrokerImplModule extends
 
     @Override
     public java.lang.AutoCloseable createInstance() {
-        DataBrokerImpl dataBindingBroker = new DataBrokerImpl();
-        
-        // FIXME: obtain via dependency management
-        ExecutorService executor = Executors.newCachedThreadPool();
-        ExecutorService listeningExecutor = MoreExecutors.listeningDecorator(executor);
-        dataBindingBroker.setExecutor(listeningExecutor);
+        RootDataBrokerImpl dataBindingBroker;
 
-        
-        
-        Broker domBroker = getDomBrokerDependency();
-        BindingIndependentMappingService mappingService = getMappingServiceDependency();
-        
-        if (domBroker != null && mappingService != null) {
-            BindingIndependentDataServiceConnector runtimeMapping = new BindingIndependentDataServiceConnector();
-            runtimeMapping.setMappingService(mappingService);
-            runtimeMapping.setBaDataService(dataBindingBroker);
-            domBroker.registerProvider(runtimeMapping, getBundleContext());
-        }
 
+        ExecutorService listeningExecutor = SingletonHolder.getDefaultCommitExecutor();
+        BindingIndependentMappingService potentialMapping = getMappingServiceDependency();
+        if (getDomBrokerDependency() != null && potentialMapping != null) {
+
+            dataBindingBroker = createDomConnectedBroker(listeningExecutor,potentialMapping);
+        } else {
+            dataBindingBroker = createStandAloneBroker(listeningExecutor);
+        }
+        dataBindingBroker.registerRuntimeBean(getRootRuntimeBeanRegistratorWrapper());
+        dataBindingBroker.setNotificationExecutor(SingletonHolder.getDefaultChangeEventExecutor());
         return dataBindingBroker;
     }
 
-    public BundleContext getBundleContext() {
-        return bundleContext;
+
+    private RootDataBrokerImpl createStandAloneBroker(final ExecutorService listeningExecutor) {
+        RootDataBrokerImpl broker = new RootDataBrokerImpl();
+        broker.setExecutor(listeningExecutor);
+        return broker;
     }
 
-    public void setBundleContext(BundleContext bundleContext2) {
-        this.bundleContext = bundleContext2;
+    private RootDataBrokerImpl createDomConnectedBroker(final ExecutorService listeningExecutor, final BindingIndependentMappingService mappingService) {
+        DomForwardedDataBrokerImpl forwardedBroker = new DomForwardedDataBrokerImpl();
+        forwardedBroker.setExecutor(listeningExecutor);
+        BindingIndependentConnector connector = BindingDomConnectorDeployer.createConnector(mappingService);
+        getDomBrokerDependency().registerProvider(forwardedBroker, null);
+        ProviderSession domContext = forwardedBroker.getDomProviderContext();
+        forwardedBroker.setConnector(connector);
+        forwardedBroker.setDomProviderContext(domContext);
+        forwardedBroker.startForwarding();
+        return forwardedBroker;
     }
+
 }