Logs are added to identify the flows and groups being added in
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / AbstractMultipartOnTheFlyService.java
index e20a48dd6ea89d99d372db6be3afc50b2bf115c7..1b7e8f75acd27c033f239c9ec81ab0f96d73509b 100644 (file)
@@ -13,20 +13,40 @@ import java.util.List;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.multilayer.MultiLayerFlowMultipartRequestOnTheFlyCallback;
+import org.opendaylight.openflowplugin.impl.services.singlelayer.SingleLayerFlowMultipartRequestOnTheFlyCallback;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 
-public abstract class AbstractMultipartOnTheFlyService<I> extends AbstractService<I, List<MultipartReply>> {
-    protected AbstractMultipartOnTheFlyService(final RequestContextStack requestContextStack, final DeviceContext deviceContext) {
+public abstract class AbstractMultipartOnTheFlyService<I, T extends OfHeader> extends AbstractMultipartService<I, T> {
+
+    private final ConvertorExecutor convertorExecutor;
+    private final MultipartWriterProvider statisticsWriterProvider;
+
+    protected AbstractMultipartOnTheFlyService(final RequestContextStack requestContextStack,
+                                               final DeviceContext deviceContext,
+                                               final ConvertorExecutor convertorExecutor,
+                                               final MultipartWriterProvider statisticsWriterProvider) {
         super(requestContextStack, deviceContext);
+        this.convertorExecutor = convertorExecutor;
+        this.statisticsWriterProvider = statisticsWriterProvider;
     }
 
     @Override
-    protected final FutureCallback<OfHeader> createCallback(final RequestContext<List<MultipartReply>> context, final Class<?> requestType) {
-        return new MultipartRequestOnTheFlyCallback(context, requestType,
-                getMessageSpy(), getEventIdentifier(), getDeviceInfo(),
-                getDeviceContext().getDeviceFlowRegistry(), getTxFacade());
+    protected final FutureCallback<OfHeader> createCallback(final RequestContext<List<T>> context,
+                                                            final Class<?> requestType) {
+        return canUseSingleLayerSerialization()
+            ? new SingleLayerFlowMultipartRequestOnTheFlyCallback<>(context,
+                                                                    requestType,
+                                                                    getDeviceContext(),
+                                                                    getEventIdentifier(),
+                                                                    statisticsWriterProvider)
+            : new MultiLayerFlowMultipartRequestOnTheFlyCallback<>(context,
+                                                                   requestType,
+                                                                   getDeviceContext(),
+                                                                   getEventIdentifier(),
+                                                                   statisticsWriterProvider,
+                                                                   convertorExecutor);
     }
-
-
 }