72482f0d13b88ad745adafbbafb56bf8be408266
[controller.git] / opendaylight / protocol_plugins / openflow / src / main / java / org / opendaylight / controller / protocol_plugin / openflow / internal / FlowStatisticsConverter.java
1
2 /*
3  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
7  * and is available at http://www.eclipse.org/legal/epl-v10.html
8  */
9
10 package org.opendaylight.controller.protocol_plugin.openflow.internal;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.opendaylight.controller.protocol_plugin.openflow.vendorextension.v6extension.V6StatsReply;
16 import org.openflow.protocol.statistics.OFFlowStatisticsReply;
17 import org.openflow.protocol.statistics.OFStatistics;
18
19 import org.opendaylight.controller.sal.core.Node;
20 import org.opendaylight.controller.sal.flowprogrammer.Flow;
21 import org.opendaylight.controller.sal.reader.FlowOnNode;
22
23 /**
24  * Converts an openflow list of flow statistics in a SAL list of FlowOnNode objects
25  *
26  *
27  *
28  */
29 public class FlowStatisticsConverter {
30     private List<OFStatistics> ofStatsList;
31     private List<FlowOnNode> flowOnNodeList;
32
33     public FlowStatisticsConverter(List<OFStatistics> statsList) {
34         if (statsList == null) {// || statsList.isEmpty()) {
35             this.ofStatsList = new ArrayList<OFStatistics>(1); // dummy list
36         } else {
37             this.ofStatsList = statsList; //new ArrayList<OFStatistics>(statsList);
38         }
39         this.flowOnNodeList = null;
40     }
41
42     public List<FlowOnNode> getFlowOnNodeList(Node node) {
43         if (ofStatsList != null && flowOnNodeList == null) {
44             flowOnNodeList = new ArrayList<FlowOnNode>();
45             FlowConverter flowConverter = null;
46             OFFlowStatisticsReply ofFlowStat;
47             V6StatsReply v6StatsReply;
48             for (OFStatistics ofStat : ofStatsList) {
49                 FlowOnNode flowOnNode = null;
50                 if (ofStat instanceof OFFlowStatisticsReply) {
51                     ofFlowStat = (OFFlowStatisticsReply) ofStat;
52                     flowConverter = new FlowConverter(ofFlowStat.getMatch(),
53                             ofFlowStat.getActions());
54                     Flow flow = flowConverter.getFlow(node);
55                     flow.setPriority(ofFlowStat.getPriority());
56                     flow.setIdleTimeout(ofFlowStat.getIdleTimeout());
57                     flow.setHardTimeout(ofFlowStat.getHardTimeout());
58                     flowOnNode = new FlowOnNode(flow);
59                     flowOnNode.setByteCount(ofFlowStat.getByteCount());
60                     flowOnNode.setPacketCount(ofFlowStat.getPacketCount());
61                     flowOnNode.setDurationSeconds(ofFlowStat
62                             .getDurationSeconds());
63                     flowOnNode.setDurationNanoseconds(ofFlowStat
64                             .getDurationNanoseconds());
65                 } else if (ofStat instanceof V6StatsReply) {
66                     v6StatsReply = (V6StatsReply) ofStat;
67                     flowConverter = new FlowConverter(v6StatsReply.getMatch(),
68                             v6StatsReply.getActions());
69                     Flow flow = flowConverter.getFlow(node);
70                     flow.setPriority(v6StatsReply.getPriority());
71                     flow.setIdleTimeout(v6StatsReply.getIdleTimeout());
72                     flow.setHardTimeout(v6StatsReply.getHardTimeout());
73                     flowOnNode = new FlowOnNode(flow);
74                     flowOnNode.setByteCount(v6StatsReply.getByteCount());
75                     flowOnNode.setPacketCount(v6StatsReply.getPacketCount());
76                     flowOnNode.setDurationSeconds(v6StatsReply
77                             .getDurationSeconds());
78                     flowOnNode.setDurationNanoseconds(v6StatsReply
79                             .getDurationNanoseconds());
80                 } else {
81                     continue;
82                 }
83                 flowOnNodeList.add(flowOnNode);
84             }
85         }
86         return flowOnNodeList;
87     }
88 }