class KPM::Formatter

def format(all_plugins)

def format(all_plugins)
  if all_plugins.size == 0
    return
  end
  # What we want to output
  labels = [{:label => :plugin_name},
            {:label => :plugin_key},
            {:label => :type},
            {:label => :group_id},
            {:label => :artifact_id},
            {:label => :packaging},
            {:label => :versions, :formatter => VersionFormatter.name}]
  # Compute label to print along with max size for each label
  labels_format_argument = []
  all_plugins.keys.each do |key|
    v = all_plugins[key]
    labels.each do |e|
      # sanitize entry at the same time
      v[e[:label]] = v[e[:label]] || "???"
      formatter = e[:formatter].nil? ? DefaultFormatter.new(e[:label], v[e[:label]]) : e[:formatter].to_class.new(e[:label], v[e[:label]])
      prev_size = e.key?(:size) ? e[:size] : formatter.label.size
      cur_size = formatter.size
      e[:size] = prev_size < cur_size ? cur_size : prev_size
      labels_format_argument << formatter.label
    end
  end
  border = "_"
  border = (0...labels.size).inject(border) { |res, i| res="#{res}_"; res }
  border = labels.inject(border) { |res, lbl| (0...lbl[:size] + 2).each { |s| res="#{res}_" }; res }
  format = "|"
  format = labels.inject(format) { |res, lbl| res="#{res} %#{lbl[:size]}s |"; res }
  puts "\n#{border}\n"
  puts "#{format}\n" % labels_format_argument
  puts "#{border}\n"
  all_plugins.keys.each do |key|
    v = all_plugins[key]
    arguments = []
    labels.inject(arguments) do |res, e|
      formatter = e[:formatter].nil? ? DefaultFormatter.new(e[:label], v[e[:label]]) : e[:formatter].to_class.new(e[:label], v[e[:label]])
      res << formatter.to_s
    end
    puts "#{format}\n" % arguments
  end
  puts "#{border}\n\n"
end

def initialize

def initialize
end