Source for org.relaxng.datatype.helpers.StreamingValidatorImpl

   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: }