001/*
002 * SonarQube
003 * Copyright (C) 2009-2016 SonarSource SA
004 * mailto:contact AT sonarsource DOT com
005 *
006 * This program is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020package org.sonarqube.ws.client.issue;
021
022import org.sonarqube.ws.Issues.SearchWsResponse;
023import org.sonarqube.ws.client.BaseService;
024import org.sonarqube.ws.client.GetRequest;
025import org.sonarqube.ws.client.WsConnector;
026
027import static org.sonarqube.ws.client.issue.IssueFilterParameters.ADDITIONAL_FIELDS;
028import static org.sonarqube.ws.client.issue.IssueFilterParameters.ASC;
029import static org.sonarqube.ws.client.issue.IssueFilterParameters.ASSIGNED;
030import static org.sonarqube.ws.client.issue.IssueFilterParameters.ASSIGNEES;
031import static org.sonarqube.ws.client.issue.IssueFilterParameters.AUTHORS;
032import static org.sonarqube.ws.client.issue.IssueFilterParameters.COMPONENTS;
033import static org.sonarqube.ws.client.issue.IssueFilterParameters.COMPONENT_KEYS;
034import static org.sonarqube.ws.client.issue.IssueFilterParameters.COMPONENT_ROOTS;
035import static org.sonarqube.ws.client.issue.IssueFilterParameters.COMPONENT_ROOT_UUIDS;
036import static org.sonarqube.ws.client.issue.IssueFilterParameters.COMPONENT_UUIDS;
037import static org.sonarqube.ws.client.issue.IssueFilterParameters.CREATED_AFTER;
038import static org.sonarqube.ws.client.issue.IssueFilterParameters.CREATED_AT;
039import static org.sonarqube.ws.client.issue.IssueFilterParameters.CREATED_BEFORE;
040import static org.sonarqube.ws.client.issue.IssueFilterParameters.CREATED_IN_LAST;
041import static org.sonarqube.ws.client.issue.IssueFilterParameters.DEPRECATED_ACTION_PLANS;
042import static org.sonarqube.ws.client.issue.IssueFilterParameters.DIRECTORIES;
043import static org.sonarqube.ws.client.issue.IssueFilterParameters.FACET_MODE;
044import static org.sonarqube.ws.client.issue.IssueFilterParameters.FILE_UUIDS;
045import static org.sonarqube.ws.client.issue.IssueFilterParameters.ISSUES;
046import static org.sonarqube.ws.client.issue.IssueFilterParameters.LANGUAGES;
047import static org.sonarqube.ws.client.issue.IssueFilterParameters.MODULE_UUIDS;
048import static org.sonarqube.ws.client.issue.IssueFilterParameters.ON_COMPONENT_ONLY;
049import static org.sonarqube.ws.client.issue.IssueFilterParameters.PROJECTS;
050import static org.sonarqube.ws.client.issue.IssueFilterParameters.PROJECT_KEYS;
051import static org.sonarqube.ws.client.issue.IssueFilterParameters.PROJECT_UUIDS;
052import static org.sonarqube.ws.client.issue.IssueFilterParameters.RESOLUTIONS;
053import static org.sonarqube.ws.client.issue.IssueFilterParameters.RESOLVED;
054import static org.sonarqube.ws.client.issue.IssueFilterParameters.RULES;
055import static org.sonarqube.ws.client.issue.IssueFilterParameters.SEVERITIES;
056import static org.sonarqube.ws.client.issue.IssueFilterParameters.SINCE_LEAK_PERIOD;
057import static org.sonarqube.ws.client.issue.IssueFilterParameters.STATUSES;
058import static org.sonarqube.ws.client.issue.IssueFilterParameters.TAGS;
059
060public class IssuesService extends BaseService {
061
062  public IssuesService(WsConnector wsConnector) {
063    super(wsConnector, "api/issues");
064  }
065
066  public SearchWsResponse search(SearchWsRequest request) {
067    return call(
068      new GetRequest(path("search"))
069        .setParam(DEPRECATED_ACTION_PLANS, inlineMultipleParamValue(request.getActionPlans()))
070        .setParam(ADDITIONAL_FIELDS, inlineMultipleParamValue(request.getAdditionalFields()))
071        .setParam(ASC, request.getAsc())
072        .setParam(ASSIGNED, request.getAssigned())
073        .setParam(ASSIGNEES, inlineMultipleParamValue(request.getAssignees()))
074        .setParam(AUTHORS, inlineMultipleParamValue(request.getAuthors()))
075        .setParam(COMPONENT_KEYS, inlineMultipleParamValue(request.getComponentKeys()))
076        .setParam(COMPONENT_ROOT_UUIDS, inlineMultipleParamValue(request.getComponentRootUuids()))
077        .setParam(COMPONENT_ROOTS, inlineMultipleParamValue(request.getComponentRoots()))
078        .setParam(COMPONENT_UUIDS, inlineMultipleParamValue(request.getComponentUuids()))
079        .setParam(COMPONENTS, inlineMultipleParamValue(request.getComponents()))
080        .setParam(CREATED_AFTER, request.getCreatedAfter())
081        .setParam(CREATED_AT, request.getCreatedAt())
082        .setParam(CREATED_BEFORE, request.getCreatedBefore())
083        .setParam(CREATED_IN_LAST, request.getCreatedInLast())
084        .setParam(DIRECTORIES, inlineMultipleParamValue(request.getDirectories()))
085        .setParam(FACET_MODE, request.getFacetMode())
086        .setParam("facets", inlineMultipleParamValue(request.getFacets()))
087        .setParam(FILE_UUIDS, inlineMultipleParamValue(request.getFileUuids()))
088        .setParam(ISSUES, inlineMultipleParamValue(request.getIssues()))
089        .setParam(LANGUAGES, inlineMultipleParamValue(request.getLanguages()))
090        .setParam(MODULE_UUIDS, inlineMultipleParamValue(request.getModuleUuids()))
091        .setParam(ON_COMPONENT_ONLY, request.getOnComponentOnly())
092        .setParam("p", request.getPage())
093        .setParam("ps", request.getPageSize())
094        .setParam(PROJECT_KEYS, inlineMultipleParamValue(request.getProjectKeys()))
095        .setParam(PROJECT_UUIDS, inlineMultipleParamValue(request.getProjectUuids()))
096        .setParam(PROJECTS, inlineMultipleParamValue(request.getProjects()))
097        .setParam(RESOLUTIONS, inlineMultipleParamValue(request.getResolutions()))
098        .setParam(RESOLVED, request.getResolved())
099        .setParam(RULES, inlineMultipleParamValue(request.getRules()))
100        .setParam("s", request.getSort())
101        .setParam(SEVERITIES, inlineMultipleParamValue(request.getSeverities()))
102        .setParam(SINCE_LEAK_PERIOD, request.getSinceLeakPeriod())
103        .setParam(STATUSES, inlineMultipleParamValue(request.getStatuses()))
104        .setParam(TAGS, inlineMultipleParamValue(request.getTags())),
105      SearchWsResponse.parser());
106  }
107}