Merge "BUG-2218: Keep existing link augmentations during discovery process"
[controller.git] / opendaylight / adsal / 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.Collections;
13 import java.util.List;
14
15 import org.opendaylight.controller.protocol_plugin.openflow.vendorextension.v6extension.V6StatsReply;
16 import org.opendaylight.controller.sal.core.Node;
17 import org.opendaylight.controller.sal.flowprogrammer.Flow;
18 import org.opendaylight.controller.sal.reader.FlowOnNode;
19 import org.openflow.protocol.statistics.OFFlowStatisticsReply;
20 import org.openflow.protocol.statistics.OFStatistics;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23
24 /**
25  * Converts an openflow list of flow statistics in a SAL list of FlowOnNode
26  * objects
27  *
28  *
29  *
30  */
31 public class FlowStatisticsConverter {
32     private static final Logger log = LoggerFactory
33             .getLogger(FlowStatisticsConverter.class);
34     private List<OFStatistics> ofStatsList;
35     private List<FlowOnNode> flowOnNodeList;
36
37     public FlowStatisticsConverter(List<OFStatistics> statsList) {
38         if (statsList == null) {
39             this.ofStatsList = Collections.emptyList();
40         } else {
41             this.ofStatsList = 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                     flow.setId(ofFlowStat.getCookie());
63                     flowOnNode = new FlowOnNode(flow);
64                     flowOnNode.setByteCount(ofFlowStat.getByteCount());
65                     flowOnNode.setPacketCount(ofFlowStat.getPacketCount());
66                     flowOnNode.setDurationSeconds(ofFlowStat
67                             .getDurationSeconds());
68                     flowOnNode.setDurationNanoseconds(ofFlowStat
69                             .getDurationNanoseconds());
70                 } else if (ofStat instanceof V6StatsReply) {
71                     v6StatsReply = (V6StatsReply) ofStat;
72                     flowConverter = new FlowConverter(v6StatsReply.getMatch(),
73                             v6StatsReply.getActions());
74                     Flow flow = flowConverter.getFlow(node);
75                     flow.setPriority(v6StatsReply.getPriority());
76                     flow.setIdleTimeout(v6StatsReply.getIdleTimeout());
77                     flow.setHardTimeout(v6StatsReply.getHardTimeout());
78                     flow.setId(v6StatsReply.getCookie());
79                     flowOnNode = new FlowOnNode(flow);
80                     flowOnNode.setByteCount(v6StatsReply.getByteCount());
81                     flowOnNode.setPacketCount(v6StatsReply.getPacketCount());
82                     flowOnNode.setDurationSeconds(v6StatsReply
83                             .getDurationSeconds());
84                     flowOnNode.setDurationNanoseconds(v6StatsReply
85                             .getDurationNanoseconds());
86                 } else {
87                     continue;
88                 }
89                 flowOnNodeList.add(flowOnNode);
90             }
91         }
92         log.trace("OFStatistics: {} FlowOnNode: {}", ofStatsList,
93                 flowOnNodeList);
94         return flowOnNodeList;
95     }
96 }