configuration_content.rb 2.62 KB
class MezuroPlugin::ConfigurationContent < Article
  validate_on_create :validate_kalibro_configuration_name

  settings_items :kalibro_id, :description, :configuration_to_clone_name

  after_save :send_kalibro_configuration_to_service
  after_destroy :remove_kalibro_configuration_from_service

  def self.short_description
    'Mezuro configuration'
  end

  def self.description
    'Sets of thresholds to interpret metrics'
  end

  include ActionView::Helpers::TagHelper
  def to_html(options = {})
    lambda do
      render :file => 'content_viewer/show_configuration.rhtml'
    end
  end

  def kalibro_configuration
    begin
      @kalibro_configuration ||= Kalibro::Configuration.find(self.kalibro_id)
    rescue Exception => exception 
      errors.add_to_base(exception.message)
    end
    @kalibro_configuration
  end

#  def metric_configurations
#    kalibro_configuration.metric_configurations
#  end

  def kalibro_configuration_names_and_ids
    all_names_and_ids = {}
    begin
      all_configurations = Kalibro::Configuration.all
      if(!all_configurations.nil?)
        all_configuration.each do |configuration| 
            all_names_and_ids[configuration.id] = configuration.name
        end
      end
    rescue Exception => exception
      errors.add_to_base(exception.message)
    end
    all_names_and_ids[-1] = "None"
    all_names_and_ids
  end

  private

  def validate_kalibro_configuration_name
    existing = kalibro_configuration_names.map { |a| a.downcase}

    if existing.include?(name.downcase)
      errors.add_to_base("Configuration name already exists in Kalibro")
    end
  end

  def send_kalibro_configuration_to_service
    if editing_kalibro_configuration?
      kalibro_configuration.update_attributes({:description => description})
    else
      create_kalibro_configuration
    end
  end

  def remove_kalibro_configuration_from_service
    kalibro_configuration.destroy unless kalibro_configuration.nil?
  end

  def create_kalibro_configuration
    attributes = {:name => name, :description => description}
    if cloning_kalibro_configuration?
      attributes[:metric_configuration] = configuration_to_clone.metric_configurations_hash
    end
    Kalibro::Configuration.create attributes
  end
  
  def editing_kalibro_configuration?
    kalibro_configuration.present?
  end
  
  def configuration_to_clone
    @configuration_to_clone ||= find_configuration_to_clone
  end
  
  def find_configuration_to_clone
    (configuration_to_clone_name == "None") ? nil : Kalibro::Configuration.find_by_name(configuration_to_clone_name)
  end
  
  def cloning_kalibro_configuration?
    configuration_to_clone.present?
  end

end