package main.config;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import model.data.exceptions.DataSaveException;
/**
* ConfigParser.java
* @author Christopher Bertels (chbertel@uos.de)
* @date 16.09.2008
*
*/
public class Config
{
private Map<String, String> configSettingsMap = new HashMap<String, String>();
private String configFile;
public static final String stdConfigFileName = "data/config.xml";
private static Map<String, Config> configsMap = new HashMap<String, Config>();
public class Settings
{
public static final String SETDATEONSTARTUP = "setCurrentDateOnStartUp";
public static final String INVOICEFOLDER = "invoiceFolder";
public static final String WARNINGFOLDER = "warningFolder";
public static final String WARNINGINVOICEFOLDER = "warningInvoiceFolder";
public static final String MAINWINDOWRESX = "mainWindowResX";
public static final String MAINWINDOWRESY = "mainWindowResY";
public static final String WARNINGPRICE = "warningPrice";
}
/**
* Gibt Config Objekt für Standard Config-Datei zurück (stdConfigFileName = 'data/config.xml').
* @return Config Objekt für Standard Config-Datei.
*/
public static Config get()
{
return get(stdConfigFileName);
}
/**
* Gibt Config Objekt für angegebene Config-Datei zurück.
* @param configFileName Name/Pfad der Config-Datei.
* @return Config Objekt für angegebene Config-Datei.
*/
public static Config get(String configFileName)
{
if (configsMap.get(configFileName) == null
|| !configsMap.containsKey(configFileName))
{
Config newConfig = new Config(configFileName);
configsMap.put(configFileName, newConfig);
}
return configsMap.get(configFileName);
}
private Config()
{
this(stdConfigFileName);
}
private Config(String configFile)
{
load(configFile);
this.configFile = configFile;
}
/**
* Gibt an, ob in der Config ein entsprechendes Setting vorhanden ist.
* @param settingName Der Name des Settings.
* @return True, falls vorhanden, False sonst.
*/
public boolean hasSetting(String settingName)
{
return this.configSettingsMap.containsKey(settingName);
}
/**
* Gibt Wert (als String) eines bestimmten Settings zurück.
*
* @param settingName Der Name des Settings (Configparameters).
* @return Der Wert für dieses Setting.
*/
public String getSetting(String settingName)
{
// TODO: vielleicht, falls nicht vorhanden, leeren String zurückgeben?
return this.configSettingsMap.get(settingName);
}
/**
* Setzt den Wert für ein Setting.
*
* @param settingName Der Name des Settings (Configparameter).
* @param value Der Wert für das Setting (falls bereits vorhanden, wird der
* alte überschrieben).
*/
public void setSetting(String settingName, String value)
{
this.configSettingsMap.put(settingName, value);
}
/**
* Lädt Config-Settings neu aus Datei und verwirft alle aktuellen Settings.
*/
public void reload()
{
load(this.configFile);
}
private void load(String configFile)
{
ConfigParser parser = new ConfigParser();
this.configSettingsMap = parser.parseConfigFile(configFile);
}
/**
* Speichert aktuelle Config-Settings in der jeweils angegebenen Config-Datei.
* Falls nicht explizit angegeben, ist dies die Standard Config-Datei.
* @throws IOException Wird geworfen, falls es Fehler beim Speichern gab.
* @throws DataSaveException Wird geworfen, falls es Fehler beim Speichern gab.
*/
public void save() throws IOException, DataSaveException
{
save(this.configFile);
}
/**
* Speichert aktuelle Config-Settings in der angegebenen Config-Datei.
*
* @param fileName Name/Pfad der Config-Datei, in der die Config-Settings
* gespeichert werden sollen.
* @throws IOException Wird geworfen, falls es Fehler beim Speichern gab.
* @throws DataSaveException Wird geworfen, falls es Fehler beim Speichern
* gab.
*/
public void save(String fileName) throws IOException, DataSaveException
{
ConfigWriter writer = new ConfigWriter(fileName);
writer.saveConfig(this.configSettingsMap);
}
public static void saveAll() throws DataSaveException, IOException
{
for(Config conf : configsMap.values())
{
conf.save();
}
}
}