1 package org.opendaylight.ovsdb.plugin;
3 import java.util.Collection;
4 import java.util.HashMap;
7 import java.util.concurrent.ConcurrentHashMap;
8 import java.util.concurrent.ConcurrentMap;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
12 import org.opendaylight.controller.sal.core.Node;
13 import org.opendaylight.controller.sal.core.NodeConnector;
14 import org.opendaylight.controller.sal.core.Property;
15 import org.opendaylight.controller.sal.inventory.IPluginInInventoryService;
16 import org.opendaylight.ovsdb.lib.database.DatabaseSchema;
17 import org.opendaylight.ovsdb.lib.message.TableUpdate;
18 import org.opendaylight.ovsdb.lib.message.TableUpdate.Row;
19 import org.opendaylight.ovsdb.lib.message.TableUpdates;
20 import org.opendaylight.ovsdb.lib.table.internal.Table;
22 import com.google.common.collect.Maps;
25 * Stub Implementation for IPluginInReadService used by SAL
29 public class InventoryService implements IPluginInInventoryService, InventoryServiceInternal {
30 private static final Logger logger = LoggerFactory
31 .getLogger(InventoryService.class);
33 private ConcurrentMap<Node, Map<String, Property>> nodeProps;
34 private ConcurrentMap<NodeConnector, Map<String, Property>> nodeConnectorProps;
35 private Map<Node, NodeDB> dbCache = Maps.newHashMap();
38 * Function called by the dependency manager when all the required
39 * dependencies are satisfied
43 nodeProps = new ConcurrentHashMap<Node, Map<String, Property>>();
44 nodeConnectorProps = new ConcurrentHashMap<NodeConnector, Map<String, Property>>();
45 Node.NodeIDType.registerIDType("OVS", String.class);
46 NodeConnector.NodeConnectorIDType.registerIDType("OVS", String.class, "OVS");
50 * Function called by the dependency manager when at least one dependency
51 * become unsatisfied or when the component is shutting down because for
52 * example bundle is being stopped.
55 public void destroy() {
59 * Function called by dependency manager after "init ()" is called and after
60 * the services provided by the class are registered in the service registry
67 * Function called by the dependency manager before the services exported by
68 * the component are unregistered, this will be followed by a "destroy ()"
76 * Retrieve nodes from openflow
79 public ConcurrentMap<Node, Map<String, Property>> getNodeProps() {
84 * Retrieve nodeConnectors from openflow
87 public ConcurrentMap<NodeConnector, Map<String, Property>> getNodeConnectorProps(
89 return nodeConnectorProps;
94 public Map<String, Map<String, Table<?>>> getCache(Node n) {
95 NodeDB db = dbCache.get(n);
96 if (db == null) return null;
97 return db.getTableCache();
102 public Map<String, Table<?>> getTableCache(Node n, String tableName) {
103 NodeDB db = dbCache.get(n);
104 if (db == null) return null;
105 return db.getTableCache(tableName);
110 public Table<?> getRow(Node n, String tableName, String uuid) {
111 NodeDB db = dbCache.get(n);
112 if (db == null) return null;
113 return db.getRow(tableName, uuid);
117 public void updateRow(Node n, String tableName, String uuid, Table<?> row) {
118 NodeDB db = dbCache.get(n);
123 db.updateRow(tableName, uuid, row);
127 public void removeRow(Node n, String tableName, String uuid) {
128 NodeDB db = dbCache.get(n);
129 if (db != null) db.removeRow(tableName, uuid);
133 public void processTableUpdates(Node n, TableUpdates tableUpdates) {
134 NodeDB db = dbCache.get(n);
140 Set<Table.Name> available = tableUpdates.availableUpdates();
141 for (Table.Name name : available) {
142 TableUpdate tableUpdate = tableUpdates.getUpdate(name);
143 Collection<TableUpdate.Row<?>> rows = tableUpdate.getRows();
144 for (Row<?> row : rows) {
145 String uuid = row.getId();
146 Table<?> newRow = (Table<?>)row.getNew();
147 Table<?> oldRow = (Table<?>)row.getOld();
148 if (newRow != null) {
149 db.updateRow(name.getName(), uuid, newRow);
150 } else if (oldRow != null) {
151 db.removeRow(name.getName(), uuid);
158 public void printCache(Node n) {
159 NodeDB db = dbCache.get(n);
160 if (db != null) db.printTableCache();
164 public void addNodeProperty(Node n, Property prop) {
165 Map<String, Property> nProp = nodeProps.get(n);
166 if (nProp == null) nProp = new HashMap<String, Property>();
167 nProp.put(prop.getName(), prop);
168 nodeProps.put(n, nProp);
172 public DatabaseSchema getDatabaseSchema(Node n) {
173 NodeDB db = dbCache.get(n);
174 if (db != null) return db.getSchema();
179 public void updateDatabaseSchema(Node n, DatabaseSchema schema) {
180 NodeDB db = dbCache.get(n);
185 db.setSchema(schema);