From 70b1e1b1539913ff0e5ee8085736419e54eebade Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Mon, 2 Nov 2015 15:57:50 +0100 Subject: [PATCH] SONAR-6916 Improve documentation by adding mandatory information on WS --- .../server/activity/ws/SearchAction.java | 1 + .../java/org/sonar/server/batch/BatchWs.java | 13 +- .../org/sonar/server/batch/GlobalAction.java | 1 + .../org/sonar/server/batch/IssuesAction.java | 1 + .../org/sonar/server/batch/ProjectAction.java | 6 +- .../org/sonar/server/batch/UsersAction.java | 7 +- .../sonar/server/component/ws/AppAction.java | 16 +- .../sonar/server/component/ws/EventsWs.java | 3 +- .../ws/SearchViewComponentsAction.java | 1 + .../server/computation/ws/IsQueueEmptyWs.java | 2 + .../server/computation/ws/LogsWsAction.java | 1 + .../sonar/server/config/ws/PropertiesWs.java | 3 +- .../sonar/server/dashboard/ws/ShowAction.java | 10 +- .../sonar/server/issue/filter/AppAction.java | 4 +- .../server/issue/filter/FavoritesAction.java | 1 + .../sonar/server/language/ws/ListAction.java | 31 +- .../sonar/server/metric/ws/SearchAction.java | 1 + .../permission/ws/TemplateUsersAction.java | 2 +- .../platformlevel/PlatformLevel4.java | 4 +- .../platformlevel/PlatformLevelSafeMode.java | 4 +- .../platform/ws/ChangeLogLevelAction.java | 1 + .../org/sonar/server/platform/ws/L10nWs.java | 2 + .../sonar/server/platform/ws/LogsAction.java | 1 + .../server/platform/ws/UpgradesAction.java | 1 + .../server/plugins/ws/CancelAllAction.java | 1 + .../server/plugins/ws/InstallAction.java | 3 +- .../server/plugins/ws/UninstallAction.java | 1 + .../sonar/server/plugins/ws/UpdateAction.java | 8 +- .../server/qualitygate/ws/AppAction.java | 4 +- .../server/qualitygate/ws/RenameAction.java | 1 + .../qualityprofile/ws/BackupAction.java | 9 +- .../qualityprofile/ws/ExportAction.java | 22 +- .../org/sonar/server/rule/ws/AppAction.java | 20 +- .../org/sonar/server/rule/ws/ListAction.java | 2 +- .../server/rule/ws/RepositoriesAction.java | 53 +- .../sonar/server/user/ws/CurrentAction.java | 3 +- .../org/sonar/server/user/ws/FavoritesWs.java | 3 +- .../server/user/ws/UserPropertiesWs.java | 3 +- .../server/usergroups/ws/UsersAction.java | 4 +- .../ws/{ListingWs.java => WebServicesWs.java} | 4 +- .../java/org/sonar/server/ws/WsUtils.java | 3 +- .../server/activity/ws/search-example.json | 144 +++++ .../sonar/server/batch/batch-file-example.txt | 1 + .../batch-index-example.txt} | 0 .../sonar/server/batch/global-example.json | 110 ++++ .../sonar/server/batch/issues-example.proto | 17 + .../sonar/server/batch/project-example.json | 93 ++++ .../sonar/server/batch/users-example.proto | 5 + .../server/component/ws/app-example.json | 20 + .../component/ws/events-index-example.json | 9 + .../ws/search_view_components-example.json | 35 ++ .../computation/ws/is_queue_empty-example.txt | 1 + .../server/computation/ws/logs-example.log | 84 +++ .../sonar/server/config/ws/index-example.xml | 51 ++ .../server/dashboard/ws/show-example.json | 2 + .../issue/filter/favorites-example.json | 19 + .../platform/ws/l10n-index-example.json | 111 ++++ .../sonar/server/platform/ws/logs-example.log | 105 ++++ .../server/qualitygate/ws/app-example.json | 83 +++ .../qualityprofile/ws/backup-example.xml | 88 ++++ .../qualityprofile/ws/export-example.xml | 19 + .../org/sonar/server/rule/ws/app-example.json | 495 ++++++++++++++++++ .../org/sonar/server/rule/ws/list-example.txt | 12 + .../sonar/server/user/ws/current-example.json | 10 + .../user/ws/favourites-index-example.xml | 18 + .../user/ws/user_properties-index-example.xml | 30 ++ .../server/usergroups/ws/users-example.json | 21 + .../org/sonar/server/ws/list-example.json | 221 ++++++++ .../server/ws/response_example-example.json | 4 + .../server/plugins/ws/PluginsWsTest.java | 7 +- .../server/search/ws/SearchOptionsTest.java | 17 +- .../sonar/server/ws/WebServiceEngineTest.java | 25 +- ...tingWsTest.java => WebServicesWsTest.java} | 27 +- .../list.json | 6 +- .../list_including_internals.json | 10 +- .../metrics_example.json | 0 .../response_example.json | 0 .../server/ws/web-service-engine-test.txt | 0 .../sonar/server/ws/web-services-ws-test.txt | 0 .../org/sonar/api/server/ws/RequestTest.java | 7 +- 80 files changed, 2022 insertions(+), 146 deletions(-) rename server/sonar-server/src/main/java/org/sonar/server/ws/{ListingWs.java => WebServicesWs.java} (97%) create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/activity/ws/search-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/batch/batch-file-example.txt rename server/sonar-server/src/main/resources/org/sonar/server/{plugins/example-batch-index.txt => batch/batch-index-example.txt} (100%) create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/batch/global-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/batch/issues-example.proto create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/batch/project-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/component/ws/app-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/component/ws/events-index-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/component/ws/search_view_components-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/computation/ws/is_queue_empty-example.txt create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/computation/ws/logs-example.log create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/config/ws/index-example.xml create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/dashboard/ws/show-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/issue/filter/favorites-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/platform/ws/l10n-index-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/platform/ws/logs-example.log create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/qualitygate/ws/app-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/backup-example.xml create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/export-example.xml create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/rule/ws/app-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/rule/ws/list-example.txt create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/user/ws/current-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/user/ws/favourites-index-example.xml create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/user/ws/user_properties-index-example.xml create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/usergroups/ws/users-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/ws/list-example.json create mode 100644 server/sonar-server/src/main/resources/org/sonar/server/ws/response_example-example.json rename server/sonar-server/src/test/java/org/sonar/server/ws/{ListingWsTest.java => WebServicesWsTest.java} (83%) rename server/sonar-server/src/test/resources/org/sonar/server/ws/{ListingWsTest => WebServicesWsTest}/list.json (95%) rename server/sonar-server/src/test/resources/org/sonar/server/ws/{ListingWsTest => WebServicesWsTest}/list_including_internals.json (92%) rename server/sonar-server/src/test/resources/org/sonar/server/ws/{ListingWsTest => WebServicesWsTest}/metrics_example.json (100%) rename server/sonar-server/src/test/resources/org/sonar/server/ws/{ListingWsTest => WebServicesWsTest}/response_example.json (100%) create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/ws/web-service-engine-test.txt create mode 100644 server/sonar-server/src/test/resources/org/sonar/server/ws/web-services-ws-test.txt diff --git a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java index 1600f943c5c..e57c94aea74 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java @@ -53,6 +53,7 @@ public class SearchAction implements RequestHandler { .createAction(SEARCH_ACTION) .setDescription("Search for activities") .setSince("4.4") + .setResponseExample(getClass().getResource("search-example.json")) .setInternal(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWs.java b/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWs.java index df6a4bccbb8..35a29a01264 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/BatchWs.java @@ -19,6 +19,7 @@ */ package org.sonar.server.batch; +import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.sonar.api.server.ws.Request; @@ -26,8 +27,6 @@ import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; -import java.io.IOException; - public class BatchWs implements WebService { public static final String API_ENDPOINT = "batch"; @@ -58,6 +57,7 @@ public class BatchWs implements WebService { private void defineIndexAction(NewController controller) { controller.createAction("index") .setInternal(true) + .setSince("4.4") .setDescription("List the JAR files to be downloaded by source analyzer") .setHandler(new RequestHandler() { @Override @@ -70,13 +70,15 @@ public class BatchWs implements WebService { } } }) - .setResponseExample(getClass().getResource("example-batch-index.txt")); + .setResponseExample(getClass().getResource("batch-index-example.txt")); } private void defineFileAction(NewController controller) { - controller.createAction("file") + NewAction action = controller.createAction("file") .setInternal(true) + .setSince("4.4") .setDescription("Download a JAR file required by source analyzer") + .setResponseExample(getClass().getResource("batch-file-example.txt")) .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -88,7 +90,8 @@ public class BatchWs implements WebService { throw new IllegalStateException(e); } } - }) + }); + action .createParam("name") .setDescription("File name") .setExampleValue("batch-library-2.3.jar"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalAction.java index f528f93ac44..13c7022dc3e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalAction.java @@ -52,6 +52,7 @@ public class GlobalAction implements BatchWsAction { public void define(WebService.NewController controller) { controller.createAction("global") .setDescription("Return metrics and global properties") + .setResponseExample(getClass().getResource("global-example.json")) .setSince("4.5") .setInternal(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java index 6e3042a4d93..f829c62a033 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java @@ -63,6 +63,7 @@ public class IssuesAction implements BatchWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("issues") .setDescription("Return open issues") + .setResponseExample(getClass().getResource("issues-example.proto")) .setSince("5.1") .setInternal(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectAction.java index eaf3de9186b..339288b27e3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectAction.java @@ -20,18 +20,17 @@ package org.sonar.server.batch; -import org.sonarqube.ws.WsBatch.WsProjectResponse.FileData.Builder; - import java.util.Date; import java.util.HashMap; import java.util.Map; - import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.batch.protocol.input.FileData; import org.sonar.batch.protocol.input.ProjectRepositories; import org.sonarqube.ws.WsBatch.WsProjectResponse; +import org.sonarqube.ws.WsBatch.WsProjectResponse.FileData.Builder; + import static org.sonar.server.ws.WsUtils.writeProtobuf; public class ProjectAction implements BatchWsAction { @@ -50,6 +49,7 @@ public class ProjectAction implements BatchWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("project") .setDescription("Return project repository") + .setResponseExample(getClass().getResource("project-example.json")) .setSince("4.5") .setInternal(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java index a4ecc638736..ad3e1c53114 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java @@ -51,6 +51,7 @@ public class UsersAction implements BatchWsAction { WebService.NewAction action = controller.createAction("users") .setDescription("Return user details.") .setSince("5.2") + .setResponseExample(getClass().getResource("users-example.proto")) .setInternal(true) .setHandler(this); @@ -78,8 +79,10 @@ public class UsersAction implements BatchWsAction { } } - private void handleUser(UserDoc user, BatchInput.User.Builder userBuilder, OutputStream out) { - userBuilder.setLogin(user.login()) + private static void handleUser(UserDoc user, BatchInput.User.Builder userBuilder, OutputStream out) { + userBuilder + .clear() + .setLogin(user.login()) .setName(user.name()); try { userBuilder.build().writeDelimitedTo(out); diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/AppAction.java index d81a4411113..c500cbdc738 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/AppAction.java @@ -47,6 +47,7 @@ import org.sonar.server.user.UserSession; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; +import static org.sonar.core.util.Uuids.UUID_EXAMPLE_01; public class AppAction implements RequestHandler { @@ -75,6 +76,7 @@ public class AppAction implements RequestHandler { void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("app") .setDescription("Coverage data required for rendering the component viewer") + .setResponseExample(getClass().getResource("app-example.json")) .setSince("4.4") .setInternal(true) .setHandler(this); @@ -82,8 +84,8 @@ public class AppAction implements RequestHandler { action .createParam(PARAM_UUID) .setRequired(true) - .setDescription("Component UUID") - .setExampleValue("d6d9e1e5-5e13-44fa-ab82-3ec29efa8935"); + .setDescription("Component ID") + .setExampleValue(UUID_EXAMPLE_01); action .createParam(PARAM_PERIOD) @@ -118,12 +120,12 @@ public class AppAction implements RequestHandler { private void appendComponent(JsonWriter json, ComponentDto component, UserSession userSession, DbSession session) { List propertyDtos = dbClient.propertiesDao().selectByQuery(PropertyQuery.builder() - .setKey("favourite") - .setComponentId(component.getId()) - .setUserId(userSession.getUserId()) - .build(), + .setKey("favourite") + .setComponentId(component.getId()) + .setUserId(userSession.getUserId()) + .build(), session - ); + ); boolean isFavourite = propertyDtos.size() == 1; json.prop("key", component.key()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/EventsWs.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/EventsWs.java index f6e2501c5a1..05284cea3e1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/EventsWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/EventsWs.java @@ -36,9 +36,10 @@ public class EventsWs implements WebService { controller.done(); } - private static void defineIndexAction(NewController controller) { + private void defineIndexAction(NewController controller) { controller.createAction("index") .setDescription("Documentation of this web service is available here") + .setResponseExample(getClass().getResource("events-index-example.json")) .setSince("2.6") .setHandler(RailsHandler.INSTANCE); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchViewComponentsAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchViewComponentsAction.java index 7474b2bf9e6..ca5fe49c506 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchViewComponentsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchViewComponentsAction.java @@ -63,6 +63,7 @@ public class SearchViewComponentsAction implements RequestHandler { void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("search_view_components") .setDescription("Search for components. Currently limited to projects in a view or a sub-view") + .setResponseExample(getClass().getResource("search_view_components-example.json")) .setSince("5.1") .setInternal(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/IsQueueEmptyWs.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/IsQueueEmptyWs.java index 5856e0f7fd5..624b6e3472e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/IsQueueEmptyWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/IsQueueEmptyWs.java @@ -60,6 +60,8 @@ public class IsQueueEmptyWs implements WebService { controller .createAction("is_queue_empty") .setDescription("Check if the queue of Compute Engine is empty") + .setResponseExample(getClass().getResource("is_queue_empty-example.txt")) + .setSince("5.1") .setInternal(true) .setHandler(this); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/LogsWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/LogsWsAction.java index f3fc4cc302f..7c9b2bd4d72 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/LogsWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/LogsWsAction.java @@ -60,6 +60,7 @@ public class LogsWsAction implements CeWsAction { WebService.NewAction action = controller.createAction(ACTION) .setDescription("Logs of a task. Format of response is plain text. HTTP code 404 is returned if the task does not " + "exist or if logs are not available. Requires system administration permission.") + .setResponseExample(getClass().getResource("logs-example.log")) .setInternal(true) .setSince("5.2") .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/config/ws/PropertiesWs.java b/server/sonar-server/src/main/java/org/sonar/server/config/ws/PropertiesWs.java index d1cfe313845..3b022901725 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/config/ws/PropertiesWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/config/ws/PropertiesWs.java @@ -36,9 +36,10 @@ public class PropertiesWs implements WebService { controller.done(); } - private static void defineIndexAction(NewController controller) { + private void defineIndexAction(NewController controller) { controller.createAction("index") .setDescription("Documentation of this web service is available here") + .setResponseExample(getClass().getResource("index-example.xml")) .setSince("2.6") .setHandler(RailsHandler.INSTANCE); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/ShowAction.java index 0e68a12e43d..d1304da5776 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/ShowAction.java @@ -48,10 +48,12 @@ public class ShowAction implements DashboardsWsAction { @Override public void define(WebService.NewController newController) { - WebService.NewAction action = newController.createAction("show"); - action.setDescription("Detail of a dashboard (name, description, layout and widgets)"); - action.setInternal(true); - action.setHandler(this); + WebService.NewAction action = newController.createAction("show") + .setDescription("Detail of a dashboard (name, description, layout and widgets)") + .setInternal(true) + .setSince("5.0") + .setResponseExample(getClass().getResource("show-example.json")) + .setHandler(this); action.createParam(PARAM_KEY) .setDescription("Dashboard key") .setExampleValue("12345") diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java index bf5684b918e..e3e475932ea 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java @@ -20,7 +20,6 @@ package org.sonar.server.issue.filter; -import com.google.common.io.Resources; import java.util.List; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -46,9 +45,10 @@ public class AppAction implements IssueFilterWsAction { WebService.NewAction action = controller.createAction("app"); action .setDescription("Data required for rendering the page 'Issues'") + .setSince("4.2") .setInternal(true) .setHandler(this) - .setResponseExample(Resources.getResource(this.getClass(), "example-app.json")); + .setResponseExample(getClass().getResource("example-app.json")); action .createParam("id") .setDescription("Optionally, the ID of the current filter"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java index baa23775e27..c7c0a9b9184 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java @@ -42,6 +42,7 @@ public class FavoritesAction implements IssueFilterWsAction { WebService.NewAction action = controller.createAction("favorites"); action .setDescription("The issue filters marked as favorite by request user") + .setResponseExample(getClass().getResource("favorites-example.json")) .setSince("4.2") .setHandler(this); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/language/ws/ListAction.java b/server/sonar-server/src/main/java/org/sonar/server/language/ws/ListAction.java index d8c80e868fe..3f179510304 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/language/ws/ListAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/language/ws/ListAction.java @@ -63,6 +63,22 @@ public class ListAction implements RequestHandler { json.endArray().endObject().close(); } + void define(WebService.NewController controller) { + NewAction action = controller.createAction("list") + .setDescription("List supported programming languages") + .setSince("5.1") + .setHandler(this) + .setResponseExample(Resources.getResource(getClass(), "example-list.json")); + + action.createParam(Param.TEXT_QUERY) + .setDescription("A pattern to match language keys/names against") + .setExampleValue("java"); + action.createParam("ps") + .setDescription("The size of the list to return, 0 for all languages") + .setExampleValue("25") + .setDefaultValue("0"); + } + private Collection listMatchingLanguages(@Nullable String query, int pageSize) { Pattern pattern = Pattern.compile(query == null ? MATCH_ALL : MATCH_ALL + query + MATCH_ALL, Pattern.CASE_INSENSITIVE); @@ -79,19 +95,4 @@ public class ListAction implements RequestHandler { return result; } - void define(WebService.NewController controller) { - NewAction action = controller.createAction("list") - .setDescription("List supported programming languages") - .setHandler(this) - .setResponseExample(Resources.getResource(getClass(), "example-list.json")); - - action.createParam(Param.TEXT_QUERY) - .setDescription("A pattern to match language keys/names against") - .setExampleValue("java"); - action.createParam("ps") - .setDescription("The size of the list to return, 0 for all languages") - .setExampleValue("25") - .setDefaultValue("0"); - } - } diff --git a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/SearchAction.java index 83f174a272e..118230d5fa1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/metric/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/metric/ws/SearchAction.java @@ -69,6 +69,7 @@ public class SearchAction implements MetricsWsAction { public void define(WebService.NewController context) { WebService.NewAction action = context.createAction(ACTION) .setSince("5.2") + .setDescription("Search for metrics") .setResponseExample(getClass().getResource("example-search.json")) .addPagingParams(100) .addFieldsParam(OPTIONAL_FIELDS) diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/TemplateUsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/TemplateUsersAction.java index 936482b9976..9482612d499 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/ws/TemplateUsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/ws/TemplateUsersAction.java @@ -70,7 +70,7 @@ public class TemplateUsersAction implements PermissionsWsAction { .addSearchQuery("stas", "names") .addSelectionModeParam() .setInternal(true) - .setResponseExample(getClass().getResource("template-users-example.json")) + .setResponseExample(getClass().getResource("template_users-example.json")) .setHandler(this); createProjectPermissionParameter(action); diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java index b39c1b69986..1d2349b3991 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java @@ -308,7 +308,7 @@ import org.sonar.server.view.bridge.ViewsStopper; import org.sonar.server.view.index.ViewIndex; import org.sonar.server.view.index.ViewIndexDefinition; import org.sonar.server.view.index.ViewIndexer; -import org.sonar.server.ws.ListingWs; +import org.sonar.server.ws.WebServicesWs; import org.sonar.server.ws.WebServiceEngine; import org.sonar.server.ws.WsResponseCommonFormat; @@ -512,7 +512,7 @@ public class PlatformLevel4 extends PlatformLevel { // web services WebServiceEngine.class, - ListingWs.class, + WebServicesWs.class, // localization L10nWs.class, diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java index 190436d17f5..27895fba6fa 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java @@ -23,7 +23,7 @@ import org.sonar.server.platform.ws.DbMigrationStatusAction; import org.sonar.server.platform.ws.MigrateDbAction; import org.sonar.server.platform.ws.StatusAction; import org.sonar.server.platform.ws.SystemWs; -import org.sonar.server.ws.ListingWs; +import org.sonar.server.ws.WebServicesWs; import org.sonar.server.ws.WebServiceEngine; public class PlatformLevelSafeMode extends PlatformLevel { @@ -41,7 +41,7 @@ public class PlatformLevelSafeMode extends PlatformLevel { SystemWs.class, // Listing WS - ListingWs.class, + WebServicesWs.class, // WS engine WebServiceEngine.class); diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/ChangeLogLevelAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/ChangeLogLevelAction.java index 00bfc9c768e..f89649a8575 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/ChangeLogLevelAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/ChangeLogLevelAction.java @@ -48,6 +48,7 @@ public class ChangeLogLevelAction implements SystemWsAction { .setDescription("Temporarily changes level of logs. New level is not persistent and is lost " + "when restarting server. Requires system administration permission.") .setSince("5.2") + .setPost(true) .setHandler(this); newAction.createParam(PARAM_LEVEL) diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java index 805e319f5e9..94f744d9c24 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java @@ -53,6 +53,8 @@ public class L10nWs implements WebService { NewAction indexAction = l10n.createAction("index") .setInternal(true) .setDescription("Get all localization messages for a given locale") + .setResponseExample(getClass().getResource("l10n-index-example.json")) + .setSince("4.4") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) throws Exception { diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/LogsAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/LogsAction.java index bc76ea9a5cd..6539c0870c2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/LogsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/LogsAction.java @@ -43,6 +43,7 @@ public class LogsAction implements SystemWsAction { public void define(WebService.NewController controller) { controller.createAction("logs") .setDescription("System logs in plain-text format. Requires system administration permission.") + .setResponseExample(getClass().getResource("logs-example.log")) .setSince("5.2") .setHandler(this); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/UpgradesAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/UpgradesAction.java index 4a77e6a6d26..281a5ede077 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/UpgradesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/UpgradesAction.java @@ -67,6 +67,7 @@ public class UpgradesAction implements SystemWsAction { "
" + "Plugin information is retrieved from Update Center. Date and time at which Update Center was last refreshed " + "is provided in the response.") + .setSince("5.2") .setHandler(this) .setResponseExample(Resources.getResource(this.getClass(), "example-upgrades_plugins.json")); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllAction.java index 2d10ce1070c..e8901250380 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllAction.java @@ -43,6 +43,7 @@ public class CancelAllAction implements PluginsWsAction { public void define(WebService.NewController controller) { controller.createAction("cancel_all") .setPost(true) + .setSince("5.2") .setDescription("Cancels any operation pending on any plugin (install, update or uninstall)" + "
" + "Requires user to be authenticated with Administer System permissions") diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallAction.java index 32aab6c6279..c9b0452b37d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallAction.java @@ -58,6 +58,7 @@ public class InstallAction implements PluginsWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("install") .setPost(true) + .setSince("5.2") .setDescription("Installs the latest version of a plugin specified by its key." + "
" + "Plugin information is retrieved from Update Center." + @@ -83,7 +84,7 @@ public class InstallAction implements PluginsWsAction { Optional updateCenter = updateCenterFactory.getUpdateCenter(false); if (updateCenter.isPresent()) { - pluginUpdate= Iterables.find( + pluginUpdate = Iterables.find( updateCenter.get().findAvailablePlugins(), hasKey(key), MISSING_PLUGIN); diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallAction.java index 5e465fc2a89..0ebc3e79b2a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallAction.java @@ -46,6 +46,7 @@ public class UninstallAction implements PluginsWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("uninstall") .setPost(true) + .setSince("5.2") .setDescription("Uninstalls the plugin specified by its key." + "
" + "Requires user to be authenticated with Administer System permissions.") diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdateAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdateAction.java index 24473e9ed95..91dfb0c7c98 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdateAction.java @@ -22,6 +22,8 @@ package org.sonar.server.plugins.ws; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -30,9 +32,6 @@ import org.sonar.server.plugins.PluginDownloader; import org.sonar.server.plugins.UpdateCenterMatrixFactory; import org.sonar.server.user.UserSession; import org.sonar.updatecenter.common.PluginUpdate; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import org.sonar.updatecenter.common.UpdateCenter; import static java.lang.String.format; @@ -59,6 +58,7 @@ public class UpdateAction implements PluginsWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("update") .setPost(true) + .setSince("5.2") .setDescription("Updates a plugin specified by its key to the latest version compatible with the SonarQube instance." + "
" + "Plugin information is retrieved from Update Center." + @@ -90,7 +90,7 @@ public class UpdateAction implements PluginsWsAction { updateCenter.get().findPluginUpdates(), new PluginKeyPredicate(key), MISSING_PLUGIN - ); + ); } if (pluginUpdate == MISSING_PLUGIN) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/AppAction.java index a0e0c409003..fcb130fa530 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/AppAction.java @@ -19,6 +19,7 @@ */ package org.sonar.server.qualitygate.ws; +import java.util.Locale; import org.apache.commons.lang.BooleanUtils; import org.sonar.api.i18n.I18n; import org.sonar.api.measures.Metric; @@ -29,8 +30,6 @@ import org.sonar.api.utils.text.JsonWriter; import org.sonar.core.timemachine.Periods; import org.sonar.server.qualitygate.QualityGates; -import java.util.Locale; - public class AppAction implements QGateWsAction { private final QualityGates qualityGates; @@ -50,6 +49,7 @@ public class AppAction implements QGateWsAction { controller.createAction("app") .setInternal(true) .setDescription("Get initialization items for the admin UI. For internal use") + .setResponseExample(getClass().getResource("app-example.json")) .setSince("4.3") .setHandler(this); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java index 68a4bbcbdd6..1176fcc5366 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/RenameAction.java @@ -39,6 +39,7 @@ public class RenameAction implements QGateWsAction { public void define(WebService.NewController controller) { WebService.NewAction action = controller.createAction("rename") .setDescription("Rename a Quality Gate. Require Administer Quality Profiles and Gates permission") + .setSince("4.3") .setPost(true) .setHandler(this); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java index ebeff3fa87d..40720fac50e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BackupAction.java @@ -28,8 +28,8 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response.Stream; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; -import org.sonar.db.DbSession; import org.sonar.db.DbClient; +import org.sonar.db.DbSession; import org.sonar.server.plugins.MimeTypes; import org.sonar.server.qualityprofile.QProfileBackuper; import org.sonar.server.qualityprofile.QProfileFactory; @@ -56,6 +56,7 @@ public class BackupAction implements QProfileWsAction { NewAction backup = controller.createAction("backup") .setSince("5.2") .setDescription("Backup a quality profile in XML form. The exported profile can be restored through api/qualityprofiles/restore.") + .setResponseExample(getClass().getResource("backup-example.xml")) .setHandler(this); QProfileIdentificationParamUtils.defineProfileParams(backup, languages); @@ -66,13 +67,13 @@ public class BackupAction implements QProfileWsAction { Stream stream = response.stream(); stream.setMediaType(MimeTypes.XML); OutputStreamWriter writer = new OutputStreamWriter(stream.output(), StandardCharsets.UTF_8); - DbSession session = dbClient.openSession(false); + DbSession dbSession = dbClient.openSession(false); try { - String profileKey = QProfileIdentificationParamUtils.getProfileKeyFromParameters(request, profileFactory, session); + String profileKey = QProfileIdentificationParamUtils.getProfileKeyFromParameters(request, profileFactory, dbSession); backuper.backup(profileKey, writer); response.setHeader("Content-Disposition", String.format("attachment; filename=%s.xml", profileKey)); } finally { - session.close(); + dbSession.close(); IOUtils.closeQuietly(writer); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java index 0c1b6093141..9c232d39295 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ExportAction.java @@ -20,6 +20,11 @@ package org.sonar.server.qualityprofile.ws; import com.google.common.collect.Lists; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.util.List; import org.apache.commons.io.IOUtils; import org.sonar.api.profiles.ProfileExporter; import org.sonar.api.resources.Language; @@ -29,21 +34,15 @@ import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.Response.Stream; import org.sonar.api.server.ws.WebService; import org.sonar.api.server.ws.WebService.NewAction; +import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.qualityprofile.QualityProfileDto; -import org.sonar.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.plugins.MimeTypes; import org.sonar.server.qualityprofile.QProfileBackuper; import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileFactory; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.nio.charset.StandardCharsets; -import java.util.List; - public class ExportAction implements QProfileWsAction { private static final String PARAM_PROFILE_NAME = "name"; @@ -70,16 +69,17 @@ public class ExportAction implements QProfileWsAction { @Override public void define(WebService.NewController controller) { - NewAction create = controller.createAction("export") + NewAction action = controller.createAction("export") .setSince("5.2") .setDescription("Export a quality profile.") + .setResponseExample(getClass().getResource("export-example.xml")) .setHandler(this); - create.createParam(PARAM_PROFILE_NAME) + action.createParam(PARAM_PROFILE_NAME) .setDescription("The name of the quality profile to export. If left empty, will export the default profile for the language.") .setExampleValue("My Sonar way"); - create.createParam(PARAM_LANGUAGE) + action.createParam(PARAM_LANGUAGE) .setDescription("The language for the quality profile.") .setExampleValue(LanguageParamUtils.getExampleValue(languages)) .setPossibleValues(LanguageParamUtils.getLanguageKeys(languages)) @@ -92,7 +92,7 @@ public class ExportAction implements QProfileWsAction { } } if (!exporterKeys.isEmpty()) { - create.createParam(PARAM_FORMAT) + action.createParam(PARAM_FORMAT) .setDescription("Output format. If left empty, the same format as api/qualityprofiles/backup is used. " + "Possible values are described by api/qualityprofiles/exporters.") .setPossibleValues(exporterKeys); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java index 42eacf8d337..6b5a582a2bd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java @@ -58,7 +58,7 @@ public class AppAction implements RulesWsAction { private final UserSession userSession; public AppAction(Languages languages, RuleRepositories ruleRepositories, I18n i18n, - DebtModel debtModel, QProfileLoader profileLoader, UserSession userSession) { + DebtModel debtModel, QProfileLoader profileLoader, UserSession userSession) { this.languages = languages; this.ruleRepositories = ruleRepositories; this.i18n = i18n; @@ -67,6 +67,16 @@ public class AppAction implements RulesWsAction { this.userSession = userSession; } + @Override + public void define(WebService.NewController controller) { + controller.createAction("app") + .setDescription("Data required for rendering the page 'Coding Rules'") + .setResponseExample(getClass().getResource("app-example.json")) + .setSince("4.5") + .setInternal(true) + .setHandler(this); + } + @Override public void handle(Request request, Response response) throws Exception { JsonWriter json = response.newJsonWriter(); @@ -191,12 +201,4 @@ public class AppAction implements RulesWsAction { }); return subCaracs; } - - @Override - public void define(WebService.NewController controller) { - controller.createAction("app") - .setDescription("Data required for rendering the page 'Coding Rules'") - .setInternal(true) - .setHandler(this); - } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ListAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ListAction.java index ffef9a8e601..bca5b6fa86b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ListAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/ListAction.java @@ -19,7 +19,6 @@ */ package org.sonar.server.rule.ws; -import com.google.common.base.Strings; import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; import org.sonar.api.server.ws.Request; @@ -48,6 +47,7 @@ public class ListAction implements RulesWsAction { .setDescription("List of rules, excluding the manual rules and the rules with status REMOVED. JSON format is not supported for response.") .setSince("5.2") .setInternal(true) + .setResponseExample(getClass().getResource("list-example.txt")) .setHandler(this); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RepositoriesAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RepositoriesAction.java index 60a3e4a0d3f..b5487e57c49 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RepositoriesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RepositoriesAction.java @@ -22,6 +22,11 @@ package org.sonar.server.rule.ws; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.io.Resources; +import java.util.Collection; +import java.util.List; +import java.util.SortedMap; +import java.util.regex.Pattern; +import javax.annotation.Nullable; import org.sonar.api.rule.RuleKey; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -32,13 +37,6 @@ import org.sonar.api.utils.text.JsonWriter; import org.sonar.server.rule.RuleRepositories; import org.sonar.server.rule.RuleRepositories.Repository; -import javax.annotation.Nullable; - -import java.util.Collection; -import java.util.List; -import java.util.SortedMap; -import java.util.regex.Pattern; - /** * @since 5.1 */ @@ -52,6 +50,26 @@ public class RepositoriesAction implements RulesWsAction { this.repositories = repositories; } + @Override + public void define(WebService.NewController controller) { + NewAction action = controller.createAction("repositories") + .setDescription("List available rule repositories") + .setSince("4.5") + .setHandler(this) + .setResponseExample(Resources.getResource(getClass(), "example-repositories.json")); + + action.createParam(Param.TEXT_QUERY) + .setDescription("A pattern to match repository keys/names against") + .setExampleValue("squid"); + action.createParam(LANGUAGE) + .setDescription("A language key; if provided, only repositories for the given language will be returned") + .setExampleValue("java"); + action.createParam("ps") + .setDescription("The size of the list to return, 0 for all repositories") + .setExampleValue("25") + .setDefaultValue("0"); + } + @Override public void handle(Request request, Response response) throws Exception { String query = request.param(Param.TEXT_QUERY); @@ -87,7 +105,7 @@ public class RepositoriesAction implements RulesWsAction { private Collection listRepositories(String languageKey) { List allRepos = Lists.newArrayList(); Collection reposFromPlugins = languageKey == null ? repositories.repositories() : repositories.repositoriesForLang(languageKey); - for (Repository repo: reposFromPlugins) { + for (Repository repo : reposFromPlugins) { allRepos.add(new Repo(repo)); } if (languageKey == null) { @@ -96,25 +114,6 @@ public class RepositoriesAction implements RulesWsAction { return allRepos; } - @Override - public void define(WebService.NewController controller) { - NewAction action = controller.createAction("repositories") - .setDescription("List available rule repositories") - .setHandler(this) - .setResponseExample(Resources.getResource(getClass(), "example-repositories.json")); - - action.createParam(Param.TEXT_QUERY) - .setDescription("A pattern to match repository keys/names against") - .setExampleValue("squid"); - action.createParam(LANGUAGE) - .setDescription("A language key; if provided, only repositories for the given language will be returned") - .setExampleValue("java"); - action.createParam("ps") - .setDescription("The size of the list to return, 0 for all repositories") - .setExampleValue("25") - .setDefaultValue("0"); - } - private static final class Repo { private String key; private String name; diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentAction.java index f3784f06c26..fb2946e3fde 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentAction.java @@ -32,14 +32,13 @@ public class CurrentAction implements UsersWsAction { this.userSession = userSession; } - @Override public void define(NewController context) { context.createAction("current") .setDescription("Get the details of the current authenticated user.") .setHandler(this) .setInternal(true) - .setResponseExample(getClass().getResource("example-current.json")) + .setResponseExample(getClass().getResource("current-example.json")) .setSince("5.2"); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/FavoritesWs.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/FavoritesWs.java index facfd4ec20f..d13510a8766 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/FavoritesWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/FavoritesWs.java @@ -36,9 +36,10 @@ public class FavoritesWs implements WebService { controller.done(); } - private static void defineIndexAction(NewController controller) { + private void defineIndexAction(NewController controller) { controller.createAction("index") .setDescription("Documentation of this web service is available here") + .setResponseExample(getClass().getResource("favourites-index-example.xml")) .setSince("2.6") .setHandler(RailsHandler.INSTANCE); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UserPropertiesWs.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UserPropertiesWs.java index 976f19834e8..3c26f18b7cc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UserPropertiesWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UserPropertiesWs.java @@ -36,10 +36,11 @@ public class UserPropertiesWs implements WebService { controller.done(); } - private static void defineIndexAction(NewController controller) { + private void defineIndexAction(NewController controller) { controller.createAction("index") .setDescription("Documentation of this web service is available here") .setSince("2.6") + .setResponseExample(getClass().getResource("user_properties-index-example.xml")) .setHandler(RailsHandler.INSTANCE); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java index b7c5b7bc63f..2903a385058 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/usergroups/ws/UsersAction.java @@ -43,8 +43,6 @@ import static org.sonar.server.usergroups.ws.UserGroupsWsParameters.createGroupP public class UsersAction implements UserGroupsWsAction { - private static final String PARAM_ID = "id"; - private static final String FIELD_SELECTED = "selected"; private static final String FIELD_NAME = "name"; private static final String FIELD_LOGIN = "login"; @@ -65,7 +63,7 @@ public class UsersAction implements UserGroupsWsAction { .setDescription("Search for users with membership information with respect to a group.") .setHandler(this) .setSince("5.2") - .setResponseExample(getClass().getResource("example-users.json")) + .setResponseExample(getClass().getResource("users-example.json")) .addSelectionModeParam() .addSearchQuery("freddy", "names", "logins") .addPagingParams(25); diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/ListingWs.java b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServicesWs.java similarity index 97% rename from server/sonar-server/src/main/java/org/sonar/server/ws/ListingWs.java rename to server/sonar-server/src/main/java/org/sonar/server/ws/WebServicesWs.java index a9250d2d05a..4e67ce758fe 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/ListingWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServicesWs.java @@ -39,7 +39,7 @@ import java.util.Set; * * @since 4.2 */ -public class ListingWs implements WebService { +public class WebServicesWs implements WebService { @Override public void define(final Context context) { @@ -57,6 +57,7 @@ public class ListingWs implements WebService { .createAction("list") .setSince("4.2") .setDescription("List web services") + .setResponseExample(getClass().getResource("list-example.json")) .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -75,6 +76,7 @@ public class ListingWs implements WebService { NewAction action = controller .createAction("response_example") .setDescription("Display web service response example") + .setResponseExample(getClass().getResource("response_example-example.json")) .setSince("4.4") .setHandler(new RequestHandler() { @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/WsUtils.java b/server/sonar-server/src/main/java/org/sonar/server/ws/WsUtils.java index 3aefb651505..0e0c9c1e515 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/WsUtils.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/WsUtils.java @@ -23,6 +23,7 @@ import com.google.common.base.Optional; import com.google.protobuf.Message; import java.io.OutputStream; import java.io.OutputStreamWriter; +import javax.annotation.Nullable; import org.apache.commons.io.IOUtils; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -70,7 +71,7 @@ public class WsUtils { * @throws NotFoundException if the value if null * @return the value */ - public static T checkFound(T value, String message, Object... messageArguments) { + public static T checkFound(@Nullable T value, String message, Object... messageArguments) { if (value == null) { throw new NotFoundException(format(message, messageArguments)); } diff --git a/server/sonar-server/src/main/resources/org/sonar/server/activity/ws/search-example.json b/server/sonar-server/src/main/resources/org/sonar/server/activity/ws/search-example.json new file mode 100644 index 00000000000..2a67014ef4c --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/activity/ws/search-example.json @@ -0,0 +1,144 @@ +{ + "total": 8817, + "p": 1, + "ps": 10, + "logs": [ + { + "key": "AVC0aUZtVSHMD73TCQ9n", + "type": "QPROFILE", + "action": "UPDATED", + "createdAt": "2015-10-29T17:23:29+0100", + "login": "freddy.mallet", + "details": { + "profileKey": "java-default-with-mojo-conventions-49307", + "severity": "MAJOR", + "param_indentationLevel": "4", + "inheritance": "OVERRIDES", + "ruleKey": "squid:IndentationCheck", + "key": "java-default-with-mojo-conventions-49307:squid:IndentationCheck" + } + }, + { + "key": "AVCUXEw_dBKrKCzZ3xlU", + "type": "QPROFILE", + "action": "ACTIVATED", + "createdAt": "2015-10-23T13:01:28+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-for-sq-only-95381", + "severity": "MAJOR", + "inheritance": "INHERITED", + "ruleKey": "squid:S2293", + "key": "java-for-sq-only-95381:squid:S2293" + } + }, + { + "key": "AVCUXEwEdBKrKCzZ3xlT", + "type": "QPROFILE", + "action": "ACTIVATED", + "createdAt": "2015-10-23T13:01:28+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-for-sq-java-plugin-only-92289", + "severity": "MAJOR", + "inheritance": "INHERITED", + "ruleKey": "squid:S2293", + "key": "java-for-sq-java-plugin-only-92289:squid:S2293" + } + }, + { + "key": "AVCUXEvfdBKrKCzZ3xlS", + "type": "QPROFILE", + "action": "ACTIVATED", + "createdAt": "2015-10-23T13:01:28+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-default-with-sonarsource-conventions-27339", + "severity": "MAJOR", + "inheritance": "INHERITED", + "ruleKey": "squid:S2293", + "key": "java-default-with-sonarsource-conventions-27339:squid:S2293" + } + }, + { + "key": "AVCUXEu6dBKrKCzZ3xlR", + "type": "QPROFILE", + "action": "ACTIVATED", + "createdAt": "2015-10-23T13:01:28+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-default-with-mojo-conventions-49307", + "severity": "MAJOR", + "inheritance": "INHERITED", + "ruleKey": "squid:S2293", + "key": "java-default-with-mojo-conventions-49307:squid:S2293" + } + }, + { + "key": "AVCUXEuDdBKrKCzZ3xlQ", + "type": "QPROFILE", + "action": "ACTIVATED", + "createdAt": "2015-10-23T13:01:28+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-top-profile-without-formatting-conventions-50037", + "severity": "MAJOR", + "ruleKey": "squid:S2293", + "key": "java-top-profile-without-formatting-conventions-50037:squid:S2293" + } + }, + { + "key": "AVCAPjakEHVBDKGwu_o1", + "type": "QPROFILE", + "action": "UPDATED", + "createdAt": "2015-10-19T15:16:12+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-for-sq-only-95381", + "severity": "BLOCKER", + "ruleKey": "squid:S2204", + "key": "java-for-sq-only-95381:squid:S2204" + } + }, + { + "key": "AVCAPjaIEHVBDKGwu_o0", + "type": "QPROFILE", + "action": "UPDATED", + "createdAt": "2015-10-19T15:16:12+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-for-sq-java-plugin-only-92289", + "severity": "BLOCKER", + "ruleKey": "squid:S2204", + "key": "java-for-sq-java-plugin-only-92289:squid:S2204" + } + }, + { + "key": "AVCAPjZsEHVBDKGwu_oz", + "type": "QPROFILE", + "action": "UPDATED", + "createdAt": "2015-10-19T15:16:12+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-default-with-sonarsource-conventions-27339", + "severity": "BLOCKER", + "inheritance": "INHERITED", + "ruleKey": "squid:S2204", + "key": "java-default-with-sonarsource-conventions-27339:squid:S2204" + } + }, + { + "key": "AVCAPgT3EHVBDKGwu_oy", + "type": "QPROFILE", + "action": "UPDATED", + "createdAt": "2015-10-19T15:15:59+0200", + "login": "ann.campbell", + "details": { + "profileKey": "java-for-sq-only-95381", + "severity": "CRITICAL", + "ruleKey": "squid:S2204", + "key": "java-for-sq-only-95381:squid:S2204" + } + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/batch-file-example.txt b/server/sonar-server/src/main/resources/org/sonar/server/batch/batch-file-example.txt new file mode 100644 index 00000000000..335ff55c5e6 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/batch/batch-file-example.txt @@ -0,0 +1 @@ +# returns a JAR file diff --git a/server/sonar-server/src/main/resources/org/sonar/server/plugins/example-batch-index.txt b/server/sonar-server/src/main/resources/org/sonar/server/batch/batch-index-example.txt similarity index 100% rename from server/sonar-server/src/main/resources/org/sonar/server/plugins/example-batch-index.txt rename to server/sonar-server/src/main/resources/org/sonar/server/batch/batch-index-example.txt diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/global-example.json b/server/sonar-server/src/main/resources/org/sonar/server/batch/global-example.json new file mode 100644 index 00000000000..457df48af9e --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/batch/global-example.json @@ -0,0 +1,110 @@ +{ + "timestamp": 0, + "metrics": [ + { + "id": 11, + "key": "accessors", + "valueType": "INT", + "description": "Accessors", + "direction": -1, + "name": "accessors", + "qualitative": false, + "userManaged": false, + "optimizedBestValue": false + }, + { + "id": 93, + "key": "blocker_violations", + "valueType": "INT", + "description": "Blocker issues", + "direction": -1, + "name": "blocker_violations", + "qualitative": true, + "userManaged": false, + "bestValue": 0.0, + "optimizedBestValue": true + }, + { + "id": 45, + "key": "conditions_to_cover", + "valueType": "INT", + "description": "Branches to cover", + "direction": 0, + "name": "conditions_to_cover", + "qualitative": false, + "userManaged": false, + "optimizedBestValue": false + }, + { + "id": 63, + "key": "new_it_conditions_to_cover", + "valueType": "INT", + "description": "Branches to cover by Integration Tests on new code", + "direction": 0, + "name": "new_it_conditions_to_cover", + "qualitative": false, + "userManaged": false, + "optimizedBestValue": false + }, + { + "id": 46, + "key": "new_conditions_to_cover", + "valueType": "INT", + "description": "Branches to cover on new code", + "direction": 0, + "name": "new_conditions_to_cover", + "qualitative": false, + "userManaged": false, + "optimizedBestValue": false + }, + { + "id": 122, + "key": "burned_budget", + "valueType": "FLOAT", + "direction": 0, + "name": "burned_budget", + "qualitative": false, + "userManaged": true, + "optimizedBestValue": false + }, + { + "id": 123, + "key": "business_value", + "valueType": "FLOAT", + "direction": 1, + "name": "business_value", + "qualitative": true, + "userManaged": true, + "optimizedBestValue": false + }, + { + "id": 6, + "key": "classes", + "valueType": "INT", + "description": "Classes", + "direction": -1, + "name": "classes", + "qualitative": false, + "userManaged": false, + "optimizedBestValue": false + }, + { + "id": 23, + "key": "class_complexity", + "valueType": "FLOAT", + "description": "Complexity average by class", + "direction": -1, + "name": "class_complexity", + "qualitative": true, + "userManaged": false, + "optimizedBestValue": false + } + ], + "globalSettings": { + "sonar.permission.template.default": "default_template", + "sonar.core.startTime": "2015-11-02T09:22:09+0100", + "sonar.core.id": "20151102092209", + "sonar.core.version": "5.3-SNAPSHOT", + "sonar.qualitygate": "1" + } +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/issues-example.proto b/server/sonar-server/src/main/resources/org/sonar/server/batch/issues-example.proto new file mode 100644 index 00000000000..f7044b5996a --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/batch/issues-example.proto @@ -0,0 +1,17 @@ +# return a list of the following protocol buffer message, in protocol buffer format +message ServerIssue { + optional string key = 1; + optional string module_key = 2; + optional string path = 3; + optional string rule_repository = 4; + optional string rule_key = 5; + optional int32 line = 6; + optional string msg = 7; + optional Severity severity = 8; + optional bool manual_severity = 9; + optional string resolution = 10; + optional string status = 11; + optional string checksum = 12; + optional string assignee_login = 13; + optional int64 creation_date = 14; +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/project-example.json b/server/sonar-server/src/main/resources/org/sonar/server/batch/project-example.json new file mode 100644 index 00000000000..dd77d81df79 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/batch/project-example.json @@ -0,0 +1,93 @@ +{ + "timestamp": 0, + "settingsByModule": {}, + "fileDataByModuleAndPath": { + "com.sonarsource:java-markdown": { + "src/test/java/com/sonarsource/markdown/impl/RuleBuilderTest.java": { + "hash": "9f70d9796b1a1e26c9c42daa6216c800", + "revision": "d19577972ed43744b7195cd07e1b4a84189b2467" + }, + "src/main/java/com/sonarsource/markdown/impl/ElementImpl.java": { + "hash": "d2428a67a0210374bc1b4ef3b25e95e3", + "revision": "2c661329d8dd7e9ef316c7a64f9c3f9ddf47dcfa" + }, + "src/main/java/com/sonarsource/markdown/mark/MarkHighlighter.java": { + "hash": "2d48ddb5d8428678540aaa30e9cd9548", + "revision": "2e322654616f6eeca3288d8c892ae2cce44cb150" + }, + "src/main/java/com/sonarsource/markdown/sq/WikiParser.java": { + "hash": "06228dad3eabfd685489874b9d8883f0", + "revision": "e04c69dc6fe381a24826f2eb36b084efaa9afd29" + }, + "src/main/java/com/sonarsource/markdown/impl/Rule.java": { + "hash": "8343a712df46aa9ca8fd33b999dda7b4", + "revision": "66dc52d2895d1acec420fd7cd7f3223a141d8d52" + }, + "src/test/java/com/sonarsource/markdown/BasicMarkdownParserTest.java": { + "hash": "d4f474902aaac3eb5e33560ee4f3447d", + "revision": "6a44af3bdfe0af358e7e3b9590713a4442ef58e6" + }, + "src/main/java/com/sonarsource/markdown/GrammarDefinition.java": { + "hash": "d188901c177b1ea068e70e3c5f5f6b5e", + "revision": "66dc52d2895d1acec420fd7cd7f3223a141d8d52" + }, + "src/main/java/com/sonarsource/markdown/mark/RegexMarker.java": { + "hash": "2896fa38d96087645a1e8594242bc065", + "revision": "d19577972ed43744b7195cd07e1b4a84189b2467" + }, + "src/test/java/com/sonarsource/markdown/mark/MarkHighlighterTest.java": { + "hash": "7bc8c30a33fbe1ccf38f264ed7325e6e", + "revision": "6a44af3bdfe0af358e7e3b9590713a4442ef58e6" + }, + "src/main/java/com/sonarsource/markdown/Element.java": { + "hash": "8a833a4d20be893e831b683650a99e5a", + "revision": "3a4fa533c2e86d5ac06e9b65949daebadbc92047" + }, + "src/test/java/com/sonarsource/markdown/sq/HtmlDecoratorTest.java": { + "hash": "ddd7972ff48a25a0b1d5b57cecf8a5cc", + "revision": "523a1c7d2ecc254a7a507d6628ddac18a20007f0" + }, + "src/main/java/com/sonarsource/markdown/mark/MarkType.java": { + "hash": "a8f272ff875d8bf96cf766408c5c454f", + "revision": "d19577972ed43744b7195cd07e1b4a84189b2467" + }, + "src/test/java/com/sonarsource/markdown/sq/WikiParserTest.java": { + "hash": "021a9c285b3bfd67a7a223f3ac9cfc72", + "revision": "e04c69dc6fe381a24826f2eb36b084efaa9afd29" + }, + "src/main/java/com/sonarsource/markdown/mark/Mark.java": { + "hash": "fd184973a581f7079d6289e256cbb5bd", + "revision": "d19577972ed43744b7195cd07e1b4a84189b2467" + }, + "src/test/java/com/sonarsource/markdown/BasicMarkdownParser.java": { + "hash": "c4c37cf5ee85d9d4e96a60a762132dbf", + "revision": "6a44af3bdfe0af358e7e3b9590713a4442ef58e6" + }, + "src/test/java/com/sonarsource/markdown/GrammarDefinitionTest.java": { + "hash": "2d06392b4c799ca724fcfb2ae11aa4f2", + "revision": "66dc52d2895d1acec420fd7cd7f3223a141d8d52" + }, + "src/test/java/com/sonarsource/markdown/impl/ElementImplTest.java": { + "hash": "7aa5b0417b41e5135e8040187f4e127d", + "revision": "2c661329d8dd7e9ef316c7a64f9c3f9ddf47dcfa" + }, + "src/main/java/com/sonarsource/markdown/ElementType.java": { + "hash": "40804b3caf9904305d76a427d960375c", + "revision": "3a4fa533c2e86d5ac06e9b65949daebadbc92047" + }, + "src/main/java/com/sonarsource/markdown/Parser.java": { + "hash": "37b30f06a722dcb4d50ba8866fe03297", + "revision": "be1b9560ba222bad3b7b60005e9ef38367698f7c" + }, + "src/main/java/com/sonarsource/markdown/impl/RuleBuilder.java": { + "hash": "67628d2b89b992166d0d53be4b34f7c9", + "revision": "66dc52d2895d1acec420fd7cd7f3223a141d8d52" + }, + "src/main/java/com/sonarsource/markdown/sq/HtmlGenerator.java": { + "hash": "a62b77159742e7744967eaa275efbe07", + "revision": "523a1c7d2ecc254a7a507d6628ddac18a20007f0" + } + } + }, + "lastAnalysisDate": 1446456356262 +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto b/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto new file mode 100644 index 00000000000..6b32317db5a --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/batch/users-example.proto @@ -0,0 +1,5 @@ +# Response is a list of protocol buffer message User +message User { + optional string login = 1; + optional string name = 2; +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/component/ws/app-example.json b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/app-example.json new file mode 100644 index 00000000000..8863fa6535d --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/app-example.json @@ -0,0 +1,20 @@ +{ + "key": "com.sonarsource:java-markdown", + "uuid": "AVDHg9NzLPOCEbN7mM57", + "name": "Java Markdown", + "longName": "Java Markdown", + "q": "TRK", + "project": "com.sonarsource:java-markdown", + "projectName": "Java Markdown", + "fav": false, + "canMarkAsFavourite": true, + "canCreateManualIssue": true, + "measures": { + "lines": "786", + "duplicationDensity": "0.0%", + "issues": "36", + "debt": "5h 37min", + "sqaleRating": "A", + "debtRatio": "1.8%" + } +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/component/ws/events-index-example.json b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/events-index-example.json new file mode 100644 index 00000000000..573397d36aa --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/events-index-example.json @@ -0,0 +1,9 @@ +[ + { + "id": "573318", + "rk": "org.codehaus.sonar:sonar", + "n": "3.3-SNAPSHOT", + "c": "Version", + "dt": "2012-10-05T22:15:38+0000" + } +] diff --git a/server/sonar-server/src/main/resources/org/sonar/server/component/ws/search_view_components-example.json b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/search_view_components-example.json new file mode 100644 index 00000000000..0dc7a3d0330 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/component/ws/search_view_components-example.json @@ -0,0 +1,35 @@ +{ + "total": 7, + "p": 1, + "ps": 10, + "components": [ + { + "uuid": "e638eb68-1f30-4c9e-ae07-c45741f5d4ce", + "name": "AssertJ - Fluent assertions for java unit testing" + }, + { + "uuid": "271d3ba4-5881-4f9c-80df-601f162d55c1", + "name": "Java Concurrency Stress Tests: Parent" + }, + { + "uuid": "3224e429-6693-4a0c-9c5e-9eb73064ac27", + "name": "Java Microbenchmark Harness Parent" + }, + { + "uuid": "166c61d2-420e-489f-a2c1-8a6b71a1db34", + "name": "SonarQube Java" + }, + { + "uuid": "54fb08be-5cfc-482a-b977-56c306011800", + "name": "JavaScript" + }, + { + "uuid": "36025b5c-8654-4620-9e32-aa9b60d38016", + "name": "SonarQube Java Properties Plugin" + }, + { + "uuid": "AVBx-FSivhIeFA9E82uf", + "name": "Google Cloud Dataflow Java SDK - Parent" + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/is_queue_empty-example.txt b/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/is_queue_empty-example.txt new file mode 100644 index 00000000000..27ba77ddaf6 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/is_queue_empty-example.txt @@ -0,0 +1 @@ +true diff --git a/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/logs-example.log b/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/logs-example.log new file mode 100644 index 00000000000..054509ae856 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/computation/ws/logs-example.log @@ -0,0 +1,84 @@ +2015.11.02 10:25:16 INFO [o.s.s.c.t.CeWorkerRunnableImpl] Execute task | project=com.sonarsource:java-markdown | id=AVDHg9OnLPOCEbN7mM58 +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExtractReportStep] Analysis report extracted | compressedSize=63 KB +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Extract report | time=75ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] SonarQube plugins: +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - Git 1.0 (scmgit) +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - SVN 1.2 (scmsvn) +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - Java 3.6 (java) +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] Settings for module: com.sonarsource:java-markdown +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.binaries=/Users/teryk/Projects/java-markdown/target/classes +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.core.id=20151102092209 +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.core.startTime=2015-11-02T09:22:09+0100 +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.core.version=5.3-SNAPSHOT +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.host.url=http://localhost:9000 +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.java.binaries=/Users/teryk/Projects/java-markdown/target/classes +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.java.libraries=/Users/teryk/.m2/repository/org/easytesting/fest-assert/1.4/fest-assert-1.4.jar,/Users/teryk/.m2/repository/org/easytesting/fest-util/1.1.6/fest-util-1.1.6.jar +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.java.test.libraries=/Users/teryk/Projects/java-markdown/target/classes,/Users/teryk/.m2/repository/junit/junit/4.11/junit-4.11.jar,/Users/teryk/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar,/Users/teryk/.m2/repository/org/easytesting/fest-assert/1.4/fest-assert-1.4.jar,/Users/teryk/.m2/repository/org/easytesting/fest-util/1.1.6/fest-util-1.1.6.jar +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.libraries=/Users/teryk/.m2/repository/org/easytesting/fest-assert/1.4/fest-assert-1.4.jar,/Users/teryk/.m2/repository/org/easytesting/fest-util/1.1.6/fest-util-1.1.6.jar +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.links.ci= +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.links.homepage=http://maven.apache.org +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.links.issue= +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.links.scm= +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.links.scm_dev= +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.maven.projectDependencies=[{"k":"junit:junit","v":"4.11","s":"test","d":[{"k":"org.hamcrest:hamcrest-core","v":"1.3","s":"test","d":[]}]},{"k":"org.easytesting:fest-assert","v":"1.4","s":"compile","d":[{"k":"org.easytesting:fest-util","v":"1.1.6","s":"compile","d":[]}]}] +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.moduleKey=com.sonarsource:java-markdown +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.mojoUseRunner=true +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.permission.template.default=default_template +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.projectBaseDir=/Users/teryk/Projects/java-markdown +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.projectBuildDir=/Users/teryk/Projects/java-markdown/target +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.projectKey=com.sonarsource:java-markdown +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.projectName=Java Markdown +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.projectVersion=1.0-SNAPSHOT +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.qualitygate=1 +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.sourceEncoding=UTF-8 +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.sources=/Users/teryk/Projects/java-markdown/pom.xml,/Users/teryk/Projects/java-markdown/src/main/java +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.tests=/Users/teryk/Projects/java-markdown/src/test/java +2015.11.02 10:25:17 INFO [o.s.s.c.s.LogScannerContextStep] - sonar.working.directory=/Users/teryk/Projects/java-markdown/target/sonar +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Log scanner context | time=3ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Build tree of components | time=36ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Validate project | time=4ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Load debt model | time=5ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Load quality profiles | time=121ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Load Quality gate | time=8ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Load differential periods | time=30ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute size measures | time=29ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute new coverage | time=39ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute coverage measures | time=11ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute comment measures | time=6ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Copy custom measures | time=29ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute duplication measures | time=3ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute language distribution | time=17ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute test measures | time=2ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute complexity measures | time=24ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Load measure computers | time=2ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] Execution time for each component visitor: +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - LoadComponentUuidsHavingOpenIssuesVisitor | time=5ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - IntegrateIssuesVisitor | time=182ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - CloseIssuesOnRemovedComponentsVisitor | time=0ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - SqaleMeasuresVisitor | time=4ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - SqaleNewMeasuresVisitor | time=0ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - LastCommitVisitor | time=0ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ExecuteVisitorsStep] - MeasureComputersVisitor | time=3ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Execute component visitors | time=198ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute measure variations | time=3ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Computes Quality Gate measures | time=6ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Compute Quality profile measures | time=1ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Generate Quality profile events | time=4ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Generate Quality gate events | time=2ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Persist components | time=25ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Persist snapshots | time=26ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Persist measures | time=212ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Persist issues | time=59ms +2015.11.02 10:25:17 INFO [o.s.s.c.s.ComputationStepExecutor] Persist project links | time=6ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Persist events | time=4ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Persist duplications | time=2ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Persist sources | time=286ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Persist tests | time=16ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Enable snapshot | time=8ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Index components | time=60ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Purge db | time=27ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Apply permissions | time=2ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Index issues | time=77ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Index tests | time=50ms +2015.11.02 10:25:18 INFO [o.s.s.c.s.ComputationStepExecutor] Send issue notifications | time=2ms +2015.11.02 10:25:18 INFO [o.s.s.c.t.CeWorkerRunnableImpl] Executed task | project=com.sonarsource:java-markdown | id=AVDHg9OnLPOCEbN7mM58 | time=1706ms diff --git a/server/sonar-server/src/main/resources/org/sonar/server/config/ws/index-example.xml b/server/sonar-server/src/main/resources/org/sonar/server/config/ws/index-example.xml new file mode 100644 index 00000000000..d541bad186f --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/config/ws/index-example.xml @@ -0,0 +1,51 @@ + + + + sonar.core.treemap.colormetric + + + + sonar.core.treemap.sizemetric + + + + sonar.core.projectsdashboard.showTreemap + + + + sonar.plsql.suffixes + + + + sonar.build-stability.days + + + + sonar.dbcleaner.monthsBeforeDeletingAllSnapshots + + + + sonar.c.predefinedMacros + + + + sonar.scm.enabled + + + + sonar.cpd.cross_project + + + + sonar.forceAuthentication + + + + sonar.dbcleaner.weeksBeforeDeletingAllSnapshots + + + + sonar.java.coveragePlugin + + + diff --git a/server/sonar-server/src/main/resources/org/sonar/server/dashboard/ws/show-example.json b/server/sonar-server/src/main/resources/org/sonar/server/dashboard/ws/show-example.json new file mode 100644 index 00000000000..2c63c085104 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/dashboard/ws/show-example.json @@ -0,0 +1,2 @@ +{ +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/issue/filter/favorites-example.json b/server/sonar-server/src/main/resources/org/sonar/server/issue/filter/favorites-example.json new file mode 100644 index 00000000000..fa9f7d3eab2 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/issue/filter/favorites-example.json @@ -0,0 +1,19 @@ +{ + "favoriteFilters": [ + { + "id": 1, + "name": "Unresolved Issues", + "shared": true + }, + { + "id": 2, + "name": "False Positive and Won't Fix Issues", + "shared": true + }, + { + "id": 3, + "name": "My Custom Unresolved Issues", + "shared": false + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/l10n-index-example.json b/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/l10n-index-example.json new file mode 100644 index 00000000000..855fcf1c0ef --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/l10n-index-example.json @@ -0,0 +1,111 @@ +{ + "cancel": "Cancel", + "rule.php.S115.param.format": "Regular expression used to check the constant names against.", + "views.projects.selection_mode": "Project selection mode", + "rule.php.S1067.param.max": "Maximum number of allowed conditional operators in an expression", + "quality_profiles.restore_built_in_profiles": "Restore Built-in Profiles", + "qualifiers.delete_confirm.TRK": "Do you want to delete this project?", + "roles.page": "Project Permissions", + "metric.package_cycles.abbreviation": "Pkgs cycles", + "views.delete_success": "View definition \"{0}\" has been successfully deleted", + "issue.unplan.submit": "Unplan", + "project_history.col.month": "Month", + "including_abbreviated": "incl.", + "coding_rules.filters.activation.help": "Activation criterion is available when a quality profile is selected", + "metric.it_branch_coverage.description": "Condition coverage by integration tests", + "measure_filter.sharing": "Sharing", + "widget.issue_filter.property.filter.name": "Filter", + "help_tips": "Help tips", + "select_a_metric": "Select a metric", + "custom_measures.page.description": "Update the values of custom metrics for this project. Changes will take effect at the project's next analysis. Custom metrics must be created at the global level.", + "measure_filter.abbr.description": "Description", + "action_plans.delete": "Delete Action Plan", + "optional": "Optional", + "issue.changelog.field.assignee": "Assignee", + "background_tasks.table.duration": "Duration", + "source_viewer.tooltip.ut.partially-covered": "Partially covered by unit tests. Click for details.", + "size": "Size", + "action_plans.confirm_delete": "Delete this action plan? Associated issues will not be deleted.", + "quality_gates.delete_condition.confirm.message": "Are you sure you want to delete the \"{0}\" condition?", + "rule.php.S1808.param.one_space_before": "There should be exactly one space between control structure keyword and opening parenthesis or curly brace", + "metric.new_coverage.description": "Coverage of new/changed code", + "widget.time_machine.property.metric9.name": "Metric 9", + "views.projects.by_regexp": "All projects matching regular expression \"{0}\"", + "user.add_scm_account": "Add SCM account", + "to.downcase": "to", + "widget.sqaleSunburst.cant_display": "SQALE technical debt is 0 so the breakdown by characteristic can't be displayed.", + "measure_filter.name_contains": "Name contains", + "manual_rules.page": "Manual Rules", + "name_too_long_x": "Name is too long (maximum is {0} characters)", + "metric.line_coverage.name": "Line coverage", + "measure_filter.criteria.key": "Key", + "widget.project_issue_filter.property.filter.name": "Filter", + "widget.measure_filter_bubble_chart.name": "Measure Filter as Bubble Chart", + "issue.assign.formlink": "Assign", + "metric.overall_lines_to_cover.description": "Lines to cover by all tests", + "no_results": "No results", + "rule.php.S1808.param.one_space_after": "There should be exactly one space between closing parenthesis and opening curly braces", + "result": "Result", + "issue.planned_for": "Planned for", + "measure_filter.key_contains": "Key contains", + "widget.complexity.description": "Reports on complexity, average complexity and complexity distribution.", + "analysis_reports.past_reports": "Past Reports", + "property.sonar.global.exclusions.name": "Global Source File Exclusions", + "metric.overall_coverage.description": "Overall test coverage", + "quality_profiles.remove_projects_confirm_button": "Remove All", + "widget.measure_filter_histogram.name": "Measure Filter as Histogram", + "metric.covered_lines.description": "Covered lines", + "widget.measure_filter_pie_chart.property.extraMetric2.name": "Extra Metric 2", + "coding_rules.most_violated_projects": "Most Violated Projects", + "views.edit_subview": "Edit \"{0}\"", + "over_x_days": "over {0} days", + "project_settings.page": "General Settings", + "projects_role.codeviewer.desc": "View the project's source code. (Users will also need \"Browse\" permission)", + "issue.resolution.REMOVED": "Removed", + "coverage_viewer.overall_tests": "All Tests", + "metric.test_failures.description": "Number of unit test failures", + "dashboard.error_unshare_default": "This dashboard can't be unshared as long as it's defined as a default dashboard", + "issue.technical_debt": "Technical Debt:", + "background_tasks.failures": "failures", + "property.category.exclusions.duplications.description": "Configure the files that should be ignored by duplication detection.", + "widget.treemap-widget.name": "Treemap of Components", + "widget.measure_filter_histogram.description": "Displays the result of a pre-configured measure filter as a histogram.", + "property.category.codeCoverage": "Code Coverage", + "component": "Component", + "metric.duplications_data.description": "Duplications details", + "widget.time_machine.property.metric2.name": "Metric 2", + "quality_gates.operator.GT.short": ">", + "rules.not_found": "The rule \"{0}\" does not exist", + "coding_rules.create": "Create", + "days": "Days", + "widget.technical_debt_pyramid.total": "Total", + "email_configuration.test.send": "Send Test Email", + "update_key.replace": "Replace", + "views.invalid.criteria": "Only one criteria can be used (regexp, language or manual measure)", + "widget.measure_filter_pie_chart.property.chartHeight.name": "Chart Height", + "dashboard.project_not_found": "The requested project does not exist. Either it has never been analyzed successfully or it has been deleted.", + "global_permissions.admin": "Administer System", + "test_viewer.skipped": "skipped", + "analysis_reports.x_reports": "{0} reports", + "shortcuts.section.global.shortcuts": "open this window", + "metric.total-useless-lines.name": "Total Useless Code", + "dashboard.default_dashboard": "This dashboard is the default one and is displayed when clicking on \"Overview\".", + "component_navigation.status.in_progress.admin": "The analysis is in progress.
More details available on the Background Tasks page.", + "issue.unplanned": "Not planned", + "metric.public_api.name": "Public API", + "widget.measure_filter_treemap.property.heightInPercents.name": "Height", + "quality_profiles.rename_x_title": "Rename Profile {0} - {1}", + "widget.select_project": "Please select a project", + "coding_rules.change_severity_in": "Change Severity In", + "rule.php.S101.param.format": "Regular expression used to check the class names against.", + "select2.tooShort": "Please enter at least {0} characters", + "widget.custom_measures.property.metric10.name": "Metric 10", + "manual_measures.save_button": "Save", + "issue_filter.sharing": "Sharing", + "widget.measure_filter_cloud.property.colorMetric.name": "Color Metric", + "dashboard.TimeMachine.name": "Time Machine", + "property.category.security": "Security", + "coding_rules.validation.invalid_rule_key": "The rule key \"%s\" is invalid, it should only contain: a-z, 0-9, \"_\"", + "metric.sqale_rating.description": "Density of technical debt computed by dividing the technical debt by the estimated effort to develop from scratch an application.", + "notification.channel.EmailNotificationChannel": "Email" +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/logs-example.log b/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/logs-example.log new file mode 100644 index 00000000000..6843140a6ba --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/platform/ws/logs-example.log @@ -0,0 +1,105 @@ +--> Wrapper Started as Daemon +Launching a JVM... +Picked up JAVA_TOOL_OPTIONS: -Djava.awt.headless=true +Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org + Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved. + +Picked up JAVA_TOOL_OPTIONS: -Djava.awt.headless=true +2015.11.02 09:22:02 INFO app[o.s.p.m.JavaProcessLauncher] Launch process[search]: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/bin/java -Djava.awt.headless=true -Xmx1G -Xms256m -Xss256k -Djava.net.preferIPv4Stack=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT/temp -cp ./lib/common/*:./lib/search/* org.sonar.search.SearchServer /var/folders/6w/xm_djlkn4t120d6lcf0n_zxh0000gq/T/sq-process5392358002519055060properties +2015.11.02 09:22:02 INFO es[o.s.p.ProcessEntryPoint] Starting search +2015.11.02 09:22:02 INFO es[o.s.s.SearchSettings] Elasticsearch listening on 127.0.0.1:9001 +2015.11.02 09:22:02 INFO es[o.elasticsearch.node] [sonar-1446452521489] version[1.7.2], pid[3862], build[e43676b/2015-09-14T09:49:53Z] +2015.11.02 09:22:02 INFO es[o.elasticsearch.node] [sonar-1446452521489] initializing ... +2015.11.02 09:22:02 INFO es[o.e.plugins] [sonar-1446452521489] loaded [], sites [] +2015.11.02 09:22:02 INFO es[o.elasticsearch.env] [sonar-1446452521489] using [1] data paths, mounts [[/ (/dev/disk1s2)]], net usable_space [235.9gb], net total_space [476.1gb], types [hfs] +2015.11.02 09:22:04 WARN es[o.e.bootstrap] JNA not found. native methods will be disabled. +2015.11.02 09:22:04 INFO es[o.elasticsearch.node] [sonar-1446452521489] initialized +2015.11.02 09:22:04 INFO es[o.elasticsearch.node] [sonar-1446452521489] starting ... +2015.11.02 09:22:04 INFO es[o.e.transport] [sonar-1446452521489] bound_address {inet[/127.0.0.1:9001]}, publish_address {inet[/127.0.0.1:9001]} +2015.11.02 09:22:04 INFO es[o.e.discovery] [sonar-1446452521489] sonarqube/aHPZgf_qT-OJz5q6063zGA +2015.11.02 09:22:07 INFO es[o.e.cluster.service] [sonar-1446452521489] new_master [sonar-1446452521489][aHPZgf_qT-OJz5q6063zGA][RayNYC.local][inet[/127.0.0.1:9001]]{rack_id=sonar-1446452521489}, reason: zen-disco-join (elected_as_master) +2015.11.02 09:22:07 INFO es[o.elasticsearch.node] [sonar-1446452521489] started +2015.11.02 09:22:07 INFO es[o.e.gateway] [sonar-1446452521489] recovered [0] indices into cluster_state +Picked up JAVA_TOOL_OPTIONS: -Djava.awt.headless=true +2015.11.02 09:22:07 INFO app[o.s.p.m.Monitor] Process[search] is up +2015.11.02 09:22:07 INFO app[o.s.p.m.JavaProcessLauncher] Launch process[web]: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.management.enabled=false -Djruby.compile.invokedynamic=false -Xmx768m -Xms256m -XX:MaxPermSize=160m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Djava.io.tmpdir=/Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT/temp -cp ./lib/common/*:./lib/server/*:/Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT/lib/jdbc/h2/h2-1.3.176.jar org.sonar.server.app.WebServer /var/folders/6w/xm_djlkn4t120d6lcf0n_zxh0000gq/T/sq-process3229748062861525692properties +2015.11.02 09:22:08 INFO web[o.s.p.ProcessEntryPoint] Starting web +2015.11.02 09:22:08 INFO web[o.s.s.app.Webapp] Webapp directory: /Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT/web +2015.11.02 09:22:09 INFO web[o.a.c.h.Http11NioProtocol] Initializing ProtocolHandler ["http-nio-0.0.0.0-9000"] +2015.11.02 09:22:09 INFO web[o.a.t.u.n.NioSelectorPool] Using a shared selector for servlet write/read +2015.11.02 09:22:10 INFO web[o.e.plugins] [sonar-1446452521489] loaded [], sites [] +2015.11.02 09:22:11 INFO web[o.s.s.p.ServerImpl] SonarQube Server / 5.3-SNAPSHOT / 787da65b0d08e14cabe9f45e27514f8e418c1375 +2015.11.02 09:22:11 INFO web[o.s.s.d.EmbeddedDatabase] Starting embedded database on port 9092 with url jdbc:h2:tcp://localhost:9092/sonar +2015.11.02 09:22:11 INFO web[o.s.s.d.EmbeddedDatabase] Embedded database started. Data stored in: /Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT/data +2015.11.02 09:22:11 INFO web[o.sonar.db.Database] Create JDBC data source for jdbc:h2:tcp://localhost:9092/sonar +2015.11.02 09:22:11 WARN web[o.s.d.DatabaseChecker] H2 database should be used for evaluation purpose only +2015.11.02 09:22:13 INFO web[o.s.s.p.DefaultServerFileSystem] SonarQube home: /Users/Ray/Projects/sonarqube-other/sonar-application/target/sonarqube-5.3-SNAPSHOT +2015.11.02 09:22:13 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [rules] creating index, cause [api], templates [], shards [1]/[0], mappings [] +2015.11.02 09:22:13 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [rules] create_mapping [rule] +2015.11.02 09:22:13 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [rules] create_mapping [activeRule] +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Plugin Java [java] installed +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Plugin Git [scmgit] installed +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Plugin SVN [scmsvn] installed +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Deploy plugin Git / 1.0 / 9ce9d330c313c296fab051317cc5ad4b26319e07 +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Deploy plugin Java / 3.6 / 88ff47a7574edcc4472ff495c15b6f94d8dbd98f +2015.11.02 09:22:14 INFO web[o.s.s.p.ServerPluginRepository] Deploy plugin SVN / 1.2 / d04c3cdb21f48905dd8300d1129ec90281aa6db2 +2015.11.02 09:22:14 INFO web[o.s.s.d.m.DatabaseMigrator] Create database +2015.11.02 09:22:14 INFO web[o.s.s.p.RailsAppsDeployer] Deploying Ruby on Rails applications +2015.11.02 09:22:15 INFO web[o.s.s.p.UpdateCenterClient] Update center: http://update.sonarsource.org/update-center.properties (no proxy) +2015.11.02 09:22:15 INFO web[o.s.s.e.IndexCreator] Create index users +2015.11.02 09:22:15 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [users] creating index, cause [api], templates [], shards [5]/[0], mappings [] +2015.11.02 09:22:15 INFO web[o.s.s.e.IndexCreator] Create type users/user +2015.11.02 09:22:15 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [users] create_mapping [user] +2015.11.02 09:22:15 INFO web[o.s.s.e.IndexCreator] Create index tests +2015.11.02 09:22:15 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [tests] creating index, cause [api], templates [], shards [5]/[0], mappings [] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create type tests/test +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [tests] create_mapping [test] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create index views +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [views] creating index, cause [api], templates [], shards [5]/[0], mappings [] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create type views/view +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [views] create_mapping [view] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create index issues +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [issues] creating index, cause [api], templates [], shards [5]/[0], mappings [] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create type issues/authorization +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [issues] create_mapping [authorization] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create type issues/issue +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [issues] create_mapping [issue] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create index activities +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [activities] creating index, cause [api], templates [], shards [5]/[0], mappings [] +2015.11.02 09:22:16 INFO web[o.s.s.e.IndexCreator] Create type activities/activity +2015.11.02 09:22:16 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [activities] create_mapping [activity] +2015.11.02 09:22:16 INFO web[o.s.s.n.NotificationService] Notification service started (delay 60 sec.) +2015.11.02 09:22:16 INFO web[o.s.s.s.IndexSynchronizer] Index rules +2015.11.02 09:22:17 INFO web[o.s.s.s.IndexSynchronizer] Index activeRules +2015.11.02 09:22:17 INFO web[o.s.s.s.RegisterMetrics] Register metrics +2015.11.02 09:22:17 INFO web[o.s.s.s.RegisterDebtModel] Register technical debt model +2015.11.02 09:22:17 INFO web[o.s.s.r.RegisterRules] Register rules +2015.11.02 09:22:22 INFO web[o.s.s.q.RegisterQualityProfiles] Register quality profiles +2015.11.02 09:22:22 INFO web[o.s.s.q.RegisterQualityProfiles] Register profile {lang=java, name=Sonar way} +2015.11.02 09:22:24 INFO web[o.s.s.q.RegisterQualityProfiles] Set default java profile: Sonar way +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterNewMeasureFilters] Register measure filters +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterNewMeasureFilters] Register measure filter: Projects +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterNewMeasureFilters] Register measure filter: My favourites +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterDashboards] Register dashboards +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterDashboards] Register dashboard: Dashboard +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterDashboards] Register dashboard: Home +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterDashboards] Register dashboard: Issues +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterDashboards] Register dashboard: TimeMachine +2015.11.02 09:22:24 INFO web[o.s.s.s.RegisterPermissionTemplates] Register permission templates +2015.11.02 09:22:24 INFO web[o.s.s.s.RenameDeprecatedPropertyKeys] Rename deprecated property keys +2015.11.02 09:22:24 INFO web[o.s.s.s.RenameIssueWidgets] Replacing issue related widgets with issue filter widgets +2015.11.02 09:22:24 INFO web[o.s.s.s.IndexSynchronizer] Index activities +2015.11.02 09:22:25 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [activities] update_mapping [activity] (dynamic) +2015.11.02 09:22:25 INFO es[o.e.cluster.metadata] [sonar-1446452521489] [activities] update_mapping [activity] (dynamic) +2015.11.02 09:22:25 INFO web[o.s.s.s.IndexSynchronizer] Index issues +2015.11.02 09:22:25 INFO web[o.s.s.s.IndexSynchronizer] Index tests +2015.11.02 09:22:25 INFO web[o.s.s.s.IndexSynchronizer] Index users +2015.11.02 09:22:25 INFO web[o.s.s.s.IndexSynchronizer] Index views +2015.11.02 09:22:25 INFO web[o.s.s.c.q.PurgeCeActivities] Delete the Compute Engine tasks created before Wed May 06 09:22:25 CEST 2015 +2015.11.02 09:22:25 INFO web[jruby.rack] jruby 1.7.9 (ruby-1.8.7p370) 2013-12-06 87b108a on Java HotSpot(TM) 64-Bit Server VM 1.7.0_79-b15 [darwin-x86_64] +2015.11.02 09:22:25 INFO web[jruby.rack] using a shared (threadsafe!) runtime +2015.11.02 09:22:36 INFO web[jruby.rack] keeping custom (config.logger) Rails logger instance +2015.11.02 09:22:36 INFO web[o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"] +2015.11.02 09:22:36 INFO web[o.s.s.a.TomcatAccessLog] Web server is started +2015.11.02 09:22:36 INFO web[o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000 +2015.11.02 09:22:36 INFO app[o.s.p.m.Monitor] Process[web] is up diff --git a/server/sonar-server/src/main/resources/org/sonar/server/qualitygate/ws/app-example.json b/server/sonar-server/src/main/resources/org/sonar/server/qualitygate/ws/app-example.json new file mode 100644 index 00000000000..e1449fef2dd --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/qualitygate/ws/app-example.json @@ -0,0 +1,83 @@ +{ + "edit": false, + "periods": [ + { + "key": 1, + "text": "since previous analysis" + }, + { + "key": 2, + "text": "over 365 days" + }, + { + "key": 3, + "text": "since previous version" + }, + { + "key": 4, + "text": "over period 4 - defined at project level" + }, + { + "key": 5, + "text": "over period 5 - defined at project level" + } + ], + "metrics": [ + { + "id": 10, + "key": "accessors", + "name": "Accessors", + "type": "INT", + "domain": "Size", + "hidden": true + }, + { + "id": 111, + "key": "clirr_api_behavior_changes", + "name": "API behavior changes", + "type": "INT", + "domain": "API compatibility", + "hidden": false + }, + { + "id": 110, + "key": "clirr_api_breaks", + "name": "API breaks", + "type": "INT", + "domain": "API compatibility", + "hidden": false + }, + { + "id": 62, + "key": "blocker_violations", + "name": "Blocker issues", + "type": "INT", + "domain": "Issues", + "hidden": false + }, + { + "id": 138, + "key": "blocker_remediation_cost", + "name": "Blocker Technical Debt", + "type": "WORK_DUR", + "domain": "SQALE", + "hidden": false + }, + { + "id": 45, + "key": "conditions_to_cover", + "name": "Branches to cover", + "type": "INT", + "domain": "Tests", + "hidden": true + }, + { + "id": 131, + "key": "new_it_conditions_to_cover", + "name": "Branches to cover by IT on new code", + "type": "INT", + "domain": "Tests (Integration)", + "hidden": true + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/backup-example.xml b/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/backup-example.xml new file mode 100644 index 00000000000..6ad8d08b63c --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/backup-example.xml @@ -0,0 +1,88 @@ + + + Sonar way + c + + + c + AssignmentInSubExpression + MAJOR + + + + c + BackJumpWithGoto + MAJOR + + + + c + CommentedCode + MAJOR + + + + c + ContinueUsage + MAJOR + + + + c + DigraphUsage + MAJOR + + + + c + ElseIfWithoutElse + MAJOR + + + + c + EmptyCompoundStatement + MAJOR + + + + c + EnumPartialInitialization + MAJOR + + + + c + FileComplexity + MAJOR + + + maximumFileComplexityThreshold + 80 + + + + + c + FileLoc + MAJOR + + + maximumFileLocThreshold + 1000 + + + + + c + FunctionComplexity + MAJOR + + + maximumFunctionComplexityThreshold + 20 + + + + + diff --git a/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/export-example.xml b/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/export-example.xml new file mode 100644 index 00000000000..cdc4a38d4bd --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/qualityprofile/ws/export-example.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/app-example.json b/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/app-example.json new file mode 100644 index 00000000000..3fbf7c3b693 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/app-example.json @@ -0,0 +1,495 @@ +{ + "canWrite": false, + "qualityprofiles": [ + { + "key": "cs-c-qp-for-sonarsource-73109", + "name": "C# QP for SonarSource", + "lang": "cs" + }, + { + "key": "java-default-with-mojo-conventions-49307", + "name": "Default - Maven Conventions", + "lang": "java", + "parentKey": "java-top-profile-without-formatting-conventions-50037" + }, + { + "key": "java-default-with-sonarsource-conventions-27339", + "name": "Default - SonarSource conventions", + "lang": "java", + "parentKey": "java-top-profile-without-formatting-conventions-50037" + }, + { + "key": "java-top-profile-without-formatting-conventions-50037", + "name": "Default - Top", + "lang": "java" + }, + { + "key": "php-drupal-15274", + "name": "Drupal", + "lang": "php" + }, + { + "key": "java-findbugs-14954", + "name": "FindBugs", + "lang": "java" + }, + { + "key": "java-findbugs-security-audit-88783", + "name": "FindBugs Security Audit", + "lang": "java" + }, + { + "key": "java-findbugs-security-minimal-21735", + "name": "FindBugs Security Minimal", + "lang": "java" + }, + { + "key": "java-for-sq-java-plugin-only-92289", + "name": "For Java and JavaScript Plugins", + "lang": "java", + "parentKey": "java-default-with-sonarsource-conventions-27339" + }, + { + "key": "java-for-sq-only-95381", + "name": "For SQ Only", + "lang": "java", + "parentKey": "java-default-with-sonarsource-conventions-27339" + }, + { + "key": "php-psr-2-06315", + "name": "PSR-2", + "lang": "php" + }, + { + "key": "js-sonarsource-javascript-conventions-62984", + "name": "SonarSource JavaScript Conventions", + "lang": "js", + "parentKey": "js-sonar-way" + }, + { + "key": "c-sonar-way", + "name": "Sonar way", + "lang": "c" + }, + { + "key": "cpp-sonar-way", + "name": "Sonar way", + "lang": "cpp" + }, + { + "key": "cs-sonar-way-94087", + "name": "Sonar way", + "lang": "cs" + }, + { + "key": "grvy-sonar-way-06443", + "name": "Sonar way", + "lang": "grvy" + }, + { + "key": "java-sonar-way-80423", + "name": "Sonar way", + "lang": "java" + }, + { + "key": "js-sonar-way", + "name": "Sonar way", + "lang": "js" + }, + { + "key": "objc-sonar-way-10164", + "name": "Sonar way", + "lang": "objc" + }, + { + "key": "php-sonar-way-05548", + "name": "Sonar way", + "lang": "php" + }, + { + "key": "java-without-findbugs", + "name": "Without Findbugs", + "lang": "java" + } + ], + "languages": { + "c": "C", + "cpp": "C++", + "objc": "Objective-C", + "js": "JavaScript", + "cs": "C#", + "grvy": "Groovy", + "java": "Java", + "php": "PHP" + }, + "repositories": [ + { + "key": "clirr", + "name": "Clirr", + "language": "java" + }, + { + "key": "grvy", + "name": "CodeNarc", + "language": "grvy" + }, + { + "key": "common-c", + "name": "Common SonarQube", + "language": "c" + }, + { + "key": "common-cpp", + "name": "Common SonarQube", + "language": "cpp" + }, + { + "key": "common-cs", + "name": "Common SonarQube", + "language": "cs" + }, + { + "key": "common-grvy", + "name": "Common SonarQube", + "language": "grvy" + }, + { + "key": "common-java", + "name": "Common SonarQube", + "language": "java" + }, + { + "key": "common-js", + "name": "Common SonarQube", + "language": "js" + }, + { + "key": "common-objc", + "name": "Common SonarQube", + "language": "objc" + }, + { + "key": "common-php", + "name": "Common SonarQube", + "language": "php" + }, + { + "key": "c-cppcheck", + "name": "Cppcheck", + "language": "c" + }, + { + "key": "cpp-cppcheck", + "name": "Cppcheck", + "language": "cpp" + }, + { + "key": "fxcop", + "name": "FxCop / Code Analysis", + "language": "cs" + }, + { + "key": "resharper-cs", + "name": "ReSharper", + "language": "cs" + }, + { + "key": "resharper-vbnet", + "name": "ReSharper", + "language": "vbnet" + }, + { + "key": "c", + "name": "SonarQube", + "language": "c" + }, + { + "key": "cpp", + "name": "SonarQube", + "language": "cpp" + }, + { + "key": "csharpsquid", + "name": "SonarQube", + "language": "cs" + }, + { + "key": "javascript", + "name": "SonarQube", + "language": "js" + }, + { + "key": "objc", + "name": "SonarQube", + "language": "objc" + }, + { + "key": "php", + "name": "SonarQube", + "language": "php" + }, + { + "key": "squid", + "name": "SonarQube", + "language": "java" + }, + { + "key": "stylecop", + "name": "StyleCop", + "language": "cs" + } + ], + "statuses": { + "BETA": "Beta", + "DEPRECATED": "Deprecated", + "READY": "Ready" + }, + "characteristics": [ + { + "key": "REUSABILITY", + "name": "Reusability" + }, + { + "key": "MODULARITY", + "name": "Modularity", + "parent": "REUSABILITY" + }, + { + "key": "REUSABILITY_COMPLIANCE", + "name": "Reusability Compliance", + "parent": "REUSABILITY" + }, + { + "key": "TRANSPORTABILITY", + "name": "Transportability", + "parent": "REUSABILITY" + }, + { + "key": "PORTABILITY", + "name": "Portability" + }, + { + "key": "COMPILER_RELATED_PORTABILITY", + "name": "Compiler", + "parent": "PORTABILITY" + }, + { + "key": "HARDWARE_RELATED_PORTABILITY", + "name": "Hardware", + "parent": "PORTABILITY" + }, + { + "key": "LANGUAGE_RELATED_PORTABILITY", + "name": "Language", + "parent": "PORTABILITY" + }, + { + "key": "OS_RELATED_PORTABILITY", + "name": "OS", + "parent": "PORTABILITY" + }, + { + "key": "PORTABILITY_COMPLIANCE", + "name": "Portability Compliance", + "parent": "PORTABILITY" + }, + { + "key": "SOFTWARE_RELATED_PORTABILITY", + "name": "Software", + "parent": "PORTABILITY" + }, + { + "key": "TIME_ZONE_RELATED_PORTABILITY", + "name": "Time zone", + "parent": "PORTABILITY" + }, + { + "key": "MAINTAINABILITY", + "name": "Maintainability" + }, + { + "key": "MAINTAINABILITY_COMPLIANCE", + "name": "Maintainability Compliance", + "parent": "MAINTAINABILITY" + }, + { + "key": "READABILITY", + "name": "Readability", + "parent": "MAINTAINABILITY" + }, + { + "key": "UNDERSTANDABILITY", + "name": "Understandability", + "parent": "MAINTAINABILITY" + }, + { + "key": "SECURITY", + "name": "Security" + }, + { + "key": "API_ABUSE", + "name": "API abuse", + "parent": "SECURITY" + }, + { + "key": "ERRORS", + "name": "Errors", + "parent": "SECURITY" + }, + { + "key": "INPUT_VALIDATION_AND_REPRESENTATION", + "name": "Input validation and representation", + "parent": "SECURITY" + }, + { + "key": "SECURITY_COMPLIANCE", + "name": "Security Compliance", + "parent": "SECURITY" + }, + { + "key": "SECURITY_FEATURES", + "name": "Security features", + "parent": "SECURITY" + }, + { + "key": "USABILITY", + "name": "Usability" + }, + { + "key": "USABILITY_ACCESSIBILITY", + "name": "Accessibility", + "parent": "USABILITY" + }, + { + "key": "USABILITY_EASE_OF_USE", + "name": "Ease of Use", + "parent": "USABILITY" + }, + { + "key": "USABILITY_COMPLIANCE", + "name": "Usability Compliance", + "parent": "USABILITY" + }, + { + "key": "EFFICIENCY", + "name": "Efficiency" + }, + { + "key": "EFFICIENCY_COMPLIANCE", + "name": "Efficiency Compliance", + "parent": "EFFICIENCY" + }, + { + "key": "MEMORY_EFFICIENCY", + "name": "Memory use", + "parent": "EFFICIENCY" + }, + { + "key": "NETWORK_USE", + "name": "Network use", + "parent": "EFFICIENCY" + }, + { + "key": "CPU_EFFICIENCY", + "name": "Processor use", + "parent": "EFFICIENCY" + }, + { + "key": "CHANGEABILITY", + "name": "Changeability" + }, + { + "key": "ARCHITECTURE_CHANGEABILITY", + "name": "Architecture", + "parent": "CHANGEABILITY" + }, + { + "key": "CHANGEABILITY_COMPLIANCE", + "name": "Changeability Compliance", + "parent": "CHANGEABILITY" + }, + { + "key": "DATA_CHANGEABILITY", + "name": "Data", + "parent": "CHANGEABILITY" + }, + { + "key": "LOGIC_CHANGEABILITY", + "name": "Logic", + "parent": "CHANGEABILITY" + }, + { + "key": "RELIABILITY", + "name": "Reliability" + }, + { + "key": "ARCHITECTURE_RELIABILITY", + "name": "Architecture", + "parent": "RELIABILITY" + }, + { + "key": "DATA_RELIABILITY", + "name": "Data", + "parent": "RELIABILITY" + }, + { + "key": "EXCEPTION_HANDLING", + "name": "Exception handling", + "parent": "RELIABILITY" + }, + { + "key": "FAULT_TOLERANCE", + "name": "Fault tolerance", + "parent": "RELIABILITY" + }, + { + "key": "INSTRUCTION_RELIABILITY", + "name": "Instruction", + "parent": "RELIABILITY" + }, + { + "key": "LOGIC_RELIABILITY", + "name": "Logic", + "parent": "RELIABILITY" + }, + { + "key": "RELIABILITY_COMPLIANCE", + "name": "Reliability Compliance", + "parent": "RELIABILITY" + }, + { + "key": "RESOURCE_RELIABILITY", + "name": "Resource", + "parent": "RELIABILITY" + }, + { + "key": "SYNCHRONIZATION_RELIABILITY", + "name": "Synchronization", + "parent": "RELIABILITY" + }, + { + "key": "UNIT_TESTS", + "name": "Unit tests coverage", + "parent": "RELIABILITY" + }, + { + "key": "TESTABILITY", + "name": "Testability" + }, + { + "key": "INTEGRATION_TESTABILITY", + "name": "Integration level", + "parent": "TESTABILITY" + }, + { + "key": "TESTABILITY_COMPLIANCE", + "name": "Testability Compliance", + "parent": "TESTABILITY" + }, + { + "key": "UNIT_TESTABILITY", + "name": "Unit level", + "parent": "TESTABILITY" + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/list-example.txt b/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/list-example.txt new file mode 100644 index 00000000000..556550e9aab --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/rule/ws/list-example.txt @@ -0,0 +1,12 @@ +Protocol Buffer Format + +message ListResponse { + message Rule { + optional string repository = 1; + optional string key = 2; + optional string internal_key = 3; + optional string name = 4; + } + + repeated Rule rules = 1; +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/user/ws/current-example.json b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/current-example.json new file mode 100644 index 00000000000..9c3d477a7ea --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/current-example.json @@ -0,0 +1,10 @@ +{ + "isLoggedIn": true, + "login": "george.orwell", + "name": "George Orwell", + "permissions": { + "global": [ + "dryRunScan" + ] + } +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/user/ws/favourites-index-example.xml b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/favourites-index-example.xml new file mode 100644 index 00000000000..a5390359be2 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/favourites-index-example.xml @@ -0,0 +1,18 @@ + + + 2865 + org.sonarsource.sonarqube:sonarqube + SonarQube + SonarQube + PRJ + TRK + + + 34830 + DEV:george.orwell@1984.com + George Orwell + George Orwell + PRJ + DEV + + diff --git a/server/sonar-server/src/main/resources/org/sonar/server/user/ws/user_properties-index-example.xml b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/user_properties-index-example.xml new file mode 100644 index 00000000000..58b6d4b522c --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/user/ws/user_properties-index-example.xml @@ -0,0 +1,30 @@ + + + favourite + + + + favourite + + + + notification.ChangesOnMyIssue.EmailNotificationChannel + + + + notification.SQ-MyNewIssues.EmailNotificationChannel + + + + notification.ChangesOnMyIssue.EmailNotificationChannel + + + + notification.SQ-MyNewIssues.EmailNotificationChannel + + + + notification.NewIssues.EmailNotificationChannel + + + diff --git a/server/sonar-server/src/main/resources/org/sonar/server/usergroups/ws/users-example.json b/server/sonar-server/src/main/resources/org/sonar/server/usergroups/ws/users-example.json new file mode 100644 index 00000000000..fac841d6677 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/usergroups/ws/users-example.json @@ -0,0 +1,21 @@ +{ + "users": [ + { + "login": "admin", + "name": "Administrator", + "email": "admin@admin.com", + "selected": true + }, + { + "login": "george.orwell", + "name": "George Orwell", + "email": "george.orwell@1984.net", + "selected": true + } + ], + "paging": { + "pageSize": 100, + "total": 2, + "pageIndex": 1 + } +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/ws/list-example.json b/server/sonar-server/src/main/resources/org/sonar/server/ws/list-example.json new file mode 100644 index 00000000000..3f2d8e04df9 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/ws/list-example.json @@ -0,0 +1,221 @@ +{ + "webServices": [ + { + "path": "api/action_plans", + "description": "Action plans management", + "actions": [ + { + "key": "close", + "description": "Close an action plan. Requires Administer permission on project", + "since": "3.6", + "internal": false, + "post": true, + "hasResponseExample": false, + "params": [ + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "key", + "description": "Key of the action plan", + "required": true, + "exampleValue": "3f19de90-1521-4482-a737-a311758ff513" + } + ] + }, + { + "key": "create", + "description": "Create an action plan. Requires Administer permission on project", + "since": "3.6", + "internal": false, + "post": true, + "hasResponseExample": false, + "params": [ + { + "key": "deadLine", + "description": "Due date of the action plan. Format: YYYY-MM-DD", + "required": false, + "exampleValue": "2013-12-31" + }, + { + "key": "description", + "description": "Description of the action plan", + "required": false, + "exampleValue": "Version 3.6" + }, + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "name", + "description": "Name of the action plan", + "required": true, + "exampleValue": "Version 3.6" + }, + { + "key": "project", + "description": "Project key", + "required": true, + "exampleValue": "org.codehaus.sonar:sonar" + } + ] + }, + { + "key": "delete", + "description": "Delete an action plan. Requires Administer permission on project", + "since": "3.6", + "internal": false, + "post": true, + "hasResponseExample": false, + "params": [ + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "key", + "description": "Key of the action plan", + "required": true, + "exampleValue": "3f19de90-1521-4482-a737-a311758ff513" + } + ] + }, + { + "key": "open", + "description": "Open an action plan. Requires Administer permission on project", + "since": "3.6", + "internal": false, + "post": true, + "hasResponseExample": false, + "params": [ + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "key", + "description": "Key of the action plan", + "required": true, + "exampleValue": "3f19de90-1521-4482-a737-a311758ff513" + } + ] + }, + { + "key": "search", + "description": "Get a list of action plans. Requires Browse permission on project", + "since": "3.6", + "internal": false, + "post": false, + "hasResponseExample": true, + "params": [ + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "project", + "description": "Project key", + "required": true, + "exampleValue": "org.codehaus.sonar:sonar" + } + ] + }, + { + "key": "update", + "description": "Update an action plan. Requires Administer permission on project", + "since": "3.6", + "internal": false, + "post": true, + "hasResponseExample": false, + "params": [ + { + "key": "deadLine", + "description": "Due date of the action plan. Format: YYYY-MM-DD", + "required": false, + "exampleValue": "2013-12-31" + }, + { + "key": "description", + "description": "Description of the action plan", + "required": false, + "exampleValue": "Version 3.6" + }, + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + }, + { + "key": "key", + "description": "Key of the action plan", + "required": true, + "exampleValue": "3f19de90-1521-4482-a737-a311758ff513" + }, + { + "key": "name", + "description": "Name of the action plan", + "required": true, + "exampleValue": "Version 3.6" + } + ] + } + ] + }, + { + "path": "api/authentication", + "description": "Check authentication credentials", + "actions": [ + { + "key": "validate", + "description": "Check credentials", + "since": "3.3", + "internal": false, + "post": false, + "hasResponseExample": true, + "params": [ + { + "key": "format", + "description": "Response format can be set through:
  • Parameter format: xml | json
  • Or the 'Accept' property in the HTTP header:
    • Accept:text/xml
    • Accept:application/json
If nothing is set, json is used", + "required": false, + "possibleValues": [ + "json", + "xml" + ] + } + ] + } + ] + } + ] +} diff --git a/server/sonar-server/src/main/resources/org/sonar/server/ws/response_example-example.json b/server/sonar-server/src/main/resources/org/sonar/server/ws/response_example-example.json new file mode 100644 index 00000000000..86a6548d865 --- /dev/null +++ b/server/sonar-server/src/main/resources/org/sonar/server/ws/response_example-example.json @@ -0,0 +1,4 @@ +{ + "format": "json", + "example": "{\n \"paging\": {\n \"pageIndex\": 1,\n \"pageSize\": 100,\n \"total\": 1\n },\n \"issues\": [\n {\n \"key\": \"01fc972e-2a3c-433e-bcae-0bd7f88f5123\",\n \"component\": \"com.github.kevinsawicki:http-request:com.github.kevinsawicki.http.HttpRequest\",\n \"project\": \"com.github.kevinsawicki:http-request\",\n \"rule\": \"checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck\",\n \"status\": \"RESOLVED\",\n \"resolution\": \"FALSE-POSITIVE\",\n \"severity\": \"MINOR\",\n \"message\": \"'3' is a magic number.\",\n \"line\": 530,\n \"textRange\": {\n \"startLine\": 81,\n \"endLine\": 81,\n \"startOffset\": 0,\n \"endOffset\": 134\n },\n \"author\": \"Developer 1\",\n \"debt\": \"2h1min\",\n \"creationDate\": \"2013-05-13T17:55:39+0200\",\n \"updateDate\": \"2013-05-13T17:55:39+0200\",\n \"tags\": [\"bug\"],\n \"comments\": [\n {\n \"key\": \"7d7c56f5-7b5a-41b9-87f8-36fa70caa5ba\",\n \"login\": \"john.smith\",\n \"htmlText\": \"Must be "final"!\",\n \"markdown\": \"Must be \\\"final\\\"!\",\n \"updatable\": false,\n \"createdAt\": \"2013-05-13T18:08:34+0200\"\n }\n ],\n \"attr\": {\n \"jira-issue-key\": \"SONAR-1234\"\n },\n \"transitions\": [\n \"unconfirm\",\n \"resolve\",\n \"falsepositive\"\n ],\n \"actions\": [\n \"comment\"\n ]\n }\n ],\n \"components\": [\n {\n \"key\": \"com.github.kevinsawicki:http-request:src/main/java/com/github/kevinsawicki/http/HttpRequest.java\",\n \"enabled\": true,\n \"qualifier\": \"FIL\",\n \"name\": \"HttpRequest.java\",\n \"longName\": \"src/main/java/com/github/kevinsawicki/http/HttpRequest.java\",\n \"path\": \"src/main/java/com/github/kevinsawicki/http/HttpRequest.java\"\n },\n {\n \"key\": \"com.github.kevinsawicki:http-request\",\n \"enabled\": true,\n \"qualifier\": \"TRK\",\n \"name\": \"http-request\",\n \"longName\": \"http-request\"\n }\n ],\n \"rules\": [\n {\n \"key\": \"checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.MagicNumberCheck\",\n \"name\": \"Magic Number\",\n \"status\": \"READY\",\n \"lang\": \"java\",\n \"langName\": \"Java\"\n }\n ],\n \"users\": [\n {\n \"login\": \"admin\",\n \"name\": \"Administrator\",\n \"active\": true,\n \"email\": \"admin@sonarqube.org\"\n }\n ]\n\n}" +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/PluginsWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/PluginsWsTest.java index 291e58e2d62..52e5831df4b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/PluginsWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/PluginsWsTest.java @@ -43,7 +43,12 @@ public class PluginsWsTest { private static class DummyPluginsWsAction implements PluginsWsAction { @Override public void define(WebService.NewController context) { - context.createAction("dummy").setHandler(this); + context + .createAction("dummy") + .setDescription("Dummy Description") + .setPost(true) + .setSince("5.3") + .setHandler(this); } @Override diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/ws/SearchOptionsTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/ws/SearchOptionsTest.java index 462f65e36e1..9d5c8268922 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/ws/SearchOptionsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/ws/SearchOptionsTest.java @@ -20,6 +20,7 @@ package org.sonar.server.search.ws; import com.google.common.collect.Lists; +import java.io.StringWriter; import org.junit.Test; import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.WebService; @@ -30,8 +31,6 @@ import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; import org.sonar.test.JsonAssert; -import java.io.StringWriter; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -112,7 +111,12 @@ public class SearchOptionsTest { @Override public void define(Context context) { NewController newController = context.createController("api/foo"); - NewAction action = newController.createAction("search").setHandler(mock(RequestHandler.class)); + NewAction action = newController + .createAction("search") + .setSince("5.3") + .setDescription("Search Description") + .setPost(true) + .setHandler(mock(RequestHandler.class)); SearchOptions.defineFieldsParam(action, Lists.newArrayList("name", "lang", "severity")); newController.done(); } @@ -132,7 +136,12 @@ public class SearchOptionsTest { @Override public void define(Context context) { NewController newController = context.createController("api/foo"); - NewAction action = newController.createAction("search").setHandler(mock(RequestHandler.class)); + NewAction action = newController + .createAction("search") + .setSince("5.3") + .setDescription("Search Description") + .setPost(true) + .setHandler(mock(RequestHandler.class)); SearchOptions.definePageParams(action); newController.done(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java index 801d6859362..44c5e4f5e6f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java @@ -318,7 +318,7 @@ public class WebServiceEngineTest { @Override public void define(Context context) { NewController newController = context.createController("api/system"); - newController.createAction("health") + createNewDefaultAction(newController, "health") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -329,7 +329,7 @@ public class WebServiceEngineTest { } } }); - newController.createAction("ping") + createNewDefaultAction(newController, "ping") .setPost(true) .setHandler(new RequestHandler() { @Override @@ -341,21 +341,21 @@ public class WebServiceEngineTest { } } }); - newController.createAction("fail") + createNewDefaultAction(newController, "fail") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { throw new IllegalStateException("Unexpected"); } }); - newController.createAction("fail_with_i18n_message") + createNewDefaultAction(newController, "fail_with_i18n_message") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { throw new BadRequestException("bad.request.reason", 0); } }); - newController.createAction("fail_with_multiple_messages") + createNewDefaultAction(newController, "fail_with_multiple_messages") .createParam("count", "Number of error messages to generate") .setHandler(new RequestHandler() { @Override @@ -367,7 +367,7 @@ public class WebServiceEngineTest { throw new BadRequestException(errors); } }); - newController.createAction("fail_with_multiple_i18n_messages") + createNewDefaultAction(newController, "fail_with_multiple_i18n_messages") .createParam("count", "Number of error messages to generate") .setHandler(new RequestHandler() { @Override @@ -379,7 +379,7 @@ public class WebServiceEngineTest { throw new BadRequestException(errors); } }); - newController.createAction("alive") + createNewDefaultAction(newController, "alive") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -387,7 +387,7 @@ public class WebServiceEngineTest { } }); - newController.createAction("fail_with_undeclared_parameter") + createNewDefaultAction(newController, "fail_with_undeclared_parameter") .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -396,7 +396,7 @@ public class WebServiceEngineTest { }); // parameter "message" is required but not "author" - NewAction print = newController.createAction("print"); + NewAction print = createNewDefaultAction(newController, "print"); print.createParam("message").setDescription("required message").setRequired(true); print.createParam("author").setDescription("optional author").setDefaultValue("-"); print.createParam("format").setDescription("optional format").setPossibleValues("json", "xml"); @@ -415,5 +415,12 @@ public class WebServiceEngineTest { newController.done(); } + private NewAction createNewDefaultAction(NewController controller, String key) { + return controller + .createAction(key) + .setDescription("Dummy Description") + .setSince("5.3") + .setResponseExample(getClass().getResource("web-service-engine-test.txt")); + } } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/ListingWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServicesWsTest.java similarity index 83% rename from server/sonar-server/src/test/java/org/sonar/server/ws/ListingWsTest.java rename to server/sonar-server/src/test/java/org/sonar/server/ws/WebServicesWsTest.java index 6129a09a54e..0aebef89e12 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/ListingWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServicesWsTest.java @@ -28,9 +28,9 @@ import org.sonar.api.server.ws.WebService; import static org.assertj.core.api.Assertions.assertThat; -public class ListingWsTest { +public class WebServicesWsTest { - ListingWs ws = new ListingWs(); + WebServicesWs ws = new WebServicesWs(); @Test public void define_ws() { @@ -81,12 +81,16 @@ public class ListingWsTest { static class MetricWs implements WebService { @Override public void define(Context context) { - NewController newController = context.createController("api/metric") + NewController newController = context + .createController("api/metric") .setDescription("Metrics") .setSince("3.2"); // action with default values newController.createAction("show") + .setSince("3.2") + .setDescription("Show Description") + .setResponseExample(getClass().getResource("web-services-ws-test.txt")) .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -99,7 +103,7 @@ public class ListingWsTest { .setSince("4.1") .setDeprecatedSince("5.3") .setPost(true) - .setResponseExample(Resources.getResource(getClass(), "ListingWsTest/metrics_example.json")) + .setResponseExample(Resources.getResource(getClass(), "WebServicesWsTest/metrics_example.json")) .setHandler(new RequestHandler() { @Override public void handle(Request request, Response response) { @@ -116,12 +120,17 @@ public class ListingWsTest { .setDefaultValue("BLOCKER"); create.createParam("name"); - newController.createAction("internal_action").setInternal(true).setHandler(new RequestHandler() { - @Override - public void handle(Request request, Response response) throws Exception { + newController.createAction("internal_action") + .setDescription("Internal Action Description") + .setResponseExample(getClass().getResource("web-services-ws-test.txt")) + .setSince("5.3") + .setInternal(true) + .setHandler(new RequestHandler() { + @Override + public void handle(Request request, Response response) throws Exception { - } - }); + } + }); newController.done(); } diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list.json b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list.json similarity index 95% rename from server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list.json rename to server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list.json index f84f107adc9..6b3f7a3291c 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list.json @@ -34,7 +34,7 @@ "since": "3.2", "internal": false, "post": false, - "hasResponseExample": false + "hasResponseExample": true } ] }, @@ -49,7 +49,7 @@ "description": "List web services", "internal": false, "post": false, - "hasResponseExample": false, + "hasResponseExample": true, "params": [ { "key": "include_internals", @@ -66,7 +66,7 @@ "description": "Display web service response example", "internal": false, "post": false, - "hasResponseExample": false, + "hasResponseExample": true, "params": [ { "key": "action", diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list_including_internals.json b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list_including_internals.json similarity index 92% rename from server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list_including_internals.json rename to server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list_including_internals.json index c57b4471021..b5b23df28c2 100644 --- a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/list_including_internals.json +++ b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/list_including_internals.json @@ -28,17 +28,17 @@ }, { "key": "internal_action", - "since": "3.2", + "since": "5.3", "internal": true, "post": false, - "hasResponseExample": false + "hasResponseExample": true }, { "key": "show", "since": "3.2", "internal": false, "post": false, - "hasResponseExample": false + "hasResponseExample": true } ] }, @@ -53,7 +53,7 @@ "description": "List web services", "internal": false, "post": false, - "hasResponseExample": false, + "hasResponseExample": true, "params": [ { "key": "include_internals", @@ -70,7 +70,7 @@ "description": "Display web service response example", "internal": false, "post": false, - "hasResponseExample": false, + "hasResponseExample": true, "params": [ { "key": "action", diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/metrics_example.json b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/metrics_example.json similarity index 100% rename from server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/metrics_example.json rename to server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/metrics_example.json diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/response_example.json b/server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/response_example.json similarity index 100% rename from server/sonar-server/src/test/resources/org/sonar/server/ws/ListingWsTest/response_example.json rename to server/sonar-server/src/test/resources/org/sonar/server/ws/WebServicesWsTest/response_example.json diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/web-service-engine-test.txt b/server/sonar-server/src/test/resources/org/sonar/server/ws/web-service-engine-test.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/server/sonar-server/src/test/resources/org/sonar/server/ws/web-services-ws-test.txt b/server/sonar-server/src/test/resources/org/sonar/server/ws/web-services-ws-test.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java index a9cde1cc415..e22a829bb1d 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/RequestTest.java @@ -83,8 +83,11 @@ public class RequestTest { @Override public void define(Context context) { NewController controller = context.createController("my_controller"); - NewAction action = controller.createAction("my_action"); - action.setHandler(mock(RequestHandler.class)); + NewAction action = controller.createAction("my_action") + .setDescription("Action Description") + .setPost(true) + .setSince("5.2") + .setHandler(mock(RequestHandler.class)); action .createParam("required_param") .setRequired(true); -- 2.39.5