(****
 *
 * Module Attributes defines the attributes objects of a schedule.
 *
 * NOTE: this is work in progress.  Several objects are yet to be defined.
 * Also, more complete object descriptions are needed.
 *
 *)

module Attributes;
export all;

  object Attributes
    components: sstr:ScheduleStrength;
    description: (*
        The Attributes object is comprised of the schedule strength (a measure
	of how good the schedule fulfills the desired preferences):
        ScheduleStrength.
    *);
  end Attributes;

  object ScheduleStrength
    components: sst:schStrTotal and ssis:InstructorStrength* and ssc:Conflicts;
    description: (*
        The ScheduleStrength is a measure of how good the schedule fulfills all
	the desired preferences.
    *);
  end ScheduleStrength;
  
  object schStrTotal = integer;

  object Conflicts
    components: Conflict and conBoolean;
    description: (*
        The Conflicts object contains information to determine if the generated 
	schedule has conflicts and a description of the conflict if it does.
    *);
  end Conflicts;

  object Conflict = string;
  object conBoolean = boolean;

  object InstructorStrength
    components: Name and Value and Courses* and Pattern* and Proximal* and Time*;
    description: (*
        The InstructorStrength object gives an integer value that represents how
	good the generated schedule fits the given instructor's preferences.
    *);
  end InstructorStrength;
 
  object Name = string;
  
  object Courses
    components: Course and Value;
    description: (*
        The Courses object gives an integer value that represents how
	good the generated schedule fits the an instructor's course preferences.
    *);
  end Courses;
 
  object Course = string;
  
  object Pattern
    components: PatternV and Value;
    description: (*
        The Pattern object gives an integer value that represents how
	good the generated schedule fits the an instructor's pattern preferences.
    *);
  end Pattern;
 
  object PatternV = string;

  object Proximal
    components: Distance and Value;
    description: (*
        The Proximal object gives an integer value that represents how
	good the generated schedule fits the an instructor's proximal preferences.
    *);
  end Proximal;
 
  object Distance = integer;

  object Time
    components: TimeV and Value;
    description: (*
        The Time object gives an integer value that represents how
	good the generated schedule fits the an instructor's Time preferences.
    *);
  end Time;
 
  object TimeV = integer;

  object Value = integer;

end Attributes;