Migrate isFoo() callers
[lispflowmapping.git] / mappingservice / lisp-proto / src / main / java / org / opendaylight / lispflowmapping / lisp / serializer / MapReplySerializer.java
index cdb6697b515de94bf678d858b0e92b26217d0887..1abee34906ed1f0272567eb43af34aa39e39441b 100644 (file)
@@ -9,20 +9,21 @@ package org.opendaylight.lispflowmapping.lisp.serializer;
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-
 import org.apache.commons.lang3.BooleanUtils;
-import org.opendaylight.lispflowmapping.lisp.type.LispMessageEnum;
+import org.opendaylight.lispflowmapping.lisp.serializer.exception.LispSerializationException;
 import org.opendaylight.lispflowmapping.lisp.util.ByteUtil;
 import org.opendaylight.lispflowmapping.lisp.util.NumberUtil;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MessageType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItem;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder;
 
 /**
  * This class deals with serializing map reply from the java object to udp.
  */
-public class MapReplySerializer {
+public final class MapReplySerializer {
 
     private static final MapReplySerializer INSTANCE = new MapReplySerializer();
 
@@ -36,15 +37,15 @@ public class MapReplySerializer {
 
     public ByteBuffer serialize(MapReply mapReply) {
         int size = Length.HEADER_SIZE;
-        for (MappingRecordItem eidToLocatorRecord : mapReply.getMappingRecordItem()) {
+        for (MappingRecordItem eidToLocatorRecord : mapReply.nonnullMappingRecordItem()) {
             size += MappingRecordSerializer.getInstance().getSerializationSize(eidToLocatorRecord.getMappingRecord());
         }
 
         ByteBuffer replyBuffer = ByteBuffer.allocate(size);
 
-        replyBuffer.put((byte) ((LispMessageEnum.MapReply.getValue() << 4) | //
-                (BooleanUtils.isTrue(mapReply.isProbe()) ? Flags.PROBE : 0x00) | //
-                (BooleanUtils.isTrue(mapReply.isEchoNonceEnabled()) ? Flags.ECHO_NONCE_ENABLED : 0x00)));
+        replyBuffer.put((byte) (MessageType.MapReply.getIntValue() << 4
+                | (BooleanUtils.isTrue(mapReply.getProbe()) ? Flags.PROBE : 0x00)
+                | (BooleanUtils.isTrue(mapReply.getEchoNonceEnabled()) ? Flags.ECHO_NONCE_ENABLED : 0x00)));
 
         replyBuffer.position(replyBuffer.position() + Length.RES);
         if (mapReply.getMappingRecordItem() != null) {
@@ -55,7 +56,7 @@ public class MapReplySerializer {
         }
         replyBuffer.putLong(NumberUtil.asLong(mapReply.getNonce()));
         if (mapReply.getMappingRecordItem() != null) {
-            for (MappingRecordItem eidToLocatorRecord : mapReply.getMappingRecordItem()) {
+            for (MappingRecordItem eidToLocatorRecord : mapReply.nonnullMappingRecordItem()) {
                 MappingRecordSerializer.getInstance().serialize(replyBuffer, eidToLocatorRecord.getMappingRecord());
             }
         }
@@ -63,8 +64,13 @@ public class MapReplySerializer {
     }
 
     public MapReply deserialize(ByteBuffer replyBuffer) {
+        final byte typeAndFlags = replyBuffer.get();
+        final int type = typeAndFlags >> 4;
+        if (MessageType.forValue(type) != MessageType.MapReply) {
+            throw new LispSerializationException("Expected Map-Reply packet (type 2), but was type " + type);
+        }
+
         MapReplyBuilder builder = new MapReplyBuilder();
-        byte typeAndFlags = replyBuffer.get();
         builder.setProbe(ByteUtil.extractBit(typeAndFlags, Flags.PROBE));
         builder.setEchoNonceEnabled(ByteUtil.extractBit(typeAndFlags, Flags.ECHO_NONCE_ENABLED));
         builder.setSecurityEnabled(ByteUtil.extractBit(typeAndFlags, Flags.SECURITY_ENABLED));
@@ -73,8 +79,10 @@ public class MapReplySerializer {
         builder.setNonce(replyBuffer.getLong());
         builder.setMappingRecordItem(new ArrayList<MappingRecordItem>());
         for (int i = 0; i < recordCount; i++) {
-            builder.getMappingRecordItem().add(new MappingRecordItemBuilder().setMappingRecord(
-                    MappingRecordSerializer.getInstance().deserialize(replyBuffer)).build());
+            builder.getMappingRecordItem().add(new MappingRecordItemBuilder()
+                    .withKey(new MappingRecordItemKey(Integer.toString(i)))
+                    .setMappingRecord(MappingRecordSerializer.getInstance().deserialize(replyBuffer))
+                    .build());
         }
 
         return builder.build();