/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.md.compatibility.inventory import org.opendaylight.controller.switchmanager.ISwitchManager import org.opendaylight.yangtools.yang.binding.InstanceIdentifier import org.opendaylight.yangtools.yang.binding.DataObject import org.opendaylight.controller.sal.binding.api.data.RuntimeDataProvider import java.util.ArrayList import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector import static extension org.opendaylight.controller.sal.compatibility.InventoryMapping.*; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder class InventoryReader implements RuntimeDataProvider { @Property var ISwitchManager switchManager; override readConfigurationData(InstanceIdentifier path) { // Topology and Inventory are operational only return null; } override readOperationalData(InstanceIdentifier path) { val type = path.targetType; var DataObject data = null; switch (type) { case Nodes: data = readNodes(path as InstanceIdentifier) case Node: data = readNode(path as InstanceIdentifier) case NodeConnector: data = readNodeConnector(path as InstanceIdentifier) } return data; } def DataObject readNodeConnector(InstanceIdentifier identifier) { val nodeConnector = identifier.toAdNodeConnector(); return constructNodeConnector(nodeConnector) } def DataObject readNode(InstanceIdentifier identifier) { val node = identifier.toAdNode(); return constructNode(node); } 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(constructNodeConnector(connector)); } val it = new NodeBuilder() key = node.toNodeKey(); nodeConnector = tpList return build(); } def NodeConnector constructNodeConnector(org.opendaylight.controller.sal.core.NodeConnector connector) { val it = new NodeConnectorBuilder() key = connector.toNodeConnectorKey() return build(); } def readNodes(InstanceIdentifier identifier) { val nodes = switchManager.nodes val nodeList = new ArrayList(nodes.size) for (node : nodes) { nodeList.add(constructNode(node)) } val it = new NodesBuilder(); node = nodeList return build() } }