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

#ifndef __javax_xml_stream_XMLStreamWriter__
#define __javax_xml_stream_XMLStreamWriter__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace xml
    {
      namespace namespace
      {
          class NamespaceContext;
      }
      namespace stream
      {
          class XMLStreamWriter;
      }
    }
  }
}

class javax::xml::stream::XMLStreamWriter : public ::java::lang::Object
{

public:
  virtual void writeStartElement(::java::lang::String *) = 0;
  virtual void writeStartElement(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeStartElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeEmptyElement(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeEmptyElement(::java::lang::String *, ::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeEmptyElement(::java::lang::String *) = 0;
  virtual void writeEndElement() = 0;
  virtual void writeEndDocument() = 0;
  virtual void close() = 0;
  virtual void flush() = 0;
  virtual void writeAttribute(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeAttribute(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeAttribute(::java::lang::String *, ::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeNamespace(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeDefaultNamespace(::java::lang::String *) = 0;
  virtual void writeComment(::java::lang::String *) = 0;
  virtual void writeProcessingInstruction(::java::lang::String *) = 0;
  virtual void writeProcessingInstruction(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeCData(::java::lang::String *) = 0;
  virtual void writeDTD(::java::lang::String *) = 0;
  virtual void writeEntityRef(::java::lang::String *) = 0;
  virtual void writeStartDocument() = 0;
  virtual void writeStartDocument(::java::lang::String *) = 0;
  virtual void writeStartDocument(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void writeCharacters(::java::lang::String *) = 0;
  virtual void writeCharacters(JArray< jchar > *, jint, jint) = 0;
  virtual ::java::lang::String * getPrefix(::java::lang::String *) = 0;
  virtual void setPrefix(::java::lang::String *, ::java::lang::String *) = 0;
  virtual void setDefaultNamespace(::java::lang::String *) = 0;
  virtual void setNamespaceContext(::javax::xml::namespace::NamespaceContext *) = 0;
  virtual ::javax::xml::namespace::NamespaceContext * getNamespaceContext() = 0;
  virtual ::java::lang::Object * getProperty(::java::lang::String *) = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __javax_xml_stream_XMLStreamWriter__
