class KPM::KillbillServerArtifact

def info(version = 'LATEST', sha1_file = nil, force_download = false, verify_sha1 = true, overrides = {}, ssl_verify = true)

def info(version = 'LATEST', sha1_file = nil, force_download = false, verify_sha1 = true, overrides = {}, ssl_verify = true)
  logger = Logger.new(STDOUT)
  logger.level = Logger::ERROR
  # Initialize as early as possible (used in rescue block below)
  sha1_checker = sha1_file ? Sha1Checker.from_file(sha1_file) : nil
  version = KPM::Installer.get_kb_latest_stable_version if version == 'LATEST'
  versions = {}
  Dir.mktmpdir do |dir|
    # Retrieve the main Kill Bill pom
    kb_pom_info = pull(logger,
                       KPM::BaseArtifact::KILLBILL_GROUP_ID,
                       'killbill',
                       'pom',
                       nil,
                       version,
                       dir,
                       sha1_file,
                       force_download,
                       verify_sha1,
                       overrides,
                       ssl_verify)
    # Extract the killbill-oss-parent version
    file = File.new(kb_pom_info[:file_path])
    begin
      pom = REXML::Document.new(file)
      oss_parent_version = pom.root.elements['parent/version'].text
      kb_version = pom.root.elements['version'].text
    ensure
      file.close
      FileUtils.rm_f(kb_pom_info[:file_path])
    end
    versions['killbill'] = kb_version
    versions['killbill-oss-parent'] = oss_parent_version
    # Retrieve the killbill-oss-parent pom
    oss_pom_info = pull(logger,
                        KPM::BaseArtifact::KILLBILL_GROUP_ID,
                        'killbill-oss-parent',
                        'pom',
                        nil,
                        oss_parent_version,
                        dir,
                        sha1_file,
                        force_download,
                        verify_sha1,
                        overrides,
                        ssl_verify)
    file = File.new(oss_pom_info[:file_path])
    begin
      pom = REXML::Document.new(file)
      properties_element = pom.root.elements['properties']
      %w[killbill-api killbill-plugin-api killbill-commons killbill-platform].each do |property|
        versions[property] = properties_element.elements["#{property}.version"].text
      end
    ensure
      file.close
      FileUtils.rm_f(oss_pom_info[:file_path])
    end
    sha1_checker.cache_killbill_info(version, versions) if sha1_checker
  end
  versions
rescue StandardError => e
  # Network down? Hopefully, we have something in the cache
  cached_version = sha1_checker ? sha1_checker.killbill_info(version) : nil
  raise e if force_download || !cached_version
  # Use the cache
  cached_version
end

def versions(artifact_id, packaging = KPM::BaseArtifact::KILLBILL_PACKAGING, classifier = KPM::BaseArtifact::KILLBILL_CLASSIFIER, overrides = {}, ssl_verify = true)

def versions(artifact_id, packaging = KPM::BaseArtifact::KILLBILL_PACKAGING, classifier = KPM::BaseArtifact::KILLBILL_CLASSIFIER, overrides = {}, ssl_verify = true)
  coordinate_map = { group_id: KPM::BaseArtifact::KILLBILL_GROUP_ID, artifact_id: artifact_id, packaging: packaging, classifier: classifier }
  coordinates = KPM::Coordinates.build_coordinates(coordinate_map)
  response    = REXML::Document.new nexus_remote(overrides, ssl_verify).search_for_artifacts(coordinates)
  versions    = SortedSet.new
  response.elements.each('searchNGResponse/data/artifact/version') { |element| versions << element.text }
  versions
end