2 * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.listeners;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.vpnservice.datastoreutils.AsyncDataTreeChangeListenerBase;
13 import org.opendaylight.vpnservice.datastoreutils.DataStoreJobCoordinator;
14 import org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.statehelpers.FlowBasedServicesStateBindHelper;
15 import org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.statehelpers.FlowBasedServicesStateUnbindHelper;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
18 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
19 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory;
22 import java.util.List;
23 import java.util.concurrent.Callable;
25 public class FlowBasedServicesInterfaceStateListener extends AsyncDataTreeChangeListenerBase<Interface, FlowBasedServicesInterfaceStateListener> {
26 private static final Logger LOG = LoggerFactory.getLogger(FlowBasedServicesInterfaceStateListener.class);
27 private DataBroker dataBroker;
29 public FlowBasedServicesInterfaceStateListener(final DataBroker dataBroker) {
30 super(Interface.class, FlowBasedServicesInterfaceStateListener.class);
31 this.dataBroker = dataBroker;
35 protected InstanceIdentifier<Interface> getWildCardPath() {
36 return InstanceIdentifier.create(InterfacesState.class).child(Interface.class);
40 protected void remove(InstanceIdentifier<Interface> key, Interface interfaceStateOld) {
41 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
42 RendererStateInterfaceUnbindWorker stateUnbindWorker =
43 new RendererStateInterfaceUnbindWorker(interfaceStateOld);
44 coordinator.enqueueJob(interfaceStateOld.getName(), stateUnbindWorker);
48 protected void update(InstanceIdentifier<Interface> key, Interface interfaceStateOld, Interface interfaceStateNew) {
49 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
50 if (interfaceStateNew.getOperStatus() == Interface.OperStatus.Down) {
51 RendererStateInterfaceUnbindWorker stateUnbindWorker =
52 new RendererStateInterfaceUnbindWorker(interfaceStateNew);
53 coordinator.enqueueJob(interfaceStateNew.getName(), stateUnbindWorker);
57 RendererStateInterfaceBindWorker stateBindWorker = new RendererStateInterfaceBindWorker(interfaceStateNew);
58 coordinator.enqueueJob(interfaceStateNew.getName(), stateBindWorker);
62 protected void add(InstanceIdentifier<Interface> key, Interface interfaceStateNew) {
63 if (interfaceStateNew.getOperStatus() == Interface.OperStatus.Down) {
64 LOG.info("Interface: {} operstate is down when adding. Not Binding services", interfaceStateNew.getName());
68 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
69 RendererStateInterfaceBindWorker stateBindWorker = new RendererStateInterfaceBindWorker(interfaceStateNew);
70 coordinator.enqueueJob(interfaceStateNew.getName(), stateBindWorker);
74 protected FlowBasedServicesInterfaceStateListener getDataTreeChangeListener() {
75 return FlowBasedServicesInterfaceStateListener.this;
78 private class RendererStateInterfaceBindWorker implements Callable<List<ListenableFuture<Void>>> {
81 public RendererStateInterfaceBindWorker(Interface iface) {
86 public List<ListenableFuture<Void>> call() throws Exception {
87 return FlowBasedServicesStateBindHelper.bindServicesOnInterface(iface, dataBroker);
91 private class RendererStateInterfaceUnbindWorker implements Callable<List<ListenableFuture<Void>>> {
94 public RendererStateInterfaceUnbindWorker(Interface iface) {
99 public List<ListenableFuture<Void>> call() throws Exception {
100 return FlowBasedServicesStateUnbindHelper.unbindServicesFromInterface(iface, dataBroker);