--- /dev/null
+
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.controller.statisticsmanager;
+
+import java.util.List;
+import java.util.Map;
+
+import org.opendaylight.controller.forwardingrulesmanager.FlowEntry;
+import org.opendaylight.controller.sal.core.Node;
+import org.opendaylight.controller.sal.core.NodeConnector;
+import org.opendaylight.controller.sal.core.NodeTable;
+import org.opendaylight.controller.sal.reader.FlowOnNode;
+import org.opendaylight.controller.sal.reader.NodeConnectorStatistics;
+import org.opendaylight.controller.sal.reader.NodeDescription;
+import org.opendaylight.controller.sal.reader.NodeTableStatistics;
+
+/**
+ * Interface which defines the available methods for retrieving
+ * the network nodes statistics.
+ */
+public interface IStatisticsManager {
+ /**
+ * Return all the statistics for all the flows present on the specified node
+ * in the current container context. If the context is the default
+ * container, the returned statistics are for all the flows installed on the
+ * node, regardless of the container they belong to
+ *
+ * @param node
+ * The network node
+ * @return List of flows installed on the network node. Null if specified
+ * node is null. Empty list if node/stat is not present.
+ */
+ List<FlowOnNode> getFlows(Node node);
+
+ /**
+ * Same as the getFlows method.
+ * The only difference is that this method does not return cached flows.
+ * It will always make a request to the node to get all the flows for that node.
+ * If the request times out or gets an error, we revert to getting the cached flows.
+ * @see IStatisticsManager#getFlows
+ * @param node
+ * @return List of flows installed on the network node.
+ */
+ List<FlowOnNode> getFlowsNoCache(Node node);
+
+ /**
+ * Returns the statistics for the flows specified in the list
+ *
+ * @param flows
+ * @return A map of flows per node installed on that node, empty map if
+ * flows is null/empty.
+ */
+ Map<Node, List<FlowOnNode>> getFlowStatisticsForFlowList(List<FlowEntry> flows);
+
+ /**
+ * Returns the number of flows installed on the switch in the current
+ * container context If the context is the default container, the returned
+ * value is the number of all the flows installed on the switch regardless
+ * of the container they belong to
+ *
+ * @param node
+ * @return number of flows on specified node or (-1) if node was not found
+ */
+ int getFlowsNumber(Node node);
+
+ /**
+ * Returns the node description for the specified node retrieved by the
+ * protocol plugin component and cached by statistics manager.
+ * Null if node not found.
+ *
+ * @param node
+ * @return node description
+ */
+ NodeDescription getNodeDescription(Node node);
+
+ /**
+ * Returns the statistics for the specified node connector as it was
+ * retrieved by the protocol plugin component and cached by statistics
+ * manager.
+ *
+ * @param node
+ * @return Node connector statistics or null if requested stats was not
+ * found.
+ */
+ NodeConnectorStatistics getNodeConnectorStatistics(NodeConnector nodeConnector);
+
+ /**
+ * Returns the statistics for all the node connector present on the
+ * specified network node
+ *
+ * @param node
+ * @return List of node connector statistics. Null if node is null. Empty
+ * list if node/stats is not present.
+ */
+ List<NodeConnectorStatistics> getNodeConnectorStatistics(Node node);
+
+ /**
+ * Returns the statistics for the specified table of the node
+ *
+ * @param nodeTable
+ * @return Table statistics. Null if node table is null or stats not found.
+ */
+ NodeTableStatistics getNodeTableStatistics(NodeTable nodeTable);
+
+ /**
+ * Returns the statistics for all the tables of the node
+ *
+ * @param nodeTable
+ * @return List of table stats. Null if node is null. Empty list if
+ * node/stats not found.
+ */
+ List <NodeTableStatistics> getNodeTableStatistics(Node node);
+}