⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tasksaver.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
package net.sourceforge.ganttproject.io;import java.awt.Color;import java.io.IOException;import java.net.URLEncoder;import java.util.GregorianCalendar;import java.util.Iterator;import javax.xml.transform.sax.TransformerHandler;import net.sourceforge.ganttproject.GanttCalendar;import net.sourceforge.ganttproject.GanttTask;import net.sourceforge.ganttproject.IGanttProject;import net.sourceforge.ganttproject.task.CustomColumn;import net.sourceforge.ganttproject.task.CustomColumnsStorage;import net.sourceforge.ganttproject.task.CustomColumnsValues;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.dependency.TaskDependency;import net.sourceforge.ganttproject.util.ColorConvertion;import org.w3c.util.DateParser;import org.xml.sax.SAXException;import org.xml.sax.helpers.AttributesImpl;class TaskSaver extends SaverBase {    void save(IGanttProject project, TransformerHandler handler, Color defaultColor, CustomColumnsStorage customColumnsStorage) throws SAXException, IOException {        AttributesImpl attrs = new AttributesImpl();        if (defaultColor!=null) {	        addAttribute("color", ColorConvertion.getColor(defaultColor), attrs);        }        startElement("tasks", attrs, handler);        startElement("taskproperties", handler);        writeTaskProperties(handler, customColumnsStorage);        endElement("taskproperties", handler);        Task rootTask = project.getTaskManager().getTaskHierarchy().getRootTask();        Task[] tasks = project.getTaskManager().getTaskHierarchy().getNestedTasks(rootTask);        for (int i=0; i<tasks.length; i++) {            writeTask(handler, (GanttTask) tasks[i], customColumnsStorage);        }        endElement("tasks", handler);    }    private void writeTask(TransformerHandler handler, GanttTask task, CustomColumnsStorage customColumns) throws SAXException, IOException {        if (task.getTaskID() == -1) {            throw new IllegalArgumentException("Is it a fake root task? Task="+task);        }        AttributesImpl attrs = new AttributesImpl();        addAttribute("id", String.valueOf(task.getTaskID()), attrs);        addAttribute("name", task.getName(), attrs);        if (task.colorDefined()) {            addAttribute("color", ColorConvertion.getColor(task.getColor()), attrs);        }        if (task.shapeDefined()) {            addAttribute("shape", task.getShape().getArray(), attrs);        }        addAttribute("meeting", Boolean.valueOf(task.isMilestone()).toString(), attrs);        if (task.isProjectTask()) {            addAttribute("project", Boolean.TRUE.toString(), attrs);        }        addAttribute("start", task.getStart().toXMLString(), attrs);        addAttribute("duration", task.getManager().encode(task.getDuration()), attrs);        addAttribute("complete", String.valueOf(task.getCompletionPercentage()), attrs);        if (task.getThird() != null) {            addAttribute("thirdDate", task.getThird().toXMLString(), attrs);            addAttribute("thirdDate-constraint", String.valueOf(task.getThirdDateConstraint()), attrs);        }        addAttribute("priority", String.valueOf(task.getPriority()), attrs);        final String sWebLink = task.getWebLink();        if (sWebLink != null && !sWebLink.equals("")                && !sWebLink.equals("http://")) {            addAttribute("webLink", URLEncoder.encode(sWebLink, "ISO-8859-1"), attrs);        }        addAttribute("expand", String.valueOf(task.getExpand()), attrs);                startElement("task", attrs, handler);                if (task.getNotes() != null && task.getNotes().length() > 0) {            cdataElement("notes", task.getNotes(), attrs, handler);//            fout.write(space2 + "<notes>");//            fout.write("\n"//                    + space2//                    + s//                    + correct(replaceAll(task.getNotes(), "\n", "\n"//                            + space2 + s)));//            fout.write("\n" + space2 + "</notes>\n");        }        // use successors to write depends information        final TaskDependency[] depsAsDependee = task.getDependenciesAsDependee().toArray();        for (int i = 0; i < depsAsDependee.length; i++) {            TaskDependency next = depsAsDependee[i];            addAttribute("id", String.valueOf(next.getDependant().getTaskID()), attrs);            addAttribute("type", String.valueOf(next.getConstraint().getID()), attrs);            addAttribute("difference", String.valueOf(next.getDifference()), attrs);            addAttribute("hardness", next.getHardness().getIdentifier(), attrs);            emptyElement("depend", attrs, handler);        }        CustomColumnsValues ccv = task.getCustomValues();        for (Iterator/*<CustomColumn>*/ it = customColumns.getCustomColums().iterator(); it.hasNext();) {            CustomColumn nextColumn = (CustomColumn) it.next();            final String name = nextColumn.getName();            final String idc = nextColumn.getId();            Object value = ccv.getValue(name);            if (GregorianCalendar.class.isAssignableFrom(nextColumn.getType())) {                value = DateParser.getIsoDate(((GanttCalendar)value).getTime());            }            addAttribute("taskproperty-id", idc, attrs);            addAttribute("value", String.valueOf(value), attrs);            emptyElement("customproperty", attrs, handler);        }        // Write the child of the task        if (task.getManager().getTaskHierarchy().hasNestedTasks(task)) {            Task[] nestedTasks = task.getManager().getTaskHierarchy().getNestedTasks(task);            for (int i = 0; i < nestedTasks.length; i++) {                writeTask(handler, (GanttTask) nestedTasks[i], customColumns);            }        }        // end of task section        endElement("task", handler);    }    private void writeTaskProperty(TransformerHandler handler, String id, String name, String type, String valueType) throws SAXException {        writeTaskProperty(handler, id, name, type, valueType, null);    }        private void writeTaskProperty(TransformerHandler handler, String id, String name, String type, String valueType, String defaultValue) throws SAXException {        AttributesImpl attrs = new AttributesImpl();        addAttribute("id", id, attrs);        addAttribute("name", name, attrs);        addAttribute("type", type, attrs);        addAttribute("valuetype", valueType, attrs);        if (defaultValue!=null) {            addAttribute("defaultvalue", defaultValue, attrs);        }        emptyElement("taskproperty", attrs, handler);            }    private void writeTaskProperties(TransformerHandler handler, CustomColumnsStorage customCol) throws SAXException {        writeTaskProperty(handler, "tpd0", "type", "default", "icon");        writeTaskProperty(handler, "tpd1", "priority", "default", "icon");        writeTaskProperty(handler, "tpd2", "info", "default", "icon");        writeTaskProperty(handler, "tpd3", "name", "default", "text");        writeTaskProperty(handler, "tpd4", "begindate", "default", "date");        writeTaskProperty(handler, "tpd5", "enddate", "default", "date");        writeTaskProperty(handler, "tpd6", "duration", "default", "int");        writeTaskProperty(handler, "tpd7", "completion", "default", "int");        writeTaskProperty(handler, "tpd8", "coordinator", "default", "text");        writeTaskProperty(handler, "tpd9", "predecessorsr", "default", "text");        Iterator/*<CustomColumn>*/ it = customCol.getCustomColums().iterator();        while (it.hasNext()) {            final CustomColumn cc = (CustomColumn) it.next();            Object defVal = cc.getDefaultValue();            final String valueType;            Class cla = cc.getType();            if (cla.equals(String.class)) {                valueType = "text";            }            else if (cla.equals(Boolean.class)) {                valueType = "boolean";            }            else if (cla.equals(Integer.class)) {                valueType = "int";            }            else if (cla.equals(Double.class)) {                valueType = "double";            }            else if (cla.isAssignableFrom(GregorianCalendar.class)) {                assert defVal instanceof GanttCalendar;                valueType = "date";                defVal = DateParser.getIsoDate(((GanttCalendar)defVal).getTime());            }            else {                continue;            }            String idcStr = cc.getId();            writeTaskProperty(handler, idcStr, cc.getName(), "custom", valueType, String.valueOf(defVal));        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -