1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.settings4j.helper.web;
21
22 import java.io.ByteArrayInputStream;
23 import java.io.IOException;
24 import java.io.UnsupportedEncodingException;
25 import java.util.List;
26 import java.util.Map.Entry;
27 import java.util.Properties;
28 import java.util.Set;
29
30 import javax.servlet.ServletContext;
31
32 import org.settings4j.Connector;
33 import org.settings4j.Settings4j;
34 import org.settings4j.connector.PropertyFileConnector;
35
36
37
38
39
40
41
42
43
44 public class DefaultPropertiesLoader {
45
46
47 private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(DefaultPropertiesLoader.class);
48
49
50
51
52 public static final String CONNECTOR_NAME = "DefaultPropertiesFromWebXml";
53
54
55
56
57 public static final String DEFAULT_PROPERTIES = "settings4jDefaultProperties";
58
59
60
61
62
63
64
65 public void initDefaultProperties(final ServletContext servletContext) {
66 synchronized (Settings4j.getSettingsRepository().getSettings()) {
67 if (Settings4j.getSettingsRepository().getSettings().getConnector(CONNECTOR_NAME) == null) {
68 addPropertyConnector(servletContext);
69 } else {
70 LOG.info("{} Connector already exists in Settings4j", CONNECTOR_NAME);
71 }
72 }
73 }
74
75 private void addPropertyConnector(final ServletContext servletContext) {
76 if (servletContext.getInitParameter(DEFAULT_PROPERTIES) != null) {
77 final Properties property = getDefaultProperties(servletContext);
78 if (LOG.isDebugEnabled()) {
79 LOG.debug("Add Property Connector '{}' to the Settings4j Repository.", CONNECTOR_NAME);
80 final Set<Entry<Object, Object>> entries = property.entrySet();
81 for (final Entry<Object, Object> entry : entries) {
82 LOG.debug("{} = {}", entry.getKey(), entry.getValue());
83 }
84 }
85 addPropertyConnector(property);
86 } else {
87 LOG.debug("No InitParameter 'settings4jDefaultProperties' found.");
88 }
89 }
90
91 private void addPropertyConnector(final Properties property) {
92 final PropertyFileConnector propertyFileConnector = new PropertyFileConnector();
93 propertyFileConnector.setName(CONNECTOR_NAME);
94 propertyFileConnector.setProperty(property);
95 Settings4j.getSettingsRepository().getSettings().addConnector(propertyFileConnector);
96 if (LOG.isDebugEnabled()) {
97 final List<Connector> connectors = Settings4j.getConnectors();
98 LOG.debug("Current Connectors are {}", connectors.size());
99 for (final Connector connector : connectors) {
100 LOG.debug("Connector: {}", connector.getName());
101 }
102
103 }
104 }
105
106 private Properties getDefaultProperties(final ServletContext servletContext) {
107 final String defaultProperties = servletContext.getInitParameter(DEFAULT_PROPERTIES);
108 final Properties property = new Properties();
109 try {
110 property.load(new ByteArrayInputStream(defaultProperties.getBytes("ISO-8859-1")));
111 } catch (final UnsupportedEncodingException e) {
112
113 throw new IllegalStateException(e.getMessage(), e);
114 } catch (final IOException e) {
115
116 throw new IllegalStateException(e.getMessage(), e);
117 }
118 return property;
119 }
120 }