[]
        
(Showing Draft Content)

高级自定义校验

属性校验章节中,我们可以通过标注一些注解实现简单的设计时校验逻辑。,但是部分情况用户需要对于比较复杂的情况实现一种自定义验证。

编辑命令时校验

例如,有一个命令,有两个数字类型的属性,代码如下。

@Data
@Icon("resources/Icon.png")
public class MyPlugin extends Command implements ICommandExecutableInServerSide {

    private int addNumber1;

    private int addNumber2;

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        return new ExecuteResult();
    }
    @Override
    public String validate(){
        if(addNumber1 + addNumber2 <= 100){
            return "add1num 与 add2num 的和必须大于 100";
        }
        return super.validate();
    }
    @Override
    public String toString() {
        return "我的插件";
    }
}

如果校验逻辑要求,addNumber1 与 addNumber2 的和,必须大于100。可以重写 validate 方法, 这个方法如果返回一个不为Null的字符串,表示校验失败,并且会在命令对话框中弹出错误提示。

设计器表现:

image

设计器运行工程时校验

如果校验逻辑要求,addNumber1与 addNumber2 的和,必须大于100,如果小于100,应该给用户提出警告,如果小于10 ,则应该提出错误。这是一个相对复杂的校验逻辑,没有办法通过标注 Attribute 实现,只能通过代码逻辑来实现。实现的方式是让 Command 实现 ICommandChecker接口。代码如下:

@Data
@Icon("resources/Icon.png")
public class MyPlugin extends Command implements ICommandExecutableInServerSide, ICommandChecker {

    private int addNumber1;

    private int addNumber2;

    @Override
    public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
        return new ExecuteResult();
    }

    @Override
    public String toString() {
        return "我的插件";
    }

    @Override
    public List<ForguncyErrorInfo> checkCommandErrors() {
        List<ForguncyErrorInfo> list = new ArrayList<>();
        if (addNumber1 + addNumber2 <= 10){
            ForguncyErrorInfo error = new ForguncyErrorInfo();
            error.setErrorType(ForguncyErrorType.Error);
            list.add(error);
            error.setMessage("addNumber1 与 addNumber2 的和不能小于等于 10");
        } else if(addNumber1 + addNumber2 <= 100){
            ForguncyErrorInfo warning = new ForguncyErrorInfo();
            warning.setErrorType(ForguncyErrorType.Warning);
            warning.setMessage("addNumber1 与 addNumber1 的和小于 100 的设置是不合理的,请考虑修改");
            list.add(warning);
        }
        return list;
    }
}

效果:

  • 当命令的设置为两个属性值的和大于等于 100 时,活字格不会报错;

  • 当命令的设置为两个属性值的和在10 到 99 之间时,活字格在运行时会产生一个警告。

image

  • 当命令的设置为两个属性值的和小于 10 时,活字格在运行时会产生一个错误,并且不会运行应用程序。