Search in sources :

Example 1 with Registry

use of io.dockstore.common.Registry in project dockstore by dockstore.

the class LanguageHandlerInterface method getURLFromEntry.

/**
 * Given a docker entry (quay or dockerhub), return a URL to the given entry
 *
 * @param dockerEntry has the docker name
 * @return URL
 */
// TODO: Potentially add support for other registries and add message that the registry is unsupported
default String getURLFromEntry(String dockerEntry, ToolDAO toolDAO) {
    // For now ignore tag, later on it may be more useful
    String quayIOPath = "https://quay.io/repository/";
    // For type repo/subrepo:tag
    String dockerHubPathR = "https://hub.docker.com/r/";
    // For type repo:tag
    String dockerHubPathUnderscore = "https://hub.docker.com/_/";
    // Update to tools once UI is updated to use /tools instead of /containers
    String dockstorePath = "https://www.dockstore.org/containers/";
    String url;
    // Remove tag if exists
    Pattern p = Pattern.compile("([^:]+):?(\\S+)?");
    Matcher m = p.matcher(dockerEntry);
    if (m.matches()) {
        dockerEntry = m.group(1);
    }
    if (dockerEntry.isEmpty()) {
        return null;
    }
    // Regex for determining registry requires a tag; add a fake "0" tag
    Optional<Registry> registry = determineImageRegistry(dockerEntry + ":0");
    // TODO: How do we check that the URL is valid? If not then the entry is likely a local docker build
    if (registry.isPresent() && registry.get().equals(Registry.QUAY_IO)) {
        List<Tool> byPath = toolDAO.findAllByPath(dockerEntry, true);
        if (byPath == null || byPath.isEmpty()) {
            // when we cannot find a published tool on Dockstore, link to quay.io
            url = dockerEntry.replaceFirst("quay\\.io/", quayIOPath);
        } else {
            // when we found a published tool, link to the tool on Dockstore
            url = dockstorePath + dockerEntry;
        }
    } else if (registry.isEmpty() || !registry.get().equals(Registry.DOCKER_HUB)) {
        // if the registry is neither Quay nor Docker Hub, return the entry as the url
        url = "https://" + dockerEntry;
    } else {
        // DOCKER_HUB
        String[] parts = dockerEntry.split("/");
        if (parts.length == 2) {
            // if the path looks like pancancer/pcawg-oxog-tools
            List<Tool> publishedByPath = toolDAO.findAllByPath("registry.hub.docker.com/" + dockerEntry, true);
            if (publishedByPath == null || publishedByPath.isEmpty()) {
                // when we cannot find a published tool on Dockstore, link to docker hub
                url = dockerHubPathR + dockerEntry;
            } else {
                // when we found a published tool, link to the tool on Dockstore
                url = dockstorePath + "registry.hub.docker.com/" + dockerEntry;
            }
        } else {
            // if the path looks like debian:8 or debian
            url = dockerHubPathUnderscore + dockerEntry;
        }
    }
    return url;
}
Also used : Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) List(java.util.List) ArrayList(java.util.ArrayList) Registry(io.dockstore.common.Registry) AbstractImageRegistry(io.dockstore.webservice.helpers.AbstractImageRegistry) Tool(io.dockstore.webservice.core.Tool)

Example 2 with Registry

use of io.dockstore.common.Registry in project dockstore by dockstore.

the class DockerRepoResource method registerManual.

@POST
@Timed
@UnitOfWork
@Path("/registerManual")
@Operation(operationId = "registerManual", description = "Register a tool manually, along with tags.", security = @SecurityRequirement(name = OPENAPI_JWT_SECURITY_DEFINITION_NAME))
@ApiOperation(value = "Register a tool manually, along with tags.", authorizations = { @Authorization(value = JWT_SECURITY_DEFINITION_NAME) }, response = Tool.class)
public Tool registerManual(@ApiParam(hidden = true) @Parameter(hidden = true, name = "user") @Auth User user, @ApiParam(value = "Tool to be registered", required = true) Tool toolParam) {
    // Check for custom docker registries
    Registry registry = toolParam.getRegistryProvider();
    if (registry == null) {
        throw new CustomWebApplicationException("The provided registry is not valid. If you are using a custom registry please ensure that it matches the allowed paths.", HttpStatus.SC_BAD_REQUEST);
    }
    Tool duplicate = toolDAO.findByPath(toolParam.getToolPath(), false);
    if (duplicate != null) {
        LOG.info(user.getUsername() + ": duplicate tool found: {}" + toolParam.getToolPath());
        throw new CustomWebApplicationException("Tool " + toolParam.getToolPath() + " already exists.", HttpStatus.SC_BAD_REQUEST);
    }
    // Check if tool has tags
    if (toolParam.getRegistry().equals(Registry.QUAY_IO.getDockerPath()) && !checkContainerForTags(toolParam, user.getId())) {
        LOG.info(user.getUsername() + ": tool has no tags.");
        throw new CustomWebApplicationException("Tool " + toolParam.getToolPath() + " has no tags. Quay containers must have at least one tag.", HttpStatus.SC_BAD_REQUEST);
    }
    // Check if user owns repo, or if user is in the organization which owns the tool
    if (toolParam.getRegistry().equals(Registry.QUAY_IO.getDockerPath()) && !checkIfUserOwns(toolParam, user.getId())) {
        LOG.info(user.getUsername() + ": User does not own the given Quay Repo.");
        throw new CustomWebApplicationException("User does not own the tool " + toolParam.getPath() + ". You can only add Quay repositories that you own or are part of the organization", HttpStatus.SC_BAD_REQUEST);
    }
    final Set<Tag> workflowVersionsFromParam = Sets.newHashSet(toolParam.getWorkflowVersions());
    toolParam.setWorkflowVersions(Sets.newHashSet());
    // cannot create tool with a transient version hanging on it
    long id = toolDAO.create(toolParam);
    Tool tool = toolDAO.findById(id);
    // put the hanging versions back
    toolParam.setWorkflowVersions(workflowVersionsFromParam);
    if (registry.isPrivateOnly() && !tool.isPrivateAccess()) {
        throw new CustomWebApplicationException("The registry " + registry.getFriendlyName() + " is a private only registry.", HttpStatus.SC_BAD_REQUEST);
    }
    if (tool.isPrivateAccess() && Strings.isNullOrEmpty(tool.getToolMaintainerEmail())) {
        throw new CustomWebApplicationException("Tool maintainer email is required for private tools.", HttpStatus.SC_BAD_REQUEST);
    }
    // populate user in tool
    tool.addUser(user);
    // create dependent Tags before creating tool
    Set<Tag> createdTags = new HashSet<>();
    for (Tag tag : toolParam.getWorkflowVersions()) {
        tag.setParent(tool);
        final long l = tagDAO.create(tag);
        Tag byId = tagDAO.findById(l);
        createdTags.add(byId);
        this.eventDAO.createAddTagToEntryEvent(user, tool, byId);
    }
    tool.getWorkflowVersions().clear();
    tool.getWorkflowVersions().addAll(createdTags);
    // create dependent Labels before creating tool
    Set<Label> createdLabels = new HashSet<>();
    for (Label label : tool.getLabels()) {
        final long l = labelDAO.create(label);
        createdLabels.add(labelDAO.findById(l));
    }
    tool.getLabels().clear();
    tool.getLabels().addAll(createdLabels);
    if (!isGit(tool.getGitUrl())) {
        tool.setGitUrl(convertHttpsToSsh(tool.getGitUrl()));
    }
    // Can't set tool license information here, far too many tests register a tool without a GitHub token
    setToolLicenseInformation(user, tool);
    return toolDAO.findById(id);
}
Also used : Label(io.dockstore.webservice.core.Label) CustomWebApplicationException(io.dockstore.webservice.CustomWebApplicationException) Registry(io.dockstore.common.Registry) AbstractImageRegistry(io.dockstore.webservice.helpers.AbstractImageRegistry) QuayImageRegistry(io.dockstore.webservice.helpers.QuayImageRegistry) Tag(io.dockstore.webservice.core.Tag) Tool(io.dockstore.webservice.core.Tool) HashSet(java.util.HashSet) Path(javax.ws.rs.Path) UnitOfWork(io.dropwizard.hibernate.UnitOfWork) POST(javax.ws.rs.POST) Timed(com.codahale.metrics.annotation.Timed) ApiOperation(io.swagger.annotations.ApiOperation) ApiOperation(io.swagger.annotations.ApiOperation) Operation(io.swagger.v3.oas.annotations.Operation)

Example 3 with Registry

use of io.dockstore.common.Registry in project dockstore by dockstore.

the class AbstractImageRegistry method refreshTools.

/**
 * Updates/Adds/Deletes tools and their associated tags
 *
 * @param userId            The ID of the user
 * @param userDAO           ...
 * @param toolDAO           ...
 * @param tagDAO            ...
 * @param fileDAO           ...
 * @param githubToken       The user's GitHub token
 * @param bitbucketToken    The user's Bitbucket token
 * @param gitlabToken       The user's GitLab token
 * @param organization      If not null, only refresh tools belonging to the specific organization. Otherwise, refresh all.
 * @param dashboardPrefix   A string that prefixes logging statements to indicate that it will be used for Cloudwatch & Grafana.
 * @return The list of tools that have been updated
 */
@SuppressWarnings("checkstyle:parameternumber")
public List<Tool> refreshTools(final long userId, final UserDAO userDAO, final ToolDAO toolDAO, final TagDAO tagDAO, final FileDAO fileDAO, final FileFormatDAO fileFormatDAO, final Token githubToken, final Token bitbucketToken, final Token gitlabToken, String organization, final EventDAO eventDAO, final String dashboardPrefix) {
    // Get all the namespaces for the given registry
    List<String> namespaces;
    if (organization != null) {
        namespaces = Collections.singletonList(organization);
    } else {
        namespaces = getNamespaces();
    }
    // Get all the tools based on the found namespaces
    List<Tool> apiTools = getToolsFromNamespace(namespaces);
    String registryString = getRegistry().getDockerPath();
    // Add manual tools to list of api tools
    User user = userDAO.findById(userId);
    List<Tool> userTools = toolDAO.findByUserRegistryNamespace(userId, registryString, organization);
    // manualTools:
    // - isManualMode
    // - isTool
    // - belongs to user
    // - correct registry
    // - correct organization/namespace
    List<Tool> manualTools = userTools.stream().filter(tool -> ToolMode.MANUAL_IMAGE_PATH.equals(tool.getMode())).collect(Collectors.toList());
    // notManualTools is similar except it's not manualMode
    List<Tool> notManualTools = userTools.stream().filter(tool -> !ToolMode.MANUAL_IMAGE_PATH.equals(tool.getMode())).collect(Collectors.toList());
    apiTools.addAll(manualTools);
    // Update api tools with build information
    updateAPIToolsWithBuildInformation(apiTools);
    // Update db tools by copying over from api tools
    List<Tool> newDBTools = updateTools(apiTools, notManualTools, user, toolDAO);
    // Get tags and update for each tool
    for (Tool tool : newDBTools) {
        logToolRefresh(dashboardPrefix, tool);
        List<Tag> toolTags = getTags(tool);
        final SourceCodeRepoInterface sourceCodeRepo = SourceCodeRepoFactory.createSourceCodeRepo(tool.getGitUrl(), bitbucketToken == null ? null : bitbucketToken.getContent(), gitlabToken == null ? null : gitlabToken.getContent(), githubToken);
        updateTags(toolTags, tool, sourceCodeRepo, tagDAO, fileDAO, toolDAO, fileFormatDAO, eventDAO, user);
    }
    return newDBTools;
}
Also used : GitLabTag(io.dockstore.webservice.core.gitlab.GitLabTag) SourceCodeRepoFactory.parseGitUrl(io.dockstore.webservice.helpers.SourceCodeRepoFactory.parseGitUrl) TypeToken(com.google.gson.reflect.TypeToken) SortedSet(java.util.SortedSet) URL(java.net.URL) Date(java.util.Date) Results(io.dockstore.webservice.core.dockerhub.Results) LoggerFactory(org.slf4j.LoggerFactory) CustomWebApplicationException(io.dockstore.webservice.CustomWebApplicationException) HttpStatus(org.apache.http.HttpStatus) GitLabContainerRegistry(io.dockstore.webservice.core.gitlab.GitLabContainerRegistry) Registry(io.dockstore.common.Registry) SourceFile(io.dockstore.webservice.core.SourceFile) Gson(com.google.gson.Gson) Map(java.util.Map) User(io.dockstore.webservice.core.User) DockerHubImage(io.dockstore.webservice.core.dockerhub.DockerHubImage) TagDAO(io.dockstore.webservice.jdbi.TagDAO) Set(java.util.Set) NotNull(javax.validation.constraints.NotNull) Tag(io.dockstore.webservice.core.Tag) Tool(io.dockstore.webservice.core.Tool) Collectors(java.util.stream.Collectors) DockerHubTag(io.dockstore.webservice.core.dockerhub.DockerHubTag) StandardCharsets(java.nio.charset.StandardCharsets) Objects(java.util.Objects) IOUtils(org.apache.commons.io.IOUtils) List(java.util.List) Type(java.lang.reflect.Type) Optional(java.util.Optional) Validation(io.dockstore.webservice.core.Validation) DescriptorLanguage(io.dockstore.common.DescriptorLanguage) VersionTypeValidation(io.dockstore.common.VersionTypeValidation) Image(io.dockstore.webservice.core.Image) HashMap(java.util.HashMap) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) LanguageHandlerFactory(io.dockstore.webservice.languages.LanguageHandlerFactory) FileFormatDAO(io.dockstore.webservice.jdbi.FileFormatDAO) Checksum(io.dockstore.webservice.core.Checksum) EventDAO(io.dockstore.webservice.jdbi.EventDAO) Token(io.dockstore.webservice.core.Token) UserDAO(io.dockstore.webservice.jdbi.UserDAO) FileDAO(io.dockstore.webservice.jdbi.FileDAO) ToolDAO(io.dockstore.webservice.jdbi.ToolDAO) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) IOException(java.io.IOException) ToolMode(io.dockstore.webservice.core.ToolMode) Collections(java.util.Collections) User(io.dockstore.webservice.core.User) GitLabTag(io.dockstore.webservice.core.gitlab.GitLabTag) Tag(io.dockstore.webservice.core.Tag) DockerHubTag(io.dockstore.webservice.core.dockerhub.DockerHubTag) Tool(io.dockstore.webservice.core.Tool)

Example 4 with Registry

use of io.dockstore.common.Registry in project dockstore by dockstore.

the class UserResource method checkToolTokens.

private void checkToolTokens(User authUser, Long userId, String organization) {
    List<Token> tokens = tokenDAO.findByUserId(userId);
    List<Tool> tools = userContainers(authUser, userId);
    if (organization != null && !organization.isEmpty()) {
        tools.removeIf(tool -> !tool.getNamespace().equals(organization));
    }
    Token gitLabToken = Token.extractToken(tokens, TokenType.GITLAB_COM);
    Token quayioToken = Token.extractToken(tokens, TokenType.QUAY_IO);
    Set<Registry> uniqueRegistry = new HashSet<>();
    tools.forEach(tool -> uniqueRegistry.add(tool.getRegistryProvider()));
    if (uniqueRegistry.size() == 0 && quayioToken == null) {
        throw new CustomWebApplicationException("You have no tools and no Quay.io token to automatically add tools. Please add a Quay.io token.", HttpStatus.SC_BAD_REQUEST);
    }
    if (uniqueRegistry.contains(Registry.QUAY_IO) && quayioToken == null) {
        throw new CustomWebApplicationException("You have Quay.io tools but no Quay.io token to refresh the tools with. Please add a Quay.io token.", HttpStatus.SC_BAD_REQUEST);
    }
    if (uniqueRegistry.contains(Registry.GITLAB) && gitLabToken == null) {
        throw new CustomWebApplicationException("You have GitLab tools but no GitLab token to refresh the tools with. Please add a GitLab token", HttpStatus.SC_BAD_REQUEST);
    }
}
Also used : Token(io.dockstore.webservice.core.Token) CustomWebApplicationException(io.dockstore.webservice.CustomWebApplicationException) Registry(io.dockstore.common.Registry) Tool(io.dockstore.webservice.core.Tool) LinkedHashSet(java.util.LinkedHashSet) HashSet(java.util.HashSet)

Example 5 with Registry

use of io.dockstore.common.Registry in project dockstore by dockstore.

the class UserResource method getGitRepositoryMap.

/**
 * For a given user and git registry, retrieve a map of git url to repository path
 * @param user
 * @param gitRegistry
 * @return mapping of git url to repository path
 */
private Map<String, String> getGitRepositoryMap(User user, SourceControl gitRegistry) {
    List<Token> scTokens = getAndRefreshTokens(user, tokenDAO, client, bitbucketClientID, bitbucketClientSecret).stream().filter(token -> Objects.equals(token.getTokenSource().getSourceControl(), gitRegistry)).collect(Collectors.toList());
    if (scTokens.size() > 0) {
        Token scToken = scTokens.get(0);
        SourceCodeRepoInterface sourceCodeRepo = SourceCodeRepoFactory.createSourceCodeRepo(scToken);
        return sourceCodeRepo.getWorkflowGitUrl2RepositoryId();
    } else {
        return new HashMap<>();
    }
}
Also used : Arrays(java.util.Arrays) RolesAllowed(javax.annotation.security.RolesAllowed) Produces(javax.ws.rs.Produces) WorkflowDAO(io.dockstore.webservice.jdbi.WorkflowDAO) CustomWebApplicationException(io.dockstore.webservice.CustomWebApplicationException) ApiParam(io.swagger.annotations.ApiParam) Registry(io.dockstore.common.Registry) SourceCodeRepoFactory(io.dockstore.webservice.helpers.SourceCodeRepoFactory) MediaType(javax.ws.rs.core.MediaType) Matcher(java.util.regex.Matcher) Map(java.util.Map) PAGINATION_LIMIT_TEXT(io.dockstore.webservice.resources.ResourceConstants.PAGINATION_LIMIT_TEXT) User(io.dockstore.webservice.core.User) OrganizationUpdateTime(io.dockstore.webservice.core.OrganizationUpdateTime) TokenViews(io.dockstore.webservice.core.TokenViews) Collection(io.dockstore.webservice.core.Collection) SessionFactory(org.hibernate.SessionFactory) Set(java.util.Set) Tool(io.dockstore.webservice.core.Tool) Repository(io.dockstore.common.Repository) CloudInstance(io.dockstore.webservice.core.CloudInstance) EntryUpdateTime(io.dockstore.webservice.core.EntryUpdateTime) PATCH(io.swagger.jaxrs.PATCH) UnitOfWork(io.dropwizard.hibernate.UnitOfWork) Tag(io.swagger.v3.oas.annotations.tags.Tag) PrivilegeRequest(io.dockstore.webservice.api.PrivilegeRequest) LambdaEvent(io.dockstore.webservice.core.LambdaEvent) ApiResponses(io.swagger.v3.oas.annotations.responses.ApiResponses) CachingAuthenticator(io.dropwizard.auth.CachingAuthenticator) PAGINATION_LIMIT(io.dockstore.webservice.resources.ResourceConstants.PAGINATION_LIMIT) GET(javax.ws.rs.GET) JWT_SECURITY_DEFINITION_NAME(io.dockstore.webservice.Constants.JWT_SECURITY_DEFINITION_NAME) PublicStateManager(io.dockstore.webservice.helpers.PublicStateManager) ArrayList(java.util.ArrayList) ServiceDAO(io.dockstore.webservice.jdbi.ServiceDAO) Content(io.swagger.v3.oas.annotations.media.Content) Operation(io.swagger.v3.oas.annotations.Operation) Lists(com.google.common.collect.Lists) EntryDAO(io.dockstore.webservice.jdbi.EntryDAO) HttpClient(org.apache.http.client.HttpClient) EventDAO(io.dockstore.webservice.jdbi.EventDAO) ExtendedUserData(io.dockstore.webservice.core.ExtendedUserData) Api(io.swagger.annotations.Api) Token(io.dockstore.webservice.core.Token) Workflow(io.dockstore.webservice.core.Workflow) UserDAO(io.dockstore.webservice.jdbi.UserDAO) LinkedHashSet(java.util.LinkedHashSet) ToolDAO(io.dockstore.webservice.jdbi.ToolDAO) DeletedUserHelper(io.dockstore.webservice.helpers.DeletedUserHelper) DeletedUsernameDAO(io.dockstore.webservice.jdbi.DeletedUsernameDAO) SourceCodeRepoInterface(io.dockstore.webservice.helpers.SourceCodeRepoInterface) ArraySchema(io.swagger.v3.oas.annotations.media.ArraySchema) Organization(io.dockstore.webservice.core.Organization) TokenDAO(io.dockstore.webservice.jdbi.TokenDAO) MyWorkflows(io.dockstore.webservice.core.database.MyWorkflows) PAGINATION_OFFSET_TEXT(io.dockstore.webservice.resources.ResourceConstants.PAGINATION_OFFSET_TEXT) JsonView(com.fasterxml.jackson.annotation.JsonView) Path(javax.ws.rs.Path) LoggerFactory(org.slf4j.LoggerFactory) HttpStatus(org.apache.http.HttpStatus) DockstoreWebserviceConfiguration(io.dockstore.webservice.DockstoreWebserviceConfiguration) BioWorkflowDAO(io.dockstore.webservice.jdbi.BioWorkflowDAO) OrganizationUser(io.dockstore.webservice.core.OrganizationUser) ApiOperation(io.swagger.annotations.ApiOperation) QueryParam(javax.ws.rs.QueryParam) Consumes(javax.ws.rs.Consumes) DefaultValue(javax.ws.rs.DefaultValue) TokenType(io.dockstore.webservice.core.TokenType) OPENAPI_JWT_SECURITY_DEFINITION_NAME(io.dockstore.webservice.resources.ResourceConstants.OPENAPI_JWT_SECURITY_DEFINITION_NAME) DELETE(javax.ws.rs.DELETE) DeletedUsername(io.dockstore.webservice.core.DeletedUsername) SecurityRequirement(io.swagger.v3.oas.annotations.security.SecurityRequirement) Schema(io.swagger.v3.oas.annotations.media.Schema) Service(io.dockstore.webservice.core.Service) Timestamp(java.sql.Timestamp) Limits(io.dockstore.webservice.api.Limits) Collectors(java.util.stream.Collectors) GoogleHelper(io.dockstore.webservice.helpers.GoogleHelper) Objects(java.util.Objects) Parameter(io.swagger.v3.oas.annotations.Parameter) Timed(com.codahale.metrics.annotation.Timed) List(java.util.List) EntryLite(io.dockstore.webservice.core.database.EntryLite) BioWorkflow(io.dockstore.webservice.core.BioWorkflow) Optional(java.util.Optional) Pattern(java.util.regex.Pattern) PathParam(javax.ws.rs.PathParam) WorkflowMode(io.dockstore.webservice.core.WorkflowMode) Auth(io.dropwizard.auth.Auth) HashMap(java.util.HashMap) ParameterIn(io.swagger.v3.oas.annotations.enums.ParameterIn) MessageFormat(java.text.MessageFormat) HashSet(java.util.HashSet) EntryVersionHelper(io.dockstore.webservice.helpers.EntryVersionHelper) SourceControl(io.dockstore.common.SourceControl) ApiResponse(io.swagger.v3.oas.annotations.responses.ApiResponse) APPEASE_SWAGGER_PATCH(io.dockstore.webservice.resources.ResourceConstants.APPEASE_SWAGGER_PATCH) POST(javax.ws.rs.POST) Logger(org.slf4j.Logger) SourceControlOrganization(io.dockstore.webservice.core.SourceControlOrganization) PermissionsInterface(io.dockstore.webservice.permissions.PermissionsInterface) Entry(io.dockstore.webservice.core.Entry) LambdaEventDAO(io.dockstore.webservice.jdbi.LambdaEventDAO) PUT(javax.ws.rs.PUT) GitHubSourceCodeRepo(io.dockstore.webservice.helpers.GitHubSourceCodeRepo) Comparator(java.util.Comparator) Authorization(io.swagger.annotations.Authorization) Hibernate(org.hibernate.Hibernate) HashMap(java.util.HashMap) Token(io.dockstore.webservice.core.Token) SourceCodeRepoInterface(io.dockstore.webservice.helpers.SourceCodeRepoInterface)

Aggregations

Registry (io.dockstore.common.Registry)7 Tool (io.dockstore.webservice.core.Tool)6 CustomWebApplicationException (io.dockstore.webservice.CustomWebApplicationException)5 HashSet (java.util.HashSet)5 AbstractImageRegistry (io.dockstore.webservice.helpers.AbstractImageRegistry)4 ArrayList (java.util.ArrayList)4 Timed (com.codahale.metrics.annotation.Timed)3 Token (io.dockstore.webservice.core.Token)3 UnitOfWork (io.dropwizard.hibernate.UnitOfWork)3 ApiOperation (io.swagger.annotations.ApiOperation)3 Operation (io.swagger.v3.oas.annotations.Operation)3 HashMap (java.util.HashMap)3 List (java.util.List)3 Map (java.util.Map)3 Set (java.util.Set)3 Path (javax.ws.rs.Path)3 Tag (io.dockstore.webservice.core.Tag)2 User (io.dockstore.webservice.core.User)2 EventDAO (io.dockstore.webservice.jdbi.EventDAO)2 ToolDAO (io.dockstore.webservice.jdbi.ToolDAO)2