/*******************************************************************************
* Copyright (c) 2010 Philipp Kursawe.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Philipp Kursawe (phil.kursawe@gmail.com) - initial API and implementation
******************************************************************************/
package eclipseutils.jface.databinding.validators;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
/**
* Contains at least two validators that are all validated together.
*
* @author <a href="mailto:phil.kursawe@gmail.com">Philipp Kursawe</a>
*
*/
public class CompoundValidator implements IValidator {
private final IValidator[] validators;
private final int severity;
/**
* Creates a new compound validator.
*
* @param validator1
* @param validator2
* @param validatorParams
*/
public CompoundValidator(final IValidator validator1,
final IValidator validator2, final IValidator... validatorParams) {
this(IStatus.ERROR, validator1, validator2, validatorParams);
}
/**
* @param severity
* the IStatus severity to report this validation error with.
* @param validator1
* first validator
* @param validator2
* second validator
* @param validatorParams
* remaining validators
*/
public CompoundValidator(final int severity, final IValidator validator1,
final IValidator validator2, final IValidator... validatorParams) {
this.severity = severity;
this.validators = new IValidator[validatorParams.length + 2];
this.validators[0] = validator1;
this.validators[1] = validator2;
System.arraycopy(validatorParams, 0, this.validators, 2,
validatorParams.length);
}
public IStatus validate(final Object value) {
for (final IValidator validator : validators) {
final IStatus status = AbstractValidator.safeValidate(validator,
value, severity);
if (!status.isOK()) {
return status;
}
}
return Status.OK_STATUS;
}
}