
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_xml_validation_ValidatorHandler__
#define __javax_xml_validation_ValidatorHandler__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace xml
    {
      namespace validation
      {
          class TypeInfoProvider;
          class ValidatorHandler;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
        namespace ls
        {
            class LSResourceResolver;
        }
      }
    }
    namespace xml
    {
      namespace sax
      {
          class Attributes;
          class ContentHandler;
          class ErrorHandler;
          class Locator;
      }
    }
  }
}

class javax::xml::validation::ValidatorHandler : public ::java::lang::Object
{

public: // actually protected
  ValidatorHandler();
public:
  virtual void setContentHandler(::org::xml::sax::ContentHandler *) = 0;
  virtual ::org::xml::sax::ContentHandler * getContentHandler() = 0;
  virtual void setErrorHandler(::org::xml::sax::ErrorHandler *) = 0;
  virtual ::org::xml::sax::ErrorHandler * getErrorHandler() = 0;
  virtual void setResourceResolver(::org::w3c::dom::ls::LSResourceResolver *) = 0;
  virtual ::org::w3c::dom::ls::LSResourceResolver * getResourceResolver() = 0;
  virtual ::javax::xml::validation::TypeInfoProvider * getTypeInfoProvider() = 0;
  virtual jboolean getFeature(::java::lang::String *);
  virtual void setFeature(::java::lang::String *, jboolean);
  virtual ::java::lang::Object * getProperty(::java::lang::String *);
  virtual void setProperty(::java::lang::String *, ::java::lang::Object *);
  virtual void setDocumentLocator(::org::xml::sax::Locator *) = 0;
  virtual void startDocument() = 0;
  virtual void endDocument() = 0;
  virtual void startPrefixMapping(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void endPrefixMapping(::java::lang::String *) = 0;
  virtual void startElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::org::xml::sax::Attributes *) = 0;
  virtual void endElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *) = 0;
  virtual void characters(JArray< jchar > *, jint, jint) = 0;
  virtual void ignorableWhitespace(JArray< jchar > *, jint, jint) = 0;
  virtual void processingInstruction(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void skippedEntity(::java::lang::String *) = 0;
public: // actually package-private
  static ::java::lang::String * NS_FEATURE;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_xml_validation_ValidatorHandler__
