1 21 22 package org.opensubsystems.core.util; 23 24 import java.io.File ; 25 import java.util.HashMap ; 26 import java.util.Map ; 27 import java.util.Properties ; 28 import java.util.logging.Level ; 29 import java.util.logging.Logger ; 30 31 48 public abstract class SetupReader 49 { 50 52 55 public static final int PARAMETER_TYPE_UNKNOWN = 0; 56 57 60 public static final Integer PARAMETER_TYPE_UNKNOWN_OBJ = new Integer (PARAMETER_TYPE_UNKNOWN); 61 62 65 public static final int PARAMETER_TYPE_STRING = 1; 66 67 70 public static final Integer PARAMETER_TYPE_STRING_OBJ = new Integer (PARAMETER_TYPE_STRING); 71 72 75 public static final int PARAMETER_TYPE_INTEGER = 2; 76 77 80 public static final Integer PARAMETER_TYPE_INTEGER_OBJ = new Integer (PARAMETER_TYPE_INTEGER); 81 82 85 public static final int PARAMETER_TYPE_DOUBLE = 3; 86 87 90 public static final Integer PARAMETER_TYPE_DOUBLE_OBJ = new Integer (PARAMETER_TYPE_DOUBLE); 91 92 95 public static final int PARAMETER_TYPE_FLOAT = 4; 96 97 100 public static final Integer PARAMETER_TYPE_FLOAT_OBJ = new Integer (PARAMETER_TYPE_FLOAT); 101 102 105 public static final int PARAMETER_TYPE_BOOLEAN = 5; 106 107 110 public static final Integer PARAMETER_TYPE_BOOLEAN_OBJ = new Integer (PARAMETER_TYPE_BOOLEAN); 111 112 115 public static final int PARAMETER_TYPE_LONG = 6; 116 117 120 public static final Integer PARAMETER_TYPE_LONG_OBJ = new Integer (PARAMETER_TYPE_LONG); 121 122 125 public static final int PARAMETER_TYPE_PATH = 7; 126 127 130 public static final Integer PARAMETER_TYPE_PATH_OBJ = new Integer (PARAMETER_TYPE_PATH); 131 132 134 138 protected String m_readerName; 139 140 147 protected String m_basePath; 148 149 151 154 private static Logger s_logger = Log.getInstance(SetupReader.class); 155 156 159 protected Properties m_settings; 160 161 165 protected Map m_registeredParametersValues; 166 167 169 173 public SetupReader( 174 String basePath, 175 String readerName 176 ) 177 { 178 super(); 179 180 m_basePath = basePath; 181 m_readerName = readerName; 182 m_registeredParametersValues = new HashMap (); 184 185 m_settings = Config.getInstance().getPropertiesSafely(); 186 187 if (getRegisteredParameterTypes().isEmpty()) 188 { 189 registerParameters(); 191 } 192 } 193 194 196 206 public Object getParameterValue( 207 String parameterName 208 ) 209 { 210 Object retval = null; 211 Integer parameterType = null; 212 Object defaultValue = null; 213 StringBuffer fullPropertyName = new StringBuffer (m_basePath); 214 String propertyValue; 215 216 parameterType = (Integer )getRegisteredParameterTypes().get(parameterName); 217 defaultValue = getRegisteredParametersDefaults().get(parameterName); 218 219 if ((defaultValue != null) && (parameterType != null)) 220 { 221 fullPropertyName.append("."); 222 fullPropertyName.append(m_readerName); 223 fullPropertyName.append("."); 224 fullPropertyName.append(parameterName); 225 226 retval = m_registeredParametersValues.get(parameterName); 228 if (retval == null) 229 { 230 propertyValue = m_settings.getProperty(fullPropertyName.toString(), 232 ""); 233 s_logger.config(fullPropertyName.toString() + " = " 234 + propertyValue); 235 if (propertyValue.length() == 0) 236 { 237 retval = defaultValue; 238 } 239 else 240 { 241 retval = parseValue(parameterType.intValue(), propertyValue); 242 if (retval != null) 243 { 244 m_registeredParametersValues.put(parameterName, retval); 246 } 247 else 248 { 249 retval = defaultValue; 250 } 251 } 252 } 253 } 254 255 return retval; 256 } 257 258 266 public String getStringParameterValue( 267 String parameterName 268 ) 269 { 270 return (String )getParameterValue(parameterName); 271 } 272 273 281 public Integer getIntegerParameterValue( 282 String parameterName 283 ) 284 { 285 return (Integer )getParameterValue(parameterName); 286 } 287 288 296 public Double getDoubleParameterValue( 297 String parameterName 298 ) 299 { 300 return (Double )getParameterValue(parameterName); 301 } 302 303 311 public Float getFloatParameterValue( 312 String parameterName 313 ) 314 { 315 return (Float )getParameterValue(parameterName); 316 } 317 318 326 public Boolean getBooleanParameterValue( 327 String parameterName 328 ) 329 { 330 return (Boolean )getParameterValue(parameterName); 331 } 332 333 341 public Long getLongParameterValue( 342 String parameterName 343 ) 344 { 345 return (Long )getParameterValue(parameterName); 346 } 347 348 349 351 358 protected Object parseValue( 359 int iParameterType, 360 String propertyValue 361 ) 362 { 363 Object retval = null; 364 365 switch (iParameterType) 366 { 367 case PARAMETER_TYPE_STRING : 368 { 369 retval = propertyValue; 370 break; 371 } 372 case PARAMETER_TYPE_INTEGER : 373 { 374 try 375 { 376 retval = new Integer (propertyValue); 377 } 378 catch (NumberFormatException exec) 379 { 380 s_logger.log(Level.WARNING, "property value is not integer"); 381 retval = null; 382 } 383 break; 384 } 385 case PARAMETER_TYPE_DOUBLE : 386 { 387 try 388 { 389 retval = new Double (propertyValue); 390 } 391 catch (NumberFormatException exec) 392 { 393 s_logger.log(Level.WARNING, "property value is not double"); 394 retval = null; 395 } 396 break; 397 } 398 case PARAMETER_TYPE_FLOAT : 399 { 400 try 401 { 402 retval = new Float (propertyValue); 403 } 404 catch (NumberFormatException exec) 405 { 406 s_logger.log(Level.WARNING, "property value is not float"); 407 retval = null; 408 } 409 break; 410 } 411 case PARAMETER_TYPE_BOOLEAN : 412 { 413 if (propertyValue != null 414 && (propertyValue.equalsIgnoreCase("true") 415 || propertyValue.equalsIgnoreCase("t") 416 || propertyValue.equalsIgnoreCase("yes") 417 || propertyValue.equalsIgnoreCase("y") 418 || propertyValue.equalsIgnoreCase("1"))) 419 { 420 retval = Boolean.TRUE; 421 } 422 else if (propertyValue != null 423 && (propertyValue.equalsIgnoreCase("false") 424 || propertyValue.equalsIgnoreCase("f") 425 || propertyValue.equalsIgnoreCase("no") 426 || propertyValue.equalsIgnoreCase("n") 427 || propertyValue.equalsIgnoreCase("0")) 428 ) 429 { 430 retval = Boolean.FALSE; 431 } 432 else 433 { 434 s_logger.log(Level.WARNING, "property value is not boolean"); 435 retval = null; 436 } 437 break; 438 } 439 case PARAMETER_TYPE_LONG : 440 { 441 try 442 { 443 retval = new Long (propertyValue); 444 } 445 catch (NumberFormatException exec) 446 { 447 s_logger.log(Level.WARNING, "property value is not long"); 448 retval = null; 449 } 450 break; 451 } 452 case PARAMETER_TYPE_PATH : 453 { 454 char cTemp; 455 456 cTemp = propertyValue.trim().charAt(propertyValue.trim().length() - 1); 457 if ((cTemp != File.separatorChar) 458 && (GlobalConstants.isWindows() && (cTemp != '/'))) 460 { 461 s_logger.log(Level.WARNING, 462 "Property value for path do not end with separator char"); 463 retval = null; 464 } 465 else 466 { 467 retval = propertyValue; 468 } 469 break; 470 } 471 default: 472 { 473 assert false : "Unknown property value type"; 474 } 475 } 476 477 return retval; 478 } 479 480 492 protected void registerParameter( 493 String parameterName, 494 Integer parameterType, 495 String defaultvalue 496 ) 497 { 498 StringBuffer fullPropertyName = new StringBuffer (m_basePath); 499 Object objHardcodedDefault; 500 Object objDefault; 501 502 objHardcodedDefault = parseValue(parameterType.intValue(), defaultvalue); 503 if (GlobalConstants.ERROR_CHECKING) 504 { 505 assert objHardcodedDefault != null 506 : "Hardcoded default value should be always parsable."; 507 } 508 509 fullPropertyName.append("."); 513 fullPropertyName.append(parameterName); 514 defaultvalue = m_settings.getProperty(fullPropertyName.toString(), 515 defaultvalue); 516 objDefault = parseValue(parameterType.intValue(), defaultvalue); 517 if (objDefault == null) 518 { 519 objDefault = objHardcodedDefault; 520 } 521 522 s_logger.config(fullPropertyName.toString() + " = " + defaultvalue); 523 524 getRegisteredParameterTypes().put(parameterName, parameterType); 525 getRegisteredParametersDefaults().put(parameterName, objDefault); 527 } 528 529 532 protected abstract void registerParameters(); 533 534 539 protected abstract Map getRegisteredParameterTypes(); 540 541 546 protected abstract Map getRegisteredParametersDefaults(); 547 } 548 | Popular Tags |