]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8777 Return history of a WS action in webservices/list
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Thu, 16 Feb 2017 13:33:40 +0000 (14:33 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Fri, 17 Feb 2017 10:30:11 +0000 (11:30 +0100)
server/sonar-server/src/main/java/org/sonar/server/ws/ws/ListAction.java
server/sonar-server/src/main/resources/org/sonar/server/ws/ws/list-example.json
server/sonar-server/src/test/java/org/sonar/server/ws/ws/WebServicesWsTest.java

index 76b9e53679f4e5e4cdec9ea6f3957dc43ac8279e..8496a4aea6fc7e8b56b9ef183150d2c1657f184f 100644 (file)
 package org.sonar.server.ws.ws;
 
 import com.google.common.collect.Ordering;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
+import org.sonar.api.server.ws.Changelog;
 import org.sonar.api.server.ws.Request;
 import org.sonar.api.server.ws.Response;
 import org.sonar.api.server.ws.WebService;
@@ -100,20 +102,25 @@ public class ListAction implements WebServicesWsAction {
       writer.prop("internal", action.isInternal());
       writer.prop("post", action.isPost());
       writer.prop("hasResponseExample", action.responseExample() != null);
-      List<WebService.Param> params = action.params().stream().filter(p -> includeInternals || !p.isInternal()).collect(Collectors.toList());
-      if (!params.isEmpty()) {
-        // sort parameters by key
-        Ordering<WebService.Param> ordering = Ordering.natural().onResultOf(WebService.Param::key);
-        writer.name("params").beginArray();
-        for (WebService.Param param : ordering.sortedCopy(params)) {
-          writeParam(writer, param);
-        }
-        writer.endArray();
-      }
+      writeHistory(writer, action);
+      writeParameters(writer, action, includeInternals);
       writer.endObject();
     }
   }
 
+  private static void writeParameters(JsonWriter writer, WebService.Action action, boolean includeInternals) {
+    List<WebService.Param> params = action.params().stream().filter(p -> includeInternals || !p.isInternal()).collect(Collectors.toList());
+    if (!params.isEmpty()) {
+      // sort parameters by key
+      Ordering<WebService.Param> ordering = Ordering.natural().onResultOf(WebService.Param::key);
+      writer.name("params").beginArray();
+      for (WebService.Param param : ordering.sortedCopy(params)) {
+        writeParam(writer, param);
+      }
+      writer.endArray();
+    }
+  }
+
   private static void writeParam(JsonWriter writer, WebService.Param param) {
     writer.beginObject();
     writer.prop("key", param.key());
@@ -132,4 +139,18 @@ public class ListAction implements WebServicesWsAction {
     }
     writer.endObject();
   }
+
+  private static void writeHistory(JsonWriter writer, WebService.Action action) {
+    writer.name("history").beginArray();
+    action.history().stream()
+      .sorted(Comparator.comparing(Changelog::getVersion).reversed())
+      .forEach(changelog -> {
+        writer.beginObject();
+        writer.prop("description", changelog.getDescription());
+        writer.prop("version", changelog.getVersion());
+        writer.endObject();
+      });
+    writer.endArray();
+  }
+
 }
index 481f2641c33d6bfbc2e7302ed180ecff7580b87c..0fec8411692637054afd8e71a71bdbbd696c22bd 100644 (file)
           "internal": false,
           "post": true,
           "hasResponseExample": true,
+          "history": [
+            {
+              "description": "Requires 'Administer System' permission instead of 'Administer Quality Profiles'",
+              "version": "6.6"
+            },
+            {
+              "description": "Remove database ID from response",
+              "version": "6.0"
+            },
+            {
+              "description": "Deprecate database ID in response",
+              "version": "4.5"
+            }
+          ],
           "params": [
             {
               "key": "name",
index 4f6cc3a237c7728d58ba4211e66b7f93d06b5048..0b6492c46bddecb427214090c7726d219bcfc5b9 100644 (file)
@@ -21,12 +21,13 @@ package org.sonar.server.ws.ws;
 
 import com.google.common.io.Resources;
 import org.junit.Test;
+import org.sonar.api.server.ws.Changelog;
 import org.sonar.api.server.ws.WebService;
 import org.sonar.server.ws.WsTester;
-import org.sonar.test.JsonAssert;
 
 import static java.util.Arrays.asList;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.sonar.test.JsonAssert.assertJson;
 
 public class WebServicesWsTest {
 
@@ -59,7 +60,7 @@ public class WebServicesWsTest {
 
     String response = tester.newGetRequest("api/webservices", "list").execute().outputAsString();
 
-    JsonAssert.assertJson(response).isSimilarTo(getClass().getResource("list-example.json"));
+    assertJson(response).withStrictArrayOrder().isSimilarTo(getClass().getResource("list-example.json"));
   }
 
   @Test
@@ -104,6 +105,10 @@ public class WebServicesWsTest {
         .setDeprecatedSince("5.3")
         .setPost(true)
         .setResponseExample(Resources.getResource(getClass(), "WebServicesWsTest/metrics_example.json"))
+        .setHistory(
+          new Changelog("4.5", "Deprecate database ID in response"),
+          new Changelog("6.0", "Remove database ID from response"),
+          new Changelog("6.6", "Requires 'Administer System' permission instead of 'Administer Quality Profiles'"))
         .setHandler((request, response) -> {
         });