(*
* Module containing the components of the Scheduler Preference Database
*
* Leland Garofalo
*)
module Preferences;
object PreferencesCollection = Preference*;
object Preference
components: t:Type and v:Violatable and i:Importance and n:Name and d:Data;
end Preference;
object Type = string;
object Name = string;
object Data = string;
object Violatable = number;
object Importance = number;
operation addPreference
inputs: db:PreferencesCollection, p:Preference;
outputs: db':PreferencesCollection;
precondition: (p != nil);
postcondition: exists (p' in db')
(p = p') ;
description: (*
addPreference takes information entered by user and adds the
listed information to the preference database.
*);
end addPreference;
operation deletePreference
inputs: db:PreferencesCollection, p:Preference;
outputs: db':PreferencesCollection;
precondition: (p != nil) and exists (p' in db) (p' = p);
postcondition: forall (p' in db')
(p != p') ;
end deletePreference;
operation editName
inputs: p:Preference, n':Name;
outputs: p':Preference;
precondition: (n'!= nil) ;
postcondition: (p'.n = n');
end editName;
operation editData
inputs: p:Preference, d':Data;
outputs: p':Preference;
precondition: (d'!= nil) ;
postcondition: (p'.d = d');
end editData;
operation editViolatable
inputs: p:Preference, v':Violatable;
outputs: p':Preference;
precondition: (v'!= nil) ;
postcondition: (p'.v = v');
end editViolatable;
operation editImportance
inputs: p:Preference, i':Importance;
outputs: p':Preference;
precondition: (i'!= nil) ;
postcondition: (p'.i = i');
end editImportance;
operation editType
inputs: p:Preference, t':Type;
outputs: p':Preference;
precondition: (t'!= nil) ;
postcondition: (p'.t = t');
end editType;
function isValidPreferenceDB (db:PreferencesCollection) -> boolean =
(
forall(p in db) (p != nil);
);
end Preferences;