package net.sourceforge.ganttproject.io;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.sax.TransformerHandler;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

import net.sourceforge.ganttproject.GanttPreviousState;
import net.sourceforge.ganttproject.GanttPreviousStateTask;

class HistorySaver extends SaverBase {

    void save(List/*<GanttPreviousState*/ history, TransformerHandler handler) throws SAXException, ParserConfigurationException, SAXException, IOException {
        AttributesImpl attrs = new AttributesImpl();
        startElement("previous", handler);
        for (int i=0; i<history.size(); i++) {
            final GanttPreviousState nextState = (GanttPreviousState) history.get(i);
            final List/*<GanttPreviousStateTask>*/ stateTasks = nextState.load();
            addAttribute("name", nextState.getName(), attrs);
            startElement("previous-tasks", attrs, handler);
            // ArrayList list =
            // ((GanttPreviousState)previous.get(i)).getTasks();
            for (int j=0; j<stateTasks.size(); j++) {
                GanttPreviousStateTask task = (GanttPreviousStateTask)stateTasks.get(j);
                addAttribute("id", String.valueOf(task.getId()), attrs);
                addAttribute("start", task.getStart().toXMLString(), attrs);
                addAttribute("duration", String.valueOf(task.getDuration()), attrs);
                addAttribute("meeting", String.valueOf(task.isMilestone()), attrs);
                addAttribute("super", String.valueOf(task.hasNested()), attrs);
                emptyElement("previous-task", attrs, handler);

            }
            endElement("previous-tasks", handler);
        }
        endElement("previous", handler);
        
    }

}
