Fix opendaylight-flow-types.yang cases
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / common / MultipartRequestInputFactory.java
index 96c9f82251a148053d2452c6b9d8bbf806d0278c..5a3d6813d2d9ee25d42d5f29087dc49a62bbe723 100644 (file)
@@ -8,67 +8,63 @@
 
 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.flow.types.rev131026.multipart.request.multipart.request.body.multipart.request.flow.stats.FlowStatsBuilder;
+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;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.grouping.MatchBuilder;
+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.MultipartRequestAggregateCase;
 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.MultipartRequestDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCase;
 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.MultipartRequestFlowCase;
 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.MultipartRequestGroupCase;
 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.MultipartRequestGroupDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupDescCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupFeaturesCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase;
 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.MultipartRequestMeterConfigCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterFeaturesCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortDescCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortDescCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase;
 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.MultipartRequestQueueCase;
 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.MultipartRequestTableCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
 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
  * org.opendaylight.openflowplugin.impl.common
- * <p/>
  * Factory class is designed for easy producing a MultipartRequestInput. Class should help
  * to understand a relationship between {@link MultipartType} and {@link MultipartRequestInput}
  * without touch OF specification 1.3.2  - a section 7.3.5. Multipart Messages
- * {@see https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-spec-v1.3.2.pdf}
- *
- * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
- *         <p/>
- *         Created: Mar 27, 2015
  */
 public final class MultipartRequestInputFactory {
 
@@ -77,104 +73,91 @@ 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
-     */
-    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
-                                                                  @Nonnull final MultipartType type) {
-        return maker(xid, type, ofVersion, false, makeDefaultEmptyRequestBody(type));
-    }
-
-    /**
-     * Method validate input values and makes {@link MultipartRequestInput} from input values. Method set
-     * a moreRequest marker to false.
-     *
-     * @param xid
-     * @param type
-     * @param ofVersion
-     * @param body
-     * @return
-     */
-    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
-                                                                  @Nonnull final MultipartType type, @Nonnull final MultipartRequestBody body) {
-        Preconditions.checkArgument(validationOfMultipartTypeAndRequestBody(type, body));
-        return maker(xid, type, ofVersion, false, body);
-    }
-
-    /**
-     * Method validates input and makes {@link MultipartRequestInput} from input values. Method creates
-     * default empty {@link MultipartRequestBody} by {@link MultipartType}
-     *
-     * @param xid
-     * @param type
-     * @param ofVersion
-     * @param moreRequests
-     * @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, final boolean moreRequests) {
-        return maker(xid, type, ofVersion, moreRequests, makeDefaultEmptyRequestBody(type));
+    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 validates input values and makes {@link MultipartRequestInput} from input values.
-     *
-     * @param xid
-     * @param type
-     * @param ofVersion
-     * @param moreRequests
-     * @param body
-     * @return
-     */
-    public static MultipartRequestInput makeMultipartRequestInput(final long xid, final short ofVersion,
-                                                                  @Nonnull final MultipartType type, final boolean moreRequests,
-                                                                  @Nonnull final MultipartRequestBody body) {
-        Preconditions.checkArgument(validationOfMultipartTypeAndRequestBody(type, body));
-        return maker(xid, type, ofVersion, moreRequests, body);
-    }
-
-    /**
-     * 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().setFlowStats(new FlowStatsBuilder()
+                .setMatch(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow
+                    .MatchBuilder().build()).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) {
-        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();
             case OFPMPFLOW:
-                MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder = new MultipartRequestFlowCaseBuilder();
+                final MultipartRequestFlowCaseBuilder multipartRequestFlowCaseBuilder
+                        = new MultipartRequestFlowCaseBuilder();
                 MultipartRequestFlowBuilder multipartRequestFlowBuilder = new MultipartRequestFlowBuilder();
                 multipartRequestFlowBuilder.setTableId(OFConstants.OFPTT_ALL);
                 multipartRequestFlowBuilder.setOutPort(OFConstants.OFPP_ANY);
                 multipartRequestFlowBuilder.setOutGroup(OFConstants.OFPG_ANY);
-                multipartRequestFlowBuilder.setCookie(BigInteger.ZERO);
-                multipartRequestFlowBuilder.setCookieMask(BigInteger.ZERO);
-                multipartRequestFlowBuilder.setMatch(new MatchBuilder().setType(OxmMatchType.class).build());
+                multipartRequestFlowBuilder.setCookie(OFConstants.DEFAULT_COOKIE);
+                multipartRequestFlowBuilder.setCookieMask(OFConstants.DEFAULT_COOKIE_MASK);
+
+                switch (version) {
+                    case OFConstants.OFP_VERSION_1_0:
+                        MatchV10Builder matchV10Builder = MatchUtil.createEmptyV10Match();
+                        multipartRequestFlowBuilder.setMatchV10(matchV10Builder.build());
+                        break;
+                    case OFConstants.OFP_VERSION_1_3:
+                        multipartRequestFlowBuilder.setMatch(new MatchBuilder().setType(OxmMatchType.class).build());
+                        break;
+                    default:
+                        throw new IllegalArgumentException("Unknown version " + version);
+                }
+
                 multipartRequestFlowCaseBuilder.setMultipartRequestFlow(multipartRequestFlowBuilder.build());
                 return multipartRequestFlowCaseBuilder.build();
             case OFPMPAGGREGATE:
@@ -182,38 +165,60 @@ public final class MultipartRequestInputFactory {
             case OFPMPTABLE:
                 return new MultipartRequestTableCaseBuilder().build();
             case OFPMPPORTSTATS:
-                MultipartRequestPortStatsCaseBuilder multipartRequestPortStatsCaseBuilder = new MultipartRequestPortStatsCaseBuilder();
-                MultipartRequestPortStatsBuilder multipartRequestPortStatsBuilder = new MultipartRequestPortStatsBuilder();
+                MultipartRequestPortStatsCaseBuilder multipartRequestPortStatsCaseBuilder
+                        = new MultipartRequestPortStatsCaseBuilder();
+                MultipartRequestPortStatsBuilder multipartRequestPortStatsBuilder
+                        = new MultipartRequestPortStatsBuilder();
                 multipartRequestPortStatsBuilder.setPortNo(OFConstants.OFPP_ANY);
-                multipartRequestPortStatsCaseBuilder.setMultipartRequestPortStats(multipartRequestPortStatsBuilder.build());
+                multipartRequestPortStatsCaseBuilder
+                        .setMultipartRequestPortStats(multipartRequestPortStatsBuilder.build());
                 return multipartRequestPortStatsCaseBuilder.build();
             case OFPMPQUEUE:
-                MultipartRequestQueueCaseBuilder multipartRequestQueueCaseBuilder = new MultipartRequestQueueCaseBuilder();
+                MultipartRequestQueueCaseBuilder multipartRequestQueueCaseBuilder
+                        = new MultipartRequestQueueCaseBuilder();
                 MultipartRequestQueueBuilder multipartRequestQueueBuilder = new MultipartRequestQueueBuilder();
                 multipartRequestQueueBuilder.setPortNo(OFConstants.OFPP_ANY);
                 multipartRequestQueueBuilder.setQueueId(OFConstants.OFPQ_ALL);
                 multipartRequestQueueCaseBuilder.setMultipartRequestQueue(multipartRequestQueueBuilder.build());
                 return multipartRequestQueueCaseBuilder.build();
             case OFPMPGROUP:
-                return new MultipartRequestGroupCaseBuilder().build();
+                MultipartRequestGroupCaseBuilder multipartRequestGroupCaseBuilder
+                        = new MultipartRequestGroupCaseBuilder();
+                MultipartRequestGroupBuilder multipartRequestGroupBuilder = new MultipartRequestGroupBuilder();
+                GroupId groupId = new GroupId(OFConstants.OFPG_ALL);
+                multipartRequestGroupBuilder.setGroupId(groupId);
+                multipartRequestGroupCaseBuilder.setMultipartRequestGroup(multipartRequestGroupBuilder.build());
+                return multipartRequestGroupCaseBuilder.build();
             case OFPMPGROUPDESC:
                 return new MultipartRequestGroupDescCaseBuilder().build();
             case OFPMPGROUPFEATURES:
                 return new MultipartRequestGroupFeaturesCaseBuilder().build();
             case OFPMPMETER:
-                MultipartRequestMeterCaseBuilder multipartRequestMeterCaseBuilder = new MultipartRequestMeterCaseBuilder();
+                MultipartRequestMeterCaseBuilder multipartRequestMeterCaseBuilder
+                        = new MultipartRequestMeterCaseBuilder();
                 MultipartRequestMeterBuilder multipartRequestMeterBuilder = new MultipartRequestMeterBuilder();
-                MeterId meterId = new MeterId(OFConstants.OFPP_ANY);
+                MeterId meterId = new MeterId(OFConstants.OFPM_ALL);
                 multipartRequestMeterBuilder.setMeterId(meterId);
                 multipartRequestMeterCaseBuilder.setMultipartRequestMeter(multipartRequestMeterBuilder.build());
                 return multipartRequestMeterCaseBuilder.build();
             case OFPMPMETERCONFIG:
-                return new MultipartRequestMeterConfigCaseBuilder().build();
+                MultipartRequestMeterConfigCaseBuilder multipartRequestMeterConfigCaseBuilder
+                        = new MultipartRequestMeterConfigCaseBuilder();
+                MultipartRequestMeterConfigBuilder multipartRequestMeterConfigBuilder
+                        = new MultipartRequestMeterConfigBuilder();
+                MeterId configMeterId = new MeterId(OFConstants.OFPM_ALL);
+                multipartRequestMeterConfigBuilder.setMeterId(configMeterId);
+                multipartRequestMeterConfigCaseBuilder
+                        .setMultipartRequestMeterConfig(multipartRequestMeterConfigBuilder.build());
+                return multipartRequestMeterConfigCaseBuilder.build();
             case OFPMPMETERFEATURES:
                 return new MultipartRequestMeterFeaturesCaseBuilder().build();
             case OFPMPTABLEFEATURES:
-                MultipartRequestTableFeaturesCaseBuilder tableFeaturesCaseBuilder = new MultipartRequestTableFeaturesCaseBuilder();
-                tableFeaturesCaseBuilder.setMultipartRequestTableFeatures(new MultipartRequestTableFeaturesBuilder().build());
+                MultipartRequestTableFeaturesCaseBuilder tableFeaturesCaseBuilder
+                        = new MultipartRequestTableFeaturesCaseBuilder();
+                tableFeaturesCaseBuilder.setMultipartRequestTableFeatures(
+                        new MultipartRequestTableFeaturesBuilder().build()
+                );
                 return tableFeaturesCaseBuilder.build();
             case OFPMPPORTDESC:
                 return new MultipartRequestPortDescCaseBuilder().build();
@@ -223,44 +228,4 @@ public final class MultipartRequestInputFactory {
                 throw new IllegalArgumentException("Unknown MultipartType " + type);
         }
     }
-
-    private static boolean validationOfMultipartTypeAndRequestBody(@CheckForNull final MultipartType type,
-                                                                   @CheckForNull final MultipartRequestBody body) {
-        Preconditions.checkArgument(type != null, "Multipart Request can not by build without type!");
-        Preconditions.checkArgument(body != null, "Multipart Request can not by build without body!");
-        switch (type) {
-            case OFPMPDESC:
-                return body instanceof MultipartRequestDescCase;
-            case OFPMPFLOW:
-                return body instanceof MultipartRequestFlowCase;
-            case OFPMPAGGREGATE:
-                return body instanceof MultipartRequestAggregateCase;
-            case OFPMPTABLE:
-                return body instanceof MultipartRequestTableCase;
-            case OFPMPPORTSTATS:
-                return body instanceof MultipartRequestPortStatsCase;
-            case OFPMPQUEUE:
-                return body instanceof MultipartRequestQueueCase;
-            case OFPMPGROUP:
-                return body instanceof MultipartRequestGroupCase;
-            case OFPMPGROUPDESC:
-                return body instanceof MultipartRequestGroupDescCase;
-            case OFPMPGROUPFEATURES:
-                return body instanceof MultipartRequestGroupFeaturesCase;
-            case OFPMPMETER:
-                return body instanceof MultipartRequestMeterCase;
-            case OFPMPMETERCONFIG:
-                return body instanceof MultipartRequestMeterConfigCase;
-            case OFPMPMETERFEATURES:
-                return body instanceof MultipartRequestMeterFeaturesCase;
-            case OFPMPTABLEFEATURES:
-                return body instanceof MultipartRequestTableFeaturesCase;
-            case OFPMPPORTDESC:
-                return body instanceof MultipartRequestPortDescCase;
-            case OFPMPEXPERIMENTER:
-                return body instanceof MultipartRequestExperimenterCase;
-            default:
-                throw new IllegalArgumentException("Unknown MultipartType " + type);
-        }
-    }
 }