View Javadoc
1   package com.github.valfirst.slf4jtest;
2   
3   import java.io.IOException;
4   import java.io.InputStream;
5   import java.io.UncheckedIOException;
6   import java.util.Properties;
7   
8   class OverridableProperties {
9       private static final Properties EMPTY_PROPERTIES = new Properties();
10      private final String propertySourceName;
11      private final Properties properties;
12  
13      OverridableProperties(final String propertySourceName) throws IOException {
14          this.propertySourceName = propertySourceName;
15          this.properties = getProperties();
16      }
17  
18      private Properties getProperties() throws IOException {
19          InputStream resourceAsStream =
20                  Thread.currentThread()
21                          .getContextClassLoader()
22                          .getResourceAsStream(propertySourceName + ".properties");
23          if (resourceAsStream != null) {
24              return loadProperties(resourceAsStream);
25          }
26          return EMPTY_PROPERTIES;
27      }
28  
29      private static Properties loadProperties(InputStream propertyResource) throws IOException {
30          try (InputStream closablePropertyResource = propertyResource) {
31              final Properties loadedProperties = new Properties();
32              loadedProperties.load(closablePropertyResource);
33              return loadedProperties;
34          }
35      }
36  
37      String getProperty(final String propertyKey, final String defaultValue) {
38          final String propertyFileProperty = properties.getProperty(propertyKey, defaultValue);
39          return System.getProperty(propertySourceName + "." + propertyKey, propertyFileProperty);
40      }
41  
42      public static OverridableProperties createUnchecked(final String propertySourceName) {
43          try {
44              return new OverridableProperties(propertySourceName);
45          } catch (IOException e) {
46              throw new UncheckedIOException(e);
47          }
48      }
49  }