Skip to content

Commit 725883e

Browse files
author
andre.cruz
committed
added a regex validator for FreeTextFieldType
1 parent 621b2dc commit 725883e

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

openml-api/src/main/java/com/feedzai/openml/provider/descriptor/fieldtype/FreeTextFieldType.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.util.Objects;
2424
import java.util.Optional;
25+
import java.util.regex.Pattern;
2526

2627
/**
2728
* A concrete implementation of a {@link ModelParameterType} for parameters whose values are textual.
@@ -36,18 +37,46 @@ public class FreeTextFieldType implements ModelParameterType {
3637
*/
3738
private final String defaultValue;
3839

40+
/**
41+
* A regular expression defining a valid input.
42+
*/
43+
private final String validRegex;
44+
3945
/**
4046
* Creates a new instance of this class.
4147
*
4248
* @param defaultValue The default value.
4349
*/
4450
public FreeTextFieldType(final String defaultValue) {
51+
this(defaultValue, null);
52+
}
53+
54+
/**
55+
* Creates a new instance of this class.
56+
*
57+
* @param defaultValue The default value.
58+
* @param validRegex A regex that matches valid inputs.
59+
*/
60+
public FreeTextFieldType(final String defaultValue, final String validRegex) {
4561
this.defaultValue = Preconditions.checkNotNull(defaultValue, "defaultValue can't be null.");
62+
this.validRegex = validRegex;
4663
}
4764

4865
@Override
4966
public Optional<ParamValidationError> validate(final String parameterName, final String parameterValue) {
50-
return Optional.empty();
67+
if (this.validRegex == null) {
68+
return Optional.empty();
69+
}
70+
71+
if (Pattern.matches(this.validRegex, parameterValue)) {
72+
return Optional.empty();
73+
} else {
74+
return Optional.of(new ParamValidationError(
75+
parameterName,
76+
parameterValue,
77+
"Should match the following regex: " + this.validRegex
78+
));
79+
}
5180
}
5281

5382
/**

openml-api/src/test/java/com/feedzai/openml/provider/fieldtype/FreeTextFieldTypeTest.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
public class FreeTextFieldTypeTest extends AbstractConfigFieldTypeTest<FreeTextFieldType> {
3232

3333
/**
34-
* Tests the {@link FreeTextFieldType#validate(String, String)} method.
34+
* Tests the {@link FreeTextFieldType#validate(String, String)} method with no regex validator string.
3535
*/
3636
@Test
3737
public void validate() {
@@ -43,6 +43,28 @@ public void validate() {
4343
assertValidationResult(fieldType, "param2", "some string", false);
4444
}
4545

46+
/**
47+
* Tests the {@link FreeTextFieldType#validate(String, String)} method using the regex validator constructor.
48+
*/
49+
@Test
50+
public void validateRegex() {
51+
final FreeTextFieldType fieldType = new FreeTextFieldType("1", "^((\\d+(\\.\\d*)?,)*(\\d+(\\.\\d*)?))$");
52+
53+
// Test valid inputs
54+
assertValidationResult(fieldType, "param0", "1", false);
55+
assertValidationResult(fieldType, "param0", "1.", false);
56+
assertValidationResult(fieldType, "param1", "1.2", false);
57+
assertValidationResult(fieldType, "param0", "1.,2", false);
58+
assertValidationResult(fieldType, "param2", "1.2,3,4.5", false);
59+
assertValidationResult(fieldType, "param3", "1,2,3.4", false);
60+
61+
// Test invalid inputs
62+
assertValidationResult(fieldType, "param4", "", true);
63+
assertValidationResult(fieldType, "param5", "1,", true);
64+
assertValidationResult(fieldType, "param6", ",1", true);
65+
assertValidationResult(fieldType, "param6", "1.2,3.,", true);
66+
}
67+
4668
/**
4769
* Checks the default value method.
4870
*/

0 commit comments

Comments
 (0)