1 package org.opendaylight.ovsdb.plugin;
3 import java.util.Collection;
6 import java.util.concurrent.ConcurrentHashMap;
7 import java.util.concurrent.ConcurrentMap;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11 import org.opendaylight.controller.sal.core.Node;
12 import org.opendaylight.controller.sal.core.NodeConnector;
13 import org.opendaylight.controller.sal.core.Property;
14 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
15 import org.opendaylight.ovsdb.lib.message.TableUpdate;
16 import org.opendaylight.ovsdb.lib.message.TableUpdate.Row;
17 import org.opendaylight.ovsdb.lib.message.TableUpdates;
18 import org.opendaylight.ovsdb.lib.table.internal.Table;
20 import com.google.common.collect.Maps;
23 * Stub Implementation for IPluginInReadService used by SAL
27 public class InventoryService implements IPluginInInventoryService, InventoryServiceInternal {
28 private static final Logger logger = LoggerFactory
29 .getLogger(InventoryService.class);
31 private ConcurrentMap<Node, Map<String, Property>> nodeProps;
32 private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps;
33 private Map<Node, NodeDB<Table<?>>> dbCache = Maps.newHashMap();
36 * Function called by the dependency manager when all the required
37 * dependencies are satisfied
41 nodeProps = new ConcurrentHashMap<Node, Map<String, Property>>();
42 nodeConnectorProps = new ConcurrentHashMap<NodeConnector, Map<String, Property>>();
43 dbCache = new ConcurrentHashMap<Node, NodeDB<Table<?>>>();
44 Node.NodeIDType.registerIDType("OVS", String.class);
45 NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");
49 * Function called by the dependency manager when at least one dependency
50 * become unsatisfied or when the component is shutting down because for
51 * example bundle is being stopped.
58 * Function called by dependency manager after "init ()" is called and after
59 * the services provided by the class are registered in the service registry
66 * Function called by the dependency manager before the services exported by
67 * the component are unregistered, this will be followed by a "destroy ()"
75 * Retrieve nodes from openflow
78 public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
83 * Retrieve nodeConnectors from openflow
86 public ConcurrentMap<NodeConnector, Map<String, Property>> getNodeConnectorProps(
88 return nodeConnectorProps;
93 public Map<String, Map<String, Table<?>>> getCache(Node n) {
94 NodeDB<Table<?>> db = dbCache.get(n);
95 if (db == null) return null;
96 return db.getTableCache();
101 public Map<String, Table<?>> getTableCache(Node n, String tableName) {
102 NodeDB<Table<?>> db = dbCache.get(n);
103 if (db == null) return null;
104 return db.getTableCache(tableName);
109 public Table<?> getRow(Node n, String tableName, String uuid) {
110 NodeDB<Table<?>> db = dbCache.get(n);
111 if (db == null) return null;
112 return db.getRow(tableName, uuid);
117 public void updateRow(Node n, String tableName, String uuid, Table<?> row) {
118 NodeDB<Table<?>> db = dbCache.get(n);
120 db = new NodeDB<Table<?>>();
123 db.updateRow(tableName, uuid, row);
127 public void removeRow(Node n, String tableName, String uuid) {
128 NodeDB<Table<?>> db = dbCache.get(n);
129 if (db != null) db.removeRow(tableName, uuid);
133 public void processTableUpdates(Node n, TableUpdates tableUpdates) {
134 NodeDB<Table<?>> db = dbCache.get(n);
136 db = new NodeDB<Table<?>>();
140 Set<Table.Name> available = tableUpdates.availableUpdates();
141 for (Table.Name name : available) {
142 System.out.println(name.getName() +":"+ tableUpdates.getUpdate(name).toString());
143 TableUpdate tableUpdate = tableUpdates.getUpdate(name);
144 Collection<TableUpdate.Row<?>> rows = tableUpdate.getRows();
145 for (Row<?> row : rows) {
146 String uuid = row.getId();
147 Table<?> newRow = (Table<?>)row.getNew();
148 Table<?> oldRow = (Table<?>)row.getOld();
149 if (newRow != null) {
150 db.updateRow(name.getName(), uuid, newRow);
151 } else if (oldRow != null) {
152 db.removeRow(name.getName(), uuid);
159 public void printCache(Node n) {
160 NodeDB<Table<?>> db = dbCache.get(n);
161 if (db != null) db.printTableCache();