It's a special purpose date type for ganttzk library. Since ganttzk could be used by several implementations it must have freedom to allow different underlying implementations.
There are two base cases:
- the {@link LocalDateBased} one that is basically a LocalDate date. It'snormally used to receive values from interface. For example when moving a Task a {@link LocalDateBased} date is generated with the position the taskhas been moved.
- the {@link CustomDate}. This is one intended to be overridden by the user of ganttzk.
These base cases are used as a basis for a form of degenerate pattern matching in {@link #byCases(ICases)}, resembling the visitor pattern. This scheme allows ganttzk to work with both kinds of dates and perform different operations depending on the type.
Please note that ganttzk is intended to work with only one type of {@link CustomDate} at the same time. It's a bad idea to mix several types ofCustomDate.
@author Óscar González Fernández