Merge dev/fluorine work across to master
[unimgr.git] / netvirt / src / main / java / org / opendaylight / unimgr / mef / netvirt / NodeConnectorListener.java
diff --git a/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NodeConnectorListener.java b/netvirt/src/main/java/org/opendaylight/unimgr/mef/netvirt/NodeConnectorListener.java
deleted file mode 100644 (file)
index ab8e192..0000000
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2016 Hewlett Packard Enterprise, Co. 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.unimgr.mef.netvirt;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ExecutionException;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.genius.interfacemanager.globals.IfmConstants;
-import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.Uni;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.UniBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.PhysicalLayersBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.LinksBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.Link;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.interfaces.rev150526.mef.interfaces.unis.uni.physical.layers.links.LinkBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.Interface;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.topology.rev150526.mef.topology.devices.device.interfaces.InterfaceBuilder;
-import org.opendaylight.yang.gen.v1.http.metroethernetforum.org.ns.yang.mef.types.rev150526.Identifier45;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
-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.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.util.concurrent.CheckedFuture;
-
-public class NodeConnectorListener extends UnimgrDataTreeChangeListener<FlowCapableNodeConnector> {
-
-    private static final String BRIDGE_PREFIX = "br-";
-    private static final String TUNNEL_PREFIX = "tun";
-    private static final Logger LOG = LoggerFactory.getLogger(NodeConnectorListener.class);
-    private final UniPortManager uniPortManager;
-    private ListenerRegistration<NodeConnectorListener> nodeConnectorListenerRegistration;
-
-    public NodeConnectorListener(final DataBroker dataBroker, final UniPortManager uniPortManager) {
-        super(dataBroker);
-        this.uniPortManager = uniPortManager;
-        registerListener();
-    }
-
-    public void registerListener() {
-        try {
-            final DataTreeIdentifier<FlowCapableNodeConnector> dataTreeIid = new DataTreeIdentifier<>(
-                    LogicalDatastoreType.OPERATIONAL, getInstanceIdentifier());
-            nodeConnectorListenerRegistration = dataBroker.registerDataTreeChangeListener(dataTreeIid, this);
-            LOG.info("NodeConnectorListener created and registered");
-
-        } catch (final Exception e) {
-            LOG.error("Node connector listener registration failed !", e);
-            throw new IllegalStateException("Node connector listener registration failed.", e);
-        }
-    }
-
-    @SuppressWarnings("deprecation")
-    private InstanceIdentifier<FlowCapableNodeConnector> getInstanceIdentifier() {
-        return InstanceIdentifier.create(Nodes.class).child(Node.class).child(NodeConnector.class)
-                .augmentation(FlowCapableNodeConnector.class);
-    }
-
-    @Override
-    public void close() throws Exception {
-        nodeConnectorListenerRegistration.close();
-    }
-
-    @Override
-    public void add(DataTreeModification<FlowCapableNodeConnector> newDataObject) {
-        if (newDataObject.getRootPath() != null && newDataObject.getRootNode() != null) {
-            LOG.info("node connector {} created", newDataObject.getRootNode().getIdentifier());
-            addFlowCapableNodeConnector(newDataObject);
-        }
-    }
-
-    @Override
-    public void remove(DataTreeModification<FlowCapableNodeConnector> removedDataObject) {
-        if (removedDataObject.getRootPath() != null && removedDataObject.getRootNode() != null) {
-            LOG.info("node connector {} deleted", removedDataObject.getRootNode().getIdentifier());
-            removeFlowCapableNodeConnector(removedDataObject);
-        }
-    }
-
-    @Override
-    public void update(DataTreeModification<FlowCapableNodeConnector> modifiedDataObject) {
-        if (modifiedDataObject.getRootPath() != null && modifiedDataObject.getRootNode() != null) {
-            LOG.info("node connector {} updated", modifiedDataObject.getRootNode().getIdentifier());
-            updateFlowCapableNodeConnector(modifiedDataObject);
-        }
-    }
-
-    private void addFlowCapableNodeConnector(DataTreeModification<FlowCapableNodeConnector> newDataObject) {
-        try {
-            FlowCapableNodeConnector data = newDataObject.getRootNode().getDataAfter();
-
-            String dpnFromNodeConnectorId = getDpnIdFromNodeConnector(newDataObject);
-
-            handleNodeConnectorAdded(dataBroker, dpnFromNodeConnectorId, data);
-        } catch (final Exception e) {
-            LOG.error("Add node connector failed !", e);
-        }
-    }
-
-    private void removeFlowCapableNodeConnector(DataTreeModification<FlowCapableNodeConnector> removedDataObject) {
-        try {
-            FlowCapableNodeConnector data = removedDataObject.getRootNode().getDataBefore();
-
-            String dpnFromNodeConnectorId = getDpnIdFromNodeConnector(removedDataObject);
-
-            handleNodeConnectorRemoved(dataBroker, dpnFromNodeConnectorId, data);
-        } catch (final Exception e) {
-            LOG.error("Remove node connector failed !", e);
-        }
-    }
-
-    private void updateFlowCapableNodeConnector(DataTreeModification<FlowCapableNodeConnector> modifiedDataObject) {
-        try {
-            FlowCapableNodeConnector original = modifiedDataObject.getRootNode().getDataBefore();
-            FlowCapableNodeConnector update = modifiedDataObject.getRootNode().getDataAfter();
-
-            String dpnFromNodeConnectorId = getDpnIdFromNodeConnector(modifiedDataObject);
-
-            handleNodeConnectorUpdated(dataBroker, dpnFromNodeConnectorId, original, update);
-        } catch (final Exception e) {
-            LOG.error("Update node connector failed !", e);
-        }
-    }
-
-    @SuppressWarnings("deprecation")
-    private String getDpnIdFromNodeConnector(DataTreeModification<FlowCapableNodeConnector> newDataObject) {
-        InstanceIdentifier<FlowCapableNodeConnector> key = newDataObject.getRootPath().getRootIdentifier();
-        NodeConnectorId nodeConnectorId = InstanceIdentifier.keyOf(key.firstIdentifierOf(NodeConnector.class)).getId();
-
-        String dpnFromNodeConnectorId = getDpnFromNodeConnectorId(nodeConnectorId);
-        return dpnFromNodeConnectorId;
-    }
-
-    @SuppressWarnings("deprecation")
-    private static String getDpnFromNodeConnectorId(NodeConnectorId portId) {
-        /*
-         * NodeConnectorId is of form 'openflow:dpnid:portnum'
-         */
-        String[] split = portId.getValue().split(IfmConstants.OF_URI_SEPARATOR);
-        return split[1];
-    }
-
-    private void handleNodeConnectorAdded(DataBroker dataBroker, String dpnId, FlowCapableNodeConnector nodeConnector) {
-
-        String uniName = MefInterfaceUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
-
-        if (shouldFilterOutNodeConnector(uniName)) {
-            LOG.info("filtered out interface {} with device {}", nodeConnector.getName(), dpnId);
-            return;
-        }
-
-        WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
-
-        LOG.info("Adding mef uni/device interface {} with device {}", nodeConnector.getName(), dpnId);
-
-        InstanceIdentifier<Interface> interfacePath = MefInterfaceUtils.getDeviceInterfaceInstanceIdentifier(dpnId,
-                uniName);
-        InterfaceBuilder interfaceBuilder = new InterfaceBuilder();
-        interfaceBuilder.setPhy(new Identifier45(uniName));
-        Interface deviceInterface = interfaceBuilder.build();
-        tx.merge(LogicalDatastoreType.OPERATIONAL, interfacePath, deviceInterface, true);
-
-        InstanceIdentifier<Uni> uniPath = MefInterfaceUtils.getUniInstanceIdentifier(uniName);
-        UniBuilder uniBuilder = new UniBuilder();
-        uniBuilder.setUniId(new Identifier45(uniName));
-        uniBuilder.setMacAddress(nodeConnector.getHardwareAddress());
-
-        PhysicalLayersBuilder physicalLayersBuilder = new PhysicalLayersBuilder();
-        LinksBuilder linksBuilder = new LinksBuilder();
-        List<Link> links = new ArrayList<>();
-        LinkBuilder linkBuilder = new LinkBuilder();
-        linkBuilder.setDevice(new Identifier45(dpnId));
-        linkBuilder.setInterface(uniName);
-        links.add(linkBuilder.build());
-        linksBuilder.setLink(links);
-        physicalLayersBuilder.setLinks(linksBuilder.build());
-        uniBuilder.setPhysicalLayers(physicalLayersBuilder.build());
-        Uni uni = uniBuilder.build();
-        tx.merge(LogicalDatastoreType.OPERATIONAL, uniPath, uni, true);
-
-        CheckedFuture<Void, TransactionCommitFailedException> futures = tx.submit();
-        try {
-            futures.get();
-        } catch (InterruptedException | ExecutionException e) {
-            LOG.error("Error writing to datastore (path, data) : ({}, {}), ({}, {})", interfacePath, deviceInterface,
-                    uniPath, uni);
-            throw new RuntimeException(e.getMessage());
-        }
-
-        // Reply UNI port configuration
-        uniPortManager.updateOperUni(uni.getUniId().getValue());
-    }
-
-    private void handleNodeConnectorRemoved(DataBroker dataBroker, String dpnId,
-            FlowCapableNodeConnector nodeConnector) {
-
-        String uniName = MefInterfaceUtils.getDeviceInterfaceName(dpnId, nodeConnector.getName());
-        InstanceIdentifier<Interface> interfacePath = MefInterfaceUtils.getDeviceInterfaceInstanceIdentifier(dpnId,
-                uniName);
-        if (MefInterfaceUtils.getInterface(dataBroker, dpnId, uniName, LogicalDatastoreType.OPERATIONAL) != null) {
-            MdsalUtils.syncDelete(dataBroker, LogicalDatastoreType.OPERATIONAL, interfacePath);
-        }
-
-        // Reply UNI port configuration
-        uniPortManager.removeUniPorts(uniName);
-        InstanceIdentifier<Uni> uniPath = MefInterfaceUtils.getUniInstanceIdentifier(uniName);
-        if (MefInterfaceUtils.getUni(dataBroker, uniName, LogicalDatastoreType.OPERATIONAL) != null) {
-            MdsalUtils.syncDelete(dataBroker, LogicalDatastoreType.OPERATIONAL, uniPath);
-        }
-    }
-
-    private void handleNodeConnectorUpdated(DataBroker dataBroker, String dpnFromNodeConnectorId,
-            FlowCapableNodeConnector original, FlowCapableNodeConnector update) {
-
-    }
-
-    private boolean shouldFilterOutNodeConnector(String interfaceName) {
-        String[] splits = interfaceName.split(":");
-        return splits.length > 1 && (splits[1].startsWith(TUNNEL_PREFIX) || splits[1].startsWith(BRIDGE_PREFIX));
-    }
-}