package com.gmail.dpierron.calibre.configuration;
/**
* Calss that hold the methods for storing and retrieving the
* configuration settings for a calibre2opds profile.
*/
import com.gmail.dpierron.calibre.opds.Constants;
import com.gmail.dpierron.tools.Helper;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.*;
import java.util.Properties;
public class PropertiesBasedConfiguration {
private final static Logger logger = LogManager.getLogger(PropertiesBasedConfiguration.class);
Properties properties;
File propertiesFile;
boolean readOnly = false;
public PropertiesBasedConfiguration(File file) {
super();
logger.trace("new PropertiesBasedConfiguration: " + file);
properties = new Properties();
propertiesFile = file;
if (propertiesFile == null) {
logger.warn("PropertiesBasedConfigurationFile: null parameter");
} else {
if (!propertiesFile.exists()) {
logger.trace("propertiesFile does not exist!");
save();
}
}
}
protected void setPropertiesFile(File propertiesFile) {
logger.trace("setPropertiesFile: " + propertiesFile);
this.propertiesFile = propertiesFile;
}
public File getPropertiesFile() {
return propertiesFile;
}
public void load() throws IOException {
logger.trace("loadPropertiesFile: " + propertiesFile);
BufferedInputStream bis = null;
try {
bis = new BufferedInputStream(new FileInputStream(getPropertiesFile()));
properties.loadFromXML(bis);
} finally {
if (bis != null)
bis.close();
}
}
public void save() {
if (readOnly) {
return;
}
BufferedOutputStream bos = null;
try {
try {
bos = new BufferedOutputStream(new FileOutputStream(getPropertiesFile()));
properties.storeToXML(bos, Constants.PROGTITLE);
} finally {
if (bos != null)
bos.close();
}
} catch (IOException e) {
logger.error("error while storing properties in " + getPropertiesFile().getAbsolutePath(), e);
}
}
public void setProperty(String name, Object value) {
if (value == null)
properties.remove(name);
else
properties.setProperty(name, value.toString());
save();
}
public void setProperty(String name, boolean value) {
properties.setProperty(name, Boolean.toString(value));
save();
}
public void setProperty(String name, int value) {
properties.setProperty(name, Integer.toString(value));
save();
}
public boolean isPropertyReadOnly(String name) {
String readOnlyName = name + "_ReadOnly";
return Helper.trueBoolean(getBoolean(readOnlyName));
}
public void setPropertyReadOnly(String name, boolean readOnly) {
if (Helper.isNullOrEmpty(name))
return;
String readOnlyName = name + "_ReadOnly";
setProperty(readOnlyName, readOnly);
}
public String getProperty(String name) {
return properties.getProperty(name);
}
public Boolean getBoolean(String name) {
String s = getProperty(name);
if (s == null)
return null;
else
return new Boolean(s);
}
public Integer getInteger(String name) {
return Helper.parseInteger(getProperty(name));
}
}