text: # PLEASE DO NOT EDIT THIS CODE
  # This code was generated using the UMPLE @UMPLE_VERSION@ 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 :mentors
  
    #------------------------
    # CONSTRUCTOR
    #------------------------
  
    def initialize(a_number)
      @initialized = false
      @deleted = false
      @number = a_number
      @mentors = []
      @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(index)
      a_mentor = @mentors[index]
      a_mentor
    end
  
    def get_mentors
      new_mentors = @mentors.dup
      new_mentors
    end
  
    def number_of_mentors
      number = @mentors.size
      number
    end
  
    def has_mentors
      has = @mentors.size > 0
      has
    end
  
    def index_of_mentor(a_mentor)
      index = @mentors.index(a_mentor)
      index = -1 if index.nil?
      index
    end
  
    def is_number_of_mentors_valid
      is_valid = number_of_mentors >= Student.minimum_number_of_mentors and number_of_mentors <= Student.maximum_number_of_mentors
      is_valid
    end
  
    def self.minimum_number_of_mentors
      1
    end
  
    def self.maximum_number_of_mentors
      2
    end
  
    def add_mentor(a_mentor)
      was_added = false
      return false if index_of_mentor(a_mentor) != -1
      if number_of_mentors >= Student.maximum_number_of_mentors
        return was_added
      end
  
      @mentors << a_mentor
      if a_mentor.index_of_student(self) != -1
        was_added = true
      else
        was_added = a_mentor.add_student(self)
        unless was_added
          @mentors.delete(a_mentor)
        end
      end
      was_added
    end
  
    def remove_mentor(a_mentor)
      was_removed = false
      unless @mentors.include?(a_mentor)
        return was_removed
      end
  
      if number_of_mentors <= Student.minimum_number_of_mentors
        return was_removed
      end
  
      oldIndex = @mentors.index(a_mentor)
      @mentors.delete_at(oldIndex)
      if a_mentor.index_of_student(self) == -1
        was_removed = true
      else
        was_removed = a_mentor.remove_student(self)
        @mentors.insert(oldIndex,a_mentor) unless was_removed
      end
      was_removed
    end
  
    def add_mentor_at(a_mentor, index)
      was_added = false
      if add_mentor(a_mentor)
        if(index < 0)
          index = 0
        end
        if(index > number_of_mentors())
          index = number_of_mentors() - 1
        end
        @mentors.delete(a_mentor)
        @mentors.insert(index, a_mentor)
        was_added = true
      end
      was_added
    end
  
    def add_or_move_mentor_at(a_mentor, index)
      was_added = false
      if @mentors.include?(a_mentor)
        if(index < 0)
          index = 0
        end
        if(index > number_of_mentors())
          index = number_of_mentors() - 1
        end
        @mentors.delete(a_mentor)
        @mentors.insert(index, a_mentor)
        was_added = true
      else
        was_added = add_mentor_at(a_mentor, index)
      end
      was_added
    end
  
    def delete
      @deleted = true
      copy_of_mentors = @mentors.dup
      @mentors.clear
      copy_of_mentors.each do |a_mentor|
        a_mentor.remove_student(self)
      end
    end
  
  end
  end
  