(**** * * Module File defines the objects and operations related to files * (courtesy of Dr. Gene Fisher) *) module File; from ProjectModule import ProjectDB; from Edit import Clipboard, Selection, SelectionContext; export PreviousState, WorkSpace, FileSpace, File; object FileSpace is File description: (* A FileSpace is an abstract model of a file space in the operating environment in which the Scheduler is run. The FileSpace is simply a collection of one File, with no other properties modeled here. *); end; object File is components: name:FileName and permissions:FilePermissions and file_type:FileType and data:FileData; description: (* A File is an abstraction of a file stored in the file space. It has a name, permissions, type, and data. *); end File; object FileName is string description: (* The name of a file. The string representation here is an abstraction of file names used in specific operating environments. *); end; object FilePermissions is is_readable:IsReadable and is_writable:IsWritable description: (* FilePermissions indicate whether a file is readable and/or writable. *); end; object IsReadable is boolean description: (* Flag indicating whether a file is readable, which is required to be true by the FileOpen operation. *); end; object IsWritable is boolean description: (* Flag indicating whether a file is writable, which is required to be true by the FileSave operation. *); end; object FileType is schedule_type:ScheduleType or other_type:OtherType description: (* The type of file data is either ScheduleType data (which we care about) or any other type of data that can be stored in a file, which we don't care about. *); end FileType; object ScheduleType description: (* File data typing tag indicating that a file contains a schedule project *); end ScheduleType; object OtherType description: (* File data typing tag indicating that a file contains data other than a schedule project *); end OtherType; object FileData is ProjectDB description: (* The abstract representation of ScheduleType FileData is a ProjectDB object. System implementors may use any concrete file data representation that accurately holds all schedule components. *); end FileData; object WorkSpace is components: project:ProjectDB and previous_state:PreviousState and clipboard:Clipboard and selection:Selection and context:SelectionContext; description: (* The UserWorkSpace contains the active project upon which the user is working. The project component is the active project. The previous_state component is used to support one level of command undo. The Clipboard is used with the Edit cut, copy, and paste operations. *); end; object PreviousState is components: prev:ProjectDB; description: (* PreviousState is the snapshot of the schedule before the most recently performed operation used by Edit->Undo. *); end PreviousState; operation FileOpen is inputs: fs:FileSpace, fn:FileName, uws:WorkSpace; outputs: fs':FileSpace, uws':WorkSpace; description: (* Open an existing scheduler project file of the given name and put the data from that file in the workspace. *); end FileOpen; operation FileClose is inputs: fs:FileSpace, uws:WorkSpace; outputs: fs':FileSpace, uws':WorkSpace; description: (* Close the current project if it does not require saving. *); end FileClose; operation FileSave is inputs: fs:FileSpace, uws:WorkSpace; outputs: fs':FileSpace, uws':WorkSpace; description: (* If the project in the given workspace requires saving, save it in the given file space. *); end FileSave; end File;