\r
import io.netty.buffer.ByteBuf;\r
\r
-import java.util.Iterator;\r
import java.util.List;\r
\r
import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ActionsSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.group.mod.BucketsList;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.BucketsList;\r
\r
/**\r
* @author timotej.kubas\r
public class GroupModInputMessageFactory implements OFSerializer<GroupModInput> {\r
private static final byte MESSAGE_TYPE = 15;\r
private static final byte PADDING_IN_GROUP_MOD_MESSAGE = 1;\r
- private static final int MESSAGE_LENGTH = 16; \r
+ private static final int MESSAGE_LENGTH = 16;\r
+ private static final byte LENGTH_OF_BUCKET_STRUCTURE = 16;\r
private static GroupModInputMessageFactory instance;\r
- \r
+\r
private GroupModInputMessageFactory() {\r
// singleton\r
}\r
\r
@Override\r
public int computeLength(GroupModInput message) {\r
- return MESSAGE_LENGTH;\r
+ return MESSAGE_LENGTH + computeLengthOfBuckets(message.getBucketsList());\r
}\r
\r
@Override\r
\r
private static void encodeBuckets(List<BucketsList> buckets, ByteBuf outBuffer) {\r
final byte PADDING_IN_BUCKET = 4;\r
- \r
- for (Iterator<BucketsList> iterator = buckets.iterator(); iterator.hasNext();) {\r
- BucketsList currentBucket = iterator.next();\r
- // TODO get method for field length missing\r
- outBuffer.writeShort(currentBucket.getWeight().intValue());\r
- outBuffer.writeInt(currentBucket.getWatchPort().getValue().intValue());\r
- outBuffer.writeInt(currentBucket.getWatchGroup().intValue());\r
- ByteBufUtils.padBuffer(PADDING_IN_BUCKET, outBuffer);\r
- // TODO actions structure missing\r
+ if (buckets != null) {\r
+ for (BucketsList currentBucket : buckets) {\r
+ outBuffer.writeShort(computeLengthOfBucket(currentBucket));\r
+ outBuffer.writeShort(currentBucket.getWeight().shortValue());\r
+ outBuffer.writeInt(currentBucket.getWatchPort().getValue().intValue());\r
+ outBuffer.writeInt(currentBucket.getWatchGroup().intValue());\r
+ ByteBufUtils.padBuffer(PADDING_IN_BUCKET, outBuffer);\r
+ ActionsSerializer.encodeActions(currentBucket.getActionsList(), outBuffer);\r
+ }\r
+ }\r
+ }\r
+ \r
+ private static int computeLengthOfBucket(BucketsList bucket) {\r
+ int lengthOfBuckets = 0;\r
+ if (bucket != null) {\r
+ lengthOfBuckets = LENGTH_OF_BUCKET_STRUCTURE + ActionsSerializer.computeLengthOfActions(bucket.getActionsList());\r
}\r
+ return lengthOfBuckets;\r
+ }\r
+ \r
+ private static int computeLengthOfBuckets(List<BucketsList> buckets) {\r
+ int lengthOfBuckets = 0;\r
+ if (buckets != null) {\r
+ for (BucketsList currentBucket : buckets) {\r
+ lengthOfBuckets += LENGTH_OF_BUCKET_STRUCTURE + ActionsSerializer.computeLengthOfActions(currentBucket.getActionsList());\r
+ }\r
+ }\r
+ return lengthOfBuckets;\r
}\r
\r
+ \r
}\r