X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcompatibility%2Fsal-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcompatibility%2FInventoryAndReadAdapter.xtend;h=56ca1b609cf2c6eeb6d5dfe669b660319d4d792d;hb=aed009bd999c94f0b82cba822f6eb1936616c832;hp=d5fbd041e4a45d593d3d744e2aa6f5e90bc42288;hpb=d0079eb5f3b99b255cbec1d81de50cbb0ef3d2ec;p=controller.git diff --git a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/InventoryAndReadAdapter.xtend b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/InventoryAndReadAdapter.xtend index d5fbd041e4..56ca1b609c 100644 --- a/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/InventoryAndReadAdapter.xtend +++ b/opendaylight/md-sal/compatibility/sal-compatibility/src/main/java/org/opendaylight/controller/sal/compatibility/InventoryAndReadAdapter.xtend @@ -64,6 +64,9 @@ import org.slf4j.LoggerFactory import static extension org.opendaylight.controller.sal.common.util.Arguments.* import static extension org.opendaylight.controller.sal.compatibility.NodeMapping.* +import org.opendaylight.controller.md.sal.binding.util.TypeSafeDataReader +import java.util.concurrent.ConcurrentHashMap +import java.util.Map class InventoryAndReadAdapter implements IPluginInReadService, IPluginInInventoryService, @@ -349,7 +352,7 @@ class InventoryAndReadAdapter implements IPluginInReadService, if ( this._dataService.readOperationalData(identifier) == null ){ updateType = UpdateType.ADDED; } - inventoryPublisher.updateNode(notification.nodeRef.toADNode, updateType, properties); + inventoryPublisher.updateNode(notification.nodeRef.toADNode, updateType, notification.toADNodeProperties); //Notify the listeners of IPluginOutReadService @@ -360,15 +363,64 @@ class InventoryAndReadAdapter implements IPluginInReadService, } override getNodeProps() { - - // FIXME: Read from MD-SAL inventory service - return null; + val props = new ConcurrentHashMap>() + + val nodes = readAllMDNodes() + for (node : nodes.node ) { + val fcn = node.getAugmentation(FlowCapableNode) + if(fcn != null) { + val perNodeProps = fcn.toADNodeProperties(node.id) + val perNodePropMap = new ConcurrentHashMap + if(perNodeProps != null ) { + for(perNodeProp : perNodeProps) { + perNodePropMap.put(perNodeProp.name,perNodeProp) + } + } + props.put(new Node(MD_SAL_TYPE, node.id.toADNodeId),perNodePropMap) + } + } + return props; + } + + private def readAllMDNodes() { + val nodesRef = InstanceIdentifier.builder(Nodes) + .toInstance + val reader = TypeSafeDataReader.forReader(dataService) + return reader.readOperationalData(nodesRef) + } + + private def readAllMDNodeConnectors(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node node) { + val nodeRef = InstanceIdentifier.builder(Nodes) + .child(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node,new NodeKey(node.id)) + .toInstance + val reader = TypeSafeDataReader.forReader(dataService) + return reader.readOperationalData(nodeRef).nodeConnector } override getNodeConnectorProps(Boolean refresh) { - - // FIXME: Read from MD-SAL Invcentory Service - return null; + // Note, because the MD-SAL has a unified data store, we can ignore the Boolean refresh, as we have no secondary + // data store to refresh from + val props = new ConcurrentHashMap>() + val nodes = readAllMDNodes() + for (node : nodes.node) { + val ncs = node.readAllMDNodeConnectors + if(ncs != null) { + for( nc : ncs ) { + val fcnc = nc.getAugmentation(FlowCapableNodeConnector) + if(fcnc != null) { + val ncps = fcnc.toADNodeConnectorProperties + val ncpsm = new ConcurrentHashMap + if(ncps != null) { + for(p : ncps) { + ncpsm.put(p.name,p) + } + } + props.put(nc.id.toADNodeConnector(node.id),ncpsm) + } + } + } + } + return props } private def FlowCapableNode readFlowCapableNode(NodeRef ref) {