package schedule;

/**
 * Like an Appointment, a Task adds a number of components to a generic
 * ScheduledItem.  A Task differs from an Appointment as follows: (1)
 * Appointments have StartTime, Duration, and Location; Tasks do not.  (2) For
 * Appointments, the priority is either 'Must' or 'Optional'; for Tasks,
 * priority is a positive integer indicating the relative priority of a task
 * compared to other tasks.  (3) For appointments, reminders can be set to
 * occur at hour or minute granularity; for tasks, the smallest granularity of
 * reminder is a day.  (4) Tasks have a completedFlag, and completionDate
 * components; appointments do not.
 *                                                                           <p>
 * The completedFlag is true if a Task has been completed, false if not.  The
 * system does not enforce any specific constraints on the setting of a task's
 * CompletedFlag.  That is, the user may set or clear it at will.  Hence the
 * meaning of the completedFlag is up to user interpretation, particularly for
 * recurring tasks.
 *                                                                           <p>
 * The completionDate is the date on which as task is completed.  The system
 * does not enforce any specific constraints on the setting of a task's
 * completionDate (other than it being a legal Date value).  As with the
 * completedFlag, the meaning of the completionDate value is up to user
 * interpretation, particularly for recurring tasks.
 *                                                                           <p>
 * This object is derived from Section 2.4.2 of the Milestone 6 requirements,
 * in particular Figure 47.
 */
abstract class Task extends ScheduledItem {
    RecurringInfo recurringInfo;
    Security security;
    TaskPriority priority;
    TaskRemindInfo remind;
    Text details;
    boolean completedFlag;
    Date completionDate;
}