X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Finventory-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Finventory%2Fmanager%2FFlowCapableInventoryProvider.xtend;fp=opendaylight%2Fmd-sal%2Finventory-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Finventory%2Fmanager%2FFlowCapableInventoryProvider.xtend;h=2b023a72e1c0442cb8f932c0d1472381cb3740ea;hp=0000000000000000000000000000000000000000;hb=2f02ee43956e0b1aad16b8cd8ddab1bd35042e1e;hpb=0a2fd754f0bb3ac9f5883731e680063b44766c14 diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend new file mode 100644 index 0000000000..2b023a72e1 --- /dev/null +++ b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/FlowCapableInventoryProvider.xtend @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2013 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.inventory.manager + +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryListener +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRemoved +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdated +import org.opendaylight.controller.sal.binding.api.NotificationProviderService +import org.opendaylight.controller.sal.binding.api.data.DataProviderService +import org.opendaylight.yangtools.concepts.Registration +import org.opendaylight.yangtools.yang.binding.NotificationListener +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier +import org.opendaylight.yangtools.yang.binding.DataObject +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeUpdated +import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey +import static extension org.opendaylight.controller.md.inventory.manager.InventoryMapping.* +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey +import org.slf4j.LoggerFactory + +class FlowCapableInventoryProvider implements AutoCloseable { + + + static val LOG = LoggerFactory.getLogger(FlowCapableInventoryProvider); + + @Property + DataProviderService dataService; + + @Property + NotificationProviderService notificationService; + val NodeChangeCommiter changeCommiter = new NodeChangeCommiter(this); + + Registration listenerRegistration + + def void start() { + listenerRegistration = notificationService.registerNotificationListener(changeCommiter); + LOG.info("Flow Capable Inventory Provider started."); + + } + + protected def startChange() { + return dataService.beginTransaction; + } + + override close() { + LOG.info("Flow Capable Inventory Provider stopped."); + listenerRegistration?.close(); + } + +} + +class NodeChangeCommiter implements OpendaylightInventoryListener { + + @Property + val FlowCapableInventoryProvider manager; + + new(FlowCapableInventoryProvider manager) { + _manager = manager; + } + + override onNodeConnectorRemoved(NodeConnectorRemoved connector) { + val ref = connector.nodeConnectorRef; + + // Check path + val it = manager.startChange() + removeRuntimeData(ref.value as InstanceIdentifier); + commit() + } + + override onNodeConnectorUpdated(NodeConnectorUpdated connector) { + val ref = connector.nodeConnectorRef; + + val flowConnector = connector.getAugmentation(FlowCapableNodeConnectorUpdated); + + val it = manager.startChange() + val data = new NodeConnectorBuilder(connector); + data.key = (new NodeConnectorKey(connector.id)) + if (flowConnector != null) { + val augment = flowConnector.toInventoryAugment() + data.addAugmentation(FlowCapableNodeConnector, augment) + } + + putRuntimeData(ref.value as InstanceIdentifier, data.build()); + commit() + } + + override onNodeRemoved(NodeRemoved node) { + val ref = node.nodeRef; + val it = manager.startChange() + + removeRuntimeData(ref.value as InstanceIdentifier); + commit() + } + + override onNodeUpdated(NodeUpdated node) { + val ref = node.nodeRef; + val flowNode = node.getAugmentation(FlowCapableNodeUpdated); + + val it = manager.startChange() + val data = new NodeBuilder(node); + data.key = (new NodeKey(node.id)) + if (flowNode != null) { + val augment = flowNode.toInventoryAugment(); + data.addAugmentation(FlowCapableNode, augment) + } + + putRuntimeData(ref.value as InstanceIdentifier, data.build()) + commit() + } +}