# 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



class Foo


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

  #Foo Associations - for documentation purposes

  # I am a inline comment above an association.
  #attr_reader :bars

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

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

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

  def get_bar(index)
    a_bar = @bars[index]
    a_bar
  end

  def get_bars
    new_bars = @bars.dup
    new_bars
  end

  def number_of_bars
    number = @bars.size
    number
  end

  def has_bars
    has = @bars.size > 0
    has
  end

  def index_of_bar(a_bar)
    index = @bars.index(a_bar)
    index = -1 if index.nil?
    index
  end

  def self.minimum_number_of_bars
    0
  end

  def add_bar(a_bar)
    was_added = false
    return false if index_of_bar(a_bar) != -1
    existing_foo = a_bar.get_foo
    is_new_foo = (!existing_foo.nil? and !existing_foo.eql?(self))
    if is_new_foo
      a_bar.set_foo(self)
    else
      @bars << a_bar
    end
    was_added = true
    was_added
  end

  def remove_bar(a_bar)
    was_removed = false
    # Unable to remove a_bar, as it must always have a foo
    unless a_bar.get_foo.eql?(self)
      @bars.delete(a_bar)
      was_removed = true
    end
    was_removed
  end

  def add_bar_at(a_bar, index)
    was_added = false
    if add_bar(a_bar)
      if(index < 0)
        index = 0
      end
      if(index > number_of_bars())
        index = number_of_bars() - 1
      end
      @bars.delete(a_bar)
      @bars.insert(index, a_bar)
      was_added = true
    end
    was_added
  end

  def add_or_move_bar_at(a_bar, index)
    was_added = false
    if @bars.include?(a_bar)
      if(index < 0)
        index = 0
      end
      if(index > number_of_bars())
        index = number_of_bars() - 1
      end
      @bars.delete(a_bar)
      @bars.insert(index, a_bar)
      was_added = true
    else
      was_added = add_bar_at(a_bar, index)
    end
    was_added
  end

  def delete
    @deleted = true
    @bars.each do |a_bar|
      a_bar.delete
    end
  end

end