I've added functionality for calculating the Critical Path of an IntervalCategoryDataset. Given a TaskSeries, one can now ask for the calculation of the critical path for that series of Task objects.
The general method for calculating critical path comes from:
I've modified the Task and TaskSeries files. A Task now has a list of predecessors, which are Tasks that need to be completed before the current Task can begin. Note that Task still works in the same way it used to, and you can completely disregard the critical path calculation if you want to. The diffs against these two are included.
I've also included 3 new classes: CriticalPath, CriticalPathNode, and CriticalPathEdge. I create a dependency graph with nodes and edges and then the CriticalPath class calculates the critical path based on this graph.
If you have any questions just let me know.