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();
    }
  1. You need to precise what class the validator need to instantiate.
  2. You need to precise the rule name.
  3. You need to precise how much param need the rule. -1 for dynamic params (like ... in java)
  4. 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()))

results matching ""

    No results matching ""