001package org.relaxng.datatype.helpers;
002
003import org.relaxng.datatype.*;
004
005/**
006 * Dummy implementation of {@link DatatypeStreamingValidator}.
007 * 
008 * <p>
009 * This implementation can be used as a quick hack when the performance
010 * of streaming validation is not important. And this implementation
011 * also shows you how to implement the DatatypeStreamingValidator interface.
012 * 
013 * <p>
014 * Typical usage would be:
015 * <PRE><XMP>
016 * class MyDatatype implements Datatype {
017 *     ....
018 *     public DatatypeStreamingValidator createStreamingValidator( ValidationContext context ) {
019 *         return new StreamingValidatorImpl(this,context);
020 *     }
021 *     ....
022 * }
023 * </XMP></PRE>
024 * 
025 * @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a>
026 */
027public final class StreamingValidatorImpl implements DatatypeStreamingValidator {
028        
029        /** This buffer accumulates characters. */
030        private final StringBuffer buffer = new StringBuffer();
031        
032        /** Datatype obejct that creates this streaming validator. */
033        private final Datatype baseType;
034        
035        /** The current context. */
036        private final ValidationContext context;
037        
038        public void addCharacters( char[] buf, int start, int len ) {
039                // append characters to the current buffer.
040                buffer.append(buf,start,len);
041        }
042        
043        public boolean isValid() {
044                return baseType.isValid(buffer.toString(),context);
045        }
046        
047        public void checkValid() throws DatatypeException {
048                baseType.checkValid(buffer.toString(),context);
049        }
050        
051        public StreamingValidatorImpl( Datatype baseType, ValidationContext context ) {
052                this.baseType = baseType;
053                this.context = context;
054        }
055}