001package org.relaxng.datatype;
002
003/**
004 * Datatype streaming validator.
005 * 
006 * <p>
007 * The streaming validator is an optional feature that is useful for
008 * certain Datatypes. It allows the caller to incrementally provide
009 * the literal.
010 * 
011 * @author <a href="mailto:jjc@jclark.com">James Clark</a>
012 * @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a>
013 */
014public interface DatatypeStreamingValidator {
015        
016        /**
017         * Passes an additional fragment of the literal.
018         * 
019         * <p>
020         * The application can call this method several times, then call
021         * the isValid method (or the checkValid method) to check the validity
022         * of the accumulated characters.
023         */
024        void addCharacters( char[] buf, int start, int len );
025        
026        /**
027         * Tells if the accumulated literal is valid with respect to
028         * the underlying Datatype.
029         * 
030         * @return
031         *              True if it is valid. False if otherwise.
032         */
033        boolean isValid();
034        
035        /**
036         * Similar to the isValid method, but this method throws
037         * Exception (with possibly diagnostic information), instead of
038         * returning false.
039         * 
040         * @exception DatatypeException
041         *              If the callee supports the diagnosis and the accumulated
042         *              literal is invalid, then this exception that possibly
043         *              contains diagnosis information is thrown.
044         */
045        void checkValid() throws DatatypeException;
046}