writer.prop("maxValuesAllowed", param.maxValuesAllowed());
ofNullable(param.possibleValues()).ifPresent(possibleValues -> writer.name("possibleValues").beginArray().values(possibleValues).endArray());
ofNullable(param.maximumLength()).ifPresent(maximumLength -> writer.prop("maximumLength", maximumLength));
+ ofNullable(param.minimumLength()).ifPresent(minimumLength -> writer.prop("minimumLength", minimumLength));
ofNullable(param.maximumValue()).ifPresent(maximumValue -> writer.prop("maximumValue", maximumValue));
writer.endObject();
}
],
"params": [
{
- "key": "maximum_value",
- "maximumValue": 12,
+ "key": "constrained_numeric_param",
"required": false,
- "internal": false
+ "internal": false,
+ "maximumValue": 12
+ },
+ {
+ "key": "constrained_string_param",
+ "required": false,
+ "internal": false,
+ "maximumLength": 64,
+ "minimumLength": 3
},
{
"key": "name",
},
{
"key": "severity",
- "maximumLength": 20,
"description": "Severity",
"required": false,
"internal": false,
create
.createParam("severity")
- .setMaximumLength(20)
.setDescription("Severity")
.setSince("4.4")
.setDeprecatedSince("5.2")
.setDefaultValue("BLOCKER");
create.createParam("name");
create.createParam("internal").setInternal(true);
- create.createParam("maximum_value").setMaximumValue(12);
+
+ create
+ .createParam("constrained_string_param")
+ .setMaximumLength(64)
+ .setMinimumLength(3);
+
+ create
+ .createParam("constrained_numeric_param")
+ .setMaximumValue(12);
newController.createAction("internal_action")
.setDescription("Internal Action Description")
"hasResponseExample": true,
"params": [
{
- "key": "maximum_value",
+ "key": "constrained_numeric_param",
+ "required": false,
+ "internal": false,
"maximumValue": 12
},
+ {
+ "key": "constrained_string_param",
+ "required": false,
+ "internal": false,
+ "maximumLength": 64,
+ "minimumLength": 3
+ },
{
"key": "name",
"required": false,
private Set<String> possibleValues = null;
private Integer maxValuesAllowed;
private Integer maximumLength;
+ private Integer minimumLength;
private Integer maximumValue;
private NewParam(String key) {
return this;
}
+ /**
+ * @since 7.0
+ */
+ public NewParam setMinimumLength(@Nullable Integer minimumLength) {
+ this.minimumLength = minimumLength;
+ return this;
+ }
+
/**
* @since 7.0
*/
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;
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);
}
return maximumLength;
}
+ /**
+ * 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
*
}
validatePossibleValues(key, value, definition);
validateMaximumLength(key, definition, valueOrDefault);
+ validateMinimumLength(key, definition, valueOrDefault);
validateMaximumValue(key, definition, value);
return value;
}
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) {
assertThat(action.param("string_value").maximumLength()).isEqualTo(24);
}
+ @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 -> {