Bug 2245 - Fixed 'Hide Utility Class Constructor'
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / core / OFDatagramPacketDecoder.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowjava.protocol.impl.core;\r
10 \r
11 import io.netty.channel.ChannelHandlerContext;\r
12 import io.netty.handler.codec.MessageToMessageDecoder;\r
13 \r
14 import java.util.List;\r
15 \r
16 import org.opendaylight.openflowjava.protocol.impl.connection.MessageConsumer;\r
17 import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializationFactory;\r
18 import org.opendaylight.openflowjava.util.ByteBufUtils;\r
19 import org.opendaylight.yangtools.yang.binding.DataObject;\r
20 import org.slf4j.Logger;\r
21 import org.slf4j.LoggerFactory;\r
22 \r
23 /**\r
24  * @author michal.polkorab\r
25  *\r
26  */\r
27 public class OFDatagramPacketDecoder extends MessageToMessageDecoder<VersionMessageUdpWrapper>{\r
28 \r
29     private static final Logger LOGGER = LoggerFactory.getLogger(OFDatagramPacketDecoder.class);\r
30     private DeserializationFactory deserializationFactory;\r
31 \r
32     @Override\r
33     protected void decode(ChannelHandlerContext ctx,\r
34             VersionMessageUdpWrapper msg, List<Object> out) throws Exception {\r
35         if (LOGGER.isDebugEnabled()) {\r
36             LOGGER.debug("UdpVersionMessageWrapper received");\r
37             LOGGER.debug("<< " + ByteBufUtils.byteBufToHexString(msg.getMessageBuffer()));\r
38         }\r
39 \r
40         DataObject dataObject = null;\r
41         try {\r
42             dataObject = deserializationFactory.deserialize(msg.getMessageBuffer(),\r
43                     msg.getVersion());\r
44             if (dataObject == null) {\r
45                 LOGGER.warn("Translated POJO is null");\r
46             } else {\r
47                 MessageConsumer consumer = UdpConnectionMap.getMessageConsumer(msg.getAddress());\r
48                 consumer.consume(dataObject);\r
49             }\r
50         } catch(Exception e) {\r
51             LOGGER.error("Message deserialization failed");\r
52             LOGGER.error(e.getMessage(), e);\r
53             // TODO: delegate exception to allow easier deserialization\r
54             // debugging / deserialization problem awareness\r
55         } finally {\r
56             msg.getMessageBuffer().release();\r
57         }\r
58         \r
59     }\r
60 \r
61     /**\r
62      * @param deserializationFactory\r
63      */\r
64     public void setDeserializationFactory(DeserializationFactory deserializationFactory) {\r
65         this.deserializationFactory = deserializationFactory;\r
66     }\r
67 }