/* GanttProject is an opensource project management tool. Copyright (C) 2002-2010 Dmitry Barashev 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject; import java.io.*; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import net.sourceforge.ganttproject.io.HistorySaver; import net.sourceforge.ganttproject.io.SaverBase; import net.sourceforge.ganttproject.parser.PreviousStateTasksTagHandler; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskManager; import org.xml.sax.SAXException; /** * @author nbohn */ public class GanttPreviousState { private final List<GanttPreviousStateTask> myTasks; private String myName; private File myFile; public GanttPreviousState(String name, List<GanttPreviousStateTask> tasks) { myName = name; myTasks = tasks; } public void init() throws IOException { myFile = createTemporaryFile(); myFile.deleteOnExit(); } public void setName(String name) { myName = name; } private class BaselineSaver extends SaverBase { void save(File file, List<GanttPreviousStateTask> tasks) throws TransformerConfigurationException, SAXException { StreamResult result = new StreamResult(file); TransformerHandler handler = createHandler(result); HistorySaver saver = new HistorySaver(); handler.startDocument(); saver.saveBaseline(myName, tasks, handler); handler.endDocument(); } } public void saveFile() throws IOException { BaselineSaver saver = new BaselineSaver(); try { saver.save(myFile, myTasks); } catch (TransformerConfigurationException e) { throw new IOException(e); } catch (SAXException e) { throw new IOException(e); } } private static File createTemporaryFile() throws IOException { String fileName = "_GanttProject_ps_" + (int) (10000. * Math.random()); return File.createTempFile(fileName, ".gan"); } public String getName() { return myName; } public void remove() { myFile.delete(); } public List<GanttPreviousStateTask> load() { ArrayList<GanttPreviousStateTask> tasks = null; PreviousStateTasksTagHandler handler = new PreviousStateTasksTagHandler(); SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser saxParser = factory.newSAXParser(); saxParser.parse(myFile, handler); } catch (ParserConfigurationException e) { e.printStackTrace(); return null; } catch (SAXException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } tasks = handler.getTasks(); return tasks; } public static List<GanttPreviousStateTask> createTasks(TaskManager taskManager) { List<GanttPreviousStateTask> result = new ArrayList<GanttPreviousStateTask>(); for (Task t : taskManager.getTasks()) { GanttPreviousStateTask baselineTask = new GanttPreviousStateTask(t.getTaskID(), t.getStart(), t.getDuration().getLength(), t.isMilestone(), taskManager.getTaskHierarchy().hasNestedTasks(t)); result.add(baselineTask); } return result; } }