View Javadoc

1   /*
2    * Copyright 2012-2013 smartics, Kronseder & Reiner GmbH
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package de.smartics.properties.spi.config.support;
17  
18  import java.io.BufferedInputStream;
19  import java.io.IOException;
20  import java.io.InputStream;
21  import java.util.Properties;
22  
23  import org.apache.commons.io.IOUtils;
24  
25  import de.smartics.properties.api.config.domain.ConfigurationLoadingException;
26  import de.smartics.properties.api.config.domain.key.ConfigurationKey;
27  
28  /**
29   * Simple utilities class to help on dealing with properties.
30   */
31  public final class PropertiesHelper
32  {
33    // ********************************* Fields *********************************
34  
35    // --- constants ------------------------------------------------------------
36  
37    // --- members --------------------------------------------------------------
38  
39    /**
40     * The key to the configuration to load properties for.
41     */
42    private final ConfigurationKey<?> key;
43  
44    // ****************************** Initializer *******************************
45  
46    // ****************************** Constructors ******************************
47  
48    /**
49     * Default constructor.
50     *
51     * @param key the key to the configuration to load properties for.
52     */
53    public PropertiesHelper(final ConfigurationKey<?> key)
54    {
55      this.key = key;
56    }
57  
58    // ****************************** Inner Classes *****************************
59  
60    // ********************************* Methods ********************************
61  
62    // --- init -----------------------------------------------------------------
63  
64    // --- get&set --------------------------------------------------------------
65  
66    // --- business -------------------------------------------------------------
67  
68    /**
69     * Reads the properties from the thread context class path location.
70     *
71     * @param resourceId the resource on the class path to read.
72     * @return the properties from the class path.
73     */
74    public Properties readProperties(final String resourceId)
75    {
76      final ClassLoader loader = Thread.currentThread().getContextClassLoader();
77      return readProperties(loader, resourceId);
78    }
79  
80    /**
81     * Reads the properties from the given class path location.
82     *
83     * @param classLoader the class loader to access the resource.
84     * @param resourceId the resource on the class path to read.
85     * @return the properties from the class path.
86     */
87    public Properties readProperties(final ClassLoader classLoader,
88        final String resourceId)
89    {
90      final InputStream input = classLoader.getResourceAsStream(resourceId);
91      return readProperties(resourceId, input);
92    }
93  
94    /**
95     * Reads the properties from the given stream.
96     * <p>
97     * Closes the stream after the properties are read.
98     * </p>
99     *
100    * @param resourceId the identifier of the stream. Used for error reporting.
101    * @param input the stream to read from.
102    * @return the properties from the stream.
103    */
104   public Properties readProperties(final String resourceId,
105       final InputStream input)
106   {
107     final BufferedInputStream bin = new BufferedInputStream(input);
108     try
109     {
110       final Properties properties = new Properties();
111       properties.load(bin);
112       return properties;
113     }
114     catch (final IOException e)
115     {
116       throw new ConfigurationLoadingException(e, key, resourceId);
117     }
118     finally
119     {
120       IOUtils.closeQuietly(bin);
121     }
122   }
123 
124   // --- object basics --------------------------------------------------------
125 
126 }