为 JFace 数据绑定添加 IValidator 到 ListBinding

Add IValidator to ListBinding for JFace Databinding

class ValueBinding 有两个 UpdateValueStrategy(用于目标到模型和模型到目标),它们都有一个转换器和三个验证器("after get"、"after convert" 和 "before set")。

带有 UpdateListStrategys 的 ListBinding 没有任何东西,只有一个转换器(我不确定那个东西是否打开)。我想为验证列表中至少有一个元素的用例实现类似于 UpdateValueStrategy 的验证器。

我尝试过的(以及我是如何失败的):

有效的是针对新 WritableValue 创建第二个绑定并向其添加验证器。但这并不是真正的最佳选择。我宁愿有一个在验证失败时不会更新的绑定。

我敢肯定之前肯定有人遇到过同样的问题,因此问题是:如何将 IValidator 添加到 ListBinding

所以我自己做了 UpdateListStrategy(用 21 点和...没关系):

public class BetterUpdateListStrategy extends UpdateListStrategy {

    @Override
    protected IStatus doAdd(IObservableList observableList, Object element, int index) {
        IStatus result = super.doAdd(observableList, element, index);
        if (result.isOK()) {
            result = validate(observableList);
        }
        return result;
    }

    // these methods are overridden in exactly the same way: 
    // protected IStatus doMove(IObservableList observableList, int oldIndex, int newIndex)
    // protected IStatus doRemove(IObservableList observableList, int index) 
    // protected IStatus doReplace(IObservableList observableList, int index, Object element) 

    private IStatus validate(IObservableList value) {
        // my validation; I added an IValidator to have a similar API
        // to the UpdateValueStrategy
        return Status.OK_STATUS;
    }
}

它还不能完美地工作(如果验证失败,绑定没有错误状态),但这可能对其他人有帮助。