Fix checkstyle violations in openflow-protocol-impl - part 2
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / main / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / GetAsyncReplyMessageFactory.java
1 /*
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
10
11 import io.netty.buffer.ByteBuf;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
15 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutputBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMask;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.FlowRemovedMaskBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMask;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PacketInMaskBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMask;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.async.body.grouping.PortStatusMaskBuilder;
27
28 /**
29  * Translates GetAsyncReply messages.
30  *
31  * @author timotej.kubas
32  * @author michal.polkorab
33  */
34 public class GetAsyncReplyMessageFactory implements OFDeserializer<GetAsyncOutput> {
35
36     private static final byte SEPARATE_ROLES = 2;
37
38     @Override
39     public GetAsyncOutput deserialize(ByteBuf rawMessage) {
40         GetAsyncOutputBuilder builder = new GetAsyncOutputBuilder();
41         builder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
42         builder.setXid(rawMessage.readUnsignedInt());
43         builder.setPacketInMask(decodePacketInMask(rawMessage));
44         builder.setPortStatusMask(decodePortStatusMask(rawMessage));
45         builder.setFlowRemovedMask(decodeFlowRemovedMask(rawMessage));
46         return builder.build();
47     }
48
49     private static List<PacketInMask> decodePacketInMask(ByteBuf input) {
50         List<PacketInMask> inMasks = new ArrayList<>();
51         PacketInMaskBuilder maskBuilder;
52         for (int i = 0; i < SEPARATE_ROLES; i++) {
53             maskBuilder = new PacketInMaskBuilder();
54             maskBuilder.setMask(decodePacketInReasons(input.readUnsignedInt()));
55             inMasks.add(maskBuilder.build());
56         }
57         return inMasks;
58     }
59
60     private static List<PortStatusMask> decodePortStatusMask(ByteBuf input) {
61         List<PortStatusMask> inMasks = new ArrayList<>();
62         PortStatusMaskBuilder maskBuilder;
63         for (int i = 0; i < SEPARATE_ROLES; i++) {
64             maskBuilder = new PortStatusMaskBuilder();
65             maskBuilder.setMask(decodePortReasons(input.readUnsignedInt()));
66             inMasks.add(maskBuilder.build());
67         }
68         return inMasks;
69     }
70
71     private static List<FlowRemovedMask> decodeFlowRemovedMask(ByteBuf input) {
72         List<FlowRemovedMask> inMasks = new ArrayList<>();
73         FlowRemovedMaskBuilder maskBuilder;
74         for (int i = 0; i < SEPARATE_ROLES; i++) {
75             maskBuilder = new FlowRemovedMaskBuilder();
76             maskBuilder.setMask(decodeFlowRemovedReasons(input.readUnsignedInt()));
77             inMasks.add(maskBuilder.build());
78         }
79         return inMasks;
80     }
81
82     private static List<PacketInReason> decodePacketInReasons(long input) {
83         List<PacketInReason> reasons = new ArrayList<>();
84         if ((input & 1 << 0) != 0) {
85             reasons.add(PacketInReason.OFPRNOMATCH);
86         }
87         if ((input & 1 << 1) != 0) {
88             reasons.add(PacketInReason.OFPRACTION);
89         }
90         if ((input & 1 << 2) != 0) {
91             reasons.add(PacketInReason.OFPRINVALIDTTL);
92         }
93         return reasons;
94     }
95
96     private static List<PortReason> decodePortReasons(long input) {
97         List<PortReason> reasons = new ArrayList<>();
98         if ((input & 1 << 0) != 0) {
99             reasons.add(PortReason.OFPPRADD);
100         }
101         if ((input & 1 << 1) != 0) {
102             reasons.add(PortReason.OFPPRDELETE);
103         }
104         if ((input & 1 << 2) != 0) {
105             reasons.add(PortReason.OFPPRMODIFY);
106         }
107         return reasons;
108     }
109
110     private static List<FlowRemovedReason> decodeFlowRemovedReasons(long input) {
111         List<FlowRemovedReason> reasons = new ArrayList<>();
112         if ((input & 1 << 0) != 0) {
113             reasons.add(FlowRemovedReason.OFPRRIDLETIMEOUT);
114         }
115         if ((input & 1 << 1) != 0) {
116             reasons.add(FlowRemovedReason.OFPRRHARDTIMEOUT);
117         }
118         if ((input & 1 << 2) != 0) {
119             reasons.add(FlowRemovedReason.OFPRRDELETE);
120         }
121         if ((input & 1 << 3) != 0) {
122             reasons.add(FlowRemovedReason.OFPRRGROUPDELETE);
123         }
124         return reasons;
125     }
126 }