Refactor DOMDataBrokerImpl
[controller.git] / opendaylight / config / logback-config / src / main / java / org / opendaylight / controller / config / yang / logback / config / LogbackStatusListener.java
1 /*
2  * Copyright (c) 2013 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
9 /**
10  * Generated file
11
12  * Generated from: yang module name: config-test  yang module local name: testing
13  * Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
14  * Generated at: Fri Sep 27 14:06:33 CEST 2013
15  *
16  * Do not modify this file unless it is present under src/main directory
17  */
18 package org.opendaylight.controller.config.yang.logback.config;
19
20 import java.io.Closeable;
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.List;
25
26 import org.slf4j.LoggerFactory;
27
28 import ch.qos.logback.classic.LoggerContext;
29 import ch.qos.logback.core.status.StatusBase;
30 import ch.qos.logback.core.status.StatusListener;
31 import ch.qos.logback.core.status.StatusManager;
32
33 public class LogbackStatusListener implements StatusListener, LogbackRuntimeMXBean, Closeable {
34
35     private final List<StatusTO> receivedStatuses;
36     private final LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper;
37     private LogbackRuntimeRegistration reg;
38
39     public LogbackStatusListener(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
40         receivedStatuses = new ArrayList<>();
41         this.rootRuntimeBeanRegistratorWrapper = rootRuntimeBeanRegistratorWrapper;
42     }
43
44     @Override
45     public synchronized List<StatusTO> getStatusTO() {
46         return Collections.unmodifiableList(receivedStatuses);
47     }
48
49     @Override
50     public synchronized void reset() {
51         receivedStatuses.clear();
52     }
53
54     public LogbackRuntimeRegistration register() {
55         reg = registerToJMX(rootRuntimeBeanRegistratorWrapper);
56         registerToLogback();
57         return reg;
58     }
59
60     private LogbackRuntimeRegistration registerToJMX(LogbackRuntimeRegistrator rootRuntimeBeanRegistratorWrapper) {
61         return rootRuntimeBeanRegistratorWrapper.register(this);
62     }
63
64     private synchronized void registerToLogback() {
65         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
66         final StatusManager statusManager = context.getStatusManager();
67
68         statusManager.remove(this);
69         reset();
70
71         statusManager.add(this);
72         addInitialStatuses(statusManager);
73     }
74
75     private void addInitialStatuses(StatusManager statusManager) {
76         for (ch.qos.logback.core.status.Status status : statusManager.getCopyOfStatusList()) {
77             addStatusEvent(status);
78         }
79     }
80
81     @Override
82     public synchronized void addStatusEvent(ch.qos.logback.core.status.Status status) {
83         receivedStatuses.add(transformStatus(status));
84     }
85
86     private StatusTO transformStatus(ch.qos.logback.core.status.Status status) {
87         StatusTO transformed = new StatusTO();
88
89         transformed.setDate(status.getDate());
90         transformed.setLevel(transformStatusLevel(status.getLevel()));
91         transformed.setMessage(status.getMessage());
92
93         return transformed;
94     }
95
96     private String transformStatusLevel(int status) {
97         switch (status) {
98         case StatusBase.INFO:
99             return "INFO";
100         case StatusBase.WARN:
101             return "WARN";
102         case StatusBase.ERROR:
103             return "ERROR";
104         default:
105             throw new IllegalStateException("Unknown status level " + status);
106         }
107     }
108
109     @Override
110     public void close() throws IOException {
111         if (reg != null)
112             reg.close();
113         unregisterFromLogback();
114     }
115
116     private void unregisterFromLogback() {
117         LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
118         final StatusManager statusManager = context.getStatusManager();
119         statusManager.remove(this);
120     }
121 }