package rmblworx.tools.timey.gui.config;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.slf4j.LoggerFactory;
/*
* Copyright 2014-2015 Christian Raue
* MIT License http://opensource.org/licenses/mit-license.php
*/
/**
* Speichern/Laden der GUI-Konfiguration auf Basis einer Datei.
* @author Christian Raue {@literal <christian.raue@gmail.com>}
*/
public class FileConfigStorage extends ConfigStorage {
/**
* @param config zu speichernde Konfiguration
* @param filename Dateiname der Konfigurationsdatei (kann auch Pfad enthalten)
*/
public final void saveToFile(final Config config, final String filename) {
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(filename);
saveConfig(config, outputStream);
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error("Error while trying to save the config file: " + e.getLocalizedMessage());
} finally {
closeStream(outputStream);
}
}
/**
* @param filename Dateiname der Konfigurationsdatei (kann auch Pfad enthalten)
* @return geladene Konfiguration
*/
public final Config loadFromFile(final String filename) {
if (!new File(filename).isFile()) {
return ConfigManager.getNewDefaultConfig();
}
InputStream inputStream = null;
try {
inputStream = new FileInputStream(filename);
return loadConfig(inputStream, true);
} catch (final IOException e) {
LoggerFactory.getLogger(getClass()).error("Error while trying to load the config file: " + e.getLocalizedMessage());
return ConfigManager.getNewDefaultConfig();
} finally {
closeStream(inputStream);
}
}
/**
* @param stream zu schließender Stream
*/
protected final void closeStream(final Closeable stream) {
if (stream != null) {
try {
stream.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
}