Provides classes which compute hierarchical data for columns in a DataTableModel.

Data Columns

The classes in this package provide functionality implementing the {@link teamdash.wbs.DataColumn} interface. Three core classes form the basis for most of the other classes in this package:
{@link teamdash.wbs.DataColumn}
Interface for a column in a {@link teamdash.wbs.DataTableModel}
implements
{@link teamdash.wbs.columns.AbstractDataColumn}
Abstract implementation of {@link teamdash.wbs.DataColumn} interface.
extends
{@link teamdash.wbs.columns.AbstractNumericColumn}
Abstract implementation of {@link teamdash.wbs.DataColumn} interface for a numeric column.
extends
{@link teamdash.wbs.columns.TopDownBottomUpColumn}
A numeric column containing data which should sum up hierarchically.

Top Down/Bottom Up Column

{@link teamdash.wbs.columns.TopDownBottomUpColumn} in particular plays an important role, and forms the basis for nearly every numeric column in the model.

Although some columns (such as time columns) should sum hierarchically all the way down to each individual leaf, other columns only sum for particular types of hierarchy nodes. Children of those nodes then inherit a data value from their nearest participating ancestor. To draw the line, the {@link teamdash.wbs.columns.TopDownBottomUpColumn} calls upon an object implementing the {@link teamdash.wbs.columns.Pruner} interface. Two such implementations exist: {@link teamdash.wbs.columns.LOCPruner} and {@link teamdash.wbs.columns.DocSizePruner}.

Size Columns

Planned size metrics are calculated by columns created by the class {@link teamdash.wbs.columns.SizeAccountingColumnSet}. This class contains only static methods and static inner classes. Its main method, {@link teamdash.wbs.columns.SizeAccountingColumnSet#create(teamdash.wbs.DataTableModel,java.lang.String,teamdash.wbs.columns.Pruner,java.lang.String) create}, takes a size metric as input and creates columns to calculate Base, Deleted, Modified, Added, Reused, New & Changed, and Total values. Although most of these are plain {@link teamdash.wbs.columns.TopDownBottomUpColumn} objects, the Total and New & Changed columns are handled by inner classes which calculate their values based on the values in the other columns.

There are several different size metrics (LOC, Reqts Pages, HLD Pages, etc). The {@link teamdash.wbs.columns.SizeTypeColumn} examines nodes in the hierarchy and decides which size metric is most appropriate. It displays the name of the resulting size metric in a read-only column. With several different size metrics, each having a Base, Deleted, Modified, etc. column, there are 35 columns containing size accounting metrics. This is too many to display, so none of these columns are actually displayed directly to the user. Instead, the {@link teamdash.wbs.columns.SizeAliasColumn} creates a set of aliasing columns: one Base column, one Deleted column, one Modified column, etc. These columns use the {@link teamdash.wbs.columns.SizeTypeColumn} as a switch to determine which real column to display. When the user edits a value, it is "written through" to the appropriate underlying column.

Often a planner only cares about value in the the New & Changed column. {@link teamdash.wbs.columns.EditableSizeColumn} repeats this data, with one extra twist: columns which have no value (because the {@link teamdash.wbs.columns.SizeTypeColumn} returns null) are editable, and values entered will be stored away in a node attribute.

Task Columns

{@link teamdash.wbs.columns.PhaseColumn} displays the phase of a task in the hierarchy, derived from the type of the {@link teamdash.wbs.WBSNode}. {@link teamdash.wbs.columns.TaskSizeUnitsColumn} and {@link teamdash.wbs.columns.TaskSizeColumn} work together. {@link teamdash.wbs.columns.TaskSizeUnitsColumn} performs a function similar to the {@link teamdash.wbs.columns.SizeTypeColumn} - for each leaf task in the hierarchy, it determines the most appropriate size metric, and displays it. Unlike the {@link teamdash.wbs.columns.SizeTypeColumn}, if users disagree with the size metric chosen, they can edit it to select a different size metric (or even enter a nonstandard size metric). (For non-leaf tasks, the {@link teamdash.wbs.columns.SizeTypeColumn} is consulted and its value is displayed.) The {@link teamdash.wbs.columns.SizeTypeColumn} then performs a role similar to the {@link teamdash.wbs.columns.SizeAliasColumn} - based on the metric named in the {@link teamdash.wbs.columns.TaskSizeUnitsColumn}, it switches and displays the (read-only) inherited value for that size metric. (For non-leaf tasks, it behaves like a {@link teamdash.wbs.columns.SizeAliasColumn} for New & Changed size, and is therefore editable.)

Miscellaneous Columns

{@link teamdash.wbs.columns.NullDataColumn} returns read-only null values. It is used as a placeholder in the {@link teamdash.wbs.DataTableModel} when a column is deleted. {@link teamdash.wbs.columns.WBSNodeColumn} simply returns the hierarchy node, allowing it to appear as a column in the table.

TeamMemberColumnManager.java TeamMemberTimeColumn.java TeamTimeColumn.java WorkflowNumPeopleColumn.java WorkflowPercentageColumn.java WorkflowRateColumn.java


Column Dependencies example

Reused-Text Pages
       Name:Reused-Text Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Text Pages
              Reused

Base-HLD Pages
       Name:Base-HLD Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-HLD Pages
              Base

hej-Time
       Name:hej
       Class: {@link teamdash.wbs.columns.TeamMemberTimeColumn}
       Depends on: Affects:
              Time

Added-LOC
       Name:Added-LOC
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-LOC
              Total-LOC
              Added

Task Size Units
       Name:Units
       Class: {@link teamdash.wbs.columns.TaskSizeUnitsColumn}
       Depends on:
              Size-Units Affects:
              Task Size
              Time

Added-HLD Pages
       Name:Added-HLD Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-HLD Pages
              Total-HLD Pages
              Added

Deleted-DLD Lines
       Name:Deleted-DLD Lines
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-DLD Lines
              Deleted

Reused-DLD Lines
       Name:Reused-DLD Lines
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-DLD Lines
              Reused

Assigned To
       Name:Assigned To
       Class: {@link teamdash.wbs.columns.TeamTimeColumn$ResourcesColumn}
       Depends on: Affects:

akj-Time
       Name:akj
       Class: {@link teamdash.wbs.columns.TeamMemberTimeColumn}
       Depends on: Affects:
              Time

Modified
       Name:Modified
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Modified-LOC
              Modified-HLD Pages
              Modified-Text Pages
              Modified-DLD Lines
              Modified-Reqts Pages Affects:

wcj-Time
       Name:wcj
       Class: {@link teamdash.wbs.columns.TeamMemberTimeColumn}
       Depends on: Affects:
              Time

Total-Reqts Pages
       Name:Total-Reqts Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$TotalSizeColumn}
       Depends on:
              Base-Reqts Pages
              Deleted-Reqts Pages
              Added-Reqts Pages
              Reused-Reqts Pages Affects:
              Total

dat-Time
       Name:dat
       Class: {@link teamdash.wbs.columns.TeamMemberTimeColumn}
       Depends on: Affects:
              Time

Reused-LOC
       Name:Reused-LOC
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-LOC
              Reused

N&C-DLD Lines
       Name:N&C-DLD Lines
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$NewChangedSizeColumn}
       Depends on:
              Modified-DLD Lines
              Added-DLD Lines Affects:
              N&C
              Task Size

haj-Time
       Name:haj
       Class: {@link teamdash.wbs.columns.TeamMemberTimeColumn}
       Depends on: Affects:
              Time

Reused-HLD Pages
       Name:Reused-HLD Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-HLD Pages
              Reused

Base-Reqts Pages
       Name:Base-Reqts Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Reqts Pages
              Base

N&C-HLD Pages
       Name:N&C-HLD Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$NewChangedSizeColumn}
       Depends on:
              Modified-HLD Pages
              Added-HLD Pages Affects:
              N&C
              Task Size

Added-Reqts Pages
       Name:Added-Reqts Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-Reqts Pages
              Total-Reqts Pages
              Added

Modified-Text Pages
       Name:Modified-Text Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-Text Pages
              Modified

Modified-LOC
       Name:Modified-LOC
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-LOC
              Modified

Reused-Reqts Pages
       Name:Reused-Reqts Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Reqts Pages
              Reused

Base-DLD Lines
       Name:Base-DLD Lines
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-DLD Lines
              Base

Reused
       Name:Reused
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Reused-LOC
              Reused-HLD Pages
              Reused-Text Pages
              Reused-DLD Lines
              Reused-Reqts Pages Affects:

Number of People
       Name:# People
       Class: {@link teamdash.wbs.columns.TeamTimeColumn$NumPeopleColumn}
       Depends on: Affects:

Added
       Name:Added
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Added-LOC
              Added-HLD Pages
              Added-Text Pages
              Added-DLD Lines
              Added-Reqts Pages Affects:

Deleted-Reqts Pages
       Name:Deleted-Reqts Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Reqts Pages
              Deleted

Size
       Name:Size
       Class: {@link teamdash.wbs.columns.EditableSizeColumn}
       Depends on:
              N&C Affects:

Modified-Reqts Pages
       Name:Modified-Reqts Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-Reqts Pages
              Modified

Phase
       Name:Phase
       Class: {@link teamdash.wbs.columns.PhaseColumn}
       Depends on: Affects:

Rate
       Name:Rate
       Class: {@link teamdash.wbs.columns.TeamTimeColumn$RateColumn}
       Depends on: Affects:

Time
       Name:Time
       Class: {@link teamdash.wbs.columns.TeamTimeColumn}
       Depends on:
              Task Size
              Task Size Units
              wcj-Time
              dat-Time
              hej-Time
              haj-Time
              akj-Time Affects:

Deleted-LOC
       Name:Deleted-LOC
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-LOC
              Deleted

Base
       Name:Base
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Base-LOC
              Base-HLD Pages
              Base-Text Pages
              Base-DLD Lines
              Base-Reqts Pages Affects:

Total-Text Pages
       Name:Total-Text Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$TotalSizeColumn}
       Depends on:
              Base-Text Pages
              Deleted-Text Pages
              Added-Text Pages
              Reused-Text Pages Affects:
              Total

N&C-LOC
       Name:N&C-LOC
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$NewChangedSizeColumn}
       Depends on:
              Modified-LOC
              Added-LOC Affects:
              N&C
              Task Size

N&C-Reqts Pages
       Name:N&C-Reqts Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$NewChangedSizeColumn}
       Depends on:
              Modified-Reqts Pages
              Added-Reqts Pages Affects:
              N&C
              Task Size

N&C
       Name:N&C
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              N&C-LOC
              N&C-HLD Pages
              N&C-Text Pages
              N&C-DLD Lines
              N&C-Reqts Pages Affects:
              Size

Total-HLD Pages
       Name:Total-HLD Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$TotalSizeColumn}
       Depends on:
              Base-HLD Pages
              Deleted-HLD Pages
              Added-HLD Pages
              Reused-HLD Pages Affects:
              Total

Total
       Name:Total
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Total-LOC
              Total-HLD Pages
              Total-Text Pages
              Total-DLD Lines
              Total-Reqts Pages Affects:

Added-Text Pages
       Name:Added-Text Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-Text Pages
              Total-Text Pages
              Added

Total-LOC
       Name:Total-LOC
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$TotalSizeColumn}
       Depends on:
              Base-LOC
              Deleted-LOC
              Added-LOC
              Reused-LOC Affects:
              Total

Modified-HLD Pages
       Name:Modified-HLD Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-HLD Pages
              Modified

Total-DLD Lines
       Name:Total-DLD Lines
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$TotalSizeColumn}
       Depends on:
              Base-DLD Lines
              Deleted-DLD Lines
              Added-DLD Lines
              Reused-DLD Lines Affects:
              Total

Modified-DLD Lines
       Name:Modified-DLD Lines
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-DLD Lines
              Modified

Base-Text Pages
       Name:Base-Text Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Text Pages
              Base

N&C-Text Pages
       Name:N&C-Text Pages
       Class: {@link teamdash.wbs.columns.SizeAccountingColumnSet$NewChangedSizeColumn}
       Depends on:
              Modified-Text Pages
              Added-Text Pages Affects:
              N&C
              Task Size

Deleted
       Name:Deleted
       Class: {@link teamdash.wbs.columns.SizeAliasColumn}
       Depends on:
              Deleted-LOC
              Deleted-HLD Pages
              Deleted-Text Pages
              Deleted-DLD Lines
              Deleted-Reqts Pages Affects:

Added-DLD Lines
       Name:Added-DLD Lines
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              N&C-DLD Lines
              Total-DLD Lines
              Added

Deleted-HLD Pages
       Name:Deleted-HLD Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-HLD Pages
              Deleted

Base-LOC
       Name:Base-LOC
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-LOC
              Base

Time Per Person
       Name:Hrs/Indiv
       Class: {@link teamdash.wbs.columns.TeamTimeColumn$TimePerPersonColumn}
       Depends on: Affects:

Task Size
       Name:Task Size
       Class: {@link teamdash.wbs.columns.TaskSizeColumn}
       Depends on:
              N&C-LOC
              N&C-HLD Pages
              N&C-Text Pages
              N&C-DLD Lines
              N&C-Reqts Pages
              Task Size Units Affects:
              Time

Deleted-Text Pages
       Name:Deleted-Text Pages
       Class: {@link teamdash.wbs.columns.TopDownBottomUpColumn}
       Depends on: Affects:
              Total-Text Pages
              Deleted