import java.util.ArrayList
import java.util.Collections
import java.util.List
+import java.util.Set
+import java.util.concurrent.CopyOnWriteArrayList;
import org.opendaylight.controller.sal.binding.api.data.DataBrokerService
import org.opendaylight.controller.sal.binding.api.data.DataProviderService
import org.opendaylight.controller.sal.core.Edge
@Property
OpendaylightFlowTableStatisticsService flowTableStatisticsService;
- @Property
- IPluginOutInventoryService inventoryPublisher;
-
@Property
FlowTopologyDiscoveryService topologyDiscovery;
@Property
- List<IPluginOutReadService> statisticsPublisher = new ArrayList<IPluginOutReadService>();
-
+ List<IPluginOutReadService> statisticsPublisher = new CopyOnWriteArrayList<IPluginOutReadService>();
+
+ @Property
+ List<IPluginOutInventoryService> inventoryPublisher = new CopyOnWriteArrayList<IPluginOutInventoryService>();
+
+ def setInventoryPublisher(IPluginOutInventoryService listener){
+ inventoryPublisher.add(listener);
+ }
+
+ def unsetInventoryPublisher(IPluginOutInventoryService listener){
+ inventoryPublisher.remove(listener);
+ }
+
def setReadPublisher(IPluginOutReadService listener) {
statisticsPublisher.add(listener);
}
for(flow : table.flow){
val adsalFlow = ToSalConversionsUtils.toFlow(flow);
- val statsFromDataStore = flow.getAugmentation(FlowStatisticsData) as FlowStatisticsData;
+ val statsFromDataStore = flow.getAugmentation(FlowStatisticsData);
if(statsFromDataStore != null){
val it = new FlowOnNode(adsalFlow);
for (table : dsFlowCapableNode.table){
- val tableStats = table.getAugmentation(FlowTableStatisticsData) as FlowTableStatisticsData;
+ val tableStats = table.getAugmentation(FlowTableStatisticsData);
if(tableStats != null){
ret.add(toNodeTableStatistics(tableStats.flowTableStatistics,table.id,node));
for(mdsalFlow : table.flow){
if(FromSalConversionsUtils.flowEquals(mdsalFlow, MDFlowMapping.toMDSalflow(targetFlow))){
- val statsFromDataStore = mdsalFlow.getAugmentation(FlowStatisticsData) as FlowStatisticsData;
+ val statsFromDataStore = mdsalFlow.getAugmentation(FlowStatisticsData);
if(statsFromDataStore != null){
LOG.debug("Found matching flow in the data store flow table ");
val table= it.readConfigurationData(tableRef) as Table;
if(table != null){
- val tableStats = table.getAugmentation(FlowTableStatisticsData) as FlowTableStatisticsData;
+ val tableStats = table.getAugmentation(FlowTableStatisticsData);
if(tableStats != null){
nodeStats = toNodeTableStatistics(tableStats.flowTableStatistics,table.id,nodeTable.node);
override onNodeRemoved(NodeRemoved notification) {
val properties = Collections.<org.opendaylight.controller.sal.core.Property>emptySet();
- inventoryPublisher.updateNode(notification.nodeRef.toADNode, UpdateType.REMOVED, properties);
+ publishNodeUpdate(notification.nodeRef.toADNode, UpdateType.REMOVED, properties);
}
override onNodeConnectorUpdated(NodeConnectorUpdated update) {
var nodeConnector = update.nodeConnectorRef.toADNodeConnector
- inventoryPublisher.updateNodeConnector(nodeConnector , updateType , update.toADNodeConnectorProperties);
+ publishNodeConnectorUpdate(nodeConnector , updateType , update.toADNodeConnectorProperties);
}
override onNodeUpdated(NodeUpdated notification) {
- val properties = Collections.<org.opendaylight.controller.sal.core.Property>emptySet();
val InstanceIdentifier<? extends DataObject> identifier = notification.nodeRef.value as InstanceIdentifier<? extends DataObject>;
var updateType = UpdateType.CHANGED;
if ( this._dataService.readOperationalData(identifier) == null ){
updateType = UpdateType.ADDED;
}
- inventoryPublisher.updateNode(notification.nodeRef.toADNode, updateType, notification.toADNodeProperties);
+ publishNodeUpdate(notification.nodeRef.toADNode, updateType, notification.toADNodeProperties);
//Notify the listeners of IPluginOutReadService
* OpendaylightFlowStatisticsListener interface implementation
*/
override onAggregateFlowStatisticsUpdate(AggregateFlowStatisticsUpdate notification) {
- throw new UnsupportedOperationException("TODO: auto-generated method stub")
+ //Ignoring this notification as there does not seem to be a way to bubble this up to AD-SAL
}
override onFlowsStatisticsUpdate(FlowsStatisticsUpdate notification) {
return it;
}
+
+ override getConfiguredNotConnectedNodes() {
+ return Collections.emptySet();
+ }
+
+
+ private def publishNodeUpdate(Node node, UpdateType updateType, Set<org.opendaylight.controller.sal.core.Property> properties){
+ for( publisher : inventoryPublisher){
+ publisher.updateNode(node, updateType, properties);
+ }
+ }
+
+ private def publishNodeConnectorUpdate(org.opendaylight.controller.sal.core.NodeConnector nodeConnector, UpdateType updateType, Set<org.opendaylight.controller.sal.core.Property> properties){
+ for( publisher : inventoryPublisher){
+ publisher.updateNodeConnector(nodeConnector, updateType, properties);
+ }
+ }
}