1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.settings4j.settings;
21
22 import java.net.URL;
23
24 import javax.xml.parsers.FactoryConfigurationError;
25
26 import org.settings4j.Settings4jInstance;
27 import org.settings4j.Settings4jRepository;
28 import org.settings4j.config.DOMConfigurator;
29 import org.settings4j.contentresolver.ClasspathContentResolver;
30
31
32
33
34
35
36 public final class SettingsManager {
37
38
39 private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(SettingsManager.class);
40
41
42
43
44
45 public static final String DEFAULT_XML_CONFIGURATION_FILE = "settings4j.xml";
46
47
48
49
50
51 public static final String DEFAULT_FALLBACK_CONFIGURATION_FILE = "org/settings4j/config/defaultsettings4j.xml";
52
53
54
55
56 private static Settings4jRepository settingsRepository = new DefaultSettingsRepository();
57 static {
58 initializeRepository(SettingsManager.DEFAULT_XML_CONFIGURATION_FILE);
59 initializeRepositoryIfNecessary();
60 }
61
62
63 private SettingsManager() {
64 super();
65 }
66
67
68
69
70
71
72 public static Settings4jRepository getSettingsRepository() {
73 return settingsRepository;
74 }
75
76
77
78
79
80
81 public static Settings4jInstance getSettings() {
82 initializeRepositoryIfNecessary();
83
84 return getSettingsRepository().getSettings();
85 }
86
87
88
89
90 private static void initializeRepositoryIfNecessary() {
91 if (getSettingsRepository().getConnectorCount() == 0) {
92
93 initializeRepository(SettingsManager.DEFAULT_FALLBACK_CONFIGURATION_FILE);
94 }
95 }
96
97 private static void initializeRepository(final String configurationFile) throws FactoryConfigurationError {
98 LOG.debug("Using URL [{}] for automatic settings4j configuration.", configurationFile);
99
100 final URL url = ClasspathContentResolver.getResource(configurationFile);
101
102
103
104 if (url != null) {
105 LOG.info("The settings4j will be configured with the config: {}", url);
106 try {
107 DOMConfigurator.configure(url, getSettingsRepository());
108 } catch (final NoClassDefFoundError e) {
109 LOG.warn("Error during initialization {}", configurationFile, e);
110 }
111 } else {
112 if (SettingsManager.DEFAULT_FALLBACK_CONFIGURATION_FILE.equals(configurationFile)) {
113 LOG.error("Could not find resource: [{}].", configurationFile);
114 } else {
115 LOG.debug("Could not find resource: [{}]. Use default fallback.", configurationFile);
116 }
117 }
118 }
119 }