📄 taskimpl.java
字号:
private static interface EventSender { void enable(); void fireEvent(); } private class ProgressEventSender implements EventSender { private boolean myEnabled; public void fireEvent() { if (myEnabled) { myManager.fireTaskProgressChanged(TaskImpl.this); } myEnabled = false; } public void enable() { myEnabled = true; } } private class PropertiesEventSender implements EventSender { private boolean myEnabled; public void fireEvent() { if (myEnabled) { myManager.fireTaskPropertiesChanged(TaskImpl.this); } myEnabled = false; } public void enable() { myEnabled = true; } } private static class FieldChange { String myFieldName; Object myFieldValue; Object myOldValue; EventSender myEventSender; void setValue(Object newValue) { myFieldValue = newValue; myEventSender.enable(); } public void setOldValue(Object oldValue) { myOldValue = oldValue; } } private static class DurationChange extends FieldChange { Date getCachedDate(int length) { if (myDates == null) { return null; } int index = length - myMinLength; if (index < 0 || index >= myDates.size()) { return null; } return (Date) myDates.get(index); } void cacheDate(Date date, int length) { if (myDates == null) { myDates = new ArrayList(); } int index = length - myMinLength; while (index <= -1) { myDates.add(0, null); index++; } while (index > myDates.size()) { myDates.add(null); } if (index == -1) { myDates.add(0, date); } else if (index == myDates.size()) { myDates.add(date); } else { myDates.set(index, date); } } private int myMinLength = 0; private List myDates; } private class MutatorImpl implements TaskMutator { private EventSender myPropertiesEventSender = new PropertiesEventSender(); private EventSender myProgressEventSender = new ProgressEventSender(); private FieldChange myCompletionPercentageChange; private FieldChange myStartChange; private FieldChange myEndChange; private FieldChange myThirdChange; private DurationChange myDurationChange; private List myActivities; private final List myCommands = new ArrayList(); private int myIsolationLevel; public void rollback() { TaskImpl.this.myMutator = null; } public void commit() { try { boolean fireChanges = false; if (myStartChange != null) { GanttCalendar start = getStart(); TaskImpl.this.setStart(start); } if (myDurationChange != null) { TaskLength duration = getDuration(); TaskImpl.this.setDuration(duration); myEndChange = null; } if (myCompletionPercentageChange != null) { int newValue = getCompletionPercentage(); TaskImpl.this.setCompletionPercentage(newValue); } if (myEndChange != null) { GanttCalendar end = getEnd(); if (end.getTime().compareTo(TaskImpl.this.getStart().getTime())>0) { TaskImpl.this.setEnd(end); } } if (myThirdChange != null) { GanttCalendar third = getThird(); TaskImpl.this.setThirdDate(third); } for (int i = 0; i < myCommands.size(); i++) { Runnable next = (Runnable) myCommands.get(i); next.run(); } myCommands.clear(); myPropertiesEventSender.fireEvent(); myProgressEventSender.fireEvent(); } finally { TaskImpl.this.myMutator = null; } if (myStartChange!=null && TaskImpl.this.isSupertask()) { TaskImpl.this.adjustNestedTasks(); } if ((myStartChange!=null || myEndChange!=null || myDurationChange!=null) && areEventsEnabled()) { GanttCalendar oldStart = (GanttCalendar) (myStartChange==null ? TaskImpl.this.getStart() : myStartChange.myOldValue); GanttCalendar oldEnd = (GanttCalendar) (myEndChange==null ? TaskImpl.this.getEnd() : myEndChange.myOldValue); myManager.fireTaskScheduleChanged(TaskImpl.this, oldStart, oldEnd); } } public GanttCalendar getThird() { return myThirdChange == null ? TaskImpl.this.myThird : (GanttCalendar) myThirdChange.myFieldValue; } public List getActivities() { if (myActivities == null && (myStartChange != null) || (myDurationChange != null)) { myActivities = new ArrayList(); TaskImpl.this.recalculateActivities(myActivities, getStart() .getTime(), TaskImpl.this.getEnd().getTime()); } return myActivities; } public void setName(final String name) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setName(name); } }); } public void setProjectTask(final boolean projectTask) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setProjectTask(projectTask); } }); } public void setMilestone(final boolean milestone) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setMilestone(milestone); } }); } public void setPriority(final int priority) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setPriority(priority); } }); } public void setStart(final GanttCalendar start) { assert start!=null; GanttCalendar currentStart = getStart(); if (currentStart!=null && start.equals(currentStart)) { return; } if (myStartChange == null) { myStartChange = new FieldChange(); myStartChange.myEventSender = myPropertiesEventSender; } myStartChange.setOldValue(TaskImpl.this.myStart); myStartChange.setValue(start); myActivities = null; } public void setEnd(final GanttCalendar end) { if (myEndChange == null) { myEndChange = new FieldChange(); myEndChange.myEventSender = myPropertiesEventSender; } myEndChange.setOldValue(TaskImpl.this.myEnd); myEndChange.setValue(end); myActivities = null; } public void setThird(final GanttCalendar third, final int thirdDateConstraint) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setThirdDateConstraint(thirdDateConstraint); } }); if (myThirdChange == null) { myThirdChange = new FieldChange(); myThirdChange.myEventSender = myPropertiesEventSender; } myThirdChange.setValue(third); myActivities = null; } public void setDuration(final TaskLength length) { if (myDurationChange == null) { myDurationChange = new DurationChange(); myDurationChange.myEventSender = myPropertiesEventSender; myDurationChange.setValue(length); } else { TaskLength currentLength = (TaskLength) myDurationChange.myFieldValue; if (currentLength.getLength() - length.getLength() == 0) { return; } } myDurationChange.setValue(length); if (myEndChange==null) { Date shifted = TaskImpl.this.shiftDate(getStart().getTime(), length .getTimeUnit(), length.getLength()); GanttCalendar newEnd = new GanttCalendar(shifted); setEnd(newEnd); } else { assert myStartChange==null : "If both duration and end date are changed then start date must not be"; Date shifted = TaskImpl.this.shiftDate(getEnd().getTime(), length .getTimeUnit(), -length.getLength()); setStart(new GanttCalendar(shifted)); } myActivities = null; } public void setExpand(final boolean expand) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setExpand(expand); } }); } public void setCompletionPercentage(final int percentage) { if (myCompletionPercentageChange == null) { myCompletionPercentageChange = new FieldChange(); myCompletionPercentageChange.myEventSender = myProgressEventSender; } myCompletionPercentageChange.setValue(new Integer(percentage)); }// public void setStartFixed(final boolean isFixed) {// myCommands.add(new Runnable() {// public void run() {// TaskImpl.this.setStartFixed(isFixed);// }// });// }//// public void setFinishFixed(final boolean isFixed) {// myCommands.add(new Runnable() {// public void run() {// TaskImpl.this.setFinishFixed(isFixed);// }// });//// } public void setCritical(final boolean critical) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setCritical(critical); } }); } public void setShape(final ShapePaint shape) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setShape(shape); } }); } public void setColor(final Color color) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setColor(color); } }); } public void setNotes(final String notes) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.setNotes(notes); } }); } public void addNotes(final String notes) { myCommands.add(new Runnable() { public void run() { TaskImpl.this.addNotes(notes); } }); } public int getCompletionPercentage() { return myCompletionPercentageChange == null ? TaskImpl.this.myCompletionPercentage : ((Integer) myCompletionPercentageChange.myFieldValue) .intValue(); } GanttCalendar getStart() { return myStartChange == null ? TaskImpl.this.myStart : (GanttCalendar) myStartChange.myFieldValue; } GanttCalendar getEnd() { return myEndChange == null ? TaskImpl.this.myEnd : (GanttCalendar) myEndChange.myFieldValue; } TaskLength getDuration() { return myDurationChange == null ? TaskImpl.this.myLength : (TaskLength) myDurationChange.myFieldValue; } public void shift(float unitCount) { Task result = getPrecomputedShift(unitCount); if (result == null) { result = TaskImpl.this.shift(unitCount); cachePrecomputedShift(result, unitCount); } // System.err.println("[MutatorImpl] shift(): result="+result); setStart(result.getStart()); setDuration(result.getDuration()); setEnd(result.getEnd()); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -