Source code: com/memoire/fu/FuPreferences.java
1 /**
2 * @modification $Date: 2002/12/16 18:56:26 $
3 * @statut unstable
4 * @file FuPreferences.java
5 * @version 0.36
6 * @author Guillaume Desnoix
7 * @email guillaume@desnoix.com
8 * @license GNU General Public License 2 (GPL2)
9 * @copyright 1998-2001 Guillaume Desnoix
10 */
11
12 package com.memoire.fu;
13
14 import com.memoire.fu.*;
15
16 import java.beans.*;
17 import java.io.*;
18 import java.util.*;
19
20 /**
21 * A class to manage user preferences in a file of properties.
22 */
23
24 public class FuPreferences
25 {
26 public static final FuPreferences FU=new FuPreferences();
27
28 protected Properties values_;
29 protected Vector listeners_;
30
31 // Constructeur "interdit"
32
33 protected FuPreferences()
34 {
35 values_ =new Properties();
36 listeners_=new Vector();
37
38 readIniFile();
39 }
40
41 public final String getRoot()
42 {
43 Class c=getClass();
44 String f=c.getName();
45
46 int i=f.lastIndexOf('.');
47 if(i>=0) f=f.substring(i+1);
48
49 if(f.endsWith("Preferences")) f=f.substring(0,f.length()-11);
50 f=f.toLowerCase();
51
52 return f;
53 }
54
55 protected String getPath()
56 {
57 String f=getRoot();
58 String p=FuLib.getUserHome();
59
60 if(!"".equals(p)) p+=File.separator;
61
62 if(FuLib.isWindows()) f=p+f+".ini";
63 else if(FuLib.isUnix ()) f=p+"."+f+"rc";
64 else f=p+f+".preferences";
65
66 // System.err.println("getPath -> "+f);
67 return f;
68 }
69
70 public final synchronized void readIniFile()
71 {
72 // System.err.println(getRoot()+": reading preferences");
73
74 try
75 {
76 values_.load(new FileInputStream(getPath()));
77 }
78 catch(Throwable th) //IOException ex
79 {
80 // System.err.println(getPath()+" not found");
81 // th.printStackTrace();
82 }
83 addDefaultValues();
84 }
85
86 public final synchronized void writeIniFile()
87 {
88 // System.err.println(getRoot()+": writing preferences");
89
90 removeDefaultValues();
91 try
92 {
93 values_.save(new FileOutputStream(getPath()),
94 "Preferences for "+getRoot());
95 }
96 catch(Throwable th) //IOException ex
97 {
98 System.err.println("Couldn't write "+getPath());
99 th.printStackTrace();
100 }
101 addDefaultValues();
102 }
103
104 protected void addDefaultValues() { }
105 protected void removeDefaultValues() { }
106
107
108 // Basic
109 public final Enumeration keys()
110 {
111 return values_.keys();
112 }
113
114 public final int size()
115 {
116 return values_.size();
117 }
118
119 /**
120 * @deprecated use getStringProperty instead
121 */
122 public final String get(String _key)
123 {
124 return values_.getProperty(_key);
125 }
126
127 /**
128 @deprecated use removeProperty instead
129 */
130 public final void remove(String _key)
131 {
132 String old=get(_key);
133 values_.remove(_key);
134 firePropertyChange(_key,old,null);
135 }
136
137 /**
138 @deprecated use putStringProperty instead
139 */
140 public final void put(String _key, String _value)
141 {
142 String old=get(_key);
143 if(_value==null) values_.remove(_key);
144 else values_.put(_key,_value);
145 firePropertyChange(_key,old,_value);
146 }
147
148 protected void firePropertyChange(String _p, String _o, String _n)
149 {
150 PropertyChangeEvent e=new PropertyChangeEvent(this,_p,_o,_n);
151 Enumeration l=listeners_.elements();
152 while(l.hasMoreElements())
153 ((PropertyChangeListener)l.nextElement()).propertyChange(e);
154 }
155
156 public void addPropertyChangeListener(PropertyChangeListener _l)
157 { listeners_.addElement(_l); }
158
159 public void removePropertyChangeListener(PropertyChangeListener _l)
160 { listeners_.removeElement(_l); }
161
162 // GET
163
164 /*
165 public final String getProperty(String _key)
166 { return getProperty(_key,""); }
167
168 public final String getProperty(String _key, String _default)
169 {
170 String r=get(_key);
171 if(r==null) r=_default;
172 return r;
173 }
174 */
175
176 /**
177 @deprecated use getStringProperty instead
178 */
179 public final String getProperty(String _key)
180 { return getStringProperty(_key); }
181
182 /**
183 @deprecated use getStringProperty instead
184 */
185 public final String getProperty(String _key, String _default)
186 { return getStringProperty(_key, _default); }
187
188 public final String getStringProperty(String _key)
189 { return getStringProperty(_key,""); }
190
191 public final String getStringProperty(String _key, String _default)
192 {
193 String r=get(_key);
194 if(r==null) r=_default;
195 return r;
196 }
197
198 public final boolean getBooleanProperty(String _key)
199 { return getBooleanProperty(_key,false); }
200
201 public final boolean getBooleanProperty(String _key, boolean _default)
202 {
203 String s=get(_key);
204 boolean r=_default;
205
206 if("false".equals(s)) r=false;
207 if("true" .equals(s)) r=true;
208 if("no" .equals(s)) r=false;
209 if("yes" .equals(s)) r=true;
210 if("0" .equals(s)) r=false;
211 if("1" .equals(s)) r=true;
212
213 return r;
214 }
215
216 public final int getIntegerProperty(String _key)
217 { return getIntegerProperty(_key,0); }
218
219 public final int getIntegerProperty(String _key, int _default)
220 {
221 String s=get(_key);
222 int r=_default;
223
224 try { r=Integer.parseInt(s); }
225 catch(Exception ex) { }
226
227 return r;
228 }
229
230 public final double getDoubleProperty(String _key)
231 { return getDoubleProperty(_key,0.); }
232
233 public final double getDoubleProperty(String _key, double _default)
234 {
235 String s=get(_key);
236 double r=_default;
237
238 try { r=new Double(s).doubleValue(); } // Double.parseDouble
239 catch(Exception ex) { }
240
241 return r;
242 }
243
244 // PUT
245
246 public void putStringProperty(String _key, String _value)
247 {
248 put(_key,_value);
249 }
250
251 public void putBooleanProperty(String _key, boolean _value)
252 {
253 put(_key,""+_value);
254 }
255
256 public void putIntegerProperty(String _key, int _value)
257 {
258 put(_key,""+_value);
259 }
260
261 public void putDoubleProperty(String _key, double _value)
262 {
263 put(_key,""+_value);
264 }
265
266 // REMOVE
267
268 public final void removeProperty(String _key)
269 {
270 if(_key!=null) remove(_key);
271 }
272 }
273