org.sonar.server.issue.ws.IssuesWs.java Source code

Java tutorial

Introduction

Here is the source code for org.sonar.server.issue.ws.IssuesWs.java

Source

/*
 * SonarQube
 * Copyright (C) 2009-2016 SonarSource SA
 * mailto:contact AT sonarsource DOT com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package org.sonar.server.issue.ws;

import com.google.common.io.Resources;
import org.sonar.api.issue.DefaultTransitions;
import org.sonar.api.rule.Severity;
import org.sonar.api.rules.RuleType;
import org.sonar.api.server.ws.RailsHandler;
import org.sonar.api.server.ws.WebService;

public class IssuesWs implements WebService {

    public static final String API_ENDPOINT = "api/issues";

    public static final String CHANGELOG_ACTION = "changelog";
    public static final String ADD_COMMENT_ACTION = "add_comment";
    public static final String DELETE_COMMENT_ACTION = "delete_comment";
    public static final String EDIT_COMMENT_ACTION = "edit_comment";
    public static final String TRANSITIONS_ACTION = "transitions";
    public static final String BULK_CHANGE_ACTION = "bulk_change";

    private final IssuesWsAction[] actions;

    public IssuesWs(IssuesWsAction... actions) {
        this.actions = actions;
    }

    @Override
    public void define(Context context) {
        NewController controller = context.createController(API_ENDPOINT);
        controller.setDescription("Read and update issues.");
        controller.setSince("3.6");
        for (IssuesWsAction action : actions) {
            action.define(controller);
        }
        defineRailsActions(controller);
        controller.done();
    }

    private static void defineRailsActions(NewController controller) {
        defineChangelogAction(controller);
        defineAddCommentAction(controller);
        defineDeleteCommentAction(controller);
        defineEditCommentAction(controller);
        defineTransitionsAction(controller);
        defineBulkChangeAction(controller);
    }

    private static void defineChangelogAction(NewController controller) {
        WebService.NewAction action = controller.createAction(CHANGELOG_ACTION)
                .setDescription("Display changelog of an issue").setSince("4.1").setHandler(RailsHandler.INSTANCE)
                .setResponseExample(Resources.getResource(IssuesWs.class, "example-changelog.json"));

        action.createParam("issue").setDescription("Key of the issue").setRequired(true)
                .setExampleValue("5bccd6e8-f525-43a2-8d76-fcb13dde79ef");
        RailsHandler.addFormatParam(action);
    }

    private static void defineAddCommentAction(NewController controller) {
        WebService.NewAction action = controller.createAction(ADD_COMMENT_ACTION)
                .setDescription("Add a comment. Requires authentication and Browse permission on project")
                .setSince("3.6").setHandler(RailsHandler.INSTANCE).setPost(true);

        action.createParam("issue").setDescription("Key of the issue").setRequired(true)
                .setExampleValue("5bccd6e8-f525-43a2-8d76-fcb13dde79ef");
        action.createParam("text").setDescription("Comment").setExampleValue("blabla...");
        RailsHandler.addFormatParam(action);
    }

    private static void defineDeleteCommentAction(NewController controller) {
        WebService.NewAction action = controller.createAction(DELETE_COMMENT_ACTION)
                .setDescription("Delete a comment. Requires authentication and Browse permission on project")
                .setSince("3.6").setHandler(RailsHandler.INSTANCE).setPost(true);

        action.createParam("key").setDescription("Key of the comment").setRequired(true)
                .setExampleValue("392160d3-a4f2-4c52-a565-e4542cfa2096");
    }

    private static void defineEditCommentAction(NewController controller) {
        WebService.NewAction action = controller.createAction(EDIT_COMMENT_ACTION)
                .setDescription("Edit a comment. Requires authentication and User role on project").setSince("3.6")
                .setHandler(RailsHandler.INSTANCE).setPost(true);

        action.createParam("key").setDescription("Key of the comment").setRequired(true)
                .setExampleValue("392160d3-a4f2-4c52-a565-e4542cfa2096");
        action.createParam("text").setDescription("New comment").setExampleValue("blabla2...");
        RailsHandler.addFormatParam(action);
    }

    private static void defineTransitionsAction(NewController controller) {
        WebService.NewAction action = controller.createAction(TRANSITIONS_ACTION)
                .setDescription(
                        "Get Possible Workflow Transitions for an Issue. Requires Browse permission on project")
                .setSince("3.6").setHandler(RailsHandler.INSTANCE)
                .setResponseExample(Resources.getResource(IssuesWs.class, "example-transitions.json"));

        action.createParam("issue").setDescription("Key of the issue").setRequired(true)
                .setExampleValue("5bccd6e8-f525-43a2-8d76-fcb13dde79ef");
    }

    private static void defineBulkChangeAction(NewController controller) {
        WebService.NewAction action = controller.createAction(BULK_CHANGE_ACTION)
                .setDescription("Bulk change on issues. Requires authentication and User role on project(s)")
                .setSince("3.7").setHandler(RailsHandler.INSTANCE).setPost(true);

        action.createParam("issues").setDescription("Comma-separated list of issue keys").setRequired(true)
                .setExampleValue("01fc972e-2a3c-433e-bcae-0bd7f88f5123,01fc972e-2a3c-433e-bcae-0bd7f88f9999");
        action.createParam("actions").setDescription(
                "Comma-separated list of actions to perform. Possible values: assign | set_severity | do_transition | plan.<br>"
                        + "In 5.5 action plans are dropped. plan action has no effect.")
                .setRequired(true).setExampleValue("assign,set_severity");
        action.createParam("assign.assignee")
                .setDescription(
                        "To assign the list of issues to a specific user (login), or un-assign all the issues")
                .setExampleValue("john.smith");
        action.createParam("set_severity.severity").setDescription("To change the severity of the list of issues")
                .setExampleValue(Severity.BLOCKER).setPossibleValues(Severity.ALL);
        action.createParam("set_type.type").setDescription("To change the type of the list of issues")
                .setExampleValue(RuleType.BUG).setPossibleValues(RuleType.names()).setSince("5.5");
        action.createParam("plan.plan").setDescription(
                "In 5.5, action plans are dropped. Has no effect. To plan the list of issues to a specific action plan (key), or unlink all the issues from an action plan")
                .setDeprecatedSince("5.5").setExampleValue("3f19de90-1521-4482-a737-a311758ff513");
        action.createParam("do_transition.transition").setDescription("Transition").setExampleValue("reopen")
                .setPossibleValues(DefaultTransitions.ALL);
        action.createParam("comment").setDescription("To add a comment to a list of issues")
                .setExampleValue("Here is my comment");
        action.createParam("sendNotifications").setDescription("Available since version 4.0")
                .setDefaultValue("false").setPossibleValues("true", "false");
        RailsHandler.addFormatParam(action);
    }

}