/*
* Copyright 2000-2016 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.v7.data;
import com.vaadin.data.Binder;
import java.io.Serializable;
import java.util.Collection;
/**
* <p>
* Interface for validatable objects. Defines methods to verify if the object's
* value is valid or not, and to add, remove and list registered validators of
* the object.
* </p>
*
* @author Vaadin Ltd.
* @since 3.0
* @see Validator
* @deprecated As of 8.0, no direct replacement available. See {@link Binder}, {@link com.vaadin.data.Validator}.
*/
@Deprecated
public interface Validatable extends Serializable {
/**
* <p>
* Adds a new validator for this object. The validator's
* {@link Validator#validate(Object)} method is activated every time the
* object's value needs to be verified, that is, when the {@link #isValid()}
* method is called. This usually happens when the object's value changes.
* </p>
*
* @param validator
* the new validator
*/
void addValidator(Validator validator);
/**
* <p>
* Removes a previously registered validator from the object. The specified
* validator is removed from the object and its <code>validate</code> method
* is no longer called in {@link #isValid()}.
* </p>
*
* @param validator
* the validator to remove
*/
void removeValidator(Validator validator);
/**
* Removes all validators from this object, as if
* {@link #removeValidator(Validator) removeValidator} was called for each
* registered validator.
*/
void removeAllValidators();
/**
* <p>
* Returns a collection of all validators currently registered for the
* object. The collection may be immutable. Calling
* <code>removeValidator</code> for this Validatable while iterating over
* the collection may be unsafe (e.g. may throw
* <code>ConcurrentModificationException</code>.)
* </p>
*
* @return A collection of validators
*/
public Collection<Validator> getValidators();
/**
* <p>
* Tests the current value of the object against all registered validators.
* The registered validators are iterated and for each the
* {@link Validator#validate(Object)} method is called. If any validator
* throws the {@link Validator.InvalidValueException} this method returns
* <code>false</code>.
* </p>
*
* @return <code>true</code> if the registered validators concur that the
* value is valid, <code>false</code> otherwise
*/
public boolean isValid();
/**
* <p>
* Checks the validity of the validatable. If the validatable is valid this
* method should do nothing, and if it's not valid, it should throw
* <code>Validator.InvalidValueException</code>
* </p>
*
* @throws Validator.InvalidValueException
* if the value is not valid
*/
public void validate() throws Validator.InvalidValueException;
/**
* <p>
* Checks the validabtable object accept invalid values.The default value is
* <code>true</code>.
* </p>
*
*/
public boolean isInvalidAllowed();
/**
* <p>
* Should the validabtable object accept invalid values. Supporting this
* configuration possibility is optional. By default invalid values are
* allowed.
* </p>
*
* @param invalidValueAllowed
*
* @throws UnsupportedOperationException
* if the setInvalidAllowed is not supported.
*/
public void setInvalidAllowed(boolean invalidValueAllowed)
throws UnsupportedOperationException;
}