48ef0e38eb991910cd01b4711f820eb8b0e17016
[utils] / system / general / src / main / java / org / wamblee / system / components / PropertyComponent.java
1 /*
2  * Copyright 2008 the original author or authors.
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 org.wamblee.system.components;
17
18 import java.io.IOException;
19 import java.util.Properties;
20
21 import org.wamblee.io.InputResource;
22 import org.wamblee.system.core.AbstractComponent;
23 import org.wamblee.system.core.DefaultProvidedInterface;
24 import org.wamblee.system.core.ProvidedInterface;
25 import org.wamblee.system.core.Scope;
26
27 /**
28  * Property component that reads a property file and provides
29  * it to other components through a provided interface.
30  * 
31  * NOTE: when multiple property components are used, disambiguation
32  * of provided and required interfaces is needed. 
33  *  
34  * @author Erik Brakkee
35  */
36 public class PropertyComponent extends AbstractComponent<Properties> {
37     
38     private static ProvidedInterface PROPS = new DefaultProvidedInterface("props", Properties.class);
39     
40     private Properties props;
41     
42     public PropertyComponent(String aName, InputResource aResource) throws IOException { 
43         this(aName, readProps(aResource)); 
44     }
45     
46     private static Properties readProps(InputResource aResource) throws IOException {
47         Properties props = new Properties(); 
48         props.load(aResource.getInputStream());
49         return props; 
50     }
51
52     public PropertyComponent(String aName, Properties aProps) {
53         super(aName);
54         props = aProps; 
55         
56         addProvidedInterface(PROPS);
57     }
58
59     @Override
60     protected Properties doStart(Scope aScope) {
61         addInterface(PROPS, props, aScope);
62         return props; 
63     }
64
65     @Override
66     protected void doStop(Properties aRuntime) {
67         // Empty 
68     }
69
70 }