]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.logging/src/org/simantics/logging/LoggerLevel.java
Add UI dialog for dynamic reconfiguration of Logback loggers
[simantics/platform.git] / bundles / org.simantics.logging / src / org / simantics / logging / LoggerLevel.java
1 package org.simantics.logging;
2
3 import java.util.Objects;
4
5 import org.slf4j.Logger;
6
7 /**
8  * @author Tuukka Lehtonen
9  * @since 1.47.0
10  */
11 public class LoggerLevel implements Comparable<LoggerLevel> {
12
13         private final Logger logger;
14         private final String originalLevel;
15         private String loggerName;
16         private String level;
17
18         public LoggerLevel(Logger logger, String level) {
19                 Objects.requireNonNull(logger, "logger");
20                 Objects.requireNonNull(level, "level");
21                 this.logger = logger;
22                 this.originalLevel = level;
23                 this.loggerName = logger.getName();
24                 this.level = level;
25         }
26
27         public LoggerLevel(String loggerName, String level) {
28                 Objects.requireNonNull(loggerName, "loggerName");
29                 Objects.requireNonNull(level, "level");
30                 this.logger = null;
31                 this.originalLevel = null;
32                 this.loggerName = loggerName;
33                 this.level = level;
34         }
35
36         Logger getLogger() {
37                 return logger;
38         }
39
40         public String getName() {
41                 return loggerName;
42         }
43
44         public LoggerLevel setName(String name) {
45                 if (logger != null)
46                         throw new UnsupportedOperationException("Cannot rename already created logger " + loggerName + " to " + name);
47                 Objects.requireNonNull(name, "name");
48                 this.loggerName = name;
49                 return this;
50         }
51
52         public String getLevel() {
53                 return level;
54         }
55
56         public LoggerLevel setLevel(String level) {
57                 Objects.requireNonNull(level, "level");
58                 this.level = level;
59                 return this;
60         }
61
62         public boolean levelChanged() {
63                 return !Objects.equals(originalLevel, level);
64         }
65
66         public boolean isLoggerDefined() {
67                 return logger != null;
68         }
69
70         @Override
71         public int hashCode() {
72                 return Objects.hash(level, logger, loggerName);
73         }
74
75         @Override
76         public boolean equals(Object obj) {
77                 if (this == obj)
78                         return true;
79                 if (obj == null)
80                         return false;
81                 if (getClass() != obj.getClass())
82                         return false;
83                 LoggerLevel other = (LoggerLevel) obj;
84                 return Objects.equals(level, other.level)
85                                 && Objects.equals(logger, other.logger)
86                                 && Objects.equals(loggerName, other.loggerName);
87         }
88
89         @Override
90         public int compareTo(LoggerLevel o) {
91                 return loggerName.compareToIgnoreCase(o.loggerName);
92         }
93
94 }