# PLEASE DO NOT EDIT THIS CODE # This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language! # NOTE: Ruby generator is experimental and is missing some features available in # in other Umple generated languages like Java or PHP module Example class Mentor #------------------------ # MEMBER VARIABLES #------------------------ #Mentor Attributes - for documentation purposes #attr_reader :name #Mentor Associations - for documentation purposes #attr_reader :students #------------------------ # CONSTRUCTOR #------------------------ def initialize(a_name, all_students) @initialized = false @deleted = false @name = a_name @students = [] did_add_students = set_students(all_students) raise "Unable to create Mentor, must have at least 5 @students. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html" unless did_add_students @initialized = true end #------------------------ # INTERFACE #------------------------ def set_name(a_name) was_set = false @name = a_name was_set = true was_set end def get_name @name end def get_student(index) a_student = @students[index] a_student end def get_students new_students = @students.dup new_students end def number_of_students number = @students.size number end def has_students has = @students.size > 0 has end def index_of_student(a_student) index = @students.index(a_student) index = -1 if index.nil? index end def self.minimum_number_of_students 5 end def add_student(a_student) was_added = false return false if index_of_student(a_student) != -1 existing_mentor = a_student.get_mentor if !existing_mentor.nil? and existing_mentor.number_of_students <= Mentor.minimum_number_of_students return was_added elsif !existing_mentor.nil? existing_mentor.instance_variable_get("@students").delete(a_student) end @students << a_student a_student.instance_variable_set("@mentor",self) was_added = true was_added end def remove_student(a_student) was_removed = false if @students.include?(a_student) and number_of_students > Mentor.minimum_number_of_students @students.delete(a_student) a_student.instance_variable_set("@mentor",nil) was_removed = true end was_removed end def set_students(new_students) was_set = false if new_students.length < Mentor.minimum_number_of_students return was_set end check_new_students = [] mentorToNewStudents = {} new_students.each do |a_student| if check_new_students.include?(a_student) return was_set elsif !a_student.get_mentor.nil? and !a_student.get_mentor.eql?(self) existing_mentor = a_student.get_mentor unless mentorToNewStudents.has_key?(existing_mentor) mentorToNewStudents[existing_mentor] = existing_mentor.number_of_students end currentCount = mentorToNewStudents[existing_mentor] nextCount = currentCount - 1 if nextCount < 5 return was_set end mentorToNewStudents[existing_mentor] = nextCount end check_new_students << a_student end check_new_students.each do |a_student| @students.delete(a_student) end @students.each do |orphan| orphan.instance_variable_set("@mentor",nil) end @students.clear new_students.each do |a_student| unless a_student.get_mentor.nil? a_student.get_mentor.instance_variable_get("@students").delete(a_student) end a_student.instance_variable_set("@mentor",self) @students << a_student end was_set = true was_set end def add_student_at(a_student, index) was_added = false if add_student(a_student) if(index < 0) index = 0 end if(index > number_of_students()) index = number_of_students() - 1 end @students.delete(a_student) @students.insert(index, a_student) was_added = true end was_added end def add_or_move_student_at(a_student, index) was_added = false if @students.include?(a_student) if(index < 0) index = 0 end if(index > number_of_students()) index = number_of_students() - 1 end @students.delete(a_student) @students.insert(index, a_student) was_added = true else was_added = add_student_at(a_student, index) end was_added end def delete @deleted = true @students.each do |a_student| a_student.instance_variable_set("@mentor",nil) end @students.clear end end end # PLEASE DO NOT EDIT THIS CODE # This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language! # NOTE: Ruby generator is experimental and is missing some features available in # in other Umple generated languages like Java or PHP module Example class Student #------------------------ # MEMBER VARIABLES #------------------------ #Student Attributes - for documentation purposes #attr_reader :number #Student Associations - for documentation purposes #attr_reader :mentor #------------------------ # CONSTRUCTOR #------------------------ def initialize(a_number) @initialized = false @deleted = false @number = a_number @mentor = nil @initialized = true end #------------------------ # INTERFACE #------------------------ def set_number(a_number) was_set = false @number = a_number was_set = true was_set end def get_number @number end def get_mentor @mentor end def has_mentor has = !@mentor.nil? has end def set_mentor(a_mentor) # # self source of self source generation is association_SetOptionalOneToMandatoryMany.jet # self set file assumes the generation of a maximumNumberOfXXX method does not exist because # it's not required (No upper bound) # wasSet = false existing_mentor = mentor; if existing_mentor.nil? if !a_mentor.nil if a_mentor.add_student(self) existing_mentor = a_mentor wasSet = true end end elsif existing_mentor != null if a_mentor == null if existing_mentor.minimum_number_of_students() < existing_mentor.number_of_students() existing_mentor.remove_student(self); existing_mentor = a_mentor; # a_mentor == null wasSet = true; end else if existing_mentor.minimum_number_of_students() < existing_mentor.number_of_students() existing_mentor.remove_student(self); a_mentor.add_student(self); existing_mentor = a_mentor; wasSet = true; end end end if wasSet == true mentor = existing_mentor; end return wasSet; end def delete @deleted = true unless @mentor.nil? if @mentor.number_of_students <= 5 @mentor.delete else @mentor.remove_student(self) end end end end end