]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5010 improve WebService extension point
authorSimon Brandhof <simon.brandhof@gmail.com>
Thu, 13 Mar 2014 21:37:38 +0000 (22:37 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Thu, 13 Mar 2014 21:37:38 +0000 (22:37 +0100)
sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java
sonar-server/src/main/java/org/sonar/server/issue/filter/IssueFilterWs.java
sonar-server/src/main/java/org/sonar/server/issue/ws/IssuesWs.java
sonar-server/src/main/java/org/sonar/server/qualitygate/ws/QualityGatesWs.java
sonar-server/src/main/java/org/sonar/server/rule/ws/RuleTagsWs.java
sonar-server/src/main/java/org/sonar/server/rule/ws/RulesWs.java
sonar-server/src/main/java/org/sonar/server/source/ws/SourcesWs.java
sonar-server/src/main/java/org/sonar/server/ws/ListingWs.java
sonar-server/src/test/java/org/sonar/server/ws/ListingWsTest.java
sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java

index 1a18aa540dc58fb8369a194775e575ae7e633a70..d23bdeb4c6ead7536b6bbf592f502cdb8dcaf802 100644 (file)
@@ -33,7 +33,62 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Defines a web service implemented in Java (no Ruby on Rails at all).
+ * Defines a web service. Note that contrary to the deprecated {@link org.sonar.api.web.Webservice}
+ * the ws is fully implemented in Java and does not require any Ruby on Rails code.
+ *
+ * <p/>
+ * The classes implementing this extension point must be declared in {@link org.sonar.api.SonarPlugin#getExtensions()}.
+ *
+ * <h2>How to use</h2>
+ * <pre>
+ * public class HelloWs implements WebService {
+ *   @Override
+ *   public void define(Context context) {
+ *     NewController controller = context.createController("api/hello");
+ *     controller.setDescription("Web service example");
+ *
+ *     // create the URL /api/hello/show
+ *     controller.createAction("show")
+ *       .setDescription("Entry point")
+ *       .setHandler(new RequestHandler() {
+ *         @Override
+ *         public void handle(Request request, Response response) {
+ *           // read request parameters and generates response output
+ *           response.newJsonWriter()
+ *             .prop("hello", request.mandatoryParam("key"))
+ *             .close();
+ *         }
+ *      })
+ *      .createParam("key", "Example key");
+ *
+ *    // important to apply changes
+ *    controller.done();
+ *   }
+ * }
+ * </pre>
+ * <h2>How to unit test</h2>
+ * <pre>
+ * public class HelloWsTest {
+ *   WebService ws = new HelloWs();
+ *
+ *   @Test
+ *   public void should_define_ws() throws Exception {
+ *     // WsTester is available in the Maven artifact org.codehaus.sonar:sonar-plugin-api
+ *     // with type "test-jar"
+ *     WsTester tester = new WsTester(ws);
+ *     WebService.Controller controller = tester.controller("api/hello");
+ *     assertThat(controller).isNotNull();
+ *     assertThat(controller.path()).isEqualTo("api/hello");
+ *     assertThat(controller.description()).isNotEmpty();
+ *     assertThat(controller.actions()).hasSize(1);
+ *
+ *     WebService.Action show = controller.action("show");
+ *     assertThat(show).isNotNull();
+ *     assertThat(show.key()).isEqualTo("show");
+ *     assertThat(index.handler()).isNotNull();
+ *   }
+ * }
+ * </pre>
  *
  * @since 4.2
  */
@@ -42,7 +97,14 @@ public interface WebService extends ServerExtension {
   class Context {
     private final Map<String, Controller> controllers = Maps.newHashMap();
 
-    public NewController newController(String path) {
+    /**
+     * Create a new controller.
+     * <p/>
+     * Structure of request URL is <code>http://&lt;server&gt;/&lt>controller path&gt;/&lt;action path&gt;?&lt;parameters&gt;</code>.
+     *
+     * @param path the controller path must not start or end with "/". It is recommended to start with "api/"
+     */
+    public NewController createController(String path) {
       return new NewController(this, path);
     }
 
@@ -73,27 +135,40 @@ public interface WebService extends ServerExtension {
 
     private NewController(Context context, String path) {
       if (StringUtils.isBlank(path)) {
-        throw new IllegalArgumentException("Web service path can't be empty");
+        throw new IllegalArgumentException("WS controller path must not be empty");
+      }
+      if (StringUtils.startsWith(path, "/") || StringUtils.endsWith(path, "/")) {
+        throw new IllegalArgumentException("WS controller path must not start or end with slash: " + path);
       }
       this.context = context;
       this.path = path;
     }
 
+    /**
+     * Important - this method must be called in order to apply changes and make the
+     * controller available in {@link org.sonar.api.server.ws.WebService.Context#controllers()}
+     */
     public void done() {
       context.register(this);
     }
 
+    /**
+     * Optional plain-text description
+     */
     public NewController setDescription(@Nullable String s) {
       this.description = s;
       return this;
     }
 
+    /**
+     * Optional version when the controller was created
+     */
     public NewController setSince(@Nullable String s) {
       this.since = s;
       return this;
     }
 
-    public NewAction newAction(String actionKey) {
+    public NewAction createAction(String actionKey) {
       if (actions.containsKey(actionKey)) {
         throw new IllegalStateException(
           String.format("The action '%s' is defined multiple times in the web service '%s'", actionKey, path)
@@ -201,7 +276,7 @@ public interface WebService extends ServerExtension {
       return this;
     }
 
-    public NewParam newParam(String paramKey) {
+    public NewParam createParam(String paramKey) {
       if (newParams.containsKey(paramKey)) {
         throw new IllegalStateException(
           String.format("The parameter '%s' is defined multiple times in the action '%s'", paramKey, key)
@@ -212,8 +287,8 @@ public interface WebService extends ServerExtension {
       return newParam;
     }
 
-    public NewAction newParam(String paramKey, @Nullable String description) {
-      newParam(paramKey).setDescription(description);
+    public NewAction createParam(String paramKey, @Nullable String description) {
+      createParam(paramKey).setDescription(description);
       return this;
     }
   }
index cb5d617fd3d8e7e3054227b9c4052ac89317888d..5848ee5306699b0c975974ad3090e3a85ab22bf8 100644 (file)
@@ -32,11 +32,11 @@ public class WebServiceTest {
 
     @Override
     public void define(Context context) {
-      NewController newController = context.newController("api/metric")
+      NewController newController = context.createController("api/metric")
         .setDescription("Metrics")
         .setSince("3.2");
 
-      newController.newAction("show")
+      newController.createAction("show")
         .setDescription("Show metric")
         .setHandler(new RequestHandler() {
           @Override
@@ -45,7 +45,7 @@ public class WebServiceTest {
           }
         });
 
-      newController.newAction("create")
+      newController.createAction("create")
         .setDescription("Create metric")
         .setSince("4.1")
         .setPost(true)
@@ -119,8 +119,8 @@ public class WebServiceTest {
       new WebService() {
         @Override
         public void define(Context context) {
-          NewController newController = context.newController("api/metric");
-          newController.newAction("delete");
+          NewController newController = context.createController("api/metric");
+          newController.createAction("delete");
           newController.done();
         }
       }.define(context);
@@ -136,8 +136,8 @@ public class WebServiceTest {
       new WebService() {
         @Override
         public void define(Context context) {
-          NewController controller = context.newController("rule");
-          controller.newAction("show");
+          NewController controller = context.createController("rule");
+          controller.createAction("show");
           controller.done();
         }
       }.define(context);
@@ -153,10 +153,10 @@ public class WebServiceTest {
       new WebService() {
         @Override
         public void define(Context context) {
-          NewController newController = context.newController("rule");
-          newController.newAction("create");
-          newController.newAction("delete");
-          newController.newAction("delete");
+          NewController newController = context.createController("rule");
+          newController.createAction("create");
+          newController.createAction("delete");
+          newController.createAction("delete");
           newController.done();
         }
       }.define(context);
@@ -172,7 +172,7 @@ public class WebServiceTest {
       new WebService() {
         @Override
         public void define(Context context) {
-          context.newController("rule").done();
+          context.createController("rule").done();
         }
       }.define(context);
       fail();
@@ -182,17 +182,47 @@ public class WebServiceTest {
   }
 
   @Test
-  public void fail_if_no_ws_path() {
+  public void fail_if_no_controller_path() {
     try {
       new WebService() {
         @Override
         public void define(Context context) {
-          context.newController(null).done();
+          context.createController(null).done();
         }
       }.define(context);
       fail();
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessage("Web service path can't be empty");
+      assertThat(e).hasMessage("WS controller path must not be empty");
+    }
+  }
+
+  @Test
+  public void controller_path_must_not_start_with_slash() {
+    try {
+      new WebService() {
+        @Override
+        public void define(Context context) {
+          context.createController("/hello").done();
+        }
+      }.define(context);
+      fail();
+    } catch (IllegalArgumentException e) {
+      assertThat(e).hasMessage("WS controller path must not start or end with slash: /hello");
+    }
+  }
+
+  @Test
+  public void controller_path_must_not_end_with_slash() {
+    try {
+      new WebService() {
+        @Override
+        public void define(Context context) {
+          context.createController("hello/").done();
+        }
+      }.define(context);
+      fail();
+    } catch (IllegalArgumentException e) {
+      assertThat(e).hasMessage("WS controller path must not start or end with slash: hello/");
     }
   }
 
@@ -215,10 +245,10 @@ public class WebServiceTest {
     new WebService() {
       @Override
       public void define(Context context) {
-        NewController newController = context.newController("api/rule");
-        NewAction create = newController.newAction("create").setHandler(mock(RequestHandler.class));
-        create.newParam("key").setDescription("Key of the new rule");
-        create.newParam("severity");
+        NewController newController = context.createController("api/rule");
+        NewAction create = newController.createAction("create").setHandler(mock(RequestHandler.class));
+        create.createParam("key").setDescription("Key of the new rule");
+        create.createParam("severity");
         newController.done();
       }
     }.define(context);
@@ -240,10 +270,10 @@ public class WebServiceTest {
       new WebService() {
         @Override
         public void define(Context context) {
-          NewController controller = context.newController("api/rule");
-          NewAction action = controller.newAction("create").setHandler(mock(RequestHandler.class));
-          action.newParam("key");
-          action.newParam("key");
+          NewController controller = context.createController("api/rule");
+          NewAction action = controller.createAction("create").setHandler(mock(RequestHandler.class));
+          action.createParam("key");
+          action.createParam("key");
           controller.done();
         }
       }.define(context);
@@ -258,9 +288,9 @@ public class WebServiceTest {
     new WebService() {
       @Override
       public void define(Context context) {
-        NewController newController = context.newController("api/rule");
-        newController.newAction("create").setInternal(true).setHandler(mock(RequestHandler.class));
-        newController.newAction("update").setInternal(true).setHandler(mock(RequestHandler.class));
+        NewController newController = context.createController("api/rule");
+        newController.createAction("create").setInternal(true).setHandler(mock(RequestHandler.class));
+        newController.createAction("update").setInternal(true).setHandler(mock(RequestHandler.class));
         newController.done();
       }
     }.define(context);
index 16ef871898716586dc8a643591ce0e671d5d76c7..f4a6a3813919400d2abf9984d8861a0d4ca4eb10 100644 (file)
@@ -41,11 +41,11 @@ public class IssueFilterWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/issue_filters")
+    NewController controller = context.createController("api/issue_filters")
       .setSince("4.2")
       .setDescription("Issue Filters");
 
-    NewAction app = controller.newAction("app");
+    NewAction app = controller.createAction("app");
     app
       .setDescription("Data required for rendering the page 'Issues'")
       .setInternal(true)
@@ -56,7 +56,7 @@ public class IssueFilterWs implements WebService {
         }
       });
 
-    NewAction show = controller.newAction("show");
+    NewAction show = controller.createAction("show");
     show
       .setDescription("Get detail of issue filter")
       .setSince("4.2")
@@ -66,9 +66,9 @@ public class IssueFilterWs implements WebService {
           show(request, response);
         }
       })
-      .newParam("id");
+      .createParam("id");
 
-    NewAction fav = controller.newAction("favorites");
+    NewAction fav = controller.createAction("favorites");
     fav
       .setDescription("The issue filters marked as favorite by request user")
       .setSince("4.2")
@@ -78,7 +78,7 @@ public class IssueFilterWs implements WebService {
           favorites(request, response);
         }
       })
-      .newParam("id");
+      .createParam("id");
 
     controller.done();
   }
index eedce88d0ec5907b75182e41dd3a566376260e83..bd14da41b4b03cca67140dc73353737fef1e23e0 100644 (file)
@@ -31,15 +31,15 @@ public class IssuesWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/issues");
+    NewController controller = context.createController("api/issues");
     controller.setDescription("Coding rule issues");
 
-    controller.newAction("show")
+    controller.createAction("show")
       .setDescription("Detail of issue")
       .setSince("4.2")
       .setInternal(true)
       .setHandler(showHandler)
-      .newParam("key", "Issue key");
+      .createParam("key", "Issue key");
 
     controller.done();
   }
index 86e51ee1f3b3072a66f3c2863908abfd5f7d3fce..9bb024c037942531db2c92fcdecbce68209ac534 100644 (file)
@@ -65,7 +65,7 @@ public class QualityGatesWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/qualitygates")
+    NewController controller = context.createController("api/qualitygates")
       .setSince("4.3")
       .setDescription("This service can be used to manage quality gates, including requirements and project association.");
 
@@ -73,7 +73,7 @@ public class QualityGatesWs implements WebService {
 
     defineConditionActions(controller);
 
-    controller.newAction("app")
+    controller.createAction("app")
       .setInternal(true)
       .setDescription("Get initialization items for the admin UI")
       .setSince("4.3")
@@ -83,7 +83,7 @@ public class QualityGatesWs implements WebService {
   }
 
   private void defineConditionActions(NewController controller) {
-    NewAction createCondition = controller.newAction("create_condition")
+    NewAction createCondition = controller.createAction("create_condition")
     .setDescription("Add a new condition to a quality gate.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -92,10 +92,10 @@ public class QualityGatesWs implements WebService {
         createCondition(request, response);
       }
     });
-    createCondition.newParam(PARAM_GATE_ID).setDescription("The numerical ID of the quality gate for which the condition will be created.");
+    createCondition.createParam(PARAM_GATE_ID).setDescription("The numerical ID of the quality gate for which the condition will be created.");
     addConditionParams(createCondition);
 
-    NewAction updateCondition = controller.newAction("update_condition")
+    NewAction updateCondition = controller.createAction("update_condition")
     .setDescription("Update a condition attached to a quality gate.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -104,10 +104,10 @@ public class QualityGatesWs implements WebService {
         updateCondition(request, response);
       }
     });
-    updateCondition.newParam(PARAM_ID).setDescription("The numerical ID of the condition to update.");
+    updateCondition.createParam(PARAM_ID).setDescription("The numerical ID of the condition to update.");
     addConditionParams(updateCondition);
 
-    controller.newAction("delete_condition")
+    controller.createAction("delete_condition")
     .setDescription("Remove a condition from a quality gate.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -115,19 +115,19 @@ public class QualityGatesWs implements WebService {
       public void handle(Request request, Response response) {
         deleteCondition(request, response);
       }
-    }).newParam(PARAM_ID).setDescription("The numerical ID of the condition to delete.");
+    }).createParam(PARAM_ID).setDescription("The numerical ID of the condition to delete.");
   }
 
   private void addConditionParams(NewAction createCondition) {
-    createCondition.newParam(PARAM_METRIC).setDescription("The key for the metric tested by this condition.");
-    createCondition.newParam(PARAM_OPERATOR).setDescription("The operator used for the test, one of 'EQ', 'NE', 'LT', 'GT'.");
-    createCondition.newParam(PARAM_PERIOD).setDescription("The optional period to use (for differential measures).");
-    createCondition.newParam(PARAM_WARNING).setDescription("An optional value for the warning threshold.");
-    createCondition.newParam(PARAM_ERROR).setDescription("An optional value for the error threshold.");
+    createCondition.createParam(PARAM_METRIC).setDescription("The key for the metric tested by this condition.");
+    createCondition.createParam(PARAM_OPERATOR).setDescription("The operator used for the test, one of 'EQ', 'NE', 'LT', 'GT'.");
+    createCondition.createParam(PARAM_PERIOD).setDescription("The optional period to use (for differential measures).");
+    createCondition.createParam(PARAM_WARNING).setDescription("An optional value for the warning threshold.");
+    createCondition.createParam(PARAM_ERROR).setDescription("An optional value for the error threshold.");
   }
 
   private void defineQualityGateActions(NewController controller) {
-    controller.newAction("create")
+    controller.createAction("create")
       .setDescription("Create a quality gate, given its name.")
       .setPost(true)
       .setHandler(new RequestHandler() {
@@ -135,9 +135,9 @@ public class QualityGatesWs implements WebService {
         public void handle(Request request, Response response) {
           create(request, response);
         }
-    }).newParam(PARAM_NAME).setDescription("The name of the quality gate to create.");
+    }).createParam(PARAM_NAME).setDescription("The name of the quality gate to create.");
 
-    NewAction copy = controller.newAction("copy")
+    NewAction copy = controller.createAction("copy")
       .setDescription("Copy a quality gate, given its ID and the name for the new quality gate.")
       .setPost(true)
       .setHandler(new RequestHandler() {
@@ -146,10 +146,10 @@ public class QualityGatesWs implements WebService {
           copy(request, response);
         }
     });
-    copy.newParam(PARAM_ID).setDescription("The ID of the source quality gate.");
-    copy.newParam(PARAM_NAME).setDescription("The name of the destination quality gate.");
+    copy.createParam(PARAM_ID).setDescription("The ID of the source quality gate.");
+    copy.createParam(PARAM_NAME).setDescription("The name of the destination quality gate.");
 
-    controller.newAction("set_as_default")
+    controller.createAction("set_as_default")
     .setDescription("Select the default quality gate.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -157,9 +157,9 @@ public class QualityGatesWs implements WebService {
       public void handle(Request request, Response response) {
         setDefault(request, response);
       }
-    }).newParam(PARAM_ID).setDescription("The ID of the quality gate to use as default.");
+    }).createParam(PARAM_ID).setDescription("The ID of the quality gate to use as default.");
 
-    controller.newAction("unset_default")
+    controller.createAction("unset_default")
     .setDescription("Unselect the default quality gate.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -169,7 +169,7 @@ public class QualityGatesWs implements WebService {
       }
     });
 
-    NewAction rename = controller.newAction("rename")
+    NewAction rename = controller.createAction("rename")
     .setDescription("Rename a quality gate, given its id and new name.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -178,10 +178,10 @@ public class QualityGatesWs implements WebService {
         rename(request, response);
       }
     });
-    rename.newParam(PARAM_ID).setDescription("The ID of the quality gate to rename.");
-    rename.newParam(PARAM_NAME).setDescription("The new name for the quality gate.");
+    rename.createParam(PARAM_ID).setDescription("The ID of the quality gate to rename.");
+    rename.createParam(PARAM_NAME).setDescription("The new name for the quality gate.");
 
-    controller.newAction("list")
+    controller.createAction("list")
     .setDescription("List all quality gates.")
     .setHandler(new RequestHandler() {
       @Override
@@ -190,17 +190,17 @@ public class QualityGatesWs implements WebService {
       }
     });
 
-    controller.newAction("show")
+    controller.createAction("show")
     .setDescription("Show a quality gate in details, with associated conditions.")
     .setHandler(new RequestHandler() {
       @Override
       public void handle(Request request, Response response) {
         show(request, response);
       }
-    }).newParam(PARAM_ID, "The ID of the quality gate; either this or name must be provided.")
-    .newParam(PARAM_NAME, "The name of the quality gate; either this or id must be provided.");
+    }).createParam(PARAM_ID, "The ID of the quality gate; either this or name must be provided.")
+    .createParam(PARAM_NAME, "The name of the quality gate; either this or id must be provided.");
 
-    controller.newAction("destroy")
+    controller.createAction("destroy")
     .setDescription("Destroy a quality gate, given its id.")
     .setPost(true)
     .setHandler(new RequestHandler() {
@@ -208,9 +208,9 @@ public class QualityGatesWs implements WebService {
       public void handle(Request request, Response response) {
         destroy(request, response);
       }
-    }).newParam(PARAM_ID).setDescription("The numerical ID of the quality gate to destroy.");
+    }).createParam(PARAM_ID).setDescription("The numerical ID of the quality gate to destroy.");
 
-    NewAction search = controller.newAction("search")
+    NewAction search = controller.createAction("search")
     .setDescription("Search projects associated (or not) with a quality gate.")
     .setHandler(new RequestHandler() {
       @Override
@@ -218,13 +218,13 @@ public class QualityGatesWs implements WebService {
         search(request, response);
       }
     });
-    search.newParam(PARAM_GATE_ID).setDescription("The numerical ID of the quality gate considered for association.");
-    search.newParam(PARAM_SELECTED).setDescription("Optionally, to search for projects associated (selected=selected) or not (selected=deselected).");
-    search.newParam(PARAM_QUERY).setDescription("Optionally, part of the name of the projects to search for.");
-    search.newParam(PARAM_PAGE);
-    search.newParam(PARAM_PAGE_SIZE);
+    search.createParam(PARAM_GATE_ID).setDescription("The numerical ID of the quality gate considered for association.");
+    search.createParam(PARAM_SELECTED).setDescription("Optionally, to search for projects associated (selected=selected) or not (selected=deselected).");
+    search.createParam(PARAM_QUERY).setDescription("Optionally, part of the name of the projects to search for.");
+    search.createParam(PARAM_PAGE);
+    search.createParam(PARAM_PAGE_SIZE);
 
-    NewAction select = controller.newAction("select")
+    NewAction select = controller.createAction("select")
       .setPost(true)
       .setHandler(new RequestHandler() {
         @Override
@@ -232,10 +232,10 @@ public class QualityGatesWs implements WebService {
           select(request, response);
         }
       });
-    select.newParam(PARAM_GATE_ID);
-    select.newParam(PARAM_PROJECT_ID);
+    select.createParam(PARAM_GATE_ID);
+    select.createParam(PARAM_PROJECT_ID);
 
-    NewAction deselect = controller.newAction("deselect")
+    NewAction deselect = controller.createAction("deselect")
       .setPost(true)
       .setHandler(new RequestHandler() {
         @Override
@@ -243,8 +243,8 @@ public class QualityGatesWs implements WebService {
           deselect(request, response);
         }
       });
-    deselect.newParam(PARAM_GATE_ID);
-    deselect.newParam(PARAM_PROJECT_ID);
+    deselect.createParam(PARAM_GATE_ID);
+    deselect.createParam(PARAM_PROJECT_ID);
   }
 
   protected void copy(Request request, Response response) {
index a53094d8beaabe35ae7d27039840270ed9b9fc5d..5dbcef623abb34073524d0b4f9e95b032679d342 100644 (file)
@@ -37,10 +37,10 @@ public class RuleTagsWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/rule_tags")
+    NewController controller = context.createController("api/rule_tags")
       .setDescription("Rule tags");
 
-    controller.newAction("list")
+    controller.createAction("list")
       .setDescription("List all available rule tags")
       .setSince("4.2")
       .setHandler(new RequestHandler() {
@@ -50,7 +50,7 @@ public class RuleTagsWs implements WebService {
         }
       });
 
-    controller.newAction("create")
+    controller.createAction("create")
       .setPost(true)
       .setDescription("Create a new rule tag")
       .setSince("4.2")
@@ -60,7 +60,7 @@ public class RuleTagsWs implements WebService {
           create(request, response);
         }
       })
-      .newParam("tag").setDescription("Value of the new rule tag");
+      .createParam("tag").setDescription("Value of the new rule tag");
 
     controller.done();
   }
index aaed498d898eb0a15b0a97ca50139b24d6447f3a..1fba1f5f6cec2aef285b68a3ed4b28a952b98d78 100644 (file)
@@ -37,31 +37,31 @@ public class RulesWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/rules")
+    NewController controller = context.createController("api/rules")
       .setDescription("Coding rules");
 
-    controller.newAction("list")
+    controller.createAction("list")
       .setDescription("List rules that match the given criteria")
       .setSince("4.3")
       .setHandler(searchHandler)
-      .newParam("s", "An optional query that will be matched against rule titles.")
-      .newParam("k", "An optional query that will be matched exactly agains rule keys.")
-      .newParam("ps", "Optional page size (default is 25).")
-      .newParam("p", "Optional page number (default is 0).");
+      .createParam("s", "An optional query that will be matched against rule titles.")
+      .createParam("k", "An optional query that will be matched exactly agains rule keys.")
+      .createParam("ps", "Optional page size (default is 25).")
+      .createParam("p", "Optional page number (default is 0).");
 
-    controller.newAction("show")
+    controller.createAction("show")
       .setDescription("Detail of rule")
       .setSince("4.2")
       .setHandler(showHandler)
-      .newParam("key", "Mandatory key of rule");
+      .createParam("key", "Mandatory key of rule");
 
-    addTagParams(controller.newAction("add_tags")
+    addTagParams(controller.createAction("add_tags")
       .setDescription("Add tags to a rule")
       .setSince("4.2")
       .setPost(true)
       .setHandler(addTagsWsHandler));
 
-    addTagParams(controller.newAction("remove_tags")
+    addTagParams(controller.createAction("remove_tags")
       .setDescription("Remove tags from a rule")
       .setSince("4.2")
       .setPost(true)
@@ -71,7 +71,7 @@ public class RulesWs implements WebService {
   }
 
   private void addTagParams(final NewAction action) {
-    action.newParam("key", "Full key of the rule");
-    action.newParam("tags", "Comma separated list of tags");
+    action.createParam("key", "Full key of the rule");
+    action.createParam("tags", "Comma separated list of tags");
   }
 }
index 5843462ae19ce72e75940f7291fcd8c349a48c53..0530f6f588ce96aa615fff4252c00cde07c09b15 100644 (file)
@@ -32,14 +32,14 @@ public class SourcesWs implements WebService {
 
   @Override
   public void define(Context context) {
-    NewController controller = context.newController("api/sources");
+    NewController controller = context.createController("api/sources");
 
-    controller.newAction("show")
+    controller.createAction("show")
       .setDescription("Show source of a component")
       .setSince("4.2")
       .setInternal(true)
       .setHandler(showHandler)
-      .newParam("key", "Component key");
+      .createParam("key", "Component key");
 
     controller.done();
   }
index 89c77b04c8349042df5d197386704d1198fec2b9..0c91af5e257e6ad6a592f0a56a1e3e6329a16f3c 100644 (file)
@@ -39,10 +39,10 @@ public class ListingWs implements WebService {
 
   @Override
   public void define(final Context context) {
-    NewController controller = context.newController("api/webservices")
+    NewController controller = context.createController("api/webservices")
       .setDescription("List web services")
       .setSince("4.2");
-    controller.newAction("list")
+    controller.createAction("list")
       .setHandler(new RequestHandler() {
         @Override
         public void handle(Request request, Response response) {
index 2182b2bccc65867336df12ce39e1133187c457be..b14dfeecb373192ac1685909ad1e9f666fffd263 100644 (file)
@@ -56,12 +56,12 @@ public class ListingWsTest {
   static class MetricWebService implements WebService {
     @Override
     public void define(Context context) {
-      NewController newController = context.newController("api/metric")
+      NewController newController = context.createController("api/metric")
         .setDescription("Metrics")
         .setSince("3.2");
 
       // action with default values
-      newController.newAction("show")
+      newController.createAction("show")
         .setHandler(new RequestHandler() {
           @Override
           public void handle(Request request, Response response) {
@@ -70,7 +70,7 @@ public class ListingWsTest {
 
 
       // action with a lot of overridden values
-      NewAction create = newController.newAction("create")
+      NewAction create = newController.createAction("create")
         .setDescription("Create metric")
         .setSince("4.1")
         .setPost(true)
@@ -80,8 +80,8 @@ public class ListingWsTest {
           public void handle(Request request, Response response) {
           }
         });
-      create.newParam("key").setDescription("Key of new metric");
-      create.newParam("name");
+      create.createParam("key").setDescription("Key of new metric");
+      create.createParam("name");
       newController.done();
     }
   }
index 2cfcdbfe87e7f91182c96242a64442a7b940051d..f0d61af96c19dbd53570f16e2838514c227de66f 100644 (file)
@@ -216,8 +216,8 @@ public class WebServiceEngineTest {
   static class SystemWebService implements WebService {
     @Override
     public void define(Context context) {
-      NewController newController = context.newController("api/system");
-      newController.newAction("health")
+      NewController newController = context.createController("api/system");
+      newController.createAction("health")
         .setHandler(new RequestHandler() {
           @Override
           public void handle(Request request, Response response) {
@@ -228,7 +228,7 @@ public class WebServiceEngineTest {
             }
           }
         });
-      newController.newAction("ping")
+      newController.createAction("ping")
         .setPost(true)
         .setHandler(new RequestHandler() {
           @Override
@@ -240,7 +240,7 @@ public class WebServiceEngineTest {
             }
           }
         });
-      newController.newAction("fail")
+      newController.createAction("fail")
         .setHandler(new RequestHandler() {
           @Override
           public void handle(Request request, Response response) {
@@ -254,7 +254,7 @@ public class WebServiceEngineTest {
             throw new IllegalStateException("Unexpected");
           }
         });
-      newController.newAction("alive")
+      newController.createAction("alive")
       .setHandler(new RequestHandler() {
         @Override
         public void handle(Request request, Response response) {
@@ -263,9 +263,9 @@ public class WebServiceEngineTest {
       });
 
       // parameter "message" is required but not "author"
-      newController.newAction("print")
-        .newParam("message", "required message")
-        .newParam("author", "optional author")
+      newController.createAction("print")
+        .createParam("message", "required message")
+        .createParam("author", "optional author")
         .setHandler(new RequestHandler() {
           @Override
           public void handle(Request request, Response response) {