📄 dependencytaghandler.java
字号:
package net.sourceforge.ganttproject.parser;import java.util.ArrayList;import java.util.List;import net.sourceforge.ganttproject.GanttTaskRelationship;import net.sourceforge.ganttproject.gui.UIFacade;import net.sourceforge.ganttproject.task.Task;import net.sourceforge.ganttproject.task.TaskManager;import net.sourceforge.ganttproject.task.dependency.TaskDependency;import net.sourceforge.ganttproject.task.dependency.TaskDependencyException;import net.sourceforge.ganttproject.task.dependency.TaskDependency.Hardness;import net.sourceforge.ganttproject.task.dependency.constraint.FinishStartConstraintImpl;import org.xml.sax.Attributes;public class DependencyTagHandler implements TagHandler, ParsingListener { private final TaskManager myTaskManager; private final UIFacade myUIFacade; public DependencyTagHandler(ParsingContext context, TaskManager taskManager, UIFacade uiFacade) { myContext = context; myTaskManager = taskManager; myUIFacade = uiFacade; } /** * @see net.sourceforge.ganttproject.parser.TagHandler#endElement(String, * String, String) */ public void endElement(String namespaceURI, String sName, String qName) { /* * if ("dependencies".equals (qName)) { myDependenciesSectionStarted = * false; } */ } /** * @see net.sourceforge.ganttproject.parser.TagHandler#startElement(String, * String, String, Attributes) */ public void startElement(String namespaceURI, String sName, String qName, Attributes attrs) { /* * if ("dependencies".equals (qName)) { myDependenciesSectionStarted = * true; } */ if ("depend".equals(qName)) { /* * if (!myDependenciesSectionStarted) { throw new * RuntimeException("Invalid file format. Found 'dependency' tag * without prior 'dependencies' tag"); } else { */ loadDependency(attrs); } } public void parsingStarted() { } public void parsingFinished() { for (int i = 0; i < getDependencies().size(); i++) { GanttDependStructure ds = (GanttDependStructure) getDependencies() .get(i); Task dependee = myTaskManager.getTask(ds.taskID); // By CL Task dependant = myTaskManager.getTask(ds.successorTaskID); if (dependee == null || dependant == null) { continue; } try { TaskDependency dep = myTaskManager.getDependencyCollection() .createDependency(dependant, dependee, new FinishStartConstraintImpl()); dep .setConstraint(myTaskManager .createConstraint(ds.dependType)); dep.setDifference(ds.difference); if (myContext.getTasksWithLegacyFixedStart().contains(dependant)) { dep.setHardness(TaskDependency.Hardness.RUBBER); } else { dep.setHardness(ds.myHardness); } } catch (TaskDependencyException e) { e.printStackTrace(); myUIFacade.logErrorMessage(e); } } } protected void loadDependency(Attributes attrs) { if (attrs != null) { GanttDependStructure gds = new GanttDependStructure(); gds.setTaskID(getDependencyAddressee()); gds.setDependTaskID(getDependencyAddresser(attrs)); String dependencyTypeAsString = attrs.getValue("type"); String differenceAsString = attrs.getValue("difference"); String hardnessAsString = attrs.getValue("hardness"); if (dependencyTypeAsString != null) { try { int dependencyType = Integer .parseInt(dependencyTypeAsString); gds.setDependType(dependencyType); } catch (NumberFormatException e) { } } if (differenceAsString != null) { try { int difference = Integer.parseInt(differenceAsString); gds.setDifference(difference); } catch (NumberFormatException e) { } } if (hardnessAsString!=null) { TaskDependency.Hardness hardness = TaskDependency.Hardness.parse(hardnessAsString); gds.setHardness(hardness); } getDependencies().add(gds); } } protected int getDependencyAddressee() { return getContext().getTaskID(); } protected int getDependencyAddresser(Attributes attrs) { try { return Integer.parseInt(attrs.getValue("id")); } catch (NumberFormatException e) { throw new RuntimeException( "Failed to parse 'depend' tag. Attribute 'id' seems to be invalid: " + attrs.getValue("id"), e); } } private List getDependencies() { return myDependencies; } private ParsingContext getContext() { return myContext; } private List myDependencies = new ArrayList(); private boolean myDependenciesSectionStarted = false; private ParsingContext myContext; private class GanttDependStructure { public int taskID, successorTaskID; public int difference = 0; public int dependType = GanttTaskRelationship.FS; // private Hardness myHardness = TaskDependency.Hardness.STRONG; public GanttDependStructure(int a, int b) { taskID = a; successorTaskID = b; } public void setHardness(Hardness hardness) { myHardness = hardness; } public GanttDependStructure(int taskID, int successorID, int relationType) { this.taskID = taskID; this.successorTaskID = successorID; this.dependType = relationType; } public GanttDependStructure(int taskID, int successorID, int relationType, int difference) { this.taskID = taskID; this.successorTaskID = successorID; this.dependType = relationType; this.difference = difference; } public GanttDependStructure() { } public void setTaskID(int taskID) { this.taskID = taskID; } public void setDifference(int difference) { this.difference = difference; } public void setDependTaskID(int successorTaskID) { this.successorTaskID = successorTaskID; } public void setDependType(int dependType) { this.dependType = dependType; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -