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

#ifndef __gnu_java_beans_decoder_ElementHandler__
#define __gnu_java_beans_decoder_ElementHandler__

#pragma interface

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

extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace beans
      {
        namespace decoder
        {
            class Context;
            class ElementHandler;
        }
      }
    }
  }
  namespace java
  {
    namespace beans
    {
        class ExceptionListener;
    }
  }
  namespace org
  {
    namespace xml
    {
      namespace sax
      {
          class Attributes;
      }
    }
  }
}

class gnu::java::beans::decoder::ElementHandler : public ::java::lang::Object
{

public:
  virtual void start(::org::xml::sax::Attributes *, ::java::beans::ExceptionListener *) = 0;
  virtual void end(::java::beans::ExceptionListener *) = 0;
  virtual void characters(JArray< jchar > *, jint, jint) = 0;
  virtual jboolean isSubelementAllowed(::java::lang::String *) = 0;
  virtual ::java::lang::Class * instantiateClass(::java::lang::String *) = 0;
  virtual void notifyStatement(::java::beans::ExceptionListener *) = 0;
  virtual jboolean hasFailed() = 0;
  virtual ::gnu::java::beans::decoder::Context * getContext() = 0;
  virtual void notifyContextFailed() = 0;
  virtual void putObject(::java::lang::String *, ::java::lang::Object *) = 0;
  virtual ::java::lang::Object * getObject(::java::lang::String *) = 0;
  virtual ::gnu::java::beans::decoder::ElementHandler * getParent() = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __gnu_java_beans_decoder_ElementHandler__
