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

📄 taskimpl.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    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 + -