92f76c7fbc7034484155b899f9a089c2cc91605f
[netvirt.git] / cloud-servicechain / impl / src / main / java / org / opendaylight / netvirt / cloudservicechain / listeners / VpnPseudoPortListener.java
1 /*
2  * Copyright (c) 2016, 2017 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 package org.opendaylight.netvirt.cloudservicechain.listeners;
9
10 import javax.annotation.PostConstruct;
11 import javax.inject.Inject;
12 import javax.inject.Singleton;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.genius.datastoreutils.AsyncClusteredDataTreeChangeListenerBase;
16 import org.opendaylight.netvirt.cloudservicechain.utils.VpnPseudoPortCache;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.cloud.servicechain.state.rev160711.VpnToPseudoPortList;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.cloud.servicechain.state.rev160711.vpn.to.pseudo.port.list.VpnToPseudoPortData;
19 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * Listens to changes in the Vpn to VpnPseudoPort relationship with the only
25  * purpose of updating the VpnPseudoPorts caches in all blades.
26  *
27  */
28 @Singleton
29 public class VpnPseudoPortListener
30         extends AsyncClusteredDataTreeChangeListenerBase<VpnToPseudoPortData, VpnPseudoPortListener> {
31
32     private static final Logger LOG = LoggerFactory.getLogger(VpnPseudoPortListener.class);
33     private final DataBroker dataBroker;
34     private final VpnPseudoPortCache vpnPseudoPortCache;
35
36     @Inject
37     public VpnPseudoPortListener(final DataBroker dataBroker, final VpnPseudoPortCache vpnPseudoPortCache) {
38         this.dataBroker = dataBroker;
39         this.vpnPseudoPortCache = vpnPseudoPortCache;
40     }
41
42     @PostConstruct
43     public void init() {
44         registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
45     }
46
47     @Override
48     protected void remove(InstanceIdentifier<VpnToPseudoPortData> identifier, VpnToPseudoPortData del) {
49         LOG.trace("Reacting to VpnToPseudoPortData removal: iid={}", identifier);
50         vpnPseudoPortCache.remove(del.getVrfId());
51     }
52
53     @Override
54     protected void update(InstanceIdentifier<VpnToPseudoPortData> identifier, VpnToPseudoPortData original,
55                           VpnToPseudoPortData update) {
56         vpnPseudoPortCache.add(update.getVrfId(), update.getVpnLportTag());
57     }
58
59     @Override
60     protected void add(InstanceIdentifier<VpnToPseudoPortData> identifier, VpnToPseudoPortData add) {
61         LOG.trace("Reacting to VpnToPseudoPortData creation:  vrf={}  vpnPseudoLportTag={}  scfTag={}  scfTable={}.",
62                   add.getVrfId(), add.getVpnLportTag(), add.getScfTag(), add.getScfTableId());
63         vpnPseudoPortCache.add(add.getVrfId(), add.getVpnLportTag());
64     }
65
66     @Override
67     protected InstanceIdentifier<VpnToPseudoPortData> getWildCardPath() {
68         return InstanceIdentifier.builder(VpnToPseudoPortList.class).child(VpnToPseudoPortData.class).build();
69     }
70
71     @Override
72     protected VpnPseudoPortListener getDataTreeChangeListener() {
73         return this;
74     }
75
76
77
78 }