diff options
author | Guillaume Jambet <guillaume.jambet@sonarsource.com> | 2017-11-07 11:14:06 +0100 |
---|---|---|
committer | Guillaume Jambet <guillaume.jambet@gmail.com> | 2017-11-09 16:07:06 +0100 |
commit | 7774bfe48a8028c799cbe7cf322bcd6f0dddda47 (patch) | |
tree | 368a721c3ab67fb4557ee7bf8797dbe7c627faef /sonar-plugin-api | |
parent | b59f61feccd5a3e95893ac0fc68149aa403a992f (diff) | |
download | sonarqube-7774bfe48a8028c799cbe7cf322bcd6f0dddda47.tar.gz sonarqube-7774bfe48a8028c799cbe7cf322bcd6f0dddda47.zip |
SONAR-10046 adding minimum length validation to Request api
Diffstat (limited to 'sonar-plugin-api')
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"); |