001 package org.relaxng.datatype.helpers;
002
003 import 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 */
027 public 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 }