ea8d02d8efa7c3218cbc6cc9d3ba906d4aaf03f6
[netvirt.git] /
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.netvirt.neutronvpn.l2gw;
10
11 import javax.annotation.PostConstruct;
12 import javax.inject.Inject;
13 import javax.inject.Singleton;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
17 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 /**
27  * The listener class for ITM transport zone updates.
28  */
29 @Singleton
30 public class L2GwTransportZoneListener
31         extends AsyncDataTreeChangeListenerBase<TransportZone, L2GwTransportZoneListener> {
32     private static final Logger LOG = LoggerFactory.getLogger(L2GwTransportZoneListener.class);
33     private final DataBroker dataBroker;
34     private final ItmRpcService itmRpcService;
35     private final JobCoordinator jobCoordinator;
36
37     /**
38      * Instantiates a new l2 gw transport zone listener.
39      *
40      * @param dataBroker the data broker
41      * @param itmRpcService the itm rpc service
42      */
43     @Inject
44     public L2GwTransportZoneListener(final DataBroker dataBroker, final ItmRpcService itmRpcService,
45             final JobCoordinator jobCoordinator) {
46         super(TransportZone.class, L2GwTransportZoneListener.class);
47         this.dataBroker = dataBroker;
48         this.itmRpcService = itmRpcService;
49         this.jobCoordinator = jobCoordinator;
50     }
51
52     @Override
53     @PostConstruct
54     public void init() {
55         LOG.info("{} init", getClass().getSimpleName());
56         registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
57     }
58
59     /*
60      * (non-Javadoc)
61      *
62      * @see org.opendaylight.vpnservice.datastoreutils.
63      * AsyncDataTreeChangeListenerBase#getWildCardPath()
64      */
65     @Override
66     protected InstanceIdentifier<TransportZone> getWildCardPath() {
67         return InstanceIdentifier.create(TransportZones.class).child(TransportZone.class);
68     }
69
70     /*
71      * (non-Javadoc)
72      *
73      * @see org.opendaylight.vpnservice.datastoreutils.
74      * AsyncDataTreeChangeListenerBase#remove(org.opendaylight.yangtools.yang.
75      * binding.InstanceIdentifier,
76      * org.opendaylight.yangtools.yang.binding.DataObject)
77      */
78     @Override
79     protected void remove(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModification) {
80         // do nothing
81     }
82
83     /*
84      * (non-Javadoc)
85      *
86      * @see org.opendaylight.vpnservice.datastoreutils.
87      * AsyncDataTreeChangeListenerBase#update(org.opendaylight.yangtools.yang.
88      * binding.InstanceIdentifier,
89      * org.opendaylight.yangtools.yang.binding.DataObject,
90      * org.opendaylight.yangtools.yang.binding.DataObject)
91      */
92     @Override
93     protected void update(InstanceIdentifier<TransportZone> key, TransportZone dataObjectModificationBefore,
94                           TransportZone dataObjectModificationAfter) {
95         // do nothing
96     }
97
98     /*
99      * (non-Javadoc)
100      *
101      * @see org.opendaylight.vpnservice.datastoreutils.
102      * AsyncDataTreeChangeListenerBase#add(org.opendaylight.yangtools.yang.
103      * binding.InstanceIdentifier,
104      * org.opendaylight.yangtools.yang.binding.DataObject)
105      */
106     @Override
107     protected void add(InstanceIdentifier<TransportZone> key, TransportZone tzNew) {
108         LOG.trace("Received Transport Zone Add Event: {}", tzNew);
109         if (tzNew.getTunnelType().equals(TunnelTypeVxlan.class)) {
110             AddL2GwDevicesToTransportZoneJob job =
111                     new AddL2GwDevicesToTransportZoneJob(itmRpcService, tzNew);
112             jobCoordinator.enqueueJob(job.getJobKey(), job);
113         }
114     }
115
116     /*
117      * (non-Javadoc)
118      *
119      * @see org.opendaylight.vpnservice.datastoreutils.
120      * AsyncDataTreeChangeListenerBase#getDataTreeChangeListener()
121      */
122     @Override
123     protected L2GwTransportZoneListener getDataTreeChangeListener() {
124         return this;
125     }
126 }