package com.github.czyzby.lml.vis.parser.impl.tag.validator; import com.github.czyzby.kiwi.util.common.Strings; import com.github.czyzby.lml.parser.LmlParser; import com.github.czyzby.lml.parser.action.ActorConsumer; import com.github.czyzby.lml.parser.tag.LmlTag; import com.kotcrab.vis.ui.util.InputValidator; import com.kotcrab.vis.ui.util.form.FormInputValidator; /** Allows to create custom {@link InputValidator}s. Expects one attribute: name of a method that consumes a string and * returns a boolean. Mapped to "validator", "customValidator". * * @author MJ * @see com.github.czyzby.lml.vis.parser.impl.attribute.validator.CustomValidatorLmlAttribute */ public class CustomValidatorLmlTag extends AbstractValidatorLmlTag { private final CustomValidator validator = new CustomValidator(); public CustomValidatorLmlTag(final LmlParser parser, final LmlTag parentTag, final StringBuilder rawTagData) { super(parser, parentTag, rawTagData); } @Override public InputValidator getInputValidator() { return validator; } @Override protected void doBeforeAttach(final InputValidator validator) { if (this.validator.validator == null) { getParser().throwError( "Custom validator needs at least one attribute: ID of method that consumes a string and returns a boolean."); } } /** Wraps around an actor consumer, converting it into a {@link FormInputValidator}; * * @author MJ */ public static class CustomValidator extends FormInputValidator { private ActorConsumer<Boolean, String> validator; public CustomValidator() { super(Strings.EMPTY_STRING); } /** @param validator LML action used for validation. */ public void setValidator(final ActorConsumer<Boolean, String> validator) { this.validator = validator; } @Override protected boolean validate(final String input) { return validator.consume(input); } } }