package com.github.jmchilton.blend4j.toolshed;
import com.github.jmchilton.blend4j.galaxy.WebResourceFactory;
import com.github.jmchilton.blend4j.toolshed.beans.Repository;
import com.github.jmchilton.blend4j.toolshed.beans.RepositoryDetails;
import com.github.jmchilton.blend4j.toolshed.beans.RepositoryRevision;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import java.util.List;
import org.codehaus.jackson.type.TypeReference;
public class RepositoriesClientImpl extends Client implements RepositoriesClient {
private static final TypeReference<List<RepositoryDetails>> TOOL_LIST_TYPE_REFERENCE = new TypeReference<List<RepositoryDetails>>() {
};
private static final TypeReference<List<String>> STRING_LIST_TYPE_REFERENCE = new TypeReference<List<String>>() {
};
RepositoriesClientImpl(WebResourceFactory webResourceFactory) {
super(webResourceFactory, "repositories");
}
public List<RepositoryDetails> getRepositories() {
return super.get(TOOL_LIST_TYPE_REFERENCE);
}
public RepositoryDetails showRepository(final String repositoryId) {
return super.show(repositoryId, RepositoryDetails.class);
}
public ClientResponse getInstallableRevisionsRequest(Repository repository) {
return super.getResponse(withQueryParams(super.path("get_ordered_installable_revisions"), repository));
}
public List<String> getInstallableRevisions(Repository repository) {
return read(getInstallableRevisionsRequest(repository), STRING_LIST_TYPE_REFERENCE);
}
public ClientResponse getRepositoryRevisionInstallInfoRequest(RepositoryRevision revision) {
final WebResource baseResource = super.path("get_repository_revision_install_info");
final WebResource resource = withQueryParams(baseResource, revision);
return super.getResponse(resource);
}
private WebResource withQueryParams(final WebResource resource, RepositoryRevision revision) {
return withQueryParams(resource, (Repository) revision).queryParam("changeset_revision", revision.getRevision());
}
private WebResource withQueryParams(final WebResource resource, final Repository repository) {
return resource.queryParam("owner", repository.getOwner()).queryParam("name", repository.getName());
}
}