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

📄 xmlmodel.java

📁 Owing to the applet Gantt chart source yard, already Chinese melt, Gantt chart can demonstrate a Chi
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** *   Copyright 2004 Carlos Silva A. *  *   Licensed under the Apache License, Version 2.0 (the "License"); *   you may not use this file except in compliance with the License.  *   You may obtain a copy of the License at   *  *   http://www.apache.org/licenses/LICENSE-2.0 *  *   Unless required by applicable law or agreed to in writing, software *   distributed under the License is distributed on an "AS IS" BASIS, *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *   See the License for the specific language governing permissions and *   limitations under the License. *  */package jgantt.model;import java.awt.Color;import java.awt.Font;import java.io.IOException;import java.io.InputStream;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Iterator;import java.util.Stack;import java.util.StringTokenizer;import java.util.Vector;import org.xml.sax.SAXException;import com.csa.lib.xml.dom.DocumentParser;import com.csa.lib.xml.dom.Node;/** * XMLModel provee funciones para transformar un project en un modelo DOM y para * la transformacion inversa. * <p> * $Date: 2005/06/12 09:52:48 $ * </p> *  * @version $Revision: 1.22 $ * @author Carlos Silva */public class XMLModel {	static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");	static final SimpleDateFormat df = new SimpleDateFormat(			"yyyy-MM-dd HH:mm:ss.S");	static final String dayNames[] = { "monday", "tuesday", "wednesday",			"thursday", "friday", "saturday", "sunday" };	public static final String XML_PROJECT = "project";	public static final String XML_NAME = "name";	public static final String XML_START_DATE = "start-date";	public static final String XML_EFFORT = "effort";	public static final String XML_TOTAL = "total";	public static final String XML_WORKED = "worked";	public static final String XML_TASK = "task";	public static final String XML_ID = "id";	public static final String XML_ASIGNMENT = "asignment";	public static final String XML_RESOURCE = "resource";	public static final String XML_CONSTRAINT = "constraint";	public static final String XML_MASTER = "master";	/**	 * Generar una representacion de un Project en un arbol DOM de XML Retorna	 * el nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(Project project) {		Node e = null;		Node root = new Node(XML_PROJECT);		root.appendChild(new Node(XML_NAME, project.getName()));		root.appendChild(new Node(XML_START_DATE, sdf.format(project				.getStartDate())));		// Date organizer		root.appendChild(toXML(project.getDateOrganizer()));		// Recursos		for (Iterator i = project.getResources().iterator(); i.hasNext();) {			Resource r = (Resource) i.next();			Node rnode = toXML(r);			root.appendChild(rnode);			Node enode = new Node(XML_EFFORT);			int total = project.getMainTask().getTotalResourceUnits(r);			enode.appendChild(new Node(XML_TOTAL, String.valueOf(total)));			int worked = project.getMainTask().getWorkedResourceUnits(r);			enode.appendChild(new Node(XML_WORKED, String.valueOf(worked)));			rnode.appendChild(enode);		}		// Tareas		root.appendChild(toXML(project.getMainTask()));		// Snapshots		Node snapshots = new Node("snapshots");		for (Iterator i = project.getSnapshots().iterator(); i.hasNext();) {			Project.SnapShot ss = (Project.SnapShot) i.next();			String name = ss.name;			Node snapshot = new Node("snapshot", name);			snapshot.setAttribute("id", df.format(ss.date));			snapshots.appendChild(snapshot);		}		if (project.getSnapshots().size() > 0)			root.appendChild(snapshots);		return root;	}	/**	 * Generar una representacion de un Task en un arbol DOM de XML Retorna el	 * nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(Task task) {		Node e = null;		Node root = new Node(XML_TASK);		root.appendChild(XML_ID, String.valueOf(task.id));		root.appendChild(new Node(XML_NAME, task.name));		root.appendChild(new Node("length", String.valueOf(task.length)));		if (task.notBeforeDate != null) {			root.appendChild(new Node("not-before", sdf					.format(task.notBeforeDate)));		}		root.appendChild(new Node("completed", String.valueOf(task.completed)));		root.appendChild(new Node("comments", task.comments));		root.appendChild(new Node("notes", task.notes));		for (Iterator i = task.constraints.iterator(); i.hasNext();) {			Constraint c = (Constraint) i.next();			root.appendChild(toXML(c));		}		for (Iterator i = task.resources.iterator(); i.hasNext();) {			Asignation a = (Asignation) i.next();			Node anode = toXML(a);			root.appendChild(anode);			Node enode = new Node(XML_EFFORT);			int total = task.getLocalTotalResourceUnits(a.getResource());			enode.appendChild(new Node(XML_TOTAL, String.valueOf(total)));			int worked = task.getLocalWorkedResourceUnits(a.getResource());			enode.appendChild(new Node(XML_WORKED, String.valueOf(worked)));			anode.appendChild(enode);		}		for (Iterator i = task.childTasks.iterator(); i.hasNext();) {			Task t = (Task) i.next();			root.appendChild(toXML(t));		}		// Snapshots		if (task.snapshots.size() > 0) {			Node snapshots = new Node("snapshots");			for (Iterator i = task.snapshots.iterator(); i.hasNext();) {				Task.SnapShot ss = (Task.SnapShot) i.next();				Node snapshot = new Node("snapshot");				snapshot.appendChild("id", df.format(ss.date));				snapshot.appendChild("start", df.format(ss.start));				snapshot.appendChild("end", df.format(ss.end));				snapshot.appendChild("completed", String.valueOf(ss.completed));				snapshots.appendChild(snapshot);			}			root.appendChild(snapshots);		}		return root;	}	/**	 * Generar una representacion de un Resource en un arbol DOM de XML Retorna	 * el nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(Resource resource) {		Node e = null;		Node root = new Node(XML_RESOURCE);		root.appendChild(XML_ID, String.valueOf(resource.id));		root.appendChild(new Node(XML_NAME, resource.name));		root.appendChild(new Node("alias", resource.alias));		root.appendChild(new Node("initials", resource.initials));		return root;	}	/**	 * Generar una representacion de un Constraint en un arbol DOM de XML	 * Retorna el nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(Constraint constraint) {		Node root = new Node(XML_CONSTRAINT);		root.appendChild(XML_MASTER, String.valueOf(constraint.masterTask				.getId()));		switch (constraint.mode) {		case 0:			root.appendChild("mode", "EB");			break;		case 1:			root.appendChild("mode", "EE");			break;		case 2:			root.appendChild("mode", "BE");			break;		case 3:			root.appendChild("mode", "BB");			break;		}		root.appendChild("delay", String.valueOf(constraint.delay));		return root;	}	/**	 * Generar una representacion de un Asignation en un arbol DOM de XML	 * Retorna el nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(Asignation asignation) {		Node root = new Node(XML_ASIGNMENT);		root.appendChild("resource", String.valueOf(asignation.resource				.getId()));		root.appendChild("percent", String.valueOf(asignation.units));		return root;	}	/**	 * Generar una representacion de un Constraint en un arbol DOM de XML	 * Retorna el nodo pero no lo agrega al arbol.	 * 	 * @return Element	 */	static public Node toXML(DateOrganizer dOrg) {		Node e = null;		Node root = new Node("date-organizer");		root.appendChild("day-start", dOrg.startHH + ":" + dOrg.startMM);		root.appendChild("work-hours", dOrg.workHours + ":" + dOrg.workMinutes);		root.appendChild("work-hours", dOrg.workHours + ":" + dOrg.workMinutes);		e = new Node("labor-days");		for (int i = 0; i < dOrg.laborDays.length; i++) {			if (dOrg.laborDays[i])				e.appendChild(new Node(dayNames[i]));		}		root.appendChild(e);		e = new Node("holidays");		for (Iterator i = dOrg.holidays.iterator(); i.hasNext();) {			Date d = (Date) i.next();			e.appendChild("holiday", sdf.format(d));		}		root.appendChild(e);		e = new Node("extra-days");		for (Iterator i = dOrg.extraWorkDays.iterator(); i.hasNext();) {			Date d = (Date) i.next();			e.appendChild("extra-day", sdf.format(d));		}		root.appendChild(e);		return root;	}	/**	 * Lee un proyecto	 */	static public Project readProject(Node doc) throws ParseException,			GanttException {		// System.out.println("XMLModel.readProject()");		doc = getChildByName(doc, XML_PROJECT);		// date organizer		DateOrganizer dOrg = readDateOrganizer(getChildByName(doc,				"date-organizer"));		// proyecto		Project project = new Project(dOrg);		// resources		Node r = getChildByName(doc, XML_RESOURCE);		while (r != null) {			if (r.getNodeName().equals(XML_RESOURCE)) {				readResource(project, r);			}			r = r.getNextSibling();		}		// datos varios		project.setName(getChildText(doc, XML_NAME));		project.setStartDate(getElementDate(doc, XML_START_DATE));		// tasks		project.mainTask = readTask(project, getChildByName(doc, XML_TASK));		project.taskList.clear();		project.rebuildIds(project.getMainTask(), 0);		searchConstraints(project, getChildByName(doc, XML_TASK));		// Snapshots		Node snapshots = getChildByName(doc, "snapshots");		if (snapshots != null) {			Node item = getChildByName(snapshots, "snapshot");			while (item != null) {				if (!item.getNodeName().equals("snapshot"))					break;				Date d = df.parse(item.getAttribute("id"));				String n = item.getValue();				project.getSnapshots().add(new Project.SnapShot(d, n));				item = item.getNextSibling();			}		}		project.clearUndoRedo();		return project;	}	static public void searchConstraints(Project project, Node rootTask)			throws GanttException {		Stack s = new Stack();		Vector constraints = new Vector();		s.push(rootTask);		while (!s.empty()) {			Node n = (Node) s.pop();			Node c = getChildByName(n, XML_CONSTRAINT);			while (c != null) {				if (c.getNodeName().equals(XML_CONSTRAINT)) {					constraints.add(c);				}				c = c.getNextSibling();			}			Node t = getChildByName(n, XML_TASK);			while (t != null) {				if (t.getNodeName().equals(XML_TASK)) {					s.push(t);				}				t = t.getNextSibling();			}		}		for (Iterator i = constraints.iterator(); i.hasNext();) {			Node n = (Node) i.next();			Node task = n.getParentNode();			int delay = Integer.parseInt(getChildText(n, "delay"));			String mode = getChildText(n, "mode");			int slaveid = Integer.parseInt(getChildText(task, "id"));			int masterid = Integer.parseInt(getChildText(n, XML_MASTER));			Task slave = project.getTask(slaveid - 1);			Task master = project.getTask(masterid - 1);			// System.out.println("new Constraint "+master.getName()+" a			// "+slave.getName());			Constraint c = new Constraint(master, slave);			c.setDelay(delay);		}	}	static public DateOrganizer readDateOrganizer(Node doc)			throws ParseException, GanttException {		DateOrganizer dOrg = new DateOrganizer();		String dayStart = getChildText(doc, "day-start");		dOrg.startHH = Byte.parseByte(dayStart.substring(0, dayStart				.indexOf(":")));		dOrg.startMM = Byte.parseByte(dayStart				.substring(dayStart.indexOf(":") + 1));		String workHours = getChildText(doc, "work-hours");		dOrg.workHours = Integer.parseInt(workHours.substring(0, workHours				.indexOf(":")));		dOrg.workMinutes = Integer.parseInt(workHours.substring(workHours				.indexOf(":") + 1));		Node ld = getChildByName(doc, "labor-days");		boolean laborDays[] = new boolean[7];		for (int i = 0; i < 6; i++) {			laborDays[i] = (getChildByName(ld, dayNames[i])) != null;		}		dOrg.setLaborDays(laborDays);		Node h = getElementByPath(doc, "holidays").getFirstChild();		while (h != null) {			if (h.getNodeName().equals("holiday")) {				dOrg.addHoliday(sdf.parse(h.getValue()));			}			h = h.getNextSibling();		}		Node x = getElementByPath(doc, "extra-days");		if (x != null) {			x = x.getFirstChild();			while (x != null) {				if (x.getNodeName().equals("extra-day")) {					dOrg.addExtraWorkDays(sdf.parse(x.getValue()));				}				x = x.getNextSibling();			}		}		return dOrg;	}	/**	 * @id, name, length, not-before, completed, asignation*, task*	 */	static public Task readTask(Project project, Node doc)			throws ParseException, GanttException {		// System.out.println("XMLModel.readTask()");		Task task = new Task(project);		task.setName(getChildText(doc, XML_NAME));		task.setId(Integer.parseInt(getChildText(doc, "id")));		task.setLength(Integer.parseInt(getChildText(doc, "length")));		Node n = getChildByName(doc, "not-before");		if (n != null) {			task.setNotBeforeDate(sdf.parse(n.getValue()));

⌨️ 快捷键说明

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