У меня проблема с проверкой двух полей, я пытаюсь сравнить два поля одновременно - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть поле даты рождения, и поле MBG, MBG и дата рождения должны совпадать (например: если дата рождения 08/10/1990, они должны начинаться с 0810990 ...)

, сейчас у меня есть проверки для одного поля:

  1. Валидатор MBG:
    public class MBGValidator implements IValidator {   
        @Override
        public IStatus validate(Object value) {
            if (value instanceof String) {
                String MBG = (String) value;        
                //rest of the code for validate MBG, check there are 13 characters and all numbers
     }
}

Валидатор даты рождения:

public class BirthdateValidator implements IValidator { 
    @Override
    public IStatus validate(Object value) {
        if (value instanceof Date) {
            LocalDateTime today = LocalDateTime.now();  
            Date birthday = (Date) value;   
            //rest of the code, check birthdate cant be in future
 }

}

Валидатор звонков:

DataBindingContext ctx = new DataBindingContext();  

//Validation for MBG:
IObservableValue MBGWidget = WidgetProperties.text(SWT.Modify).observe(MBG);
IObservableValue MBGModel = BeanProperties.value(Employee.class,"MBG").observe(employee);
UpdateValueStrategy strategy = new UpdateValueStrategy();
strategy.setBeforeSetValidator(new MBGValidator());

//Validation for birthdate:
IObservableValue birthDateWidget = WidgetProperties.selection().observe(birthDate);
IObservableValue birthDateModel = 
     BeanProperties.value(Employee.class,"birthDate").observe(employee);
strategy = new UpdateValueStrategy();
     strategy.setBeforeSetValidator(new BirthdateValidator());
ctx.bindValue(birthDateWidget, birthDateModel, strategy, null);

, что пока все нормально, но теперь мне нужно проверить, что два поля в одном классе

Я пытался сделать это:

public class BirthdateMBGValidator extends MultiValidator {

    private final IObservableValue MBG;
    private final IObservableValue birthdate;

    public BirthdateMBGValidator(final IObservableValue MBG, final IObservableValue birthdate) {
        this.MBG = MBG;
        this.birthdate = birthdate;
    }

    @Override
    protected IStatus validate() {
        Date birthDate = (Date) this.birthdate.getValue();
        String jmbg = (String) this.MBG.getValue();     
        //rest of the code, comparing birthdate and jmbg
    }
}

, но я не знаю, как я могу правильно вызвать валидатор, пробовал что-то вроде это (одно из решений, которое я пробовал):

BirthdateMBGValidator validator = new BirthdateMBGValidator(MBGWidget,birthDateWidget);
ctx.addValidationStatusProvider(validator); //ctx = new DataBindingContext();
ctx.bindValue(MBGWidget,MBGModel,null,null);
ctx.bindValue(birthDateWidget, birthDateModel, null, null);

Может кто-нибудь сказать мне, как я могу исправить эту последнюю часть кода?

...