OF10ActionDeserializer and ActionDeserializer split into separate classes
[openflowjava.git] / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / action / OF10AbstractIpAddressActionDeserializer.java
1 /*\r
2  * Copyright (c) 2013 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.deserialization.action;\r
10 \r
11 import io.netty.buffer.ByteBuf;\r
12 \r
13 import java.util.ArrayList;\r
14 import java.util.List;\r
15 \r
16 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressActionBuilder;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;\r
22 import org.opendaylight.yangtools.yang.binding.Augmentation;\r
23 \r
24 import com.google.common.base.Joiner;\r
25 \r
26 /**\r
27  * @author michal.polkorab\r
28  *\r
29  */\r
30 public abstract class OF10AbstractIpAddressActionDeserializer extends AbstractActionDeserializer {\r
31 \r
32     @Override\r
33     public Action deserialize(ByteBuf input) {\r
34         ActionBuilder builder = new ActionBuilder();\r
35         input.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
36         builder.setType(getType());\r
37         input.skipBytes(EncodeConstants.SIZE_OF_SHORT_IN_BYTES);\r
38         builder.addAugmentation(IpAddressAction.class,\r
39                 createNwAddressAugmentationAndPad(input));\r
40         return builder.build();\r
41     }\r
42 \r
43     private static Augmentation<Action> createNwAddressAugmentationAndPad(ByteBuf input) {\r
44         IpAddressActionBuilder ipBuilder = new IpAddressActionBuilder();\r
45         List<String> groups = new ArrayList<>();\r
46         for (int i = 0; i < EncodeConstants.GROUPS_IN_IPV4_ADDRESS; i++) {\r
47             groups.add(Short.toString(input.readUnsignedByte()));\r
48         }\r
49         Joiner joiner = Joiner.on(".");\r
50         ipBuilder.setIpAddress(new Ipv4Address(joiner.join(groups)));\r
51         return ipBuilder.build();\r
52     }\r
53 \r
54 }\r