Implementation of SmartConfig
This commit is contained in:
parent
10b1b15a4a
commit
9a179af663
@ -0,0 +1,62 @@
|
||||
package com.jdbernard.util
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class SmartConfig {
|
||||
|
||||
private File file
|
||||
private Properties props
|
||||
private Logger log = LoggerFactory.getLogger(getClass())
|
||||
|
||||
public SmartConfig(File file) {
|
||||
this.@file = file
|
||||
this.@props = new Properties()
|
||||
|
||||
try { file.withInputStream { is -> this.@props.load(is) } }
|
||||
catch (FileNotFoundException fnfe) {}
|
||||
catch (Exception e) { log.warn("Cannot open config file.", e) }
|
||||
}
|
||||
|
||||
public SmartConfig(String filename) { this(new File(filename)) }
|
||||
|
||||
public save() {
|
||||
try {file.withOutputStream { os -> this.@props.store(os, "") } }
|
||||
catch (Exception e) { log.warn("Cannot save config file.", e) }
|
||||
}
|
||||
|
||||
def getProperty(String name) { getProperty(name, "") }
|
||||
|
||||
def getProperty(String name, Object defVal) {
|
||||
|
||||
if (log.isTraceEnabled()) log.trace("Looking up $name")
|
||||
|
||||
def val = props.getProperty(name)
|
||||
|
||||
if (val == null) {
|
||||
if (log.isTraceEnabled())
|
||||
log.trace("Doesn't exists, setting with given default")
|
||||
|
||||
val = defVal
|
||||
props.setProperty(name, defVal.toString())
|
||||
|
||||
} else {
|
||||
|
||||
// boolean
|
||||
if (name ==~ /.*\?/) {
|
||||
if (log.isTraceEnabled()) log.trace("Interpreting as a boolean")
|
||||
|
||||
if (val.toLowerCase() =~ /(false|no|off|f|n)/)
|
||||
val = false
|
||||
else val = (Boolean) val
|
||||
}
|
||||
}
|
||||
|
||||
return val.asType(defVal.class)
|
||||
}
|
||||
|
||||
void setProperty(String name, def value) {
|
||||
props."$name" = value.toString()
|
||||
save()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user