2 * Copyright (c) 2016 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
9 package org.opendaylight.netvirt.neutronvpn.l2gw;
11 import javax.annotation.PreDestroy;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
15 import org.opendaylight.infrautils.utils.concurrent.Executors;
16 import org.opendaylight.mdsal.binding.api.DataBroker;
17 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
18 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayCache;
19 import org.opendaylight.serviceutils.tools.listener.AbstractAsyncDataTreeChangeListener;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
29 * The listener class for ITM transport zone updates.
32 public class L2GwTransportZoneListener extends AbstractAsyncDataTreeChangeListener<TransportZone> {
33 private static final Logger LOG = LoggerFactory.getLogger(L2GwTransportZoneListener.class);
34 private final DataBroker dataBroker;
35 private final ItmRpcService itmRpcService;
36 private final JobCoordinator jobCoordinator;
37 private final L2GatewayCache l2GatewayCache;
40 * Instantiates a new l2 gw transport zone listener.
42 * @param dataBroker the data broker
43 * @param itmRpcService the itm rpc service
46 public L2GwTransportZoneListener(final DataBroker dataBroker, final ItmRpcService itmRpcService,
47 final JobCoordinator jobCoordinator, final L2GatewayCache l2GatewayCache) {
48 super(dataBroker, LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(TransportZones.class)
49 .child(TransportZone.class), Executors.newSingleThreadExecutor("L2GwTransportZoneListener", LOG));
50 this.dataBroker = dataBroker;
51 this.itmRpcService = itmRpcService;
52 this.jobCoordinator = jobCoordinator;
53 this.l2GatewayCache = l2GatewayCache;
57 LOG.info("{} init", getClass().getSimpleName());
64 Executors.shutdownAndAwaitTermination(getExecutorService());
70 * @see org.opendaylight.vpnservice.datastoreutils.
71 * AsyncDataTreeChangeListenerBase#remove(org.opendaylight.yangtools.yang.
72 * binding.InstanceIdentifier,
73 * org.opendaylight.yangtools.yang.binding.DataObject)
76 public void remove(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModification) {
83 * @see org.opendaylight.vpnservice.datastoreutils.
84 * AsyncDataTreeChangeListenerBase#update(org.opendaylight.yangtools.yang.
85 * binding.InstanceIdentifier,
86 * org.opendaylight.yangtools.yang.binding.DataObject,
87 * org.opendaylight.yangtools.yang.binding.DataObject)
90 public void update(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModificationBefore,
91 TransportZone dataObjectModificationAfter) {
98 * @see org.opendaylight.vpnservice.datastoreutils.
99 * AsyncDataTreeChangeListenerBase#add(org.opendaylight.yangtools.yang.
100 * binding.InstanceIdentifier,
101 * org.opendaylight.yangtools.yang.binding.DataObject)
104 public void add(InstanceIdentifier<TransportZone> key, TransportZone tzNew) {
105 LOG.trace("Received Transport Zone Add Event: {}", tzNew);
106 if (TunnelTypeVxlan.class.equals(tzNew.getTunnelType())) {
107 AddL2GwDevicesToTransportZoneJob job =
108 new AddL2GwDevicesToTransportZoneJob(itmRpcService, tzNew, l2GatewayCache);
109 jobCoordinator.enqueueJob(job.getJobKey(), job);