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;