# 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 Associations - for documentation purposes
  #attr_reader :mentors

  #------------------------
  # CONSTRUCTOR
  #------------------------

  def initialize()
    @initialized = false
    @deleted = false
    @mentors = []
    @initialized = true
  end

  #------------------------
  # INTERFACE
  #------------------------

  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 self.minimum_number_of_mentors
    0
  end

  def add_mentor(a_mentor)
    was_added = false
    return false if index_of_mentor(a_mentor) != -1
    @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

    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
# 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 Associations - for documentation purposes
  #attr_reader :mentors

  #------------------------
  # CONSTRUCTOR
  #------------------------

  def initialize()
    @initialized = false
    @deleted = false
    @mentors = []
    @initialized = true
  end

  #------------------------
  # INTERFACE
  #------------------------

  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 self.minimum_number_of_mentors
    0
  end

  def add_mentor(a_mentor)
    was_added = false
    return false if index_of_mentor(a_mentor) != -1
    @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

    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
# 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 :intId, :doubleId, :booleanId, :stringId, :stringListIds

  #------------------------
  # CONSTRUCTOR
  #------------------------

  def initialize(a_intId, a_doubleId, a_booleanId, a_stringId)
    @initialized = false
    @deleted = false
    @cachedHashCode = -1
    @can_set_intId = true
    @can_set_doubleId = true
    @can_set_booleanId = true
    @can_set_stringId = true
    @can_set_stringListIds = true
    @intId = a_intId
    @doubleId = a_doubleId
    @booleanId = a_booleanId
    @stringId = a_stringId
    @stringListIds = []
    @initialized = true
  end

  #------------------------
  # INTERFACE
  #------------------------

  def set_intId(a_intId)
    was_set = false
    return false unless @can_set_intId
    @intId = a_intId
    was_set = true
    was_set
  end

  def set_doubleId(a_doubleId)
    was_set = false
    return false unless @can_set_doubleId
    @doubleId = a_doubleId
    was_set = true
    was_set
  end

  def set_booleanId(a_booleanId)
    was_set = false
    return false unless @can_set_booleanId
    @booleanId = a_booleanId
    was_set = true
    was_set
  end

  def set_stringId(a_stringId)
    was_set = false
    return false unless @can_set_stringId
    @stringId = a_stringId
    was_set = true
    was_set
  end

  def add_stringListId(a_stringListId)
    was_added = false
    return false unless @can_set_stringListIds
    was_added = stringListIds << a_stringListId
    was_added
  end

  def remove_stringListId(a_stringListId)
    was_removed = false
    return false unless @can_set_stringListIds
    was_removed = stringListIds.delete(a_stringListId)
    was_removed
  end

  def get_intId
    @intId
  end

  def get_doubleId
    @doubleId
  end

  def get_booleanId
    @booleanId
  end

  def get_stringId
    @stringId
  end

  def get_stringListId(index)
    a_stringListId = stringListIds[index]
    a_stringListId
  end

  def get_stringListIds
    String[] new_stringListIds = stringListIds.toArray(new String[stringListIds.size])
    new_stringListIds
  end

  def number_of_stringListIds
    number = stringListIds.size
    number;
  end

  def has_stringListIds
    has = stringListIds.size > 0
    has
  end

  def index_of_stringListId(a_stringListId)
    index = stringListIds.index(a_stringListId)
    index = -1 if index.nil?
    index
  end

  def is_booleanId?
    @booleanId
  end

  def eql?(obj)
    return false if obj.nil?
    return false unless self.class == obj.class

    compareTo = obj
    return false unless @intId == compareTo.instance_variable_get("@intId")

    return false unless @doubleId == compareTo.instance_variable_get("@doubleId")

    return false unless @booleanId == compareTo.instance_variable_get("@booleanId")

    return false if (@stringId.nil? and !compareTo.instance_variable_get("@stringId").nil?)
    return false if (!@stringId.nil? and !@stringId.eql?(compareTo.instance_variable_get("@stringId")))

    return false unless @stringListIds.size == compareTo.instance_variable_get("@stringListIds").size
    @stringListIds.each do |me|
      them = compareTo.instance_variable_get("@stringListIds").get(i)
      return false if (me.nil? and !them.nil?)
      return false if (!me.nil? and !me.eql?(them))
    end
    true
  end

  def hash
    return @cachedHashCode unless @cachedHashCode == -1
    @cachedHashCode = 17
    @cachedHashCode = @cachedHashCode * 23 + @intId

    @cachedHashCode = @cachedHashCode * 23 + @doubleId.hash

    @cachedHashCode = @cachedHashCode * 23 + (@booleanId ? 1 : 0)

    if (!@stringId.nil?)
      @cachedHashCode = @cachedHashCode * 23 + @stringId.hash
    else
      @cachedHashCode = @cachedHashCode * 23
    end

    if (!@stringListIds.nil?)
      @cachedHashCode = @cachedHashCode * 23 + @stringListIds.hash
    else
      @cachedHashCode = @cachedHashCode * 23
    end
    @can_set_intId = false
    @can_set_doubleId = false
    @can_set_booleanId = false
    @can_set_stringId = false
    @can_set_stringListIds = false
    @cachedHashCode
  end

  def delete
    @deleted = true
  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 :intId, :doubleId, :booleanId, :stringId

  #------------------------
  # CONSTRUCTOR
  #------------------------

  def initialize(a_doubleId, a_booleanId, a_stringId)
    @initialized = false
    @deleted = false
    @cachedHashCode = -1
    @intId = 0
    @can_set_intId = true
    @doubleId = a_doubleId
    @can_set_doubleId = false
    @booleanId = a_booleanId
    @can_set_booleanId = false
    @stringId = a_stringId
    @can_set_stringId = false
    @initialized = true
  end

  #------------------------
  # INTERFACE
  #------------------------

  def set_intId(a_intId)
    was_set = false
    return false unless @can_set_intId
    @can_set_intId = false
    @intId = a_intId
    was_set = true
    was_set
  end

  def get_intId
    @intId
  end

  def get_doubleId
    @doubleId
  end

  def get_booleanId
    @booleanId
  end

  def get_stringId
    @stringId
  end

  def is_booleanId?
    @booleanId
  end

  def eql?(obj)
    return false if obj.nil?
    return false unless self.class == obj.class

    compareTo = obj
    return false unless @intId == compareTo.instance_variable_get("@intId")

    return false unless @doubleId == compareTo.instance_variable_get("@doubleId")

    return false unless @booleanId == compareTo.instance_variable_get("@booleanId")

    return false if (@stringId.nil? and !compareTo.instance_variable_get("@stringId").nil?)
    return false if (!@stringId.nil? and !@stringId.eql?(compareTo.instance_variable_get("@stringId")))
    true
  end

  def hash
    return @cachedHashCode unless @cachedHashCode == -1
    @cachedHashCode = 17
    @cachedHashCode = @cachedHashCode * 23 + @intId

    @cachedHashCode = @cachedHashCode * 23 + @doubleId.hash

    @cachedHashCode = @cachedHashCode * 23 + (@booleanId ? 1 : 0)

    if (!@stringId.nil?)
      @cachedHashCode = @cachedHashCode * 23 + @stringId.hash
    else
      @cachedHashCode = @cachedHashCode * 23
    end
    @can_set_intId = false
    @can_set_doubleId = false
    @can_set_booleanId = false
    @can_set_stringId = false
    @cachedHashCode
  end

  def delete
    @deleted = true
  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 Mentor


  #------------------------
  # MEMBER VARIABLES
  #------------------------

  #Mentor Associations - for documentation purposes
  #attr_reader :main, :secondaries

  #------------------------
  # CONSTRUCTOR
  #------------------------

  def initialize()
    @initialized = false
    @deleted = false
    @cachedHashCode = -1
    @can_set_main = true
    @can_set_secondaries = true
    @main = nil
    @secondaries = []
    @initialized = true
  end

  #------------------------
  # INTERFACE
  #------------------------

  def get_main
    @main
  end

  def has_main
    has = !@main.nil?
    has
  end

  def get_secondary(index)
    a_secondary = @secondaries[index]
    a_secondary
  end

  def get_secondaries
    new_secondaries = @secondaries.dup
    new_secondaries
  end

  def number_of_secondaries
    number = @secondaries.size
    number
  end

  def has_secondaries
    has = @secondaries.size > 0
    has
  end

  def index_of_secondary(a_secondary)
    index = @secondaries.index(a_secondary)
    index = -1 if index.nil?
    index
  end

  def set_main(a_new_main)
    was_set = false
    return false unless @can_set_main
    if a_new_main.nil?
      existing_main = @main
      @main = nil
      
      if !existing_main.nil? and !existing_main.get_mentorMain.nil?
        existing_main.set_mentorMain(nil)
      end
      was_set = true
      return was_set
    end

    current_main = self.get_main
    if !current_main.nil? and !current_main.eql?(a_new_main)
      current_main.set_mentorMain(nil)
    end

    @main = a_new_main
    existing_mentorMain = a_new_main.get_mentorMain

    unless self.eql?(existing_mentorMain)
      a_new_main.set_mentorMain(self)
    end
    was_set = true
    was_set
  end

  def self.minimum_number_of_secondaries
    0
  end

  def add_secondary(a_secondary)
    was_added = false
    return false unless @can_set_secondaries
    return false if index_of_secondary(a_secondary) != -1
    existing_mentorSecondary = a_secondary.get_mentorSecondary
    if existing_mentorSecondary.nil?
      a_secondary.set_mentorSecondary(self)
    elsif !existing_mentorSecondary.eql?(self)
      existing_mentorSecondary.remove_secondary(a_secondary)
      add_secondary(a_secondary)
    else
      @secondaries << a_secondary
    end
    was_added = true
    was_added
  end

  def remove_secondary(a_secondary)
    was_removed = false
    return false unless @can_set_secondaries
    if @secondaries.include?(a_secondary)
      @secondaries.delete(a_secondary)
      a_secondary.set_mentorSecondary(nil)
      was_removed = true
    end
    was_removed
  end

  def add_secondary_at(a_secondary, index)
    was_added = false
    if add_secondary(a_secondary)
      if(index < 0)
        index = 0
      end
      if(index > number_of_secondaries())
        index = number_of_secondaries() - 1
      end
      @secondaries.delete(a_secondary)
      @secondaries.insert(index, a_secondary)
      was_added = true
    end
    was_added
  end

  def add_or_move_secondary_at(a_secondary, index)
    was_added = false
    if @secondaries.include?(a_secondary)
      if(index < 0)
        index = 0
      end
      if(index > number_of_secondaries())
        index = number_of_secondaries() - 1
      end
      @secondaries.delete(a_secondary)
      @secondaries.insert(index, a_secondary)
      was_added = true
    else
      was_added = add_secondary_at(a_secondary, index)
    end
    was_added
  end

  def eql?(obj)
    return false if obj.nil?
    return false unless self.class == obj.class

    compareTo = obj
    return false if (@main.nil? and !compareTo.instance_variable_get("@main").nil?)
    return false if (!@main.nil? and !@main.eql?(compareTo.instance_variable_get("@main")))

    return false unless @secondaries.size == compareTo.instance_variable_get("@secondaries").size
    @secondaries.each do |me|
      them = compareTo.instance_variable_get("@secondaries").get(i)
      return false if (me.nil? and !them.nil?)
      return false if (!me.nil? and !me.eql?(them))
    end
    true
  end

  def hash
    return @cachedHashCode unless @cachedHashCode == -1
    @cachedHashCode = 17
    if (!@main.nil?)
      @cachedHashCode = @cachedHashCode * 23 + @main.hash
    else
      @cachedHashCode = @cachedHashCode * 23
    end
    if (!@secondaries.nil?)
      @cachedHashCode = @cachedHashCode * 23 + @secondaries.hash
    else
      @cachedHashCode = @cachedHashCode * 23
    end
    @can_set_main = false
    @can_set_secondaries = false
    @cachedHashCode
  end

  def delete
    @deleted = true
    unless @main.nil?
      @main.set_mentorMain(nil)
    end
    @secondaries.each do |a_secondary|
      a_secondary.set_mentorSecondary(nil)
    end
  end

end
end