Use YANG java files instead of the old model TELSDN-474 #close
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / serializer / LocatorRecordSerializer.java
index 90aa1be3c235cbc30be8170dae55b9fcea042069..1180f60b076c4feae2ee455b90848c156ee6b733 100644 (file)
@@ -2,52 +2,61 @@ package org.opendaylight.lispflowmapping.implementation.serializer;
 
 import java.nio.ByteBuffer;
 
+import org.apache.commons.lang3.BooleanUtils;
 import org.opendaylight.lispflowmapping.implementation.serializer.address.LispAddressSerializer;
 import org.opendaylight.lispflowmapping.implementation.util.ByteUtil;
-import org.opendaylight.lispflowmapping.type.lisp.LocatorRecord;
+import org.opendaylight.lispflowmapping.implementation.util.NumberUtil;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.LispAFIAddress;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.LispAddressContainerBuilder;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispaddress.lispaddresscontainer.Address;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.lispsimpleaddress.PrimitiveAddress;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecord;
+import org.opendaylight.yang.gen.v1.lispflowmapping.rev131031.locatorrecords.LocatorRecordBuilder;
 
 public class LocatorRecordSerializer {
-       
-       private static final LocatorRecordSerializer INSTANCE = new LocatorRecordSerializer();
-
-       // Private constructor prevents instantiation from other classes
-       private LocatorRecordSerializer() {
-       }
-
-       public static LocatorRecordSerializer getInstance() {
-               return INSTANCE;
-       }
-       
-       protected LocatorRecord deserialize(ByteBuffer buffer) {
-        LocatorRecord record = new LocatorRecord();
-        record.setPriority(buffer.get());
-        record.setWeight(buffer.get());
-        record.setMulticastPriority(buffer.get());
-        record.setMulticastWeight(buffer.get());
+
+    private static final LocatorRecordSerializer INSTANCE = new LocatorRecordSerializer();
+
+    // Private constructor prevents instantiation from other classes
+    private LocatorRecordSerializer() {
+    }
+
+    public static LocatorRecordSerializer getInstance() {
+        return INSTANCE;
+    }
+
+    protected LocatorRecord deserialize(ByteBuffer buffer) {
+        LocatorRecordBuilder builder = new LocatorRecordBuilder();
+        builder.setPriority((short) buffer.get());
+        builder.setWeight((short) buffer.get());
+        builder.setMulticastPriority((short) buffer.get());
+        builder.setMulticastWeight((short) buffer.get());
         byte flags = (byte) buffer.getShort();
-        record.setLocalLocator(ByteUtil.extractBit(flags, Flags.LOCAL_LOCATOR));
-        record.setRlocProbed(ByteUtil.extractBit(flags, Flags.RLOC_PROBED));
-        record.setRouted(ByteUtil.extractBit(flags, Flags.ROUTED));
-        record.setLocator(LispAddressSerializer.getInstance().deserialize(buffer));
-        return record;
+        builder.setLocalLocator(ByteUtil.extractBit(flags, Flags.LOCAL_LOCATOR));
+        builder.setRlocProbed(ByteUtil.extractBit(flags, Flags.RLOC_PROBED));
+        builder.setRouted(ByteUtil.extractBit(flags, Flags.ROUTED));
+        LispAFIAddress afiAddress = LispAddressSerializer.getInstance().deserialize(buffer);
+        builder.setLispAddressContainer(LispAFIConvertor.toContainer(afiAddress));
+        return builder.build();
     }
 
     public void serialize(ByteBuffer replyBuffer, LocatorRecord record) {
-        replyBuffer.put(record.getPriority());
-        replyBuffer.put(record.getWeight());
-        replyBuffer.put(record.getMulticastPriority());
-        replyBuffer.put(record.getMulticastWeight());
+        replyBuffer.put((byte) NumberUtil.asShort(record.getPriority()));
+        replyBuffer.put((byte) NumberUtil.asShort(record.getWeight()));
+        replyBuffer.put((byte) NumberUtil.asShort(record.getMulticastPriority()));
+        replyBuffer.put((byte) NumberUtil.asShort(record.getMulticastWeight()));
         replyBuffer.position(replyBuffer.position() + Length.UNUSED_FLAGS);
-        replyBuffer.put((byte) (ByteUtil.boolToBit(record.isLocalLocator(), Flags.LOCAL_LOCATOR) | //
-                ByteUtil.boolToBit(record.isRlocProbed(), Flags.RLOC_PROBED) | //
-                ByteUtil.boolToBit(record.isRouted(), Flags.ROUTED)));
-        LispAddressSerializer.getInstance().serialize(replyBuffer, record.getLocator());
+        replyBuffer.put((byte) (ByteUtil.boolToBit(BooleanUtils.isTrue(record.isLocalLocator()), Flags.LOCAL_LOCATOR) | //
+                ByteUtil.boolToBit(BooleanUtils.isTrue(record.isRlocProbed()), Flags.RLOC_PROBED) | //
+                ByteUtil.boolToBit(BooleanUtils.isTrue(record.isRouted()), Flags.ROUTED)));
+        LispAddressSerializer.getInstance().serialize(replyBuffer, (LispAFIAddress) record.getLispAddressContainer().getAddress());
     }
 
     public int getSerializationSize(LocatorRecord record) {
-        return Length.HEADER_SIZE + LispAddressSerializer.getInstance().getAddressSize(record.getLocator());
+        return Length.HEADER_SIZE
+                + LispAddressSerializer.getInstance().getAddressSize((LispAFIAddress) record.getLispAddressContainer().getAddress());
     }
-    
+
     private interface Flags {
         int LOCAL_LOCATOR = 0x04;
         int RLOC_PROBED = 0x02;