Fix double translation of messages.
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / translator / MultiPartMessageDescToNodeUpdatedTranslator.java
index bb1cc8f41d6ff1e99dfe7040fb42970bf874754b..6390c06852c55bef29a5b4384a3bc36b1d0f2e8c 100644 (file)
@@ -1,6 +1,9 @@
 package org.opendaylight.openflowplugin.openflow.md.core.translator;
 
 import java.math.BigInteger;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.SwitchConnectionDistinguisher;
@@ -14,32 +17,37 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev13
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDesc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MultiPartMessageDescToNodeUpdatedTranslator implements IMDMessageTranslator<OfHeader, DataObject> {
-    protected static final Logger LOG = LoggerFactory.getLogger(PacketInTranslator.class);
+public class MultiPartMessageDescToNodeUpdatedTranslator implements IMDMessageTranslator<OfHeader, List<DataObject>> {
+    protected static final Logger LOG = LoggerFactory.getLogger(MultiPartMessageDescToNodeUpdatedTranslator.class);
     @Override
-    public NodeUpdated translate(SwitchConnectionDistinguisher cookie,
+    public List<DataObject> translate(SwitchConnectionDistinguisher cookie,
             SessionContext sc, OfHeader msg) {
         if(msg instanceof MultipartReply && ((MultipartReply) msg).getType() == MultipartType.OFPMPDESC) {
-            LOG.info("MultipartReplyMessage Being translated to NodeUpdated ");
+            LOG.info("MultipartReplyMessage - MultipartReplyDesc Being translated to NodeUpdated ");
             MultipartReplyMessage message = (MultipartReplyMessage) msg;
+            List<DataObject> list = new CopyOnWriteArrayList<DataObject>();
             BigInteger datapathId = sc.getFeatures().getDatapathId();
             NodeUpdatedBuilder builder = InventoryDataServiceUtil.nodeUpdatedBuilderFromDataPathId(datapathId);
             FlowCapableNodeUpdatedBuilder fnub = new FlowCapableNodeUpdatedBuilder();
-            MultipartReplyDesc body = (MultipartReplyDesc) message.getMultipartReplyBody();
+            MultipartReplyDescCase caseBody = (MultipartReplyDescCase) message.getMultipartReplyBody();
+            MultipartReplyDesc body = caseBody.getMultipartReplyDesc();
             fnub.setHardware(body.getHwDesc());
             fnub.setManufacturer(body.getMfrDesc());
             fnub.setSerialNumber(body.getSerialNum());
             fnub.setDescription(body.getDpDesc());
             fnub.setSoftware(body.getSwDesc());
             builder.addAugmentation(FlowCapableNodeUpdated.class, fnub.build());
-            return builder.build();
+            NodeUpdated nodeUpdated = builder.build();
+            list.add(nodeUpdated);
+            return list;
         } else {
-            return null;
+            return Collections.emptyList();
         }
     }