/*
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;
}
}