]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8552 WS api/navigation/component returns the id instead of the url
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 20 Dec 2016 13:28:13 +0000 (14:28 +0100)
committerTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Tue, 20 Dec 2016 15:18:01 +0000 (16:18 +0100)
server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java
server/sonar-server/src/main/resources/org/sonar/server/ui/ws/example-component.json
server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentNavigationActionTest/return_configuration_for_admin.json
server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentNavigationActionTest/return_extensions.json
server/sonar-server/src/test/resources/org/sonar/server/ui/ws/ComponentNavigationActionTest/return_extensions_for_admin.json

index 661c832a7cc4799c42b7a54b2de08c12cb44be64..6066f4826c5fb38e12e96194891935fa2b1f34ed 100644 (file)
@@ -20,9 +20,6 @@
 package org.sonar.server.ui.ws;
 
 import com.google.common.collect.Lists;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
@@ -195,35 +192,12 @@ public class ComponentNavigationAction implements NavigationWsAction {
 
   private void writeExtensions(JsonWriter json, ComponentDto component, List<ViewProxy<Page>> pages) {
     json.name("extensions").beginArray();
-    for (ViewProxy<Page> page : pages) {
-      if (page.isUserAuthorized(component)) {
-        writePage(json, getPageUrl(page, component), i18n.message(ENGLISH, page.getId() + ".page", page.getTitle()));
-      }
-    }
+    pages.stream()
+      .filter(page -> page.isUserAuthorized(component))
+      .forEach(page -> writePage(json, page.getId(), i18n.message(ENGLISH, page.getId() + ".page", page.getTitle())));
     json.endArray();
   }
 
-  private static String getPageUrl(ViewProxy<Page> page, ComponentDto component) {
-    String result;
-    String componentKey = encodeComponentKey(component);
-    if (page.isController()) {
-      result = String.format("%s?id=%s", page.getId(), componentKey);
-    } else {
-      result = String.format("/plugins/resource/%s?page=%s", componentKey, page.getId());
-    }
-    return result;
-  }
-
-  private static String encodeComponentKey(ComponentDto component) {
-    String componentKey = component.getKey();
-    try {
-      componentKey = URLEncoder.encode(componentKey, StandardCharsets.UTF_8.name());
-    } catch (UnsupportedEncodingException unknownEncoding) {
-      throw new IllegalStateException(unknownEncoding);
-    }
-    return componentKey;
-  }
-
   private void writeConfiguration(JsonWriter json, ComponentDto component) {
     boolean isAdmin = userSession.hasComponentUuidPermission(ADMIN, component.projectUuid());
 
@@ -233,9 +207,7 @@ public class ComponentNavigationAction implements NavigationWsAction {
     if (isAdmin) {
       json.name("extensions").beginArray();
       List<ViewProxy<Page>> configPages = views.getPages(NavigationSection.RESOURCE_CONFIGURATION, component.scope(), component.qualifier(), component.language());
-      for (ViewProxy<Page> page : configPages) {
-        writePage(json, getPageUrl(page, component), i18n.message(ENGLISH, page.getId() + ".page", page.getTitle()));
-      }
+      configPages.forEach(page -> writePage(json, page.getId(), i18n.message(ENGLISH, page.getId() + ".page", page.getTitle())));
       json.endArray();
     }
     json.endObject();
@@ -261,9 +233,9 @@ public class ComponentNavigationAction implements NavigationWsAction {
     return resourceType != null && resourceType.getBooleanProperty(resourceTypeProperty);
   }
 
-  private static void writePage(JsonWriter json, String url, String name) {
+  private static void writePage(JsonWriter json, String id, String name) {
     json.beginObject()
-      .prop("url", url)
+      .prop("id", id)
       .prop("name", name)
       .endObject();
   }
index 29703cbb35017380def252be721fc3ec750afce7..40878b2efdf90b9c899d172ed4a17efb3043edeb 100644 (file)
@@ -8,15 +8,15 @@
   "snapshotDate": "2016-12-06T11:44:00+0200",
   "extensions": [
     {
-      "url": "/admin/page?id\u003dorg.codehaus.sonar%3Asonar",
+      "id": "/admin/page",
       "name": "Admin Page"
     },
     {
-      "url": "/plugins/resource/org.codehaus.sonar%3Asonar?page\u003dfirst_page",
+      "id": "first_page",
       "name": "First Page"
     },
     {
-      "url": "/second/page?id\u003dorg.codehaus.sonar%3Asonar",
+      "id": "/second/page",
       "name": "Second Page"
     }
   ],
index f29618193913aeeb27ba949f6cd7019327a438c6..b68d79e7f3e3eaf930a785d2c5e12dd5aa3bf2cb 100644 (file)
     "showUpdateKey": false,
     "extensions": [
       {
-        "name": "First Page",
-        "url": "/plugins/resource/polop?page=first_page"
+        "id": "first_page",
+        "name": "First Page"
       },
       {
-        "name": "Second Page",
-        "url": "/second/page?id=polop"
+        "id": "/second/page",
+        "name": "Second Page"
       }
     ]
   }
index 6a5c706a339f6442d0540ffe4a34b88eb4c530c0..e470ef4428b282f8e5336a595620e43d4d11020e 100644 (file)
@@ -1,12 +1,12 @@
 {
   "extensions": [
     {
-      "name": "First Page",
-      "url": "/plugins/resource/polop?page=first_page"
+      "id": "first_page",
+      "name": "First Page"
     },
     {
-      "name": "Second Page",
-      "url": "/second/page?id=polop"
+      "id": "/second/page",
+      "name": "Second Page"
     }
   ]
 }
index b4f36e8b2e6614318c940ddae0ba55cded88513f..7301a92fd5449567d9531c52c9155d18cdea07d3 100644 (file)
@@ -1,16 +1,16 @@
 {
   "extensions": [
     {
-      "name": "First Page",
-      "url": "/plugins/resource/polop?page=first_page"
+      "id": "first_page",
+      "name": "First Page"
     },
     {
-      "name": "Second Page",
-      "url": "/second/page?id=polop"
+      "id": "/second/page",
+      "name": "Second Page"
     },
     {
-      "name": "Admin Page",
-      "url": "/admin/page?id=polop"
+      "id": "/admin/page",
+      "name": "Admin Page"
     }
   ]
 }