(**** * * Module File defines the objects and operations related to scheduling * appointments, meetings, and tasks in the calendar system. * *) module Schedule; export *; object ScheduledItem components: Appointment or Meeting or Task or SpecialDate; description: (* *); end ScheduledItem; object Appointment components: Title and StartDate and EndDate and StartTime and EndTime and RecurringInfo and Type and Location and Security and Priority and RemindInfo and Details; description: (* *); end Appointment; object Title is string description: (* *); end Title; object StartDate is Date description: (* *); end StartDate; object EndDate is Date description: (* *); end EndDate; object StartTime is Time description: (* *); end StartTime; object EndTime is Time description: (* *); end EndTime; object RecurringInfo components: IsRecurring and Interval and OnDay; description: (* *); end RecurringInfo; object IsRecurring is boolean description: (* *); end IsRecurring; obj Interval components: Daily or Weekly or Biweekly or Monthly or Yearly or OtherInterval; description: (* *); end Interval; object OtherInterval components: Every and IntervalPeriod; description: (* *); end OtherInterval; object IntervalPeriod components: DayInterval or WeekInterval or MonthInterval or YearInterval; description: (* *); end IntervalPeriod; object OnDay components: OnSun and OnMon and OnTues and OnWed and OnThu and OnFri and OnSat; description: (* *); end OnDay; object OnSun is boolean; object OnMon is boolean; object OnTue is boolean; object OnWed is boolean; object OnThu is boolean; object OnFri is boolean; object OnSat is boolean; object Type components: string and StdColor; description: (* *); end Type; object Location is string description: (* *); end Location; object Security components: Public or PublicTitle or Group or Confidential or Private; description: (* The Security object is one of five possible security level, each of which is described further below. *); end Security; object Public description: (* Public security means all users can see the scheduled item and all the information about that item. *); end Public; object PublicTitle description: (* PublicTitle security means all users can see the title of the scheduled item but none of the other information about the item. *); end Public; object Group description: (* Group security means all members of the group(s) who will attend a scheduled meeting can see the scheduled item and all of its information. Other users, i.e., non-group members, may see only the title of the meeting. I.e., for non-group members, the scheduled item has PublicTitle security. Note that since Group security is based on attendees of a meeting, it applies only to scheduled meetings, not to appointments, tasks, or special dates. *); end; object Unavailable description: (* Unavailable security means other users may only see that the time period for a scheduled item is unavaliable, but no other information about the scheduled item is visible. *); end; object Private description: (* Private security means other users see no information about a scheduled item, not even that the item is scheduled. Note that Private security hides a scheduled item from the ScheduleMeeting operation, q.v., so that a meeting may be scheduled at the same time as a Private apppointement. It is up to the user to handle this situation by accepting or refusing the scheduled meeting. *); end; object Details is string description: (* *); end Task; object Task < ScheduledItem is ... description: (* *); end Task; operation ScheduleAppointment(CalendarDB, Appointment)->(cdb':CalendarDB) precondition: ; postcondition: ; description: (* *); end ScheduleAppointment; operation ScheduleTask inputs: ; outputs: ; precondition: ; postcondition: ; description: (* *); end ScheduleTask; operation ScheduleMeeting inputs: ; outputs: ; precondition: ; postcondition: ; description: (* *); end ScheduleMeeting; end Schedule;