/*
GanttProject is an opensource project management tool.
Copyright (C) 2005-2011 GanttProject team
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 org.ganttproject.impex.htmlpdf;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import javax.xml.transform.sax.TransformerHandler;
import net.sourceforge.ganttproject.GPVersion;
import net.sourceforge.ganttproject.GanttProject;
import net.sourceforge.ganttproject.IGanttProject;
import net.sourceforge.ganttproject.export.ExportException;
import net.sourceforge.ganttproject.gui.UIFacade;
import net.sourceforge.ganttproject.language.GanttLanguage;
import net.sourceforge.ganttproject.util.FileUtil;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import biz.ganttproject.core.time.CalendarFactory;
/**
* HTML-specific serializer.
*
* @author dbarashev (Dmitry Barashev)
*/
public class HtmlSerializer extends XmlSerializer {
private ExporterToHTML myEngine;
public HtmlSerializer(ExporterToHTML engine) {
myEngine = engine;
}
void serialize(TransformerHandler handler, File outputFile) throws SAXException, IOException, ExportException {
String filenameWithoutExtension = getFilenameWithoutExtension(outputFile);
handler.startDocument();
AttributesImpl attrs = new AttributesImpl();
writeViews(getUIFacade(), handler);
startElement("ganttproject", attrs, handler);
textElement("title", attrs, "GanttProject - " + filenameWithoutExtension, handler);
addAttribute("prefix", filenameWithoutExtension, attrs);
startElement("links", attrs, handler);
textElement("home", attrs, i18n("home"), handler);
textElement("chart", attrs, i18n("gantt"), handler);
textElement("tasks", attrs, i18n("task"), handler);
textElement("resources", attrs, i18n("human"), handler);
endElement("links", handler);
startElement("project", attrs, handler);
addAttribute("title", i18n("project"), attrs);
textElement("name", attrs, getProject().getProjectName(), handler);
addAttribute("title", i18n("organization"), attrs);
textElement("organization", attrs, getProject().getOrganization(), handler);
addAttribute("title", i18n("webLink"), attrs);
textElement("webLink", attrs, getProject().getWebLink(), handler);
addAttribute("title", i18n("shortDescription"), attrs);
textElement("description", attrs, getProject().getDescription(), handler);
endElement("project", handler);
// TODO: [dbarashev, 10.09.2005] introduce output files grouping structure
String ganttChartFileName = ExporterToHTML.replaceExtension(outputFile, ExporterToHTML.GANTT_CHART_FILE_EXTENSION).getName();
textElement("chart", attrs, ganttChartFileName, handler);
addAttribute("name", i18n("colName"), attrs);
addAttribute("role", i18n("colRole"), attrs);
addAttribute("mail", i18n("colMail"), attrs);
addAttribute("phone", i18n("colPhone"), attrs);
startElement("resources", attrs, handler);
writeResources(getProject().getHumanResourceManager(), handler);
String resourceChartFileName = ExporterToHTML.replaceExtension(outputFile,
ExporterToHTML.RESOURCE_CHART_FILE_EXTENSION).getName();
addAttribute("path", resourceChartFileName, attrs);
emptyElement("chart", attrs, handler);
endElement("resources", handler);
// addAttribute("name", i18n("name"), attrs);
// addAttribute("begin", i18n("start"), attrs);
// addAttribute("end", i18n("end"), attrs);
// addAttribute("milestone", i18n("meetingPoint"), attrs);
// addAttribute("progress", i18n("advancement"), attrs);
// addAttribute("assigned-to", i18n("assignTo"), attrs);
// addAttribute("notes", i18n("notesTask"), attrs);
try {
writeTasks(getProject().getTaskManager(), handler);
} catch (Exception e) {
throw new ExportException("Failed to write tasks", e);
}
addAttribute("version", "Ganttproject (" + GPVersion.CURRENT + ")", attrs);
Calendar c = CalendarFactory.newCalendar();
String dateAndTime = GanttLanguage.getInstance().formatShortDate(c) + " - " + GanttLanguage.getInstance().formatTime(c);
addAttribute("date", dateAndTime, attrs);
emptyElement("footer", attrs, handler);
endElement("ganttproject", handler);
handler.endDocument();
}
private IGanttProject getProject() {
return myEngine.getProject();
}
private UIFacade getUIFacade() {
return myEngine.getUIFacade();
}
@Override
protected String getAssignedResourcesDelimiter() {
return ", ";
}
private static String getFilenameWithoutExtension(File f) {
return FileUtil.getFilenameWithoutExtension(f);
}
}