/*
* #%L
* gitools-ui-app
* %%
* Copyright (C) 2013 Universitat Pompeu Fabra - Biomedical Genomics group
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
package org.gitools.ui.app.decorators;
import com.thoughtworks.xstream.XStream;
import org.apache.commons.io.FileUtils;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.*;
import java.util.regex.Pattern;
public class DecoratorArchivePersistance {
private transient static XStream xstream;
private static final String userPath = System.getProperty("user.home", ".");
private static final String CONFIG_PATH = userPath + File.separator + ".gitools";
private static final String configFileName = "scales-2.x.xml";
private static final String configFile = CONFIG_PATH + File.separator + configFileName;
public DecoratorArchivePersistance() {
}
public void save(DecoratorArchive archive) {
File path = new File(CONFIG_PATH);
if (!path.exists()) {
path.mkdirs();
}
try {
FileWriter writer = new FileWriter(configFile);
writer.write("<!-- scales.xml version " + DecoratorArchive.VERSION + " -->\n");
JAXBContext context = JAXBContext.newInstance(DecoratorArchive.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(archive, writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public DecoratorArchive load() {
DecoratorArchive decoratorArchive;
try {
BufferedReader reader = new BufferedReader(new FileReader(configFile));
String firstLine = reader.readLine();
if (!firstLine.matches("(.*)" + Pattern.quote("version " + DecoratorArchive.VERSION) + "(.*)")) {
System.err.println("Current scales.xml file not compatible with current version.");
reader.close();
FileUtils.copyFile(new File(configFile), new File(configFile + ".backup"));
decoratorArchive = new DecoratorArchive();
decoratorArchive.add(decoratorArchive.getDefaultElementDecoratros());
save(decoratorArchive);
System.err.println("Created scales file with defaults and there is a backup copy on " + configFileName + ".backup");
} else {
JAXBContext context = JAXBContext.newInstance(DecoratorArchive.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
decoratorArchive = (DecoratorArchive) unmarshaller.unmarshal(reader);
reader.close();
}
} catch (FileNotFoundException e) {
System.err.println("Settings file doesn't exist: " + configFile);
System.err.println("Created scales file with defaults.");
decoratorArchive = new DecoratorArchive();
decoratorArchive.add(decoratorArchive.getDefaultElementDecoratros());
save(decoratorArchive);
} catch (Exception e) {
decoratorArchive = new DecoratorArchive();
e.printStackTrace();
}
return decoratorArchive;
}
}