aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api
diff options
context:
space:
mode:
authorGuillaume Jambet <guillaume.jambet@sonarsource.com>2017-11-07 11:14:06 +0100
committerGuillaume Jambet <guillaume.jambet@gmail.com>2017-11-09 16:07:06 +0100
commit7774bfe48a8028c799cbe7cf322bcd6f0dddda47 (patch)
tree368a721c3ab67fb4557ee7bf8797dbe7c627faef /sonar-plugin-api
parentb59f61feccd5a3e95893ac0fc68149aa403a992f (diff)
downloadsonarqube-7774bfe48a8028c799cbe7cf322bcd6f0dddda47.tar.gz
sonarqube-7774bfe48a8028c799cbe7cf322bcd6f0dddda47.zip
SONAR-10046 adding minimum length validation to Request api
Diffstat (limited to 'sonar-plugin-api')
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java21
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java10
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java14
3 files changed, 45 insertions, 0 deletions
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
index 02285cab9ba..58a4e73f620 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/WebService.java
@@ -636,6 +636,7 @@ public interface WebService extends Definable<WebService.Context> {
private Set<String> possibleValues = null;
private Integer maxValuesAllowed;
private Integer maximumLength;
+ private Integer minimumLength;
private Integer maximumValue;
private NewParam(String key) {
@@ -784,6 +785,14 @@ public interface WebService extends Definable<WebService.Context> {
/**
* @since 7.0
*/
+ public NewParam setMinimumLength(@Nullable Integer minimumLength) {
+ this.minimumLength = minimumLength;
+ return this;
+ }
+
+ /**
+ * @since 7.0
+ */
public NewParam setMaximumValue(@Nullable Integer maximumValue) {
this.maximumValue = maximumValue;
return this;
@@ -844,6 +853,7 @@ public interface WebService extends Definable<WebService.Context> {
private final boolean internal;
private final Set<String> possibleValues;
private final Integer maximumLength;
+ private final Integer minimumLength;
private final Integer maximumValue;
private final Integer maxValuesAllowed;
@@ -861,6 +871,7 @@ public interface WebService extends Definable<WebService.Context> {
this.possibleValues = newParam.possibleValues;
this.maxValuesAllowed = newParam.maxValuesAllowed;
this.maximumLength = newParam.maximumLength;
+ this.minimumLength = newParam.minimumLength;
this.maximumValue = newParam.maximumValue;
checkArgument(!required || defaultValue == null, "Default value must not be set on parameter '%s?%s' as it's marked as required", action, key);
}
@@ -969,6 +980,16 @@ public interface WebService extends Definable<WebService.Context> {
}
/**
+ * Specify the minimum length of the value used in this parameter
+ *
+ * @since 7.0
+ */
+ @CheckForNull
+ public Integer minimumLength() {
+ return minimumLength;
+ }
+
+ /**
* Specify the maximum value of the numeric variable used in this parameter
*
* @since 7.0
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
index a9141a3943d..e217bd4325b 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/server/ws/internal/ValidatingRequest.java
@@ -76,6 +76,7 @@ public abstract class ValidatingRequest extends Request {
}
validatePossibleValues(key, value, definition);
validateMaximumLength(key, definition, valueOrDefault);
+ validateMinimumLength(key, definition, valueOrDefault);
validateMaximumValue(key, definition, value);
return value;
}
@@ -183,6 +184,15 @@ public abstract class ValidatingRequest extends Request {
checkArgument(valueLength <= maximumLength, "'%s' length (%s) is longer than the maximum authorized (%s)", key, valueLength, maximumLength);
}
+ private static void validateMinimumLength(String key, WebService.Param definition, String valueOrDefault) {
+ Integer minimumLength = definition.minimumLength();
+ if (minimumLength == null) {
+ return;
+ }
+ int valueLength = valueOrDefault.length();
+ checkArgument(valueLength >= minimumLength, "'%s' length (%s) is shorter than the minimum authorized (%s)", key, valueLength, minimumLength);
+ }
+
private static void validateMaximumValue(String key, WebService.Param definition, String value) {
Integer maximumValue = definition.maximumValue();
if (maximumValue == null) {
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java
index 3cf9d04101f..edfe2bab0cb 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/server/ws/WebServiceTest.java
@@ -316,6 +316,20 @@ public class WebServiceTest {
}
@Test
+ public void param_with_minimum_length() {
+ ((WebService) context -> {
+ NewController newController = context.createController("api/custom_measures");
+ NewAction create = newDefaultAction(newController, "create");
+ create.createParam("string_value")
+ .setMinimumLength(3);
+ newController.done();
+ }).define(context);
+
+ WebService.Action action = context.controller("api/custom_measures").action("create");
+ assertThat(action.param("string_value").minimumLength()).isEqualTo(3);
+ }
+
+ @Test
public void param_with_maximum_value() {
((WebService) context -> {
NewController newController = context.createController("api/custom_measures");