2 * Copyright (c) 2016, 2017 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.genius.itm.listeners;
10 import com.google.common.base.Optional;
11 import javax.annotation.PostConstruct;
12 import javax.annotation.PreDestroy;
13 import javax.inject.Inject;
14 import javax.inject.Singleton;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
19 import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
20 import org.opendaylight.genius.itm.confighelpers.ItmMonitorIntervalWorker;
21 import org.opendaylight.genius.itm.impl.ItmUtils;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone;
25 import org.opendaylight.yangtools.concepts.ListenerRegistration;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
31 public class TunnelMonitorIntervalListener
32 extends AsyncDataTreeChangeListenerBase<TunnelMonitorInterval, TunnelMonitorIntervalListener>
33 implements AutoCloseable {
34 private static final Logger LOG = LoggerFactory.getLogger(TunnelMonitorIntervalListener.class);
35 private ListenerRegistration<DataChangeListener> monitorIntervalListenerRegistration;
36 private final DataBroker broker;
39 public TunnelMonitorIntervalListener(DataBroker dataBroker) {
40 super(TunnelMonitorInterval.class, TunnelMonitorIntervalListener.class);
41 this.broker = dataBroker;
46 registerListener(LogicalDatastoreType.CONFIGURATION, this.broker);
47 LOG.info("TunnelMonitorIntervalListener Started");
53 LOG.info("TunnelMonitorIntervalListener Closed");
56 @Override protected InstanceIdentifier<TunnelMonitorInterval> getWildCardPath() {
57 return InstanceIdentifier.create(TunnelMonitorInterval.class);
61 protected void remove(InstanceIdentifier<TunnelMonitorInterval> key, TunnelMonitorInterval dataObjectModification) {
62 LOG.debug("remove TunnelMonitorIntervalListener called with {}",dataObjectModification.getInterval());
63 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
64 InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
65 Optional<TransportZones> transportZonesOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,
67 if (transportZonesOptional.isPresent()) {
68 TransportZones tzones = transportZonesOptional.get();
69 for (TransportZone tzone : tzones.getTransportZone()) {
70 //if you remove configuration, the last configured interval is only set i.e no change
71 LOG.debug("Remove:Calling TunnelMonitorIntervalWorker with tzone = {} and {}",
72 tzone.getZoneName(),dataObjectModification.getInterval());
73 ItmMonitorIntervalWorker toggleWorker = new ItmMonitorIntervalWorker(tzone.getZoneName(),
74 dataObjectModification.getInterval(), broker);
75 coordinator.enqueueJob(tzone.getZoneName(), toggleWorker);
80 @Override protected void update(InstanceIdentifier<TunnelMonitorInterval> key,
81 TunnelMonitorInterval dataObjectModificationBefore,
82 TunnelMonitorInterval dataObjectModificationAfter) {
83 LOG.debug("update TunnelMonitorIntervalListener called with {}",dataObjectModificationAfter.getInterval());
84 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
85 InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
86 Optional<TransportZones> transportZonesOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,
88 if (transportZonesOptional.isPresent()) {
89 TransportZones tzones = transportZonesOptional.get();
90 for (TransportZone tzone : tzones.getTransportZone()) {
91 LOG.debug("Update:Calling TunnelMonitorIntervalWorker with tzone = {} and {}",
92 tzone.getZoneName(),dataObjectModificationAfter.getInterval());
93 ItmMonitorIntervalWorker intervalWorker = new ItmMonitorIntervalWorker(tzone.getZoneName(),
94 dataObjectModificationAfter.getInterval(), broker);
95 coordinator.enqueueJob(tzone.getZoneName(), intervalWorker);
101 protected void add(InstanceIdentifier<TunnelMonitorInterval> key, TunnelMonitorInterval dataObjectModification) {
102 LOG.debug("Add TunnelMonitorIntervalListener called with {}",dataObjectModification.getInterval());
103 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
104 InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
105 Optional<TransportZones> transportZonesOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,
107 if (transportZonesOptional.isPresent()) {
108 TransportZones tzones = transportZonesOptional.get();
109 for (TransportZone tzone : tzones.getTransportZone()) {
110 LOG.debug("Add:Calling TunnelMonitorIntervalWorker with tzone = {} and {}",
111 tzone.getZoneName(),dataObjectModification.getInterval());
112 ItmMonitorIntervalWorker intervalWorker = new ItmMonitorIntervalWorker(tzone.getZoneName(),
113 dataObjectModification.getInterval(), broker);
114 //conversion to milliseconds done while writing to i/f-mgr config DS
115 coordinator.enqueueJob(tzone.getZoneName(), intervalWorker);
120 @Override protected TunnelMonitorIntervalListener getDataTreeChangeListener() {
121 return TunnelMonitorIntervalListener.this;