public List<RepositoryArtifactDescription> getArtifacts(@NotNull String subject, @Nullable String repo,
                                                          @Nullable String groupIdTemplate, @Nullable String artifactIdTemplate)
      throws IOException {
    StringBuilder urlBuilder = new StringBuilder(BINTRAY_API_URL + "search/packages/maven?subject=").append(subject);
    if (isNotEmpty(repo)) {
      urlBuilder.append("&repo=").append(repo);
    }
    if (isEmpty(groupIdTemplate) && isEmpty(artifactIdTemplate)) {
      return emptyList();
    }

    urlBuilder.append("&q=*").append(join(asList(groupIdTemplate, artifactIdTemplate), ":")).append("*");

    List<RepositoryArtifactDescription> artifacts = new ArrayList<>();
    executeRequest(urlBuilder.toString(), BintrayModel.Package[].class, packages -> {
      for (BintrayModel.Package p : packages) {
        for (String groupAndArtifactId : p.system_ids) {
          List<String> list = split(groupAndArtifactId, ":");
          if (list.size() != 2) continue;

          String groupId = list.get(0);
          String artifactId = list.get(1);
          for (String version : p.versions) {
            RepositoryArtifactDescription artifact = new RepositoryArtifactDescription(
              groupId, artifactId, version, "jar", null, null, getRepositoryId(p.owner, p.repo));
            artifacts.add(artifact);
          }
        }
      }
    }, BintrayEndpoint::defaultExceptionHandler, null);
    return artifacts;
  }
public List<RepositoryArtifactDescription> getArtifacts(@NotNull String subject, @Nullable String repo,
                                                          @Nullable String groupIdTemplate, @Nullable String artifactIdTemplate)