亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? task.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.io.IOException;import java.util.Date;import java.util.Enumeration;import java.util.Hashtable;import java.util.Iterator;import java.util.Stack;import java.util.Vector;import jgantt.Messages;import jgantt.cmds.Command;import jgantt.cmds.SetCommand;import jgantt.cmds.TaskCommand;/** * Tarea de una carta gantt, contiene los datos necesarios * para cada tarea. Se enlaza con sus tareas hijas a traves * de {@link #getChilds()} y {@link #addChild()}. *  * Los plugins pueden acceder y modificar el arbol de tareas * directamente a traves de este objeto y desde las funciones  * del objeto {@link Project}. *  *   * @version $Header: /cvs/java/App_JGantt/source/jgantt/model/Task.java,v 1.51 2005/08/19 15:50:42 csilva Exp $  * @author Carlos Silva */public class Task {	// Instancia	/**	 * id	 */	protected int id = 0;	/**	 * Nombre	 */	protected String name = Messages.getString("task.defaultName"); //$NON-NLS-1$	/**	 * Largo de la tarea en minutos habiles.	 */	protected int length = 0;	/**	 * Fecha antes de la cual la tarea no debe comenzar.	 * Esta restriccion solo aplica a tareas no contenedoras.	 */	protected Date notBeforeDate = null;	/**	 * Comentarios	 */	protected String comments = Messages.getString("task.defaultComment"); //$NON-NLS-1$	/**	 * Porcentaje completado de la tarea	 */	protected int completed = 0;	/**	 * Prioridad de la tarea (numero entero)	 */	protected int priority = 0;	/**	 * indicador si ta tarea se marca como hito.	 */	protected boolean hito = false;	/**	 * notas	 */	protected String notes = "";	/**	 * Largo minimo de la tarea en minutos habiles.	 */	int minLength = 0;	/**	 * Largo maximo de la tarea en minutos habiles.	 */	int maxLength = 0;	/**	 * Datos para ser utilizados por la aplicacion de despliege/edicion.	 * los datos son no transientes. sin embargo, al serializar, solo 	 * se graban objetos de clases String, Number y Date.	 */	protected Hashtable attributes = new Hashtable();	// Asociaciones con otros objetos	/**	 * Lista de tareas que componen un resumen.	 * Esta tarea es un resumen si childTasks.size()>0	 */	protected Vector childTasks = new Vector();	/**	 * Tarea padre (o resumen) de esta tarea.	 */	protected Task parentTask = null;	/**	 * lista de dependencias que nacen de esta tarea	 * Esta variable es llenada por la clase {@link Constraint}	 */	protected Vector childConstraints = new Vector();	/**	 * lista de dependencias que afectan a esta tarea.	 * Esta variable es llenada por la clase {@link Constraint}	 */	protected Vector constraints = new Vector();	/**	 * Referencia al proyecto al cual pertenecen las tareas	 */	protected Project project = null;	/**	 * Recursos asociados a la ejecucion de la tarea	 * Contiene elementos de tipo {@link Asignation}	 */	protected Vector resources = new Vector();	// Transientes	/**	 * Fecha de inicio calculada segun el {@link DateOrganizer}.	 * Solo es valida si dirty==false	 */	transient Date startDate = null;	/**	 * Indicacion de si la tarea requiere recalcularse	 */	transient boolean dirty = true;	/**	 * fecha de termino de la tarea	 * solo es valida si dirty==false	 */	transient Date finishDate = null;	/**	 * indicacion de si la tarea se esta borrando	 * para no enviar multiples notificaciones al borrar un arbol.	 * @param p	 */	transient boolean removed = false;	/**	 * Contructor de una tarea.	 * Inicializa el proyecto como una referencia interna.	 */	public Task(Project p) {		project = p;	}	/**	 * Crea una tarea a partir de un proyecto y un nombre	 * @param p	 * @param name	 */	public Task(Project p, String name) {		project = p;		setName(name);	}	/**	 * Crea una tarea a partir de un proyecto, un nombre y una duracion en dias. 	 * @param p	 * @param name	 * @param length	 */	public Task(Project p, String name, int length) {		project = p;		this.name = name;		try {			// En teoria se deberia llamar a setLength, pero esta genera un Comando (undo/redo) 			// que no deberia funcionar aparte de crear una tarea 			this.length = length;			setDirty();		} catch (Exception e) {			// nunca ocurrira, esta tarea nueva no tiene hijos.		}	}	/**	 * Datos para ser utilizados por la aplicacion de despliege/edicion	 * En la lista de atributos se puede almacenar cualquier valor (no null)	 */	public Object getAttribute(String name) {		return attributes.get(name);	}	/**	 * Datos para ser utilizados por la aplicacion de despliege/edicion.	 * En la lista de atributos se puede almacenar cualquier valor.	 */	public void setAttribute(String name, Object data) {		attributes.put(name, data);	}	/**	 * Datos para ser utilizados por la aplicacion de despliege/edicion	 */	public void removeAttribute(String name) {		attributes.remove(name);	}	// Metodos protegidos		/**	 * Asigna el Id de la tarea.	 * Este Id es interno, parte de 0 para la tarea principal (invisible)	 * del proyecto y es asignada por el proyecto.	 */	protected void setId(int i) {		id = i;	}	/**	 * retorna el Id de la tarea. La tarea 	 * principal del proyecto (invisible) tiene Id ==0. 	 */	public int getId() {		return id;	}	/**	 * indica si la tarea es un resumen de otras tareas.	 */	public boolean isResume() {		return childTasks.size() > 0;	}	/**	 * Remueve la tarea del proyecto.	 * para remover la tarea se remueven sus constraints  de la lista de objetos.	 * ademas se remueve de la lista de hijos de la tarea resumen	 * y llama a la funcion removeTask() del proyecto.</P>	 * </P>Esta funcion puede ser llamada por los elementos externos.	 * notifica del borrado llamando a la funcion {@link Project#removeTask}.</P>	 * <P>Esta funcion solo notifica la eliminacion del primer hijo. No envia 	 * notificaciones para las tareas hijas que dependen.</P>	 */	public void remove() {		removed = true;		for (Enumeration e = childConstraints.elements();			e.hasMoreElements();			) {			Constraint c = (Constraint) e.nextElement();			c.getSlaveTask().setDirty();			c.remove();		}		for (Enumeration e = constraints.elements(); e.hasMoreElements();) {			Constraint c = (Constraint) e.nextElement();			c.remove();		}		// borrar los hijos.		for (Enumeration e = childTasks.elements(); e.hasMoreElements();) {			Task t = (Task) e.nextElement();			t.remove();		}		parentTask.childTasks.remove(this);		parentTask.setDirty();		// Solo notifica si esta es la tarea principal borrada.		if (!parentTask.removed) {			project.removeTask(this);			TaskCommand cmd = new TaskCommand(this) {				public void execute() {					task.remove();				}				public void undo() {					parentTask.addChild(task);				}			};			project.registerCommand(cmd);		}	}	/**	 * marca esta tarea como una tarea resumen al agregar una 	 * tarea hija.	 * Esta funcion asigna el Id de la tarea hija dejandola como	 * el ultimo hijo.	 */	public void addChild(Task t) {		notBeforeDate = null;		t.parentTask = this;		int idx = id;		int childs = childTasks.size();		childTasks.addElement(t);		TaskCommand cmd = new TaskCommand(t) {			public void execute() {				addChild(task);			}			public void undo() {				task.remove();			}		};		project.registerCommand(cmd);		project.childInserted(t);		setDirty();	}		/**	 * Agrega como hijas de esta tarea el contenido de otro proyecto.	 * @param p proyecto a cargar 	 */	public void addChild(Project p ){		notBeforeDate = null;		int idx = id;		int childs = childTasks.size();		for (int i=0;i<p.taskList.size(); i++){			((Task)p.taskList.get(i)).project=project;		}				for (int i=0;i<p.mainTask.childTasks.size(); i++){			((Task)p.mainTask.childTasks.get(i)).parentTask=this;		}		childTasks.addAll(p.mainTask.childTasks);				//TODO: Soporte undo/redo para esta operacion		project.childInserted(this);		setDirty();					}			/**	 * Agrega una tarea como hija pero antes que otra. 	 	 * Esta funcion asigna el Id de la tarea hija dejandola como	 * el ultimo hijo.	 */	private void addChildBefore(Task newTask, Task before) {		notBeforeDate = null;		newTask.parentTask = this;		newTask.setId(before.getId());		int childs = childTasks.size();		if (before != null) {			int i = childTasks.indexOf(before);			if (i >= 0)				childTasks.add(i, newTask);			else				childTasks.add(newTask);		} else			childTasks.add(newTask);		TaskCommand cmd = new TaskCommand(newTask, before) {			public void execute() {				addChildBefore(task, refTask);			}			public void undo() {				task.remove();			}		};		project.registerCommand(cmd);		project.childInserted(newTask);	}	/**	 * Agrega una tarea como hermana anterior	 * @param newTask tarea nueva	 */	public void addBefore(Task newTask) {		getParentTask().addChildBefore(newTask, this);	}	/**	 * Agrega una tarea como hija pero antes que otra. 	 	 * Esta funcion asigna el Id de la tarea hija dejandola como	 * el ultimo hijo.	 */	private void addChildAfter(Task newTask, Task after) {		notBeforeDate = null;		newTask.parentTask = this;		newTask.setId(after.getId());		int childs = childTasks.size();		if (after != null) {			int i = childTasks.indexOf(after);			if (i >= 0)				childTasks.add(i + 1, newTask);			else				childTasks.add(newTask);		} else			childTasks.add(newTask);		TaskCommand cmd = new TaskCommand(newTask, after) {			public void execute() {				addChildAfter(task, refTask);			}			public void undo() {				task.remove();			}		};		project.registerCommand(cmd);		project.childInserted(newTask);	}	/**	 * Agrega una tarea como hermana posterior	 * @param newTask tarea nueva	 */	public void addAfter(Task newTask) {		getParentTask().addChildAfter(newTask, this);	}	/**	 * Retorna el nombre de la tarea(titulo)	 */	public String getName() {		return name;	}	/**	 * Transforma esta tarea en hija de su hermana anterior	 * No deben haber contraints entre hermana y hermana (eliminar)	 * 	 	 */	public void asChild() {		int i = parentTask.childTasks.indexOf(this);		if (i == 0)			return;		parentTask.childTasks.remove(i);		Task t = (Task) parentTask.childTasks.elementAt(i - 1);		//System.out.println("childing " + getId() + " -> " + t.getId());		for (int j = 0; j < t.childConstraints.size(); j++) {			//System.out.println(j);			Constraint c = (Constraint) t.childConstraints.get(j);			//System.out.println("Constraint "+ c.getMasterTask().getId()+ " -> "+ c.getSlaveTask().getId());			if (hasChild(c.getSlaveTask()))				c.remove();		}		t.addChild(this);		project.taskMoved(this);	}	/**	 * Retorna verdadero si esta tarea depende de otra.	 * <p>Una tarea <code>A</code> depende de otra <code>B</code> si:</p>	 * <ol>	 * <li>A==B	 * <li>A es descendiente de B	 * <li>algun ancestro de B tiene un Constraint hacia algun ancestro de A	 * <li>algun descendiente de B tiene un constraint hacia algun descendiente de A 	 * </ol>  	 * <p>Otra forma de verlo es: Una tarea <code>A</code> depende de otra <code>B</code> si:</p>	 * <ol>	 * <li>El conjunto de descendientes y restrictos de descendientes y restrictos incluye a A. 	 * </ol>	 * 	 * @param master Task que puede ser una tarea que contiene una dependencia.	 * @return verdadero segun las condiciones enumeradas.	 */	public void checkConstrained(Task master) throws GanttException {		Task t = null;		// 1.- A==B		if (master == this)			throw new GanttException(Messages.getString("task.error.selfConstraint")); //$NON-NLS-1$		// 2.- A es descendiente de B		if (isChildOf(master))			throw new GanttException(Messages.getString("task.error.parentConstraint")); //$NON-NLS-1$		// 3.- Conjunto de restrictos.		Vector set = new Vector();		Stack porRevisar = new Stack();		porRevisar.push(master);		t = master;		while (t != null) {			set.add(t);			// add constrained tasks 			for (Iterator it = t.childConstraints.iterator(); it.hasNext();) {				Constraint c = (Constraint) it.next();				porRevisar.push(c.getSlaveTask());			}			t = t.parentTask;		}		while (!porRevisar.empty()) {			t = (Task) porRevisar.pop();			set.add(t);			// agregar hijos			for (Iterator it = t.childTasks.iterator(); it.hasNext();)				porRevisar.push(it.next());			//	agregar tasks constrained			for (Iterator it = t.childConstraints.iterator(); it.hasNext();) {				Constraint c = (Constraint) it.next();				porRevisar.push(c.getSlaveTask());			}		}		if (set.contains(this))			throw new GanttException(Messages.getString("task.error.dependantConstraint")+" Task '"+this.name+"' depends on '"+master.name+"'.");	}	/**	 * Convierte una tarea en hermana de su padre.	 */	public void deChild() {		if (getChildLevel() == 1)			return;		Task parent = parentTask;		parentTask.childTasks.remove(this);		parentTask.parentTask.addChild(this);		parent.setDirty();		setDirty();		project.taskMoved(this);	}	/**	 * Convierte mueve una herma a su tarea anterior	 */	public void goUp() {		int i = parentTask.childTasks.indexOf(this);		if (i == 0)			return;		parentTask.childTasks.add(i - 1, this);		parentTask.childTasks.remove(i + 1);		setDirty();		project.taskMoved(this);	}	/**	 * Convierte mueve una herma a su tarea anterior	 */	public void goDown() {		int i = parentTask.childTasks.indexOf(this);		if (i + 1 >= parentTask.childTasks.size())			return;		parentTask.childTasks.add(i + 2, this);		parentTask.childTasks.remove(i);		parentTask.setDirty();		project.taskMoved(this);	}	/**	 * Determina si una tarea es hija de esta.	 * 	 * @param child	 * @return true si this tiene como descendiente child	 */	public boolean hasChild(Task child) {		if (this == child)			return true;		for (Iterator it = childTasks.iterator(); it.hasNext();) {			Task c = (Task) it.next();			if (c.hasChild(child))				return true;		}		return false;	}	/**	 * getChildLevel retorna el nivel de profundidad de la tarea	 * comienza desde 1.	 * @return profundidad desde 1.	 */	public int getChildLevel() {		if (parentTask == null)			return 0;		return parentTask.getChildLevel() + 1;	}	/**	 * Retorna el nombre de la tarea(titulo) con indentacion dependiendo	 * de la profundidad en descendientes de la tarea principal del proyecto.	 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影免费观看完整版| 91精品国产入口| 天堂va蜜桃一区二区三区漫画版| 久久综合色婷婷| 欧美久久一二三四区| 99久久精品免费观看| 国产在线一区二区| 日本欧美一区二区在线观看| 亚洲欧美日韩国产另类专区| 久久久美女艺术照精彩视频福利播放 | 国产清纯美女被跳蛋高潮一区二区久久w| 色88888久久久久久影院按摩| 国产不卡在线一区| 久久99国产精品免费| 亚洲mv在线观看| 亚洲欧美成aⅴ人在线观看| 久久精品视频网| 久久亚洲精华国产精华液| 国产精品伦理在线| 日韩欧美国产综合在线一区二区三区| 色婷婷综合在线| 99精品视频一区二区三区| 国产成人精品一区二区三区四区| 九九九精品视频| 麻豆专区一区二区三区四区五区| 亚洲国产精品一区二区久久| 亚洲天堂福利av| 一色屋精品亚洲香蕉网站| 亚洲国产精品二十页| 久久九九99视频| 久久精子c满五个校花| 久久久国产精华| 久久久亚洲精品一区二区三区| 欧美精品一区二区三区很污很色的| 日韩一区二区在线观看视频播放| 91精品国产综合久久香蕉的特点| 欧美福利视频导航| 在线播放中文一区| 91麻豆精品国产91久久久久久久久| 欧美性感一类影片在线播放| 欧美三级电影在线看| 欧美日韩一区国产| 欧美日韩国产一级二级| 欧美精三区欧美精三区| 91精品国产欧美一区二区18| 91精品国产一区二区三区香蕉| 在线不卡免费欧美| 日韩亚洲欧美高清| 337p日本欧洲亚洲大胆色噜噜| 精品国产凹凸成av人网站| 久久九九国产精品| 国产精品理论在线观看| 一区二区三区中文字幕电影| 亚洲第一电影网| 久久成人羞羞网站| 国产精品1024| 色综合久久综合网97色综合| 欧美日韩成人在线一区| 日韩美女主播在线视频一区二区三区| 欧美电视剧免费观看| 中文成人av在线| 一区二区三区在线视频免费| 日韩av在线发布| 国产成人免费视频网站| 色哟哟一区二区三区| 91精品国产91热久久久做人人 | 国产精品视频免费看| 亚洲蜜臀av乱码久久精品蜜桃| 午夜成人免费电影| 国产一本一道久久香蕉| eeuss影院一区二区三区| 欧美日本韩国一区二区三区视频 | 国产欧美综合在线观看第十页| 综合在线观看色| 天堂午夜影视日韩欧美一区二区| 国产精品一二一区| 在线中文字幕一区二区| 26uuu亚洲综合色| 亚洲视频一区二区免费在线观看 | 在线亚洲免费视频| 精品捆绑美女sm三区| 亚洲欧美另类图片小说| 久久成人18免费观看| 色999日韩国产欧美一区二区| 日韩欧美一区中文| 亚洲欧美色综合| 狠狠色2019综合网| 色狠狠色狠狠综合| 国产区在线观看成人精品| 午夜亚洲国产au精品一区二区 | 欧美一级久久久久久久大片| 国产欧美一区二区在线| 亚洲第一电影网| 99精品偷自拍| www国产精品av| 午夜伦理一区二区| 99riav一区二区三区| 亚洲精品在线一区二区| 水野朝阳av一区二区三区| gogo大胆日本视频一区| 精品国产一区二区三区av性色| 一区二区三区小说| 成人激情午夜影院| 久久影院电视剧免费观看| 五月天亚洲精品| 91视频.com| 国产精品免费aⅴ片在线观看| 久久福利资源站| 宅男在线国产精品| 亚洲高清免费观看| 一本色道久久综合亚洲aⅴ蜜桃 | 亚洲曰韩产成在线| 99久久精品免费| 欧美激情在线观看视频免费| 久久国产麻豆精品| 欧美一区二区精品在线| 亚洲福利视频一区二区| 91福利国产成人精品照片| 亚洲欧洲精品一区二区三区| 国产精品亚洲第一| 久久精品一区二区三区av| 精品一区二区三区在线观看| 91精品国产综合久久精品app | 亚洲男人天堂av网| av中文字幕一区| 自拍偷在线精品自拍偷无码专区 | 成a人片国产精品| 国产日本欧洲亚洲| 丁香亚洲综合激情啪啪综合| 国产区在线观看成人精品| 在线成人午夜影院| 天天av天天翘天天综合网| 精品视频在线视频| 午夜欧美大尺度福利影院在线看| 欧美日韩视频在线观看一区二区三区| 亚洲激情网站免费观看| 色综合中文字幕| 亚洲激情综合网| 亚洲精品五月天| 久久久久综合网| 亚洲午夜精品在线| 欧美天天综合网| 天天色天天爱天天射综合| 欧美一区二视频| 国产一区二区三区最好精华液| 久久综合色综合88| 成人在线视频一区| 亚洲精品免费电影| 欧美日韩国产三级| 麻豆精品视频在线观看| 久久久精品国产免大香伊| 成人动漫av在线| 一区二区高清免费观看影视大全| 欧美日韩精品一区二区三区四区| 爽爽淫人综合网网站| 精品国产99国产精品| 成人av电影在线| 亚洲香蕉伊在人在线观| 日韩精品自拍偷拍| 成人黄色小视频在线观看| 亚洲精选一二三| 欧美一区午夜视频在线观看 | 国产91富婆露脸刺激对白| 国产日韩精品一区二区三区| 色综合色狠狠天天综合色| 日本午夜精品视频在线观看 | 欧美色爱综合网| 久久天堂av综合合色蜜桃网| 青青青伊人色综合久久| 久久久久久毛片| av电影在线观看完整版一区二区| 亚洲香肠在线观看| 国产午夜精品一区二区三区视频| 色综合久久99| 韩国女主播一区二区三区| 亚洲天堂免费在线观看视频| 日韩一卡二卡三卡国产欧美| 丁香五精品蜜臀久久久久99网站| 午夜精品福利视频网站| 久久精品欧美一区二区三区不卡| 色老汉av一区二区三区| 国产在线视频一区二区| 亚洲成人黄色影院| 欧美激情综合五月色丁香| 欧美老女人在线| 99久久综合国产精品| 久久99精品久久久久婷婷| 亚洲午夜三级在线| 久久精品网站免费观看| 欧美日韩国产高清一区二区| 国产成人av网站| 日本aⅴ精品一区二区三区 | 1024成人网| 精品精品国产高清一毛片一天堂| 在线国产亚洲欧美| 国产成人精品亚洲午夜麻豆| 免费观看日韩电影| 亚洲成人免费观看| 亚洲男同性恋视频| 国产精品美女久久久久久久久|