X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fcompatibility%2Finventory-topology-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fcompatibility%2Ftopology%2FTopologyReader.xtend;fp=opendaylight%2Fmd-sal%2Fcompatibility%2Finventory-topology-compatibility%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fcompatibility%2Ftopology%2FTopologyReader.xtend;h=fb9d2b8786cab53be0b8c8bb86adcbd0ebc8e046;hb=dba622bd5b8444f8a7ef3597a8d1652fe424b448;hp=0000000000000000000000000000000000000000;hpb=aec966831cce36d6719e54c72ac564a3d1cf3d69;p=controller.git diff --git a/opendaylight/md-sal/compatibility/inventory-topology-compatibility/src/main/java/org/opendaylight/controller/md/compatibility/topology/TopologyReader.xtend b/opendaylight/md-sal/compatibility/inventory-topology-compatibility/src/main/java/org/opendaylight/controller/md/compatibility/topology/TopologyReader.xtend new file mode 100644 index 0000000000..fb9d2b8786 --- /dev/null +++ b/opendaylight/md-sal/compatibility/inventory-topology-compatibility/src/main/java/org/opendaylight/controller/md/compatibility/topology/TopologyReader.xtend @@ -0,0 +1,151 @@ +package org.opendaylight.controller.md.compatibility.topology + +import org.opendaylight.controller.switchmanager.ISwitchManager +import org.opendaylight.controller.topologymanager.ITopologyManager +import org.opendaylight.controller.md.sal.common.api.data.DataReader +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier +import org.opendaylight.yangtools.yang.binding.DataObject +import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.Topology +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.Node +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.node.TerminationPoint +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.Link +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.TopologyKey +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.NetworkTopology +import org.opendaylight.controller.md.compatibility.topology.TopologyMapping +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.LinkBuilder + +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.TopologyBuilder +import java.util.ArrayList +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.NodeBuilder +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.NodeKey +import org.opendaylight.controller.sal.core.NodeConnector +import org.opendaylight.controller.sal.topology.TopoEdgeUpdate +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.TopologyId +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.network.topology.topology.node.TerminationPointBuilder +import org.opendaylight.controller.sal.core.Edge +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.link.attributes.SourceBuilder +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev130712.link.attributes.DestinationBuilder + +class TopologyReader implements RuntimeDataProvider { + + @Property + var ISwitchManager switchManager; + + @Property + var ITopologyManager topologyManager; + + @Property + val TopologyKey topologyKey; + + @Property + val InstanceIdentifier topologyPath; + + @Property + val extension TopologyMapping mapping; + + new() { + _topologyKey = new TopologyKey(new TopologyId("compatibility:ad-sal")); + _topologyPath = InstanceIdentifier.builder().node(NetworkTopology).child(Topology, topologyKey).toInstance; + _mapping = new TopologyMapping(topologyKey, topologyPath); + } + + override readConfigurationData(InstanceIdentifier path) { + + // Topology and Inventory are operational only + return null; + } + + override readOperationalData(InstanceIdentifier path) { + val type = path.targetType; + var DataObject data = null; + if (false == topologyPath.contains(path)) { + return null; + } + switch (type) { + case Topology: + data = readTopology(path as InstanceIdentifier) + case Node: + data = readNode(path as InstanceIdentifier) + case TerminationPoint: + data = readTerminationPoint(path as InstanceIdentifier) + case Link: + data = readLink(path as InstanceIdentifier) + } + return data; + } + + def DataObject readLink(InstanceIdentifier identifier) { + val edge = identifier.toAdTopologyEdge(); + val properties = topologyManager?.edges?.get(edge); + + return constructLink(edge); + } + + def DataObject readTerminationPoint(InstanceIdentifier identifier) { + val nodeConnector = identifier.toAdTopologyNodeConnector(); + return constructTerminationPoint(nodeConnector) + } + + def DataObject readNode(InstanceIdentifier identifier) { + val node = identifier.toAdTopologyNode(); + return constructNode(node); + } + + def DataObject readTopology(InstanceIdentifier identifier) { + + //val nodeConnectors = switchManager. + val nodes = switchManager.nodes + val edges = topologyManager.edges + + val nodeList = new ArrayList(nodes.size) + for (node : nodes) { + nodeList.add(constructNode(node)) + } + + val linkList = new ArrayList(edges.size) + for (edge : edges.keySet) { + linkList.add(constructLink(edge)) + } + + val it = new TopologyBuilder(); + key = topologyKey + node = nodeList + link = linkList + return build() + } + + def constructLink(Edge edge) { + val sourceNc = edge.tailNodeConnector + val destNc = edge.headNodeConnector + + val it = new LinkBuilder() + key = edge.toTopologyLinkKey(); + source = new SourceBuilder().setSourceNode(sourceNc.node.toTopologyNodeKey.nodeId).setSourceTp( + sourceNc.toTopologyTerminationPointKey.tpId).build() + destination = new DestinationBuilder().setDestNode(destNc.node.toTopologyNodeKey.nodeId).setDestTp( + destNc.toTopologyTerminationPointKey.tpId).build + return build() + } + + def Node constructNode(org.opendaylight.controller.sal.core.Node node) { + val connectors = switchManager.getNodeConnectors(node) + + val tpList = new ArrayList(connectors.size) + for (connector : connectors) { + tpList.add(constructTerminationPoint(connector)); + } + + val it = new NodeBuilder() + key = node.toTopologyNodeKey(); + terminationPoint = tpList + return build(); + } + + def TerminationPoint constructTerminationPoint(NodeConnector connector) { + val it = new TerminationPointBuilder() + key = connector.toTopologyTerminationPointKey + return build(); + } + +}