GERRIT = 'GERRIT:'
MAVEN_LOCAL = 'MAVEN_LOCAL:'

def maven_jar(
    name,
    id,
    deps = [],
    sha1 = '',
    bin_sha1 = '',
    src_sha1 = '',
    repository = GERRIT,
    attach_source = True,
    visibility = ['PUBLIC']):
  from os import path

  parts = id.split(':')
  if len(parts) != 3:
    raise NameError('expected id="groupId:artifactId:version"')
  group, artifact, version = parts

  file_version = version

  jar = path.join(name, artifact.lower() + '-' + file_version)
  url = '/'.join([
    repository,
    group.replace('.', '/'), artifact, version,
    artifact + '-' + file_version])

  binjar = jar + '.jar'
  binurl = url + '.jar'

  srcjar = jar + '-src.jar'
  srcurl = url + '-sources.jar'

  cmd = ['$(exe //tools:download_file)', '-o', '$OUT', '-u', binurl]
  if sha1:
    cmd.extend(['-v', sha1])
  elif bin_sha1:
    cmd.extend(['-v', bin_sha1])

  genrule(
    name = name + '__download_bin',
    cmd = ' '.join(cmd),
    deps = ['//tools:download_file'],
    out = binjar,
  )

  srcjar = None
  genrule(
    name = name + '__download_src',
    cmd = ':>$OUT',
    out = '__' + name + '__no_src',
  )

  prebuilt_jar(
    name = name,
    deps = deps + [':' + name + '__download_bin'],
    binary_jar = genfile(binjar),
    source_jar = genfile(srcjar) if srcjar else None,
    visibility = visibility,
  )
