Added support for binding-independent RPCs
[controller.git] / opendaylight / sal / yang-prototype / sal / sal-broker-impl / src / main / java / org / opendaylight / controller / sal / core / impl / DataBrokerModule.java
@@ -5,7 +5,7 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
  */\r
-package org.opendaylight.controller.sal.core.impl.data;\r
+package org.opendaylight.controller.sal.core.impl;\r
 \r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
@@ -13,9 +13,11 @@ import java.util.HashSet;
 import java.util.List;\r
 import java.util.Map;\r
 import java.util.Set;\r
+import java.util.concurrent.ExecutorService;\r
 import java.util.concurrent.Future;\r
 \r
 import org.opendaylight.controller.sal.common.DataStoreIdentifier;\r
+import org.opendaylight.controller.sal.common.util.Rpcs;\r
 import org.opendaylight.controller.sal.core.api.BrokerService;\r
 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession;\r
 import org.opendaylight.controller.sal.core.api.Broker.ProviderSession;\r
@@ -27,7 +29,6 @@ import org.opendaylight.controller.sal.core.api.data.DataProviderService;
 import org.opendaylight.controller.sal.core.api.data.DataValidator;\r
 import org.opendaylight.controller.sal.core.api.data.DataCommitHandler.CommitTransaction;\r
 import org.opendaylight.controller.sal.core.api.data.DataProviderService.DataRefresher;\r
-import org.opendaylight.controller.sal.core.impl.RpcUtils;\r
 import org.opendaylight.controller.sal.core.spi.BrokerModule;\r
 import org.opendaylight.controller.yang.common.RpcError;\r
 import org.opendaylight.controller.yang.common.RpcResult;\r
@@ -36,33 +37,40 @@ import org.opendaylight.controller.yang.data.api.CompositeNodeModification;
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 \r
+import com.google.common.collect.ImmutableSet;\r
 \r
 public class DataBrokerModule implements BrokerModule {\r
 \r
     private static final Logger log = LoggerFactory\r
             .getLogger(DataBrokerModule.class);\r
 \r
+    private static final Set<Class<? extends ProviderFunctionality>> SUPPORTED_PROVIDER_FUNCTIONALITY = ImmutableSet\r
+            .of((Class<? extends ProviderFunctionality>) DataValidator.class,\r
+                    DataRefresher.class, DataCommitHandler.class);\r
+\r
+    private static final Set<Class<? extends BrokerService>> PROVIDED_SESSION_SERVICES = ImmutableSet\r
+            .of((Class<? extends BrokerService>) DataBrokerService.class,\r
+                    DataProviderService.class);\r
+\r
     private Map<DataStoreIdentifier, StoreContext> storeContext;\r
 \r
+    private ExecutorService executor;\r
+    \r
     private SequentialCommitHandlerCoordinator coordinator = new SequentialCommitHandlerCoordinator();\r
 \r
     @Override\r
     public Set<Class<? extends BrokerService>> getProvidedServices() {\r
-        // FIXME: Refactor\r
-        Set<Class<? extends BrokerService>> ret = new HashSet<Class<? extends BrokerService>>();\r
-        ret.add(DataBrokerService.class);\r
-        ret.add(DataProviderService.class);\r
-        return ret;\r
+        return PROVIDED_SESSION_SERVICES;\r
     }\r
 \r
     @Override\r
     public Set<Class<? extends ProviderFunctionality>> getSupportedProviderFunctionality() {\r
-        // FIXME Refactor\r
-        Set<Class<? extends ProviderFunctionality>> ret = new HashSet<Class<? extends ProviderFunctionality>>();\r
-        ret.add(DataValidator.class);\r
-        ret.add(DataCommitHandler.class);\r
-        ret.add(DataRefresher.class);\r
-        return ret;\r
+        return SUPPORTED_PROVIDER_FUNCTIONALITY;\r
+    }\r
+\r
+    @Override\r
+    public Set<Class<? extends ConsumerFunctionality>> getSupportedConsumerFunctionality() {\r
+        return Collections.emptySet();\r
     }\r
 \r
     @Override\r
@@ -85,25 +93,24 @@ public class DataBrokerModule implements BrokerModule {
     }\r
 \r
     private DataProviderService newDataProviderService(ConsumerSession session) {\r
-        // TODO Implement this method\r
-        throw new UnsupportedOperationException("Not implemented");\r
+        return new DataProviderSession();\r
     }\r
 \r
     private DataBrokerService newDataConsumerService(ConsumerSession session) {\r
-        // TODO Implement this method\r
-        throw new UnsupportedOperationException("Not implemented");\r
+        return new DataConsumerSession();\r
     }\r
 \r
-    @Override\r
-    public Set<Class<? extends ConsumerFunctionality>> getSupportedConsumerFunctionality() {\r
-        // TODO Implement this method\r
-        throw new UnsupportedOperationException("Not implemented");\r
+    private StoreContext context(DataStoreIdentifier store) {\r
+        return storeContext.get(store);\r
     }\r
 \r
     private static class StoreContext {\r
-        private Set<DataCommitHandler> commitHandlers = new HashSet<DataCommitHandler>();\r
-        private Set<DataValidator> validators = new HashSet<DataValidator>();\r
-        private Set<DataRefresher> refreshers = new HashSet<DataRefresher>();\r
+        private Set<DataCommitHandler> commitHandlers = Collections\r
+                .synchronizedSet(new HashSet<DataCommitHandler>());\r
+        private Set<DataValidator> validators = Collections\r
+                .synchronizedSet(new HashSet<DataValidator>());\r
+        private Set<DataRefresher> refreshers = Collections\r
+                .synchronizedSet(new HashSet<DataRefresher>());\r
     }\r
 \r
     private class DataConsumerSession implements DataBrokerService {\r
@@ -153,10 +160,12 @@ public class DataBrokerModule implements BrokerModule {
             throw new UnsupportedOperationException("Not implemented");\r
         }\r
 \r
-    }\r
+        @Override\r
+        public Set<DataStoreIdentifier> getDataStores() {\r
+            // TODO Auto-generated method stub\r
+            return null;\r
+        }\r
 \r
-    private StoreContext context(DataStoreIdentifier store) {\r
-        return storeContext.get(store);\r
     }\r
 \r
     private class DataProviderSession extends DataConsumerSession implements\r
@@ -265,7 +274,7 @@ public class DataBrokerModule implements BrokerModule {
             }\r
             CommitTransaction transaction = new SequentialCommitTransaction(\r
                     store, transactions);\r
-            return RpcUtils.getRpcResult(successful, transaction, errors);\r
+            return Rpcs.getRpcResult(successful, transaction, errors);\r
         }\r
 \r
         @Override\r
@@ -306,7 +315,7 @@ public class DataBrokerModule implements BrokerModule {
                     break;\r
             }\r
 \r
-            return RpcUtils.getRpcResult(successful, null, errors);\r
+            return Rpcs.getRpcResult(successful, null, errors);\r
         }\r
 \r
         @Override\r
@@ -330,7 +339,7 @@ public class DataBrokerModule implements BrokerModule {
                     break;\r
             }\r
 \r
-            return RpcUtils.getRpcResult(successful, null, errors);\r
+            return Rpcs.getRpcResult(successful, null, errors);\r
         }\r
 \r
         @Override\r
@@ -374,7 +383,7 @@ public class DataBrokerModule implements BrokerModule {
                     break;\r
             }\r
 \r
-            return RpcUtils.getRpcResult(successful, null, errors);\r
+            return Rpcs.getRpcResult(successful, null, errors);\r
         }\r
 \r
         @Override\r
@@ -408,4 +417,3 @@ public class DataBrokerModule implements BrokerModule {
         }\r
     }\r
 }\r
-