1 9 10 package org.ozoneDB.util; 11 12 13 import org.ozoneDB.DxLib.*; 14 import org.ozoneDB.io.stream.ResolvingObjectInputStream; 15 16 import java.io.*; 17 import java.util.*; 18 19 34 public class EnhProperties extends Properties { 35 36 40 protected EnhObservable observable; 41 42 public EnhProperties() { 43 observable = new EnhObservable(); 44 } 45 46 public EnhProperties( Properties _defaults ) { 47 super( _defaults ); 48 observable = new EnhObservable(); 49 } 50 51 public void addObserver( Observer _observer ) { 52 observable.addObserver( _observer ); 53 } 54 55 public void removeObserver( Observer _observer ) { 56 observable.deleteObserver( _observer ); 57 } 58 59 public void notifyObservers() { 60 observable.notifyObservers( this ); 61 } 62 63 public boolean hasChanged() { 64 return observable.hasChanged(); 65 } 66 67 71 public void addProperties( Properties properties, String keyPrefix ) { 72 observable.setChanged(); 73 for (Enumeration e = properties.keys(); e.hasMoreElements();) { 74 String key = (String )e.nextElement(); 75 if (key.startsWith( keyPrefix )) { 76 String val = properties.getProperty( key, "" ); 78 setStringProperty( key, val ); 79 } 80 } 81 } 82 83 84 88 public synchronized void setStringProperty( String _key, String _val ) { 89 observable.setChanged(); 90 super.put( _key, _val ); 91 } 92 93 94 98 public String stringProperty( String _key, String _default ) { 99 return super.getProperty( _key, _default ); 100 } 101 102 103 107 public DxCollection stringsProperty( String _key, String _default ) { 108 String propList = stringProperty( _key, _default ); 109 DxArrayBag result = new DxArrayBag(); 110 111 StringTokenizer st = new StringTokenizer( propList, " \t,", false ); 112 while (st.hasMoreTokens()) { 113 String token = st.nextToken(); 114 result.add( token ); 116 } 117 return result; 118 } 119 120 124 public void setProperty( String _key, Object _val ) { 125 observable.setChanged(); 126 try { 127 ByteArrayOutputStream buf = new ByteArrayOutputStream( 1024 ); 128 ObjectOutputStream out = new ObjectOutputStream( buf ); 129 out.writeObject( _val ); 130 out.close(); 131 132 MimeBase64Encoder encoder = new MimeBase64Encoder(); 133 encoder.translate( buf.toByteArray() ); 134 135 setStringProperty( _key, new String ( encoder.getCharArray() ) ); 136 } catch (Exception e) { 137 throw new RuntimeException ( e.getMessage() ); 138 } 139 } 140 141 142 146 public Object property( String _key, Object _default ) { 147 try { 148 String result = stringProperty( _key, (String )_default ); 149 if (result != null) { 150 MimeBase64Decoder decoder = new MimeBase64Decoder(); 151 decoder.translate( result.toCharArray() ); 152 153 ObjectInputStream in = new ResolvingObjectInputStream( new ByteArrayInputStream( decoder.getByteArray() ) ); 154 return in.readObject(); 155 } else { 156 return null; 157 } 158 } catch (Exception e) { 159 throw new RuntimeException ( e.getMessage() ); 160 } 161 } 162 163 164 168 public void setIntProperty( String _key, int _val ) { 169 setStringProperty( _key, String.valueOf( _val ) ); 170 } 171 172 173 177 public int intProperty( String _key, int _default ) { 178 String result = stringProperty( _key, String.valueOf( _default ) ); 179 return Integer.parseInt( result ); 180 } 181 182 183 187 public long longProperty( String _key, long _default ) { 188 String result = stringProperty( _key, String.valueOf( _default ) ); 189 return Long.valueOf( result ).longValue(); 190 } 191 192 193 197 public boolean booleanProperty( String _key, boolean _default ) { 198 String result = stringProperty( _key, String.valueOf( _default ) ); 199 return Boolean.valueOf( result ).booleanValue(); 200 } 201 202 203 207 public void setLongProperty( String _key, long _val ) { 208 setStringProperty( _key, String.valueOf( _val ) ); 209 } 210 211 215 public void setBooleanProperty( String _key, boolean _val ) { 216 217 setStringProperty( _key, String.valueOf( _val ) ); 218 219 } 220 221 222 223 224 225 232 233 public void setIntArrayProperty( String _key, int[] _val ) { 234 StringBuffer strVal = new StringBuffer (); 235 for (int i = 0; i < _val.length; i++) { 236 strVal.append( "," + _val[i] ); 237 } 238 setStringProperty( _key, strVal.substring(1) ); 239 } 240 241 242 243 244 245 252 253 public int[] intArrayProperty( String _key, int[] _default ) { 254 String strVal = super.getProperty( _key ); 255 if (strVal == null) { 256 return _default; 257 } else { 258 StringTokenizer st = new StringTokenizer( strVal, "," ); 259 int[] result = new int[st.countTokens()]; 260 for (int i = 0; i < result.length; i++) { 261 result[i] = Integer.parseInt( st.nextToken() ); 262 } 263 return result; 264 } 265 } 266 267 268 269 270 271 280 281 public void print( PrintStream out, String keyPrefix, String printPrefix ) { 282 283 DxTreeSet sortedProps = new DxTreeSet( new DxStringComparator() ); 284 285 for (Enumeration e = propertyNames(); e.hasMoreElements();) { 286 287 String key = (String )e.nextElement(); 288 289 String val = stringProperty( key, "(not set)" ); 290 291 293 295 if (key.startsWith( keyPrefix ) && !val.startsWith( "[object]" )) { 296 297 sortedProps.add( printPrefix + key + " = " + val ); 298 299 } 300 301 } 302 303 for (DxIterator it = sortedProps.iterator(); it.next() != null;) { 304 305 out.println( it.object().toString() ); 306 307 } 308 309 } 310 311 312 313 } 314 315 316 317 318 319 326 327 class EnhObservable extends Observable { 328 329 330 331 332 333 public EnhObservable() { 334 335 super(); 336 337 } 338 339 340 341 342 343 public void setChanged() { 344 345 super.setChanged(); 346 347 } 348 349 350 351 } 352 353 | Popular Tags |