Remove trailing whitespace
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / QueueGetConfigReplyMessageFactory.java
index 26110ec499f38d4c8e7da164548190563b4ad9f6..d6090a3254b0fede2a591eb79f8775be70409d42 100644 (file)
@@ -13,9 +13,11 @@ import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistryInjector;
 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterQueuePropertyBuilder;
+import org.opendaylight.openflowjava.util.ExperimenterDeserializerKeyFactory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueueProperty;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.RateQueuePropertyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
@@ -33,14 +35,15 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  * @author timotej.kubas
  * @author michal.polkorab
  */
-public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {
+public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput>,
+        DeserializerRegistryInjector {
 
     private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 4;
     private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;
     private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;
     private static final int PADDING_IN_RATE_QUEUE_PROPERTY = 6;
-    private static final int PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY = 4;
     private static final byte PACKET_QUEUE_LENGTH = 16;
+    private DeserializerRegistry registry;
 
     @Override
     public GetQueueConfigOutput deserialize(ByteBuf rawMessage) {
@@ -52,8 +55,8 @@ public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueu
         builder.setQueues(createQueuesList(rawMessage));
         return builder.build();
     }
-    
-    private static List<Queues> createQueuesList(ByteBuf input){
+
+    private List<Queues> createQueuesList(ByteBuf input){
         List<Queues> queuesList = new ArrayList<>();
         while (input.readableBytes() > 0) {
             QueuesBuilder queueBuilder = new QueuesBuilder();
@@ -63,14 +66,15 @@ public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueu
             input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);
             queueBuilder.setQueueProperty(createPropertiesList(input, length - PACKET_QUEUE_LENGTH));
             queuesList.add(queueBuilder.build());
-        } 
+        }
         return queuesList;
     }
-    
-    private static List<QueueProperty> createPropertiesList(ByteBuf input, int length){
+
+    private List<QueueProperty> createPropertiesList(ByteBuf input, int length){
         int propertiesLength = length;
         List<QueueProperty> propertiesList = new ArrayList<>();
         while (propertiesLength > 0) {
+            int propertyStartIndex = input.readerIndex();
             QueuePropertyBuilder propertiesBuilder = new QueuePropertyBuilder();
             QueueProperties property = QueueProperties.forValue(input.readUnsignedShort());
             propertiesBuilder.setProperty(property);
@@ -83,16 +87,21 @@ public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueu
                 propertiesBuilder.addAugmentation(RateQueueProperty.class, rateBuilder.build());
                 input.skipBytes(PADDING_IN_RATE_QUEUE_PROPERTY);
             } else if (property.equals(QueueProperties.OFPQTEXPERIMENTER)) {
-                ExperimenterQueuePropertyBuilder expBuilder = new ExperimenterQueuePropertyBuilder();
-                expBuilder.setExperimenter(input.readUnsignedInt());
-                input.skipBytes(PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY);
-                expBuilder.setData(input.readBytes(currentPropertyLength
-                        - EncodeConstants.SIZE_OF_INT_IN_BYTES - PADDING_IN_EXPERIMENTER_QUEUE_PROPERTY).array());
-                propertiesBuilder.addAugmentation(RateQueueProperty.class, expBuilder.build());
+                long expId = input.readUnsignedInt();
+                input.readerIndex(propertyStartIndex);
+                OFDeserializer<QueueProperty> deserializer = registry.getDeserializer(
+                        ExperimenterDeserializerKeyFactory.createQueuePropertyDeserializerKey(
+                                EncodeConstants.OF13_VERSION_ID, expId));
+                propertiesList.add(deserializer.deserialize(input));
+                continue;
             }
             propertiesList.add(propertiesBuilder.build());
         }
         return propertiesList;
     }
 
+    @Override
+    public void injectDeserializerRegistry(DeserializerRegistry deserializerRegistry) {
+        this.registry = deserializerRegistry;
+    }
 }