BUG 1839 - HTTP delete of non existing data
[controller.git] / opendaylight / md-sal / statistics-manager / src / main / java / org / opendaylight / controller / md / statistics / manager / AbstractListeningStatsTracker.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.md.statistics.manager;
9
10 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
11 import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
12 import org.opendaylight.yangtools.concepts.ListenerRegistration;
13 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
16
17 import com.google.common.base.Preconditions;
18
19 abstract class AbstractListeningStatsTracker<I, K> extends AbstractStatsTracker<I, K> implements AutoCloseable, DataChangeListener {
20     private static final Logger logger = LoggerFactory.getLogger(AbstractListeningStatsTracker.class);
21     private ListenerRegistration<?> reg;
22
23     protected AbstractListeningStatsTracker(FlowCapableContext context) {
24         super(context);
25     }
26
27     protected abstract InstanceIdentifier<?> listenPath();
28     protected abstract String statName();
29
30     public void start(final DataBrokerService dbs) {
31         Preconditions.checkState(reg == null);
32
33         reg = dbs.registerDataChangeListener(listenPath(), this);
34         logger.debug("{} Statistics tracker for node {} started", statName(), getNodeIdentifier());
35     }
36
37     @Override
38     public final void close() {
39         if (reg != null) {
40             try {
41                 reg.close();
42             } catch (Exception e) {
43                 logger.warn("Failed to stop {} Statistics tracker for node {}", statName(), getNodeIdentifier(), e);
44             }
45             reg = null;
46         }
47     }
48 }