package com.github.jmchilton.blend4j.galaxy;
import com.github.jmchilton.blend4j.galaxy.beans.InstallableRepositoryRevision;
import com.github.jmchilton.blend4j.galaxy.beans.InstalledRepository;
import com.github.jmchilton.blend4j.galaxy.beans.RepositoryInstall;
import com.github.jmchilton.blend4j.galaxy.beans.RepositoryWorkflow;
import com.github.jmchilton.blend4j.galaxy.beans.Workflow;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import java.util.HashMap;
import java.util.List;
import org.codehaus.jackson.type.TypeReference;
class ToolShedRepositoriesClientImpl extends Client implements ToolShedRepositoriesClient {
private static final TypeReference<List<InstalledRepository>> TOOL_SHED_REPOSITORY_LIST_TYPE_REFERENCE = new TypeReference<List<InstalledRepository>>() {
};
private static final TypeReference<List<RepositoryWorkflow>> TOOL_SHED_REPOSITORY_WORKFLOW_LIST_TYPE_REFERENCE =
new TypeReference<List<RepositoryWorkflow>>() {
};
private static final TypeReference<List<Workflow>> WORKFLOW_LIST_TYPE_REFERENCE =
new TypeReference<List<Workflow>>() {
};
ToolShedRepositoriesClientImpl(GalaxyInstanceImpl galaxyInstance) {
super(galaxyInstance, "tool_shed_repositories");
}
public List<InstalledRepository> getRepositories() {
return super.get(TOOL_SHED_REPOSITORY_LIST_TYPE_REFERENCE);
}
public InstalledRepository showRepository(final String toolShedId) {
return super.show(toolShedId, InstalledRepository.class);
}
public ClientResponse installRepositoryRequest(final RepositoryInstall install) {
final WebResource resource = super.webResource.path("new").path("install_repository_revision");
return super.create(resource, install);
}
public List<InstalledRepository> installRepository(final RepositoryInstall install) {
final ClientResponse response = this.installRepositoryRequest(install);
return super.read(response, TOOL_SHED_REPOSITORY_LIST_TYPE_REFERENCE);
}
public ClientResponse repairRepositoryRequest(final InstallableRepositoryRevision repositoryIdentifier) {
final WebResource resource = super.webResource.path("repair_repository_revision");
return super.create(resource, repositoryIdentifier);
}
public ClientResponse exportedWorkflowsRequest(String toolShedId) {
final WebResource resource = super.webResource.path(toolShedId).path("exported_workflows");
return resource.get(ClientResponse.class);
}
public List<RepositoryWorkflow> exportedWorkflows(String toolShedId) {
return super.read(this.exportedWorkflowsRequest(toolShedId),
TOOL_SHED_REPOSITORY_WORKFLOW_LIST_TYPE_REFERENCE);
}
public ClientResponse importWorkflowRequest(String toolShedId, int index) {
final WebResource resource = super.webResource.path(toolShedId).path("import_workflow");
final HashMap<String, Object> postObject = new HashMap<String, Object>();
postObject.put("index", index);
return super.create(resource, postObject);
}
public Workflow importWorkflow(String toolShedId, int index) {
final ClientResponse response = this.importWorkflowRequest(toolShedId, index);
return response.getEntity(Workflow.class);
}
public ClientResponse importWorkflowsRequest(String toolShedId) {
final WebResource resource = super.webResource.path(toolShedId).path("import_workflows");
return super.create(resource);
}
public List<Workflow> importWorkflows(String toolShedId) {
return read(importWorkflowsRequest(toolShedId), WORKFLOW_LIST_TYPE_REFERENCE);
}
}