1 package org.wcb.autohome.util;
2 /***
3 * Copyright (C) 1999 Walter Bogaardt
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18 *
19 */
20 import java.util.Properties;
21 import java.io.BufferedInputStream;
22 import java.io.FileInputStream;
23 import java.io.IOException;
24 import java.io.FileOutputStream;
25 import java.io.PrintWriter;
26 import java.io.BufferedWriter;
27 import java.io.FileWriter;
28
29 /***
30 * Project: Alice X10 Interface
31 *
32 * Filename: $Id: HAConfigLoader.java,v 1.11 2004/02/02 23:41:31 wbogaardt Exp $
33 *
34 * Abstract: Server Config file loader
35 *
36 * @author wbogaardt
37 * @version 1.1
38 */
39 public class HAConfigLoader {
40
41 public static final String sDEFAULT_FILENAME = "HASconfig.ini";
42 public static final String sFILE_HEADER = "#This is the property file for Alice server.\n"+
43 "# To set values in this file uncomment the line you wish to set a value\n"+
44 "# for (by deleting the # at the beginning) and then fill in a value after the =\n";
45 private String sUserHome = System.getProperty("user.home");
46 private static Properties pCONFIGURATION = null;
47 private String sFileName;
48 private static final String sSEPARATOR = System.getProperty("file.separator");
49 private String sConfigurationFileName = null;
50
51 public HAConfigLoader()
52 {
53 this(sDEFAULT_FILENAME);
54 }
55
56 public HAConfigLoader(String fileName)
57 {
58 this(fileName, null);
59 }
60
61 public HAConfigLoader(String fileName, String directory)
62 {
63 if (directory != null)
64 {
65 sUserHome = directory;
66 }
67 this.sConfigurationFileName = fileName;
68 pCONFIGURATION = load(sUserHome, fileName);
69 }
70
71 /***
72 * Load the specified properties file. If the file does not exist, a
73 * default file will be created.
74 */
75 public Properties load(String directory, String file)
76 {
77 Properties returnValue = null;
78 try
79 {
80 returnValue = loadProperties(directory, file);
81 }
82 catch (IOException e)
83 {
84 System.err.println("HASConfig.ini not found building default file.");
85 try
86 {
87 buildDefaultFile(directory,file);
88 returnValue = loadProperties(directory, file);
89 }
90 catch(IOException ex)
91 {
92 }
93 }
94 return returnValue;
95 }
96
97 /***
98 * Gets the properties from the file system and
99 * returns it as a properties hash.
100 * @return Properties hash of saved configuration.
101 */
102 public Properties getProperties(){
103 if(pCONFIGURATION == null)
104 {
105 pCONFIGURATION = load(sUserHome, sConfigurationFileName);
106 }
107 return pCONFIGURATION;
108 }
109
110 /***
111 * Returns true if the specified property is empty.
112 * @param propName property key to check
113 * @return true if property is empty.
114 */
115 public boolean isEmpty(String propName) {
116 String propValue = getProperty(propName);
117 return (propValue == null || propValue.trim().length() < 1);
118 }
119
120 /***
121 * Gets the value of a specified key name in the
122 * properties hash.
123 * @param propName key name
124 * @return string value
125 */
126 public String getProperty(String propName){
127 if(pCONFIGURATION.getProperty(propName) != null) {
128 return pCONFIGURATION.getProperty(propName);
129 }
130 return "";
131 }
132
133 /***
134 * This returns the object, which is usually a string
135 * from the property file
136 * @param propName
137 * @return value Object of the key object.
138 */
139 public Object getObject(Object propName){
140 return pCONFIGURATION.get(propName);
141 }
142
143 /***
144 * This returns an object, which is a string from the
145 * property file based on a string of the key name.
146 * @param prop String representation of the key name
147 * @param value OBject, which is a string.
148 */
149 public void setProperty(String prop, Object value) {
150 pCONFIGURATION.put(prop,value.toString());
151 }
152
153 /***
154 * Sets the properties object to the passed
155 * in value.
156 * @param newProp New properties hash.
157 */
158 public void setProperties(Properties newProp) {
159 pCONFIGURATION = newProp;
160 }
161
162 /***
163 * Load the properties file.
164 * @param directory the directory location of the property file
165 * @param file the file name itself.
166 * @throws IOException
167 */
168 private Properties loadProperties(String directory, String file)
169 throws IOException
170 {
171 sFileName = directory + sSEPARATOR + file;
172 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sFileName));
173 Properties returnValue = new Properties();
174 returnValue.load(bis);
175 return returnValue;
176 }
177
178 /***
179 * build a generic properties file with no values loaded
180 * and have that files properties set to null and commented out
181 * @param directory the directory location of the property file
182 * @param file the file name itself.
183 * @throws IOException
184 */
185 private void buildDefaultFile(String directory, String file)
186 throws IOException
187 {
188 String filename = directory + sSEPARATOR + file;
189 PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(filename)));
190 out.println(sFILE_HEADER);
191 out.println("serial.port=NO PORTS FOUND");
192 out.println("baud=4800");
193 out.println("data.bit=8");
194 out.println("stop.bit=1");
195 out.println("parity=none");
196 out.println("interface.type=CM17A");
197 out.println("initial.on.start=false");
198 out.println("rmi.server=127.0.0.1");
199 out.println("language=en");
200 out.println("country=US");
201 out.println("look.and.feel=");
202 out.println("email.to=");
203 out.println("email.from=alice@localhost");
204 out.println("email.smtp=localhost");
205 out.println("email.username=");
206 out.println("email.password=");
207 out.println("email.authorized=false");
208 out.println("email.frequency=never");
209 out.println("recover.cm11a=false");
210 out.println("speech.engine=false");
211 out.flush();
212 out.close();
213 }
214
215 /***
216 * Saves the properties file to the file system.
217 */
218 public void saveProperties() {
219 FileOutputStream output;
220 try {
221 output = new FileOutputStream(sFileName);
222 pCONFIGURATION.store(output, sFILE_HEADER);
223 } catch(IOException ioe) {
224 System.err.println("Error :" + ioe);
225 } catch(Exception e){
226 System.err.println("Unable to save file " + e);
227 }
228 }
229 }
230
231
232
233
234
235
236
237
238
239
240