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

#ifndef __gnu_xml_transform_SAXTransformerHandler__
#define __gnu_xml_transform_SAXTransformerHandler__

#pragma interface

#include <gnu/xml/dom/ls/SAXEventSink.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace transform
      {
          class SAXTransformerHandler;
          class TransformerFactoryImpl;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace transform
      {
          class Result;
          class Transformer;
      }
    }
  }
}

class gnu::xml::transform::SAXTransformerHandler : public ::gnu::xml::dom::ls::SAXEventSink
{

public: // actually package-private
  SAXTransformerHandler(::gnu::xml::transform::TransformerFactoryImpl *, ::javax::xml::transform::Transformer *);
public:
  virtual ::java::lang::String * getSystemId();
  virtual void setSystemId(::java::lang::String *);
  virtual ::javax::xml::transform::Transformer * getTransformer();
  virtual void setResult(::javax::xml::transform::Result *);
  virtual void endDocument();
public: // actually package-private
  ::gnu::xml::transform::TransformerFactoryImpl * __attribute__((aligned(__alignof__( ::gnu::xml::dom::ls::SAXEventSink)))) factory;
  ::javax::xml::transform::Transformer * transformer;
  ::java::lang::String * systemId;
  ::javax::xml::transform::Result * result;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_SAXTransformerHandler__
