Javadoc update
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / OF10QueueGetConfigReplyMessageFactory.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueueProperty;\r
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueuePropertyBuilder;\r
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperties;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutputBuilder;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueueProperty;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.property.header.QueuePropertyBuilder;\r
21 \r
22 /**\r
23  * Translates QueueGetConfigReply messages (OpenFlow v1.0)\r
24  * @author michal.polkorab\r
25  */\r
26 public class OF10QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
27 \r
28     private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 6;\r
29     private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 2;\r
30     private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
31     private static final byte PADDING_IN_RATE_QUEUE_PROPERTY = 6;\r
32     private static final byte PACKET_QUEUE_LENGTH = 16;\r
33 \r
34     private static OF10QueueGetConfigReplyMessageFactory instance;\r
35     \r
36     private OF10QueueGetConfigReplyMessageFactory() {\r
37         // singleton\r
38     }\r
39     \r
40     /**\r
41      * \r
42      * @return singleton factory\r
43      */\r
44     public static synchronized OF10QueueGetConfigReplyMessageFactory getInstance(){\r
45         \r
46         if(instance == null){\r
47             instance = new OF10QueueGetConfigReplyMessageFactory();\r
48         }\r
49         return instance;\r
50     }\r
51     \r
52     @Override\r
53     public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
54         GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();\r
55         builder.setVersion(version);\r
56         builder.setXid((rawMessage.readUnsignedInt()));\r
57         builder.setPort(new PortNumber((long) rawMessage.readUnsignedShort()));\r
58         rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);\r
59         builder.setQueues(createQueuesList(rawMessage));\r
60         return builder.build();\r
61     }\r
62     \r
63     private static List<Queues> createQueuesList(ByteBuf input){\r
64         List<Queues> queuesList = new ArrayList<>();\r
65         while (input.readableBytes() > 0) {\r
66             QueuesBuilder queueBuilder = new QueuesBuilder();\r
67             queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
68             int length = input.readUnsignedShort();\r
69             input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
70             queueBuilder.setQueueProperty(createPropertiesList(input, length - PACKET_QUEUE_LENGTH));\r
71             queuesList.add(queueBuilder.build());\r
72         } \r
73         return queuesList;\r
74     }\r
75     \r
76     private static List<QueueProperty> createPropertiesList(ByteBuf input, int length){\r
77         int propertiesLength = length;\r
78         List<QueueProperty> propertiesList = new ArrayList<>();\r
79         while (propertiesLength > 0) {\r
80             QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();\r
81             QueueProperties property = QueueProperties.forValue(input.readUnsignedShort());\r
82             propertiesBuilder.setProperty(property);\r
83             propertiesLength -= input.readUnsignedShort();\r
84             input.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
85             if (property.equals(QueueProperties.OFPQTMINRATE)) {\r
86                 RateQueuePropertyBuilder rateBuilder = new RateQueuePropertyBuilder();\r
87                 rateBuilder.setRate(input.readUnsignedShort());\r
88                 propertiesBuilder.addAugmentation(RateQueueProperty.class, rateBuilder.build());\r
89                 input.skipBytes(PADDING_IN_RATE_QUEUE_PROPERTY);\r
90             }\r
91             propertiesList.add(propertiesBuilder.build());\r
92         }\r
93         return propertiesList;\r
94     }\r
95