/*
* Copyright (c) 2016 CableLabs 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.impl;
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.common.api.data.LogicalDatastoreType;
import org.opendaylight.unimgr.api.UnimgrDataTreeChangeListener;
import org.opendaylight.unimgr.command.EvcAddCommand;
import org.opendaylight.unimgr.command.EvcRemoveCommand;
import org.opendaylight.unimgr.command.EvcUpdateCommand;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EvcDataTreeChangeListener extends UnimgrDataTreeChangeListener {
private static final Logger LOG = LoggerFactory.getLogger(EvcDataTreeChangeListener.class);
private final ListenerRegistration listener;
public EvcDataTreeChangeListener(final DataBroker dataBroker) {
super(dataBroker);
final DataTreeIdentifier dataTreeIid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getEvcTopologyPath());
listener = dataBroker.registerDataTreeChangeListener(dataTreeIid, this);
LOG.info("EvcDataTreeChangeListener created and registered");
}
@Override
public void add(final DataTreeModification newDataObject) {
if(newDataObject.getRootPath() != null && newDataObject.getRootNode() != null) {
LOG.info("evc link {} created", newDataObject.getRootNode().getIdentifier());
final EvcAddCommand evcAddCmd = new EvcAddCommand(dataBroker, newDataObject);
evcAddCmd.execute();
}
}
@Override
public void close() throws Exception {
listener.close();
}
private InstanceIdentifier getEvcTopologyPath() {
final InstanceIdentifier evcPath = InstanceIdentifier
.create(NetworkTopology.class)
.child(Topology.class, new TopologyKey(UnimgrConstants.EVC_TOPOLOGY_ID))
.child(Link.class);
return evcPath;
}
@Override
public void remove(final DataTreeModification removedDataObject) {
if(removedDataObject.getRootPath() != null && removedDataObject.getRootNode() != null) {
LOG.info("evc link {} deleted", removedDataObject.getRootNode().getIdentifier());
final EvcRemoveCommand evcRemovedCmd = new EvcRemoveCommand(dataBroker, removedDataObject);
evcRemovedCmd.execute();
}
}
@Override
public void update(final DataTreeModification modifiedDataObject) {
if(modifiedDataObject.getRootPath() != null && modifiedDataObject.getRootNode() != null) {
LOG.info("evc link {} updated", modifiedDataObject.getRootNode().getIdentifier());
final EvcUpdateCommand evcUpdateCmd = new EvcUpdateCommand(dataBroker, modifiedDataObject);
evcUpdateCmd.execute();
}
}
}