Update multipart request services for single layer 21/53221/9
authorTomas Slusny <tomas.slusny@pantheon.tech>
Mon, 13 Mar 2017 13:27:55 +0000 (14:27 +0100)
committerTomas Slusny <tomas.slusny@pantheon.tech>
Mon, 10 Apr 2017 06:16:48 +0000 (06:16 +0000)
Update all single layer services that was sending OpenFlowJava
multipart requests to send OpenFlowPlugin multipart requests
instead to avoid translations.
Remove failing tests from NodeConnectorRefToPortTranslatorTest. These
tests are not needed anymore, since now JUnit auto-handles @NonNull
annotations.

See also: bug 6915

Change-Id: I427a6148e67d61080a85de5c304f478df0e26682
Signed-off-by: Tomas Slusny <tomas.slusny@pantheon.tech>
36 files changed:
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactory.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractAggregateFlowMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractExperimenterMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/AbstractMultipartCollectorService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/multilayer/MultiLayerAggregateFlowMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/multilayer/MultiLayerExperimenterMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/singlelayer/SingleLayerAggregateFlowMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/singlelayer/SingleLayerExperimenterMultipartService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/OpendaylightFlowStatisticsServiceImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/dedicated/StatisticsGatheringOnTheFlyService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/dedicated/StatisticsGatheringService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractFlowDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractGroupDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractMeterDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractPortDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/AbstractQueueDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/FlowDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/GroupDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/MeterDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/MultiLayerDirectStatisticsProviderInitializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/PortDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/QueueDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/FlowDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/GroupDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/MeterDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/PortDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/QueueDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/SingleLayerDirectStatisticsProviderInitializer.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/common/MultipartRequestInputFactoryTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/services/multilayer/SalExperimenterMpMessageServiceImplTest.java [moved from openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/services/SalExperimenterMpMessageServiceImplTest.java with 96% similarity]
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/FlowDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/GroupDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/MeterDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/NodeConnectorDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/QueueDirectStatisticsServiceTest.java

index 263567c54839171e7f9181f40da0f011cace9020..43ad95b790ecbc3597f42eb4c1132133fbb03f89 100644 (file)
@@ -8,12 +8,20 @@
 
 package org.opendaylight.openflowplugin.impl.common;
 
-import com.google.common.base.Preconditions;
-import java.math.BigInteger;
-import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.impl.util.MatchUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.multipart.request.multipart.request.body.MultipartRequestDescBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.multipart.request.multipart.request.body.MultipartRequestFlowTableStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.multipart.request.multipart.request.body.MultipartRequestPortDescBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowAggregateStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestGroupDescBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestGroupStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestMeterStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
@@ -23,6 +31,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.matc
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.v10.grouping.MatchV10Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;
@@ -46,6 +55,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.MultipartRequestTableFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.multipart.request.multipart.request.body.MultipartRequestQueueStatsBuilder;
 
 /**
  * openflowplugin-impl
@@ -67,46 +78,66 @@ public final class MultipartRequestInputFactory {
     }
 
     /**
-     * Method validate input and makes {@link MultipartRequestInput} from input values. Method set
-     * a moreRequest marker to false and it creates default empty {@link MultipartRequestBody}
+     * Method validate input and makes {@link org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader}
+     * from input values. Method set a moreRequest marker to false and it creates default empty multipart request body
      * by {@link MultipartType}
      *
-     * @param xid
-     * @param type
-     * @param ofVersion
-     * @return
+     * @param xid xid
+     * @param version OpenFlow version
+     * @param type multipart type
+     * @param canUseSingleLayer can use single layer serialization
+     * @return multipart request
      */
-    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
-                                                                  @Nonnull final MultipartType type) {
-        return maker(xid, type, ofVersion, false, makeDefaultEmptyRequestBody(type, ofVersion));
+    public static OfHeader makeMultipartRequest(final long xid,
+                                                final short version,
+                                                @Nonnull final MultipartType type,
+                                                final boolean canUseSingleLayer) {
+        return canUseSingleLayer ?
+            new MultipartRequestBuilder()
+                .setRequestMore(false)
+                .setVersion(version)
+                .setXid(xid)
+                .setMultipartRequestBody(makeDefaultSingleLayerBody(type))
+                .build() :
+            new MultipartRequestInputBuilder()
+                .setFlags(new MultipartRequestFlags(false))
+                .setMultipartRequestBody(makeDefaultMultiLayerBody(type, version))
+                .setVersion(version)
+                .setType(type)
+                .setXid(xid)
+                .build();
     }
 
-
-
-    /**
-     * Method build {@link MultipartRequestInput} from input values. It is private because we would like
-     * to validate only what is really need to be validate.
-     *
-     * @param xid
-     * @param type
-     * @param ofVersion
-     * @param moreRequests
-     * @param body
-     * @return
-     */
-    private static MultipartRequestInput maker(final long xid, final MultipartType type,
-                                               final short ofVersion, final boolean moreRequests, final MultipartRequestBody body) {
-        final MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
-        builder.setFlags(new MultipartRequestFlags(moreRequests));
-        builder.setMultipartRequestBody(body);
-        builder.setVersion(ofVersion);
-        builder.setType(type);
-        builder.setXid(xid);
-        return builder.build();
+    private static org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.multipart.request
+        .MultipartRequestBody makeDefaultSingleLayerBody(final MultipartType type) {
+        switch (type) {
+            case OFPMPDESC: return new MultipartRequestDescBuilder().build();
+            case OFPMPFLOW: return new MultipartRequestFlowStatsBuilder()
+                .setMatch(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
+                    .MatchBuilder().build())
+                .build();
+            case OFPMPAGGREGATE: return new MultipartRequestFlowAggregateStatsBuilder().build();
+            case OFPMPTABLE: return new MultipartRequestFlowTableStatsBuilder().build();
+            case OFPMPPORTSTATS: return new org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.request.multipart.request.body
+                .MultipartRequestPortStatsBuilder().build();
+            case OFPMPQUEUE: return new MultipartRequestQueueStatsBuilder().build();
+            case OFPMPGROUP: return new MultipartRequestGroupStatsBuilder().build();
+            case OFPMPGROUPDESC: return new MultipartRequestGroupDescBuilder().build();
+            case OFPMPGROUPFEATURES: return new MultipartRequestGroupFeaturesBuilder().build();
+            case OFPMPMETER: return new MultipartRequestMeterStatsBuilder().build();
+            case OFPMPMETERCONFIG: return new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.request.multipart.request.body
+                .MultipartRequestMeterConfigBuilder().build();
+            case OFPMPMETERFEATURES: return new MultipartRequestMeterFeaturesBuilder().build();
+            case OFPMPTABLEFEATURES: return new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.multipart.request.multipart.request.body
+                .MultipartRequestTableFeaturesBuilder().build();
+            case OFPMPPORTDESC: return new MultipartRequestPortDescBuilder().build();
+            case OFPMPEXPERIMENTER: return new MultipartRequestExperimenterBuilder().build();
+            default:throw new IllegalArgumentException("Unknown MultipartType " + type);
+        }
     }
 
-    private static MultipartRequestBody makeDefaultEmptyRequestBody(@CheckForNull final MultipartType type, @CheckForNull final short version) {
-        Preconditions.checkArgument(type != null, "Multipart Request can not by build without type!");
+    private static MultipartRequestBody makeDefaultMultiLayerBody(@Nonnull final MultipartType type,
+                                                                  final short version) {
         switch (type) {
             case OFPMPDESC:
                 return new MultipartRequestDescCaseBuilder().build();
@@ -116,8 +147,9 @@ public final class MultipartRequestInputFactory {
                 multipartRequestFlowBuilder.setTableId(OFConstants.OFPTT_ALL);
                 multipartRequestFlowBuilder.setOutPort(OFConstants.OFPP_ANY);
                 multipartRequestFlowBuilder.setOutGroup(OFConstants.OFPG_ANY);
-                multipartRequestFlowBuilder.setCookie(BigInteger.ZERO);
-                multipartRequestFlowBuilder.setCookieMask(BigInteger.ZERO);
+                multipartRequestFlowBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+                multipartRequestFlowBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
                 switch (version) {
                     case OFConstants.OFP_VERSION_1_0:
                         MatchV10Builder matchV10Builder = MatchUtil.createEmptyV10Match();
@@ -129,6 +161,7 @@ public final class MultipartRequestInputFactory {
                     default:
                         throw new IllegalArgumentException("Unknown version " + version);
                 }
+
                 multipartRequestFlowCaseBuilder.setMultipartRequestFlow(multipartRequestFlowBuilder.build());
                 return multipartRequestFlowCaseBuilder.build();
             case OFPMPAGGREGATE:
index 0616b52f6d10f63b3784dc08144285cbb433999e..0938cb5b30d15b38b19b413af95d4ca9a8bc8c35 100644 (file)
@@ -7,81 +7,19 @@
  */
 package org.opendaylight.openflowplugin.impl.services;
 
-import com.google.common.base.MoreObjects;
 import java.util.concurrent.Future;
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
-import org.opendaylight.openflowplugin.api.openflow.device.Xid;
-import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
-import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
-import org.opendaylight.openflowplugin.openflow.md.util.FlowCreatorUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public abstract class AbstractAggregateFlowMultipartService<T extends OfHeader>
     extends AbstractMultipartService<GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput, T> {
 
-    private final ConvertorExecutor convertorExecutor;
-
-    public AbstractAggregateFlowMultipartService(final RequestContextStack requestContextStack, final DeviceContext deviceContext, final ConvertorExecutor convertorExecutor) {
+    public AbstractAggregateFlowMultipartService(final RequestContextStack requestContextStack, final DeviceContext deviceContext) {
         super(requestContextStack, deviceContext);
-        this.convertorExecutor = convertorExecutor;
-    }
-
-    @Override
-    protected OfHeader buildRequest(final Xid xid, final GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) throws ServiceException {
-        final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder();
-        final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder();
-        final short tableId = MoreObjects.firstNonNull(input.getTableId(), OFConstants.OFPTT_ALL);
-        mprAggregateRequestBuilder.setTableId(tableId);
-        long outputPortValue = MoreObjects.firstNonNull(input.getOutPort(), OFConstants.OFPP_ANY).longValue();
-        mprAggregateRequestBuilder.setOutPort(outputPortValue);
-
-        final short version = getVersion();
-        if (version == OFConstants.OFP_VERSION_1_3) {
-
-            if (input.getCookie() == null) {
-                mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
-            } else {
-                mprAggregateRequestBuilder.setCookie(MoreObjects.firstNonNull(input.getCookie().getValue(), OFConstants.DEFAULT_COOKIE));
-            }
-
-            if (input.getCookieMask() == null) {
-                mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
-            } else {
-                mprAggregateRequestBuilder.setCookieMask(MoreObjects.firstNonNull(input.getCookieMask().getValue(), OFConstants.DEFAULT_COOKIE_MASK));
-            }
-            long outGroup = MoreObjects.firstNonNull(input.getOutGroup(), OFConstants.OFPG_ANY);
-            mprAggregateRequestBuilder.setOutGroup(outGroup);
-        } else {
-            mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
-            mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
-            mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
-        }
-
-        MatchReactor.getInstance().convert(input.getMatch(), version, mprAggregateRequestBuilder, convertorExecutor);
-
-        FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder);
-
-        // Set request body to main multipart request
-        multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder
-                .build());
-
-        final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
-                MultipartType.OFPMPAGGREGATE, xid.getValue(), version);
-
-        mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build());
-
-        return mprInput.build();
     }
 
     /**
index a2fc1429b0376e72d35e14874eca7f28b98db087..4870304a4d6eb6e1af365a5725626c4f79db6cf6 100644 (file)
@@ -8,26 +8,13 @@
 
 package org.opendaylight.openflowplugin.impl.services;
 
-import java.util.Objects;
 import java.util.concurrent.Future;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
-import org.opendaylight.openflowplugin.api.openflow.device.Xid;
-import org.opendaylight.openflowplugin.extension.api.ConvertorMessageToOFJava;
-import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
-import org.opendaylight.openflowplugin.extension.api.exception.ConversionException;
-import org.opendaylight.openflowplugin.extension.api.exception.ConverterNotFoundException;
-import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
-import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.experimenter.core.message.ExperimenterMessageOfChoice;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public abstract class AbstractExperimenterMultipartService<T extends OfHeader> extends AbstractMultipartService<SendExperimenterMpRequestInput, T> {
@@ -40,37 +27,6 @@ public abstract class AbstractExperimenterMultipartService<T extends OfHeader> e
         this.extensionConverterProvider = extensionConverterProvider;
     }
 
-    @Override
-    @SuppressWarnings("unchecked")
-    protected OfHeader buildRequest(Xid xid, SendExperimenterMpRequestInput input) throws ServiceException {
-        final TypeVersionKey key = new TypeVersionKey<>(
-                input.getExperimenterMessageOfChoice().getImplementedInterface(),
-                getVersion());
-
-        final ConvertorMessageToOFJava<ExperimenterMessageOfChoice, ExperimenterDataOfChoice> messageConverter =
-                getExtensionConverterProvider().getMessageConverter(key);
-
-        if (Objects.isNull(messageConverter)) {
-            throw new ServiceException(new ConverterNotFoundException(key.toString()));
-        }
-
-        try {
-            return RequestInputUtils
-                .createMultipartHeader(MultipartType.OFPMPEXPERIMENTER, xid.getValue(), getVersion())
-                .setMultipartRequestBody(new MultipartRequestExperimenterCaseBuilder()
-                        .setMultipartRequestExperimenter(new MultipartRequestExperimenterBuilder()
-                                .setExperimenter(messageConverter.getExperimenterId())
-                                .setExpType(messageConverter.getType())
-                                .setExperimenterDataOfChoice(messageConverter
-                                        .convert(input.getExperimenterMessageOfChoice()))
-                                .build())
-                        .build())
-                .build();
-        } catch (final ConversionException e) {
-            throw new ServiceException(e);
-        }
-    }
-
     /**
      * Get extension converter provider
      * @return extension converter provider
index c643bf8aaf8d37fa2e14efb3de038346194e22d1..62546b47f3234a6e733b861a7c891d5e67d6a1da 100644 (file)
@@ -53,6 +53,6 @@ public abstract class AbstractMultipartCollectorService<T extends OfHeader> exte
 
     @Override
     protected OfHeader buildRequest(final Xid xid, final MultipartType input) {
-        return MultipartRequestInputFactory.makeMultipartRequestInput(xid.getValue(), getVersion(), input);
+        return MultipartRequestInputFactory.makeMultipartRequest(xid.getValue(), getVersion(), input, canUseSingleLayerSerialization());
     }
 }
index ee10af713895f08df796c102fa96d37be4334d31..15b1bc14df7edc2dcc2582e32a12133a4cded528 100644 (file)
 package org.opendaylight.openflowplugin.impl.services.multilayer;
 
 import com.google.common.base.Function;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.Futures;
 import java.util.List;
 import java.util.concurrent.Future;
 import java.util.stream.Collectors;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.MessageTranslator;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.device.TranslatorLibrary;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.md.core.TranslatorKey;
 import org.opendaylight.openflowplugin.impl.services.AbstractAggregateFlowMultipartService;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
+import org.opendaylight.openflowplugin.openflow.md.util.FlowCreatorUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.get.aggregate.flow.statistics.from.flow.table._for.given.match.output.AggregatedFlowStatistics;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 
 public class MultiLayerAggregateFlowMultipartService extends AbstractAggregateFlowMultipartService<MultipartReply> {
 
     private final TranslatorLibrary translatorLibrary;
+    private final ConvertorExecutor convertorExecutor;
 
     public MultiLayerAggregateFlowMultipartService(final RequestContextStack requestContextStack,
                                                    final DeviceContext deviceContext,
                                                    final ConvertorExecutor convertorExecutor,
                                                    final TranslatorLibrary translatorLibrary) {
-        super(requestContextStack, deviceContext, convertorExecutor);
+        super(requestContextStack, deviceContext);
+        this.convertorExecutor = convertorExecutor;
         this.translatorLibrary = translatorLibrary;
     }
 
+
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) throws ServiceException {
+        final MultipartRequestAggregateCaseBuilder multipartRequestAggregateCaseBuilder = new MultipartRequestAggregateCaseBuilder();
+        final MultipartRequestAggregateBuilder mprAggregateRequestBuilder = new MultipartRequestAggregateBuilder();
+        final short tableId = MoreObjects.firstNonNull(input.getTableId(), OFConstants.OFPTT_ALL);
+        mprAggregateRequestBuilder.setTableId(tableId);
+        long outputPortValue = MoreObjects.firstNonNull(input.getOutPort(), OFConstants.OFPP_ANY).longValue();
+        mprAggregateRequestBuilder.setOutPort(outputPortValue);
+
+        final short version = getVersion();
+        if (version == OFConstants.OFP_VERSION_1_3) {
+
+            if (input.getCookie() == null) {
+                mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+            } else {
+                mprAggregateRequestBuilder.setCookie(MoreObjects.firstNonNull(input.getCookie().getValue(), OFConstants.DEFAULT_COOKIE));
+            }
+
+            if (input.getCookieMask() == null) {
+                mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+            } else {
+                mprAggregateRequestBuilder.setCookieMask(MoreObjects.firstNonNull(input.getCookieMask().getValue(), OFConstants.DEFAULT_COOKIE_MASK));
+            }
+            long outGroup = MoreObjects.firstNonNull(input.getOutGroup(), OFConstants.OFPG_ANY);
+            mprAggregateRequestBuilder.setOutGroup(outGroup);
+        } else {
+            mprAggregateRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+            mprAggregateRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+            mprAggregateRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+        }
+
+        MatchReactor.getInstance().convert(input.getMatch(), version, mprAggregateRequestBuilder, convertorExecutor);
+
+        FlowCreatorUtil.setWildcardedFlowMatch(version, mprAggregateRequestBuilder);
+
+        // Set request body to main multipart request
+        multipartRequestAggregateCaseBuilder.setMultipartRequestAggregate(mprAggregateRequestBuilder
+            .build());
+
+        final MultipartRequestInputBuilder mprInput = RequestInputUtils.createMultipartHeader(
+            MultipartType.OFPMPAGGREGATE, xid.getValue(), version);
+
+        mprInput.setMultipartRequestBody(multipartRequestAggregateCaseBuilder.build());
+
+        return mprInput.build();
+    }
+
     @Override
     public Future<RpcResult<GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput>> handleAndReply(final GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) {
         return Futures.transform(handleServiceCall(input),
index 5f717af622f642d01e9bc3c732315c28a5ee0779..c87842700a6fef6c804d45764980405e90d16a64 100644 (file)
@@ -8,30 +8,42 @@
 
 package org.opendaylight.openflowplugin.impl.services.multilayer;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.Future;
 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.ConvertorMessageFromOFJava;
+import org.opendaylight.openflowplugin.extension.api.ConvertorMessageToOFJava;
+import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.extension.api.exception.ConversionException;
+import org.opendaylight.openflowplugin.extension.api.exception.ConverterNotFoundException;
 import org.opendaylight.openflowplugin.extension.api.path.MessagePath;
 import org.opendaylight.openflowplugin.impl.services.AbstractExperimenterMultipartService;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.send.experimenter.mp.request.output.ExperimenterCoreMessageItem;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.send.experimenter.mp.request.output.ExperimenterCoreMessageItemBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.experimenter.core.ExperimenterDataOfChoice;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.experimenter._case.MultipartReplyExperimenter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.experimenter.core.message.ExperimenterMessageOfChoice;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -47,6 +59,37 @@ public class MultiLayerExperimenterMultipartService extends AbstractExperimenter
         super(requestContextStack, deviceContext, extensionConverterProvider);
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    protected OfHeader buildRequest(Xid xid, SendExperimenterMpRequestInput input) throws ServiceException {
+        final TypeVersionKey key = new TypeVersionKey<>(
+            input.getExperimenterMessageOfChoice().getImplementedInterface(),
+            getVersion());
+
+        final ConvertorMessageToOFJava<ExperimenterMessageOfChoice, ExperimenterDataOfChoice> messageConverter =
+            getExtensionConverterProvider().getMessageConverter(key);
+
+        if (Objects.isNull(messageConverter)) {
+            throw new ServiceException(new ConverterNotFoundException(key.toString()));
+        }
+
+        try {
+            return RequestInputUtils
+                .createMultipartHeader(MultipartType.OFPMPEXPERIMENTER, xid.getValue(), getVersion())
+                .setMultipartRequestBody(new MultipartRequestExperimenterCaseBuilder()
+                    .setMultipartRequestExperimenter(new MultipartRequestExperimenterBuilder()
+                        .setExperimenter(messageConverter.getExperimenterId())
+                        .setExpType(messageConverter.getType())
+                        .setExperimenterDataOfChoice(messageConverter
+                            .convert(input.getExperimenterMessageOfChoice()))
+                        .build())
+                    .build())
+                .build();
+        } catch (final ConversionException e) {
+            throw new ServiceException(e);
+        }
+    }
+
     @Override
     @SuppressWarnings("unchecked")
     public Future<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(SendExperimenterMpRequestInput input) {
@@ -115,4 +158,8 @@ public class MultiLayerExperimenterMultipartService extends AbstractExperimenter
         return finalFuture;
     }
 
+    @VisibleForTesting
+    OfHeader buildRequestTest(Xid xid, SendExperimenterMpRequestInput input) throws ServiceException {
+        return buildRequest(xid, input);
+    }
 }
index 7a732fbf35cf29d78a6e315f1aeafd047ae7ae73..a385796ab4181869ff46116ae6a6cbd094b4b6a3 100644 (file)
@@ -16,14 +16,18 @@ import java.util.concurrent.Future;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.services.AbstractAggregateFlowMultipartService;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetAggregateFlowStatisticsFromFlowTableForGivenMatchOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.get.aggregate.flow.statistics.from.flow.table._for.given.match.output.AggregatedFlowStatisticsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowAggregateStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowAggregateStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 
@@ -31,9 +35,19 @@ public class SingleLayerAggregateFlowMultipartService
     extends AbstractAggregateFlowMultipartService<MultipartReply> {
 
     public SingleLayerAggregateFlowMultipartService(final RequestContextStack requestContextStack,
-                                                    final DeviceContext deviceContext,
-                                                    final ConvertorExecutor convertorExecutor) {
-        super(requestContextStack, deviceContext, convertorExecutor);
+                                                    final DeviceContext deviceContext) {
+        super(requestContextStack, deviceContext);
+    }
+
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetAggregateFlowStatisticsFromFlowTableForGivenMatchInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestFlowAggregateStatsBuilder(input)
+                .build())
+            .build();
     }
 
     @Override
index 4aec8d08f5e30a7c113fc616dd2e87de0a52224c..01cf3dcae21229ef0c2d34f262e658754f59e83f 100644 (file)
@@ -16,14 +16,19 @@ import java.util.concurrent.Future;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
 import org.opendaylight.openflowplugin.impl.services.AbstractExperimenterMultipartService;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.send.experimenter.mp.request.output.ExperimenterCoreMessageItemBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.multipart.reply.multipart.reply.body.MultipartReplyExperimenter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.experimenter.types.rev151020.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
 import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -38,6 +43,16 @@ public class SingleLayerExperimenterMultipartService extends AbstractExperimente
         super(requestContextStack, deviceContext, extensionConverterProvider);
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final SendExperimenterMpRequestInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestExperimenterBuilder(input).build())
+            .build();
+    }
+
     @Override
     public Future<RpcResult<SendExperimenterMpRequestOutput>> handleAndReply(SendExperimenterMpRequestInput input) {
         final SettableFuture<RpcResult<SendExperimenterMpRequestOutput>> future = SettableFuture.create();
index 79d621d9ede9d4fbb1e9df5f2ddf7161196b156b..68391db245e34f6fc9f828191d33b16d665bd71a 100644 (file)
@@ -46,8 +46,7 @@ public class OpendaylightFlowStatisticsServiceImpl implements OpendaylightFlowSt
                                                  final DeviceContext deviceContext,
                                                  final TranslatorLibrary translatorLibrary,
                                                  final ConvertorExecutor convertorExecutor) {
-        singleLayerService = new SingleLayerAggregateFlowMultipartService(requestContextStack, deviceContext,
-            convertorExecutor);
+        singleLayerService = new SingleLayerAggregateFlowMultipartService(requestContextStack, deviceContext);
         multiLayerService = new MultiLayerAggregateFlowMultipartService(requestContextStack, deviceContext,
             convertorExecutor, translatorLibrary);
     }
index 4d944231e8a38e3ed716c52482263057707a46b6..8e2837aa7212c617e5f0ed7864ba38461489f4c6 100644 (file)
@@ -53,7 +53,7 @@ public class StatisticsGatheringOnTheFlyService<T extends OfHeader>
 
     @Override
     protected OfHeader buildRequest(final Xid xid, final MultipartType input) throws ServiceException {
-        return MultipartRequestInputFactory.makeMultipartRequestInput(xid.getValue(), getVersion(), input);
+        return MultipartRequestInputFactory.makeMultipartRequest(xid.getValue(), getVersion(), input, canUseSingleLayerSerialization());
     }
 
 }
index 3f8e355f1ef1beecb6155c6d0bbd35e5f07017d4..bb4a3da7d5dfcf9624cab0a6724103144b232af5 100644 (file)
@@ -45,7 +45,7 @@ public class StatisticsGatheringService<T extends OfHeader>
 
     @Override
     protected OfHeader buildRequest(final Xid xid, final MultipartType input) throws ServiceException {
-        return MultipartRequestInputFactory.makeMultipartRequestInput(xid.getValue(), getVersion(), input);
+        return MultipartRequestInputFactory.makeMultipartRequest(xid.getValue(), getVersion(), input, canUseSingleLayerSerialization());
     }
 
 }
index f8127519db572a3e0d61e7112f3573e98c469403..d69dfb7b40e77a90b3f153473a2059d269c9c1e3 100644 (file)
@@ -15,17 +15,13 @@ import java.util.List;
 import java.util.concurrent.Future;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
-import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
-import org.opendaylight.openflowplugin.impl.services.AbstractMultipartService;
-import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
-import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.AbstractMultipartService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.StoreStatsGrouping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
 import org.opendaylight.yangtools.yang.binding.DataContainer;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
@@ -100,11 +96,12 @@ abstract class AbstractDirectStatisticsService<I extends StoreStatsGrouping, O e
         return input;
     }
 
-    @Override
-    protected OfHeader buildRequest(Xid xid, I input) throws ServiceException {
-        return RequestInputUtils.createMultipartHeader(multipartType, xid.getValue(), getVersion())
-                .setMultipartRequestBody(buildRequestBody(input))
-                .build();
+    /**
+     * Get multipart type
+     * @return multipart type
+     */
+    protected MultipartType getMultipartType() {
+        return multipartType;
     }
 
     /**
@@ -124,14 +121,6 @@ abstract class AbstractDirectStatisticsService<I extends StoreStatsGrouping, O e
         return ofVersion;
     }
 
-    /**
-     * Build multipart request body.
-     *
-     * @param input the input
-     * @return the multipart request body
-     */
-    public abstract MultipartRequestBody buildRequestBody(I input);
-
     /**
      * Build output from multipart reply input.
      *
index a1656f289f2ce043af41accbf14ebe92b3682d9b..6f2dc67ad05b66f138e26dac49aba2f4addb7eb2 100644 (file)
@@ -8,14 +8,12 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.FlowRegistryKey;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.impl.registry.flow.FlowRegistryKeyFactory;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
@@ -26,9 +24,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.f
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.statistics.FlowStatisticsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
 
 /**
  * The Flow direct statistics service.
@@ -43,47 +38,6 @@ public abstract class AbstractFlowDirectStatisticsService<T extends OfHeader>
         super(MultipartType.OFPMPFLOW, requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider);
     }
 
-    @Override
-    public MultipartRequestBody buildRequestBody(GetFlowStatisticsInput input) {
-        final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder();
-
-        if (input.getTableId() != null) {
-            mprFlowRequestBuilder.setTableId(input.getTableId());
-        } else {
-            mprFlowRequestBuilder.setTableId(OFConstants.OFPTT_ALL);
-        }
-
-        if (input.getOutPort() != null) {
-            mprFlowRequestBuilder.setOutPort(input.getOutPort().longValue());
-        } else {
-            mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY);
-        }
-
-        if (input.getOutGroup() != null) {
-            mprFlowRequestBuilder.setOutGroup(input.getOutGroup());
-        } else {
-            mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
-        }
-
-        if (input.getCookie() != null) {
-            mprFlowRequestBuilder.setCookie(input.getCookie().getValue());
-        } else {
-            mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
-        }
-
-        if (input.getCookieMask() != null) {
-            mprFlowRequestBuilder.setCookieMask(input.getCookieMask().getValue());
-        } else {
-            mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
-        }
-
-        MatchReactor.getInstance().convert(input.getMatch(), getVersion(), mprFlowRequestBuilder, getConvertorExecutor());
-
-        return new MultipartRequestFlowCaseBuilder()
-                .setMultipartRequestFlow(mprFlowRequestBuilder.build())
-                .build();
-    }
-
     /**
      * Get flow ID from #{@link org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry} or
      * create alien ID
index 32b2819d6dc77a919faf86db498d81fdba223cc8..da900d543963f3bbe97557028678a7ee4d414e35 100644 (file)
@@ -8,19 +8,14 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
 
 /**
  * The Group direct statistics service.
@@ -35,19 +30,4 @@ public abstract class AbstractGroupDirectStatisticsService<T extends OfHeader>
         super(MultipartType.OFPMPGROUP, requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider);
     }
 
-    @Override
-    public MultipartRequestBody buildRequestBody(GetGroupStatisticsInput input) {
-        final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
-
-        if (input.getGroupId() != null) {
-            mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue()));
-        } else {
-            mprGroupBuild.setGroupId(new GroupId(OFConstants.OFPG_ALL));
-        }
-
-        return new MultipartRequestGroupCaseBuilder()
-                .setMultipartRequestGroup(mprGroupBuild.build())
-                .build();
-    }
-
 }
index d0477521cbd07ec35b2eee2389507fed3bcc7efe..cd7fdfe3f72a16c322f1061df40740ea2928c8f2 100644 (file)
@@ -8,19 +8,14 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
 
 /**
  * The Meter direct statistics service.
@@ -35,19 +30,4 @@ public abstract class AbstractMeterDirectStatisticsService<T extends OfHeader> e
         super(MultipartType.OFPMPMETER, requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider);
     }
 
-    @Override
-    public MultipartRequestBody buildRequestBody(GetMeterStatisticsInput input) {
-        final MultipartRequestMeterBuilder mprMeterBuild = new MultipartRequestMeterBuilder();
-
-        if (input.getMeterId() != null) {
-            mprMeterBuild.setMeterId(new MeterId(input.getMeterId().getValue()));
-        } else {
-            mprMeterBuild.setMeterId(new MeterId(OFConstants.OFPM_ALL));
-        }
-
-        return new MultipartRequestMeterCaseBuilder()
-                .setMultipartRequestMeter(mprMeterBuild.build())
-                .build();
-    }
-
 }
index 9b556895c8d0189662806f65d025d7de5447d40f..e4e8142d483c31561ce99860ed23f0d4b21a9073 100644 (file)
@@ -8,19 +8,14 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
-import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
 
 /**
  * The Node connector direct statistics service.
@@ -35,19 +30,4 @@ public abstract class AbstractPortDirectStatisticsService<T extends OfHeader>
         super(MultipartType.OFPMPPORTSTATS, requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider);
     }
 
-    @Override
-    public MultipartRequestBody buildRequestBody(GetNodeConnectorStatisticsInput input) {
-        final MultipartRequestPortStatsBuilder mprPortStatsBuilder = new MultipartRequestPortStatsBuilder();
-
-        if (input.getNodeConnectorId() != null) {
-            mprPortStatsBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(getOfVersion(), input.getNodeConnectorId()));
-        } else {
-            mprPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY);
-        }
-
-        return new MultipartRequestPortStatsCaseBuilder()
-                .setMultipartRequestPortStats(mprPortStatsBuilder.build())
-                .build();
-    }
-
 }
index 79cd9a41c6b42c8e4f4f1568ea1c2522a46adc0b..a3813dc347c1088cdacf9b963cfe233a3232d07b 100644 (file)
@@ -8,19 +8,14 @@
 
 package org.opendaylight.openflowplugin.impl.statistics.services.direct;
 
-import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
-import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
 
 /**
  * The Queue direct statistics service.
@@ -35,25 +30,4 @@ public abstract class AbstractQueueDirectStatisticsService<T extends OfHeader>
         super(MultipartType.OFPMPQUEUE, requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider);
     }
 
-    @Override
-    public MultipartRequestBody buildRequestBody(GetQueueStatisticsInput input) {
-        final MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
-
-        if (input.getQueueId() != null) {
-            mprQueueBuilder.setQueueId(input.getQueueId().getValue());
-        } else {
-            mprQueueBuilder.setQueueId(OFConstants.OFPQ_ALL);
-        }
-
-        if (input.getNodeConnectorId() != null) {
-            mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(getOfVersion(), input.getNodeConnectorId()));
-        } else {
-            mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY);
-        }
-
-        return new MultipartRequestQueueCaseBuilder()
-                .setMultipartRequestQueue(mprQueueBuilder.build())
-                .build();
-    }
-
 }
index 54e8cc52683327a6ee03bb5c02c0473d06cce481..3639ba9b11f6b3690167f50106b7209adefdc2b4 100644 (file)
@@ -11,13 +11,18 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilay
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractFlowDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.FlowStatsResponseConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
@@ -25,8 +30,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.f
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
 
 public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsService<MultipartReply> {
 
@@ -70,4 +78,47 @@ public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsSer
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetFlowStatisticsInput input) {
+        final MultipartRequestFlowBuilder mprFlowRequestBuilder = new MultipartRequestFlowBuilder();
+
+        if (input.getTableId() != null) {
+            mprFlowRequestBuilder.setTableId(input.getTableId());
+        } else {
+            mprFlowRequestBuilder.setTableId(OFConstants.OFPTT_ALL);
+        }
+
+        if (input.getOutPort() != null) {
+            mprFlowRequestBuilder.setOutPort(input.getOutPort().longValue());
+        } else {
+            mprFlowRequestBuilder.setOutPort(OFConstants.OFPP_ANY);
+        }
+
+        if (input.getOutGroup() != null) {
+            mprFlowRequestBuilder.setOutGroup(input.getOutGroup());
+        } else {
+            mprFlowRequestBuilder.setOutGroup(OFConstants.OFPG_ANY);
+        }
+
+        if (input.getCookie() != null) {
+            mprFlowRequestBuilder.setCookie(input.getCookie().getValue());
+        } else {
+            mprFlowRequestBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+        }
+
+        if (input.getCookieMask() != null) {
+            mprFlowRequestBuilder.setCookieMask(input.getCookieMask().getValue());
+        } else {
+            mprFlowRequestBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+        }
+
+        MatchReactor.getInstance().convert(input.getMatch(), getVersion(), mprFlowRequestBuilder, getConvertorExecutor());
+
+        return RequestInputUtils.createMultipartHeader(getMultipartType(), xid.getValue(), getVersion())
+            .setMultipartRequestBody(new MultipartRequestFlowCaseBuilder()
+                .setMultipartRequestFlow(mprFlowRequestBuilder.build())
+                .build())
+            .build();
+    }
+
 }
index e1aeef6b227ed58e146f3d9f78ef480073a622a3..35ecb8c7d0a60c7d13bc5922ad70daf071cce940 100644 (file)
@@ -11,18 +11,26 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilay
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractGroupDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
 
 public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsService<MultipartReply> {
 
@@ -45,15 +53,32 @@ public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsS
                 final MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
                 final MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
                 final Optional<List<GroupStats>> groupStatsList = getConvertorExecutor().convert(
-                        replyBody.getGroupStats(), data);
+                    replyBody.getGroupStats(), data);
 
                 groupStatsList.ifPresent(groupStats::addAll);
             }
         }
 
         return new GetGroupStatisticsOutputBuilder()
-                .setGroupStats(groupStats)
-                .build();
+            .setGroupStats(groupStats)
+            .build();
+    }
+
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetGroupStatisticsInput input) {
+        final MultipartRequestGroupBuilder mprGroupBuild = new MultipartRequestGroupBuilder();
+
+        if (input.getGroupId() != null) {
+            mprGroupBuild.setGroupId(new GroupId(input.getGroupId().getValue()));
+        } else {
+            mprGroupBuild.setGroupId(new GroupId(OFConstants.OFPG_ALL));
+        }
+
+        return RequestInputUtils.createMultipartHeader(getMultipartType(), xid.getValue(), getVersion())
+            .setMultipartRequestBody(new MultipartRequestGroupCaseBuilder()
+                .setMultipartRequestGroup(mprGroupBuild.build())
+                .build())
+            .build();
     }
 
 }
index 6b8c70c23769ef093310000724e7ccaf5b057678..140a2e6336ac9fb04f7ff5ed61229b7e4ce86e4c 100644 (file)
@@ -11,18 +11,26 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilay
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractMeterDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
 
 public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsService<MultipartReply> {
 
@@ -54,4 +62,21 @@ public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsS
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetMeterStatisticsInput input) {
+        final MultipartRequestMeterBuilder mprMeterBuild = new MultipartRequestMeterBuilder();
+
+        if (input.getMeterId() != null) {
+            mprMeterBuild.setMeterId(new MeterId(input.getMeterId().getValue()));
+        } else {
+            mprMeterBuild.setMeterId(new MeterId(OFConstants.OFPM_ALL));
+        }
+
+        return RequestInputUtils.createMultipartHeader(getMultipartType(), xid.getValue(), getVersion())
+            .setMultipartRequestBody(new MultipartRequestMeterCaseBuilder()
+                .setMultipartRequestMeter(mprMeterBuild.build())
+                .build())
+            .build();
+    }
+
 }
index c82643f098169b7ea155a99d750699e96d44f051..a523a35ffa59ebb2c69fda7fe8c09a5aa255eb5d 100644 (file)
@@ -35,7 +35,7 @@ public class MultiLayerDirectStatisticsProviderInitializer {
 
         provider.register(AbstractFlowDirectStatisticsService.class, new FlowDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
-        provider.register(AbstractGroupDirectStatisticsService.class, new FlowDirectStatisticsService(
+        provider.register(AbstractGroupDirectStatisticsService.class, new GroupDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
         provider.register(AbstractMeterDirectStatisticsService.class, new MeterDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
index 2d447e9918834d9a5e95a049f40ff3124f18946a..8aedb0db293a3c2bf76c0b20e717ad1cdc751997 100644 (file)
@@ -10,13 +10,17 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilay
 
 import java.util.ArrayList;
 import java.util.List;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractPortDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
@@ -24,9 +28,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMapKey;
@@ -96,4 +103,21 @@ public class PortDirectStatisticsService extends AbstractPortDirectStatisticsSer
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetNodeConnectorStatisticsInput input) {
+        final MultipartRequestPortStatsBuilder mprPortStatsBuilder = new MultipartRequestPortStatsBuilder();
+
+        if (input.getNodeConnectorId() != null) {
+            mprPortStatsBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(getOfVersion(), input.getNodeConnectorId()));
+        } else {
+            mprPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY);
+        }
+
+        return RequestInputUtils.createMultipartHeader(getMultipartType(), xid.getValue(), getVersion())
+            .setMultipartRequestBody(new MultipartRequestPortStatsCaseBuilder()
+                .setMultipartRequestPortStats(mprPortStatsBuilder.build())
+                .build())
+            .build();
+    }
+
 }
index 3fd141f1f4209e46753f61dd2e8605fe7efe7dbe..dc32e3580b73598d8c6a5f7896953fcf95acdf77 100644 (file)
@@ -10,23 +10,30 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct.multilay
 
 import java.util.ArrayList;
 import java.util.List;
+import org.opendaylight.openflowplugin.api.OFConstants;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.RequestInputUtils;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractQueueDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
 import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.queue.rev130925.QueueId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMapKey;
@@ -77,4 +84,27 @@ public class QueueDirectStatisticsService extends AbstractQueueDirectStatisticsS
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetQueueStatisticsInput input) {
+        final MultipartRequestQueueBuilder mprQueueBuilder = new MultipartRequestQueueBuilder();
+
+        if (input.getQueueId() != null) {
+            mprQueueBuilder.setQueueId(input.getQueueId().getValue());
+        } else {
+            mprQueueBuilder.setQueueId(OFConstants.OFPQ_ALL);
+        }
+
+        if (input.getNodeConnectorId() != null) {
+            mprQueueBuilder.setPortNo(InventoryDataServiceUtil.portNumberfromNodeConnectorId(getOfVersion(), input.getNodeConnectorId()));
+        } else {
+            mprQueueBuilder.setPortNo(OFConstants.OFPP_ANY);
+        }
+
+        return RequestInputUtils.createMultipartHeader(getMultipartType(), xid.getValue(), getVersion())
+            .setMultipartRequestBody(new MultipartRequestQueueCaseBuilder()
+                .setMultipartRequestQueue(mprQueueBuilder.build())
+                .build())
+            .build();
+    }
+
 }
index e2e47bed5bdcd13c537e00b5661f33ef64e40ad7..53702ffd7afb6ae4b2a42026b0693d65668b97af 100644 (file)
@@ -12,16 +12,22 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractFlowDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 
 public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsService<MultipartReply> {
 
@@ -51,4 +57,15 @@ public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsSer
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetFlowStatisticsInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestFlowStatsBuilder(input)
+                .build())
+            .build();
+    }
+
 }
index ec0a90662b03bc205d25945b7f467f29b86dfdb2..8918f8e39e885d6a3a72e917b1e583a7d5205766 100644 (file)
@@ -12,13 +12,19 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractGroupDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.multipart.reply.multipart.reply.body.MultipartReplyGroupStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestGroupStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 
 public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsService<MultipartReply> {
 
@@ -42,4 +48,16 @@ public class GroupDirectStatisticsService extends AbstractGroupDirectStatisticsS
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetGroupStatisticsInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestGroupStatsBuilder()
+                .setGroupId(input.getGroupId())
+                .build())
+            .build();
+    }
+
 }
index ba84ceaf10387ab3849190da5ab70426ac6756ba..c57964983de6bcc927f1f8cb6e979b41060f946d 100644 (file)
@@ -12,13 +12,19 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractMeterDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.reply.multipart.reply.body.MultipartReplyMeterStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.multipart.request.multipart.request.body.MultipartRequestMeterStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 
 public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsService<MultipartReply> {
 
@@ -42,4 +48,16 @@ public class MeterDirectStatisticsService extends AbstractMeterDirectStatisticsS
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetMeterStatisticsInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestMeterStatsBuilder()
+                .setMeterId(input.getMeterId())
+                .build())
+            .build();
+    }
+
 }
index a53a2ffbe898128e3427ed951c7f00de0e048479..4daab72690bd779746a6824141a8f1a15f607a78 100644 (file)
@@ -12,13 +12,19 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractPortDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.reply.multipart.reply.body.MultipartReplyPortStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
 
 public class PortDirectStatisticsService extends AbstractPortDirectStatisticsService<MultipartReply> {
 
@@ -42,4 +48,16 @@ public class PortDirectStatisticsService extends AbstractPortDirectStatisticsSer
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetNodeConnectorStatisticsInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestPortStatsBuilder()
+                .setNodeConnectorId(input.getNodeConnectorId())
+                .build())
+            .build();
+    }
+
 }
index ed6438f39ba544b8da43940090d885278306b40c..71fdb884fbda06d46afeb9b5ac2e35d8b3ae4b0d 100644 (file)
@@ -12,13 +12,19 @@ import java.util.List;
 import java.util.stream.Collectors;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.datastore.MultipartWriterProvider;
+import org.opendaylight.openflowplugin.impl.services.util.ServiceException;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractQueueDirectStatisticsService;
 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequestBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.multipart.reply.multipart.reply.body.MultipartReplyQueueStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.multipart.request.multipart.request.body.MultipartRequestQueueStatsBuilder;
 
 public class QueueDirectStatisticsService extends AbstractQueueDirectStatisticsService<MultipartReply> {
 
@@ -42,4 +48,17 @@ public class QueueDirectStatisticsService extends AbstractQueueDirectStatisticsS
             .build();
     }
 
+    @Override
+    protected OfHeader buildRequest(final Xid xid, final GetQueueStatisticsInput input) throws ServiceException {
+        return new MultipartRequestBuilder()
+            .setXid(xid.getValue())
+            .setVersion(getVersion())
+            .setRequestMore(false)
+            .setMultipartRequestBody(new MultipartRequestQueueStatsBuilder()
+                .setNodeConnectorId(input.getNodeConnectorId())
+                .setQueueId(input.getQueueId())
+                .build())
+            .build();
+    }
+
 }
index 97499406792f279a2445b956e8802f8e85c822ac..d6222dd819ff66efd452781ff102c2b567286bc3 100644 (file)
@@ -35,7 +35,7 @@ public class SingleLayerDirectStatisticsProviderInitializer {
 
         provider.register(AbstractFlowDirectStatisticsService.class, new FlowDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
-        provider.register(AbstractGroupDirectStatisticsService.class, new FlowDirectStatisticsService(
+        provider.register(AbstractGroupDirectStatisticsService.class, new GroupDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
         provider.register(AbstractMeterDirectStatisticsService.class, new MeterDirectStatisticsService(
             requestContextStack, deviceContext, convertorExecutor, statisticsWriterProvider));
index 8eb0f9ff7d19fcbf23a6ec20330339a48a60f1fd..7071faa45bcc9a923f4e211e2c08b9b329c90a7f 100644 (file)
@@ -56,7 +56,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_DESC() throws Exception {
         MultipartType mpType = MultipartType.OFPMPDESC;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestDescCase.class);
     }
@@ -65,7 +65,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_FLOW_13() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPFLOW;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestFlowCase);
@@ -90,7 +90,7 @@ public class MultipartRequestInputFactoryTest {
         final MultipartType mpType = MultipartType.OFPMPFLOW;
         ofVersion = OFConstants.OFP_VERSION_1_0;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestFlowCase);
@@ -109,7 +109,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_AGGREGATE() throws Exception {
         MultipartType mpType = MultipartType.OFPMPAGGREGATE;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestAggregateCase.class);
     }
@@ -118,7 +118,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_TABLE() throws Exception {
         MultipartType mpType = MultipartType.OFPMPTABLE;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestTableCase.class);
     }
@@ -127,7 +127,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_PORTSTATS() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPPORTSTATS;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestPortStatsCase);
@@ -140,7 +140,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_QUEUE() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPQUEUE;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestQueueCase);
@@ -154,7 +154,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_GROUP() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPGROUP;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestGroupCase);
@@ -167,7 +167,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_GROUPDESC() throws Exception {
         MultipartType mpType = MultipartType.OFPMPGROUPDESC;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestGroupDescCase.class);
     }
@@ -176,7 +176,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_GROUPFEATURES() throws Exception {
         MultipartType mpType = MultipartType.OFPMPGROUPFEATURES;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestGroupFeaturesCase.class);
     }
@@ -185,7 +185,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_METER() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPMETER;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestMeterCase);
@@ -198,7 +198,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_METERCONFIG() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPMETERCONFIG;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestMeterConfigCase);
@@ -211,7 +211,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_METERFEATURES() throws Exception {
         MultipartType mpType = MultipartType.OFPMPMETERFEATURES;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestMeterFeaturesCase.class);
     }
@@ -220,7 +220,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_TABLEFEATURES() throws Exception {
         final MultipartType mpType = MultipartType.OFPMPTABLEFEATURES;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         final MultipartRequestBody mpRqBody = mpRqInput.getMultipartRequestBody();
         Assert.assertTrue(mpRqBody instanceof MultipartRequestTableFeaturesCase);
@@ -233,7 +233,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_PORTDESC() throws Exception {
         MultipartType mpType = MultipartType.OFPMPPORTDESC;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestPortDescCase.class);
     }
@@ -242,7 +242,7 @@ public class MultipartRequestInputFactoryTest {
     public void testMakeMultipartRequestInput_EXPERIMENTER() throws Exception {
         MultipartType mpType = MultipartType.OFPMPEXPERIMENTER;
         final MultipartRequestInput mpRqInput =
-                MultipartRequestInputFactory.makeMultipartRequestInput(xid, ofVersion, mpType);
+            (MultipartRequestInput) MultipartRequestInputFactory.makeMultipartRequest(xid, ofVersion, mpType, false);
         checkHeader(mpRqInput, mpType, ofVersion);
         checkEmptyBody(mpRqInput.getMultipartRequestBody(), MultipartRequestExperimenterCase.class);
     }
@@ -259,4 +259,4 @@ public class MultipartRequestInputFactoryTest {
         final String expectedDump = expectedMpRqBodyClass.getSimpleName() + " [augmentation=[]]";
         Assert.assertEquals(expectedDump, String.valueOf(mpRqBody));
     }
-}
\ No newline at end of file
+}
@@ -6,7 +6,7 @@
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
 
-package org.opendaylight.openflowplugin.impl.services;
+package org.opendaylight.openflowplugin.impl.services.multilayer;
 
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.verify;
@@ -19,7 +19,7 @@ import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.extension.api.ConvertorMessageToOFJava;
 import org.opendaylight.openflowplugin.extension.api.TypeVersionKey;
 import org.opendaylight.openflowplugin.extension.api.core.extension.ExtensionConverterProvider;
-import org.opendaylight.openflowplugin.impl.services.multilayer.MultiLayerExperimenterMultipartService;
+import org.opendaylight.openflowplugin.impl.services.ServiceMocking;
 import org.opendaylight.openflowplugin.impl.services.sal.SalExperimenterMpMessageServiceImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.experimenter.mp.message.service.rev151020.SendExperimenterMpRequestInputBuilder;
@@ -78,7 +78,7 @@ public class SalExperimenterMpMessageServiceImplTest extends ServiceMocking {
                 .build();
 
         final OfHeader ofHeader = new MultiLayerExperimenterMultipartService(mockedDeviceContext, mockedDeviceContext, mockedExtensionConverterProvider)
-            .buildRequest(new Xid(DUMMY_ID), data);
+            .buildRequestTest(new Xid(DUMMY_ID), data);
         verify(mockedExtensionConverter).convert(data.getExperimenterMessageOfChoice());
         assertEquals(DUMMY_ID, (long) ofHeader.getXid());
         assertEquals(mockedDeviceInfo.getVersion(), (short) ofHeader.getVersion());
index 1388c329dd0ca4f519f7f739f01096d1ae41d106..75465fabf4248e779675d680e5e19e5568192ab4 100644 (file)
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry;
 import org.opendaylight.openflowplugin.impl.registry.flow.FlowDescriptorFactory;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
@@ -33,6 +34,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.M
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;
@@ -59,7 +61,10 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         when(input.getNode()).thenReturn(createNodeRef(NODE_ID));
         when(input.getTableId()).thenReturn(TABLE_NO);
 
-        final MultipartRequestFlowCase body = (MultipartRequestFlowCase) service.buildRequestBody(input);
+        final MultipartRequestFlowCase body = (MultipartRequestFlowCase) ((MultipartRequestInput) service
+            .buildRequest(new Xid(42L), input))
+            .getMultipartRequestBody();
+
         final MultipartRequestFlow flow = body.getMultipartRequestFlow();
 
         assertEquals(TABLE_NO, flow.getTableId());
index e666a16e5056cfd5327a976c2b221befd07ef039..1298013cc215bd0eed8442081355f2f3cd848931 100644 (file)
@@ -21,12 +21,14 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats;
@@ -50,7 +52,10 @@ public class GroupDirectStatisticsServiceTest extends AbstractDirectStatisticsSe
         when(input.getNode()).thenReturn(createNodeRef(NODE_ID));
         when(input.getGroupId()).thenReturn(new GroupId(GROUP_NO));
 
-        final MultipartRequestGroupCase body = (MultipartRequestGroupCase) service.buildRequestBody(input);
+        final MultipartRequestGroupCase body = (MultipartRequestGroupCase) ((MultipartRequestInput) service
+            .buildRequest(new Xid(42L), input))
+            .getMultipartRequestBody();
+
         final MultipartRequestGroup group = body.getMultipartRequestGroup();
 
         assertEquals(GROUP_NO, group.getGroupId().getValue());
index 43689cfe21893d4c7383135b330549c0875df46d..f9889ebafe8f2b575f73b1b589a92594835357d0 100644 (file)
@@ -21,12 +21,14 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats;
@@ -50,7 +52,10 @@ public class MeterDirectStatisticsServiceTest extends AbstractDirectStatisticsSe
         when(input.getNode()).thenReturn(createNodeRef(NODE_ID));
         when(input.getMeterId()).thenReturn(new MeterId(METER_NO));
 
-        final MultipartRequestMeterCase body = (MultipartRequestMeterCase) service.buildRequestBody(input);
+        final MultipartRequestMeterCase body = (MultipartRequestMeterCase) ((MultipartRequestInput) service
+            .buildRequest(new Xid(42L), input))
+            .getMultipartRequestBody();
+
         final MultipartRequestMeter meter = body.getMultipartRequestMeter();
 
         assertEquals(METER_NO, meter.getMeterId().getValue());
index 3ab23d9c7fcea4b94e3b9293cfb234fa68df58d9..1851e5a1ed91cc7ba940549d48663470553f27c5 100644 (file)
@@ -20,11 +20,13 @@ import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetNodeConnectorStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStats;
@@ -47,7 +49,10 @@ public class NodeConnectorDirectStatisticsServiceTest extends AbstractDirectStat
         when(input.getNode()).thenReturn(createNodeRef(NODE_ID));
         when(input.getNodeConnectorId()).thenReturn(nodeConnectorId);
 
-        final MultipartRequestPortStatsCase body = (MultipartRequestPortStatsCase) service.buildRequestBody(input);
+        final MultipartRequestPortStatsCase body = (MultipartRequestPortStatsCase) ((MultipartRequestInput)service
+            .buildRequest(new Xid(42L), input))
+            .getMultipartRequestBody();
+
         final MultipartRequestPortStats nodeConnector = body.getMultipartRequestPortStats();
 
         assertEquals(PORT_NO, nodeConnector.getPortNo());
index acca1a4b5252512f3e1234fa3c296f9a59381477..726ae742084c253daf053d87f533307af07818bb 100644 (file)
@@ -20,6 +20,7 @@ import java.math.BigInteger;
 import java.util.Arrays;
 import java.util.List;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetQueueStatisticsOutput;
@@ -27,6 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.queue.rev130925.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;
@@ -51,7 +53,10 @@ public class QueueDirectStatisticsServiceTest extends AbstractDirectStatisticsSe
         when(input.getQueueId()).thenReturn(new QueueId(QUEUE_NO));
         when(input.getNodeConnectorId()).thenReturn(new NodeConnectorId(NODE_ID + ":" + PORT_NO));
 
-        final MultipartRequestQueueCase body = (MultipartRequestQueueCase) service.buildRequestBody(input);
+        final MultipartRequestQueueCase body = (MultipartRequestQueueCase) ((MultipartRequestInput) service
+            .buildRequest(new Xid(42L), input))
+            .getMultipartRequestBody();
+
         final MultipartRequestQueue queue = body.getMultipartRequestQueue();
 
         assertEquals(PORT_NO, queue.getPortNo());