Factory tests back to stable
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / OF10StatsRequestMessageFactory.java
index ef0292d8bc8b8c08e000e528d6b00d45972bf7da..070267762659c111159659a3cba414609a6ec2db 100644 (file)
@@ -10,6 +10,7 @@ import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
 import org.opendaylight.openflowjava.protocol.impl.util.OF10MatchSerializer;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;\r
@@ -49,7 +50,6 @@ public class OF10StatsRequestMessageFactory implements OFSerializer<MultipartReq
         ByteBufUtils.writeOFHeader(instance, message, out);\r
         out.writeShort(message.getType().getIntValue());\r
         out.writeShort(createMultipartRequestFlagsBitmask(message.getFlags()));\r
-        \r
         if (message.getMultipartRequestBody() instanceof MultipartRequestFlow) {\r
             encodeFlowBody(message.getMultipartRequestBody(), out);\r
         } else if (message.getMultipartRequestBody() instanceof MultipartRequestAggregate) {\r
@@ -65,14 +65,44 @@ public class OF10StatsRequestMessageFactory implements OFSerializer<MultipartReq
     \r
     @Override\r
     public int computeLength(MultipartRequestMessage message) {\r
-        // TODO\r
-        return MESSAGE_LENGTH;\r
+        return MESSAGE_LENGTH + computeBodyLength(message);\r
     }\r
     @Override\r
     public byte getMessageType() {\r
         return MESSAGE_TYPE;\r
     }\r
     \r
+    /**\r
+     * \r
+     * @param message\r
+     * @return length of MultipartRequestMessage\r
+     */\r
+    public int computeBodyLength(MultipartRequestMessage message) {\r
+        int length = 0;\r
+        MultipartType type = message.getType();\r
+        if (type.equals(MultipartType.OFPMPFLOW)) {\r
+            final byte FLOW_BODY_LENGTH = 44;\r
+            length += FLOW_BODY_LENGTH;\r
+        } else if (type.equals(MultipartType.OFPMPAGGREGATE)) {\r
+            final byte AGGREGATE_BODY_LENGTH = 44;\r
+            length += AGGREGATE_BODY_LENGTH;\r
+        } else if (type.equals(MultipartType.OFPMPPORTSTATS)) {\r
+            final byte PORT_STATS_BODY_LENGTH = 8;\r
+            length += PORT_STATS_BODY_LENGTH;\r
+        } else if (type.equals(MultipartType.OFPMPQUEUE)) {\r
+            final byte QUEUE_BODY_LENGTH = 8;\r
+            length += QUEUE_BODY_LENGTH;\r
+        } else if (type.equals(MultipartType.OFPMPEXPERIMENTER)) {\r
+            final byte EXPERIMENTER_BODY_LENGTH = 4;\r
+            MultipartRequestExperimenter body = (MultipartRequestExperimenter) message.getMultipartRequestBody();\r
+            length += EXPERIMENTER_BODY_LENGTH;\r
+            if (body.getData() != null) {\r
+                length += body.getData().length;\r
+            }\r
+        }\r
+        return length;\r
+    }\r
+    \r
     private static int createMultipartRequestFlagsBitmask(MultipartRequestFlags flags) {\r
         int multipartRequestFlagsBitmask = 0;\r
         Map<Integer, Boolean> multipartRequestFlagsMap = new HashMap<>();\r