1 package org.relaxng.datatype.helpers; 2 3 import org.relaxng.datatype.*; 4 5 /** 6 * Dummy implementation of {@link DatatypeStreamingValidator}. 7 * 8 * <p> 9 * This implementation can be used as a quick hack when the performance 10 * of streaming validation is not important. And this implementation 11 * also shows you how to implement the DatatypeStreamingValidator interface. 12 * 13 * <p> 14 * Typical usage would be: 15 * <PRE><XMP> 16 * class MyDatatype implements Datatype { 17 * .... 18 * public DatatypeStreamingValidator createStreamingValidator( ValidationContext context ) { 19 * return new StreamingValidatorImpl(this,context); 20 * } 21 * .... 22 * } 23 * </XMP></PRE> 24 * 25 * @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a> 26 */ 27 public final class StreamingValidatorImpl implements DatatypeStreamingValidator { 28 29 /** This buffer accumulates characters. */ 30 private final StringBuffer buffer = new StringBuffer(); 31 32 /** Datatype obejct that creates this streaming validator. */ 33 private final Datatype baseType; 34 35 /** The current context. */ 36 private final ValidationContext context; 37 38 public void addCharacters( char[] buf, int start, int len ) { 39 // append characters to the current buffer. 40 buffer.append(buf,start,len); 41 } 42 43 public boolean isValid() { 44 return baseType.isValid(buffer.toString(),context); 45 } 46 47 public void checkValid() throws DatatypeException { 48 baseType.checkValid(buffer.toString(),context); 49 } 50 51 public StreamingValidatorImpl( Datatype baseType, ValidationContext context ) { 52 this.baseType = baseType; 53 this.context = context; 54 } 55 }