/* * This file is part of the OSMembrane project. * More informations under www.osmembrane.de * * The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0. * for more details about the license see http://www.osmembrane.de/license/ * * Source: $HeadURL$ ($Revision$) * Last changed: $Date$ */ package de.osmembrane.model.persistence; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.util.Observable; import de.osmembrane.Application; import de.osmembrane.exceptions.ControlledException; import de.osmembrane.exceptions.ExceptionSeverity; import de.osmembrane.model.parser.IParser; import de.osmembrane.model.parser.ParseException; import de.osmembrane.model.parser.ParserFactory; import de.osmembrane.model.persistence.FileException.Type; import de.osmembrane.tools.Tools; /** * Writes and Reads Bash-Files (normally used on UNIX systems). * * @author jakob_jarosch */ public class BashPersistence extends AbstractPersistence { private static final Class<? extends IParser> PARSER = FileType.BASH .getParserClass(); @Override public void save(URL filename, Object data) throws FileException { if (!(data instanceof PipelinePersistenceObject)) { Application.handleException(new ControlledException(this, ExceptionSeverity.UNEXPECTED_BEHAVIOR, "BashPersistence#save() got a wrong" + " object, object is the following instance:\n" + data.getClass())); } try { File file = Tools.urlToFile(filename); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); String output = ParserFactory.getInstance().getParser(PARSER) .parsePipeline((PipelinePersistenceObject) data); bw.write(output); bw.close(); fw.close(); } catch (IOException e) { throw new FileException(Type.NOT_WRITABLE, e); } } @Override public Object load(URL filename) throws FileException { IParser parser = ParserFactory.getInstance().getParser(PARSER); try { InputStreamReader isr = new InputStreamReader(filename.openStream()); BufferedReader br = new BufferedReader(isr); StringBuilder fileContent = new StringBuilder(); String line; while ((line = br.readLine()) != null) { fileContent.append(line + parser.getBreaklineCommand()); } br.close(); isr.close(); PipelinePersistenceObject functions = parser .parseString(fileContent.toString()); return functions; } catch (FileNotFoundException e) { throw new FileException(Type.NOT_FOUND, e); } catch (IOException e) { throw new FileException(Type.NOT_READABLE, e); } catch (ParseException e) { throw new FileException(Type.SYNTAX_PROBLEM, e); } } @Override public void update(Observable o, Object arg) { return; } }