Merge "Added support for annotations in generated APIs."
[controller.git] / opendaylight / protocol_plugins / openflow / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / internal / FlowStatisticsConverter.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. 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.controller.protocol_plugin.openflow.internal;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 import org.opendaylight.controller.protocol_plugin.openflow.vendorextension.v6extension.V6StatsReply;
15 import org.opendaylight.controller.sal.core.Node;
16 import org.opendaylight.controller.sal.flowprogrammer.Flow;
17 import org.opendaylight.controller.sal.reader.FlowOnNode;
18 import org.openflow.protocol.statistics.OFFlowStatisticsReply;
19 import org.openflow.protocol.statistics.OFStatistics;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * Converts an openflow list of flow statistics in a SAL list of FlowOnNode
25  * objects
26  * 
27  * 
28  * 
29  */
30 public class FlowStatisticsConverter {
31     private static final Logger log = LoggerFactory
32             .getLogger(FlowStatisticsConverter.class);
33     private List<OFStatistics> ofStatsList;
34     private List<FlowOnNode> flowOnNodeList;
35
36     public FlowStatisticsConverter(List<OFStatistics> statsList) {
37         if (statsList == null) {// || statsList.isEmpty()) {
38             this.ofStatsList = new ArrayList<OFStatistics>(1); // dummy list
39         } else {
40             this.ofStatsList = statsList; // new
41                                           // ArrayList<OFStatistics>(statsList);
42         }
43         this.flowOnNodeList = null;
44     }
45
46     public List<FlowOnNode> getFlowOnNodeList(Node node) {
47         if (ofStatsList != null && flowOnNodeList == null) {
48             flowOnNodeList = new ArrayList<FlowOnNode>();
49             FlowConverter flowConverter = null;
50             OFFlowStatisticsReply ofFlowStat;
51             V6StatsReply v6StatsReply;
52             for (OFStatistics ofStat : ofStatsList) {
53                 FlowOnNode flowOnNode = null;
54                 if (ofStat instanceof OFFlowStatisticsReply) {
55                     ofFlowStat = (OFFlowStatisticsReply) ofStat;
56                     flowConverter = new FlowConverter(ofFlowStat.getMatch(),
57                             ofFlowStat.getActions());
58                     Flow flow = flowConverter.getFlow(node);
59                     flow.setPriority(ofFlowStat.getPriority());
60                     flow.setIdleTimeout(ofFlowStat.getIdleTimeout());
61                     flow.setHardTimeout(ofFlowStat.getHardTimeout());
62                     flowOnNode = new FlowOnNode(flow);
63                     flowOnNode.setByteCount(ofFlowStat.getByteCount());
64                     flowOnNode.setPacketCount(ofFlowStat.getPacketCount());
65                     flowOnNode.setDurationSeconds(ofFlowStat
66                             .getDurationSeconds());
67                     flowOnNode.setDurationNanoseconds(ofFlowStat
68                             .getDurationNanoseconds());
69                 } else if (ofStat instanceof V6StatsReply) {
70                     v6StatsReply = (V6StatsReply) ofStat;
71                     flowConverter = new FlowConverter(v6StatsReply.getMatch(),
72                             v6StatsReply.getActions());
73                     Flow flow = flowConverter.getFlow(node);
74                     flow.setPriority(v6StatsReply.getPriority());
75                     flow.setIdleTimeout(v6StatsReply.getIdleTimeout());
76                     flow.setHardTimeout(v6StatsReply.getHardTimeout());
77                     flowOnNode = new FlowOnNode(flow);
78                     flowOnNode.setByteCount(v6StatsReply.getByteCount());
79                     flowOnNode.setPacketCount(v6StatsReply.getPacketCount());
80                     flowOnNode.setDurationSeconds(v6StatsReply
81                             .getDurationSeconds());
82                     flowOnNode.setDurationNanoseconds(v6StatsReply
83                             .getDurationNanoseconds());
84                 } else {
85                     continue;
86                 }
87                 flowOnNodeList.add(flowOnNode);
88             }
89         }
90         log.trace("OFStatistics: {} FlowOnNode: {}", ofStatsList,
91                 flowOnNodeList);
92         return flowOnNodeList;
93     }
94 }