Migrate StatisticsManagerImpl
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / statistics / StatisticsManagerImpl.java
index c3645b7f3d1b82671c76d45839b12695feeed4d1..392f08facb5e3d2aba96731af4be1da26b05e781 100644 (file)
@@ -7,13 +7,14 @@
  */
 package org.opendaylight.openflowplugin.impl.statistics;
 
-import com.google.common.base.Preconditions;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableClassToInstanceMap;
 import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.Executor;
 import java.util.concurrent.Semaphore;
-import javax.annotation.Nonnull;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
@@ -23,55 +24,61 @@ import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProviderFactory;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeOutput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkMode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsManagerControlService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.StatisticsWorkMode;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
-import org.opendaylight.yangtools.yang.common.RpcError;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.Rpc;
+import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class StatisticsManagerImpl implements StatisticsManager, StatisticsManagerControlService {
-
+public final class StatisticsManagerImpl implements StatisticsManager {
     private static final Logger LOG = LoggerFactory.getLogger(StatisticsManagerImpl.class);
 
+    @VisibleForTesting
+    final ConcurrentMap<DeviceInfo, StatisticsContext> contexts = new ConcurrentHashMap<>();
+
     private final OpenflowProviderConfig config;
     private final ConvertorExecutor converterExecutor;
-    private final ConcurrentMap<DeviceInfo, StatisticsContext> contexts = new ConcurrentHashMap<>();
+    private final Executor executor;
     private final Semaphore workModeGuard = new Semaphore(1, true);
-    private final ObjectRegistration<StatisticsManagerControlService> controlServiceRegistration;
-    private final ListeningExecutorService executorService;
+    private final Registration controlServiceRegistration;
     private final StatisticsWorkMode workMode = StatisticsWorkMode.COLLECTALL;
     private boolean isStatisticsFullyDisabled;
 
-    public StatisticsManagerImpl(@Nonnull final OpenflowProviderConfig config,
-                                 @Nonnull final RpcProviderService rpcProviderRegistry,
+    public StatisticsManagerImpl(@NonNull final OpenflowProviderConfig config,
+                                 @NonNull final RpcProviderService rpcProviderRegistry,
                                  final ConvertorExecutor convertorExecutor,
-                                 @Nonnull final ListeningExecutorService executorService) {
+                                 @NonNull final Executor executor) {
         this.config = config;
-        this.converterExecutor = convertorExecutor;
-        this.controlServiceRegistration = Preconditions.checkNotNull(rpcProviderRegistry
-                .registerRpcImplementation(StatisticsManagerControlService.class, this));
-        this.executorService = executorService;
+        this.executor = executor;
+        converterExecutor = convertorExecutor;
+        controlServiceRegistration = rpcProviderRegistry.registerRpcImplementations(
+            ImmutableClassToInstanceMap.<Rpc<?, ?>>builder()
+            .put(GetStatisticsWorkMode.class, this::getStatisticsWorkMode)
+            .put(ChangeStatisticsWorkMode.class, this::changeStatisticsWorkMode)
+            .build());
     }
 
-    @Override
-    public ListenableFuture<RpcResult<GetStatisticsWorkModeOutput>> getStatisticsWorkMode(
-            GetStatisticsWorkModeInput input) {
+    @VisibleForTesting
+    ListenableFuture<RpcResult<GetStatisticsWorkModeOutput>> getStatisticsWorkMode(
+            final GetStatisticsWorkModeInput input) {
         return RpcResultBuilder.success(new GetStatisticsWorkModeOutputBuilder()
                 .setMode(workMode)
                 .build()).buildFuture();
     }
 
-    @Override
-    public ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> changeStatisticsWorkMode(
-            ChangeStatisticsWorkModeInput input) {
+    @VisibleForTesting
+    ListenableFuture<RpcResult<ChangeStatisticsWorkModeOutput>> changeStatisticsWorkMode(
+            final ChangeStatisticsWorkModeInput input) {
         if (workModeGuard.tryAcquire()) {
             final StatisticsWorkMode targetWorkMode = input.getMode();
             isStatisticsFullyDisabled = StatisticsWorkMode.FULLYDISABLED.equals(targetWorkMode);
@@ -94,13 +101,12 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag
         }
 
         return RpcResultBuilder.<ChangeStatisticsWorkModeOutput>failed()
-                .withError(RpcError.ErrorType.APPLICATION,
-                        "Statistics work mode change is already in progress")
+                .withError(ErrorType.APPLICATION, "Statistics work mode change is already in progress")
                 .buildFuture();
     }
 
     @Override
-    public StatisticsContext createContext(@Nonnull final DeviceContext deviceContext,
+    public StatisticsContext createContext(@NonNull final DeviceContext deviceContext,
                                            final boolean useReconciliationFramework) {
         final MultipartWriterProvider statisticsWriterProvider = MultipartWriterProviderFactory
                 .createDefaultProvider(deviceContext);
@@ -109,9 +115,9 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag
                 deviceContext,
                 converterExecutor,
                 statisticsWriterProvider,
-                executorService,
+                executor,
                 config,
-                !isStatisticsFullyDisabled && config.isIsStatisticsPollingOn(),
+                !isStatisticsFullyDisabled && config.getIsStatisticsPollingOn(),
                 useReconciliationFramework);
 
         contexts.put(deviceContext.getDeviceInfo(), statisticsContext);