1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.util;
18
19 import java.io.File;
20 import java.util.List;
21
22 import org.apache.logging.log4j.core.config.Configuration;
23 import org.apache.logging.log4j.core.config.ConfigurationListener;
24 import org.apache.logging.log4j.core.config.Reconfigurable;
25
26
27
28
29 public abstract class AbstractWatcher implements Watcher {
30
31 private final Reconfigurable reconfigurable;
32 private final List<ConfigurationListener> configurationListeners;
33 private final Log4jThreadFactory threadFactory;
34 private final Configuration configuration;
35 private Source source;
36
37 public AbstractWatcher(final Configuration configuration, final Reconfigurable reconfigurable,
38 final List<ConfigurationListener> configurationListeners) {
39 this.configuration = configuration;
40 this.reconfigurable = reconfigurable;
41 this.configurationListeners = configurationListeners;
42 this.threadFactory = configurationListeners != null ?
43 Log4jThreadFactory.createDaemonThreadFactory("ConfiguratonFileWatcher") : null;
44 }
45
46 @Override
47 public List<ConfigurationListener> getListeners() {
48 return configurationListeners;
49 }
50
51 @Override
52 public void modified() {
53 for (final ConfigurationListener configurationListener : configurationListeners) {
54 final Thread thread = threadFactory.newThread(new ReconfigurationRunnable(configurationListener, reconfigurable));
55 thread.start();
56 }
57 }
58
59 public Configuration getConfiguration() {
60 return configuration;
61 }
62
63 public abstract long getLastModified();
64
65 public abstract boolean isModified();
66
67 @Override
68 public void watching(Source source) {
69 this.source = source;
70 }
71
72 @Override
73 public Source getSource() {
74 return source;
75 }
76
77
78
79
80 public static class ReconfigurationRunnable implements Runnable {
81
82 private final ConfigurationListener configurationListener;
83 private final Reconfigurable reconfigurable;
84
85 public ReconfigurationRunnable(final ConfigurationListener configurationListener, final Reconfigurable reconfigurable) {
86 this.configurationListener = configurationListener;
87 this.reconfigurable = reconfigurable;
88 }
89
90 @Override
91 public void run() {
92 configurationListener.onChange(reconfigurable);
93 }
94 }
95 }