/*
* Copyright 2011 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.data.validator;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import com.vaadin.data.Validator;
/**
* The
* The value is valid, if:
* CompositeValidator allows you to chain (compose) many
* validators to validate one field. The contained validators may be required to
* all validate the value to validate or it may be enough that one contained
* validator validates the value. This behaviour is controlled by the modes
* AND and OR.
*
* @author Vaadin Ltd.
* @version
* 6.8.18
* @since 3.0
*/
@SuppressWarnings("serial")
public class CompositeValidator extends AbstractValidator {
/**
* The validators are combined with AND clause: validity of the
* composite implies validity of the all validators it is composed of must
* be valid.
*/
public static final int MODE_AND = 0;
/**
* The validators are combined with OR clause: validity of the
* composite implies that some of validators it is composed of must be
* valid.
*/
public static final int MODE_OR = 1;
/**
* The validators are combined with and clause: validity of the composite
* implies validity of the all validators it is composed of
*/
public static final int MODE_DEFAULT = MODE_AND;
/**
* Operation mode.
*/
private int mode = MODE_DEFAULT;
/**
* List of contained validators.
*/
private final ListAND mode without error
* message.
*/
public CompositeValidator() {
super("");
}
/**
* Constructs a composite validator in given mode.
*/
public CompositeValidator(int mode, String errorMessage) {
super(errorMessage);
setMode(mode);
}
/**
* Validates the given value.
*
*
*
* If the value is invalid, validation error is thrown. If the error message
* is set (non-null), it is used. If the error message has not been set, the
* first error occurred is thrown.
* MODE_AND: All of the sub-validators are valid
* MODE_OR: Any of the sub-validators are valid
*
MODE_AND: All of the sub-validators are valid
* MODE_OR: Any of the sub-validators are valid
* MODE_AND or
* MODE_OR.
*/
public final int getMode() {
return mode;
}
/**
* Sets the mode of the validator. The valid modes are:
* MODE_AND (default)
* MODE_OR
*
* If the component contains directly or recursively (it contains another
* composite containing the validator) validators compatible with given type
* they are returned. This only applies to AND mode composite
* validators.
*
* If the validator is in OR mode or does not contain any
* validators of given type null is returned.
*