Remove trailing whitespace
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / QueueGetConfigReplyMessageFactory.java
index b442a49a6c4cd27b0ef9f1d848d6098c01d3490d..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.impl.deserialization.OFDeserializer;
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterQueuePropertyBuilder;
+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.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,45 +35,28 @@ 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;
 
-    private static QueueGetConfigReplyMessageFactory instance;
-    
-    private QueueGetConfigReplyMessageFactory() {
-        // singleton
-    }
-    
-    /**
-     * 
-     * @return singleton factory
-     */
-    public static synchronized QueueGetConfigReplyMessageFactory getInstance(){
-        
-        if(instance == null){
-            instance = new QueueGetConfigReplyMessageFactory();
-        }
-        return instance;
-    }
-    
     @Override
-    public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {
+    public GetQueueConfigOutput deserialize(ByteBuf rawMessage) {
         GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();
-        builder.setVersion(version);
+        builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
         builder.setXid((rawMessage.readUnsignedInt()));
         builder.setPort(new PortNumber(rawMessage.readUnsignedInt()));
         rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);
         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();
@@ -81,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);
@@ -101,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;
+    }
 }