Creating a new rule
Maybe you have other rules in mind that are not yet in lib. You can add them yourself and without much efforts.
There is a class named ValidatorConfig
that help you to customise the validator.
Creating a list of all your custom rules
Defining the enum :
public enum CustomRules implements RuleDescriptor {
CONTAIN(RuleContain.class, "contain", 1, ":attr does not contain :1."),
;
private Class<? extends Rule> rule;
private String defaultMessage;
private String definer;
private int paramsCount;
CustomRules(Class<? extends Rule> rule, String definer, int paramsCount, String defaultMessage) {
this.rule = rule;
this.defaultMessage = defaultMessage;
this.paramsCount = paramsCount;
this.definer = definer;
}
@Override
public Class<? extends Rule> getRule() {
return rule;
}
@Override
public String getDefaultMessage() {
return defaultMessage;
}
@Override
public void setDefaultMessage(String ruleName, String message) {
this.defaultMessage = message;
}
@Override
public String getRuleName() {
return definer;
}
@Override
public int getParamsCount() {
return paramsCount;
}
@Override
public String toString() {
return "DefaultRules{" +
"rule=" + rule +
", defaultMessage='" + defaultMessage + '\'' +
", definer='" + definer + '\'' +
", paramsCount=" + paramsCount +
'}';
}
public static Optional<RuleDescriptor> getByRuleName(String ruleName) {
return Stream.of(DefaultRules.values())
.filter(e -> e.getRuleName().equals(ruleName))
.map(e -> (RuleDescriptor)e).findFirst();
}
- You need to precise what class the validator need to instantiate.
- You need to precise the rule name.
- You need to precise how much param need the rule.
-1
for dynamic params (like...
in java) - You need to declare a message. The
:1
in the message is the reference to the first param.
Define the rule
Next define the class RuleContain
public class RuleContain extends AbstractRule {
@Override
public boolean isOkay(Form f) {
Optional<String> s = f.getString(rule.getField());
String contain = rule.getParams().get(0);
return s.filter(str -> str.contains(contain)).isPresent();
}
}
Add the rule
In your main class you can do this
ValidatorConfig.cfg().ruleList.add(Arrays.asList(CustomRules.values()))