X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fprotocol_plugins%2Fstub%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fprotocol_plugins%2Fstub%2Finternal%2FInventoryService.java;h=b94ffec1ddba5d1f6cc699813d22fea6b02c7c0e;hp=b4d6166d3636efa901aa490a8dd0d23dad0bbe4c;hb=5e20076e352bae1f6b0bd0f8ac8f7c85235e4b27;hpb=0f846fcbc207a4213ac133e1d08a305fc72168ba diff --git a/opendaylight/protocol_plugins/stub/src/main/java/org/opendaylight/controller/protocol_plugins/stub/internal/InventoryService.java b/opendaylight/protocol_plugins/stub/src/main/java/org/opendaylight/controller/protocol_plugins/stub/internal/InventoryService.java index b4d6166d36..b94ffec1dd 100644 --- a/opendaylight/protocol_plugins/stub/src/main/java/org/opendaylight/controller/protocol_plugins/stub/internal/InventoryService.java +++ b/opendaylight/protocol_plugins/stub/src/main/java/org/opendaylight/controller/protocol_plugins/stub/internal/InventoryService.java @@ -12,11 +12,11 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.CopyOnWriteArraySet; import org.apache.felix.dm.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.opendaylight.controller.sal.core.Actions; import org.opendaylight.controller.sal.core.Bandwidth; import org.opendaylight.controller.sal.core.Buffers; @@ -29,7 +29,9 @@ import org.opendaylight.controller.sal.core.Property; import org.opendaylight.controller.sal.core.State; import org.opendaylight.controller.sal.core.Tables; import org.opendaylight.controller.sal.core.TimeStamp; +import org.opendaylight.controller.sal.core.UpdateType; import org.opendaylight.controller.sal.inventory.IPluginInInventoryService; +import org.opendaylight.controller.sal.inventory.IPluginOutInventoryService; import org.opendaylight.controller.sal.utils.NodeCreator; import org.opendaylight.controller.sal.utils.NodeConnectorCreator; @@ -42,9 +44,35 @@ public class InventoryService implements IPluginInInventoryService { private static final Logger logger = LoggerFactory .getLogger(InventoryService.class); - private ConcurrentMap> nodeProps; // properties are maintained in global container only - private ConcurrentMap> nodeConnectorProps; // properties are maintained in global container only + private ConcurrentMap> nodeProps; // properties + // are + // maintained + // in global + // container + // only + private ConcurrentMap> nodeConnectorProps; // properties + // are + // maintained + // in + // global + // container + // only + private final Set pluginOutInventoryServices = + new CopyOnWriteArraySet(); + + public void setPluginOutInventoryServices(IPluginOutInventoryService service) { + logger.trace("Got a service set request {}", service); + if (this.pluginOutInventoryServices != null) { + this.pluginOutInventoryServices.add(service); + } + } + public void unsetPluginOutInventoryServices(IPluginOutInventoryService service) { + logger.trace("Got a service UNset request"); + if (this.pluginOutInventoryServices != null) { + this.pluginOutInventoryServices.remove(service); + } + } /** * Function called by the dependency manager when all the required @@ -55,7 +83,95 @@ public class InventoryService implements IPluginInInventoryService { nodeProps = new ConcurrentHashMap>(); nodeConnectorProps = new ConcurrentHashMap>(); Node.NodeIDType.registerIDType("STUB", Integer.class); - NodeConnector.NodeConnectorIDType.registerIDType("STUB", Integer.class, "STUB"); + NodeConnector.NodeConnectorIDType.registerIDType("STUB", Integer.class, + "STUB"); + + setupNodeProps(); + setupNodeConnectorProps(); + } + + private void setupNodeConnectorProps() { + Map ncPropMap = new HashMap(); + Capabilities cap = new Capabilities( + CapabilitiesType.FLOW_STATS_CAPABILITY.getValue()); + ncPropMap.put(Capabilities.CapabilitiesPropName, cap); + Bandwidth bw = new Bandwidth(Bandwidth.BW1Gbps); + ncPropMap.put(Bandwidth.BandwidthPropName, bw); + State st = new State(State.EDGE_UP); + ncPropMap.put(State.StatePropName, st); + + // setup property map for all node connectors + NodeConnector nc; + Node node; + try { + node = new Node("STUB", new Integer(0xCAFE)); + nc = new NodeConnector("STUB", 0xCAFE, node); + } catch (ConstructionException e) { + nc = null; + node = null; + } + nodeConnectorProps.put(nc, ncPropMap); + + try { + node = new Node("STUB", 3366); + nc = new NodeConnector("STUB", 12, node); + } catch (ConstructionException e) { + nc = null; + node = null; + } + nodeConnectorProps.put(nc, ncPropMap); + + try { + node = new Node("STUB", 4477); + nc = new NodeConnector("STUB", 34, node); + } catch (ConstructionException e) { + nc = null; + node = null; + } + nodeConnectorProps.put(nc, ncPropMap); + + } + + private void setupNodeProps() { + Map propMap = new HashMap(); + + Tables t = new Tables((byte) 1); + propMap.put(Tables.TablesPropName, t); + Capabilities c = new Capabilities((int) 3); + propMap.put(Capabilities.CapabilitiesPropName, c); + Actions a = new Actions((int) 2); + propMap.put(Actions.ActionsPropName, a); + Buffers b = new Buffers((int) 1); + propMap.put(Buffers.BuffersPropName, b); + Long connectedSinceTime = 100000L; + TimeStamp timeStamp = new TimeStamp(connectedSinceTime, + "connectedSince"); + propMap.put(TimeStamp.TimeStampPropName, timeStamp); + + // setup property map for all nodes + Node node; + try { + node = new Node("STUB", new Integer(0xCAFE)); + } catch (ConstructionException e) { + node = null; + } + + nodeProps.put(node, propMap); + + try { + node = new Node("STUB", 3366); + } catch (ConstructionException e) { + node = null; + } + nodeProps.put(node, propMap); + + try { + node = new Node("STUB", 4477); + } catch (ConstructionException e) { + node = null; + } + nodeProps.put(node, propMap); + } /** @@ -75,6 +191,29 @@ public class InventoryService implements IPluginInInventoryService { void start() { } + /** + * Method called when the plugin has exposed it's services, this will be + * used to publish the updates so connection manager can think the + * connection is local + */ + void started() { + // update sal and discovery + for (IPluginOutInventoryService service : pluginOutInventoryServices) { + for (Node node : nodeProps.keySet()) { + Set props = new HashSet(nodeProps.get(node) + .values()); + service.updateNode(node, UpdateType.ADDED, props); + logger.trace("Adding Node {} with props {}", node, props); + } + for (NodeConnector nc : nodeConnectorProps.keySet()) { + Set props = new HashSet(nodeConnectorProps.get(nc) + .values()); + service.updateNodeConnector(nc, UpdateType.ADDED, props); + logger.trace("Adding NodeConnectors {} with props {}", nc, props); + } + } + } + /** * Function called by the dependency manager before the services exported by * the component are unregistered, this will be followed by a "destroy ()" @@ -82,6 +221,7 @@ public class InventoryService implements IPluginInInventoryService { * */ void stop() { + pluginOutInventoryServices.clear(); } /** @@ -89,47 +229,6 @@ public class InventoryService implements IPluginInInventoryService { */ @Override public ConcurrentMap> getNodeProps() { - - // setup nodeProps - Map propMap = new HashMap(); - - Tables t = new Tables((byte)1); - propMap.put(Tables.TablesPropName, t); - Capabilities c = new Capabilities((int)3); - propMap.put(Capabilities.CapabilitiesPropName, c); - Actions a = new Actions((int)2); - propMap.put(Actions.ActionsPropName, a); - Buffers b = new Buffers((int)1); - propMap.put(Buffers.BuffersPropName, b); - Long connectedSinceTime = 100000L; - TimeStamp timeStamp = new TimeStamp(connectedSinceTime, - "connectedSince"); - propMap.put(TimeStamp.TimeStampPropName, timeStamp); - - // setup property map for all nodes - Node node; - try{ - node = new Node("STUB", new Integer(0xCAFE)); - }catch(ConstructionException e){ - node = null; - } - - nodeProps.put(node, propMap); - - try{ - node = new Node("STUB", 3366); - }catch(ConstructionException e){ - node = null; - } - nodeProps.put(node, propMap); - - try{ - node = new Node("STUB", 4477); - }catch(ConstructionException e){ - node = null; - } - nodeProps.put(node, propMap); - return nodeProps; } @@ -139,49 +238,7 @@ public class InventoryService implements IPluginInInventoryService { @Override public ConcurrentMap> getNodeConnectorProps( Boolean refresh) { - - // setup nodeConnectorProps - Map ncPropMap = new HashMap(); - Capabilities cap = new Capabilities - (CapabilitiesType.FLOW_STATS_CAPABILITY.getValue()); - ncPropMap.put(Capabilities.CapabilitiesPropName, cap); - Bandwidth bw = new Bandwidth (Bandwidth.BW1Gbps); - ncPropMap.put(Bandwidth.BandwidthPropName, bw); - State st = new State (State.EDGE_UP); - ncPropMap.put(State.StatePropName, st); - - // setup property map for all node connectors - NodeConnector nc; - Node node; - try{ - node = new Node("STUB", new Integer(0xCAFE)); - nc = new NodeConnector("STUB", 0xCAFE, node); - }catch(ConstructionException e){ - nc = null; - node = null; - } - nodeConnectorProps.put(nc, ncPropMap); - - try{ - node = new Node("STUB", 3366); - nc = new NodeConnector("STUB", 12, node); - } catch(ConstructionException e){ - nc = null; - node = null; - } - nodeConnectorProps.put(nc, ncPropMap); - - try{ - node = new Node("STUB", 4477); - nc = new NodeConnector("STUB", 34, node); - }catch(ConstructionException e){ - nc = null; - node = null; - } - nodeConnectorProps.put(nc, ncPropMap); - - return nodeConnectorProps; + return nodeConnectorProps; } - }