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

#ifndef __gnu_xml_dom_DomDocumentConfiguration__
#define __gnu_xml_dom_DomDocumentConfiguration__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace dom
      {
          class DomDocumentConfiguration;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class DOMErrorHandler;
          class DOMStringList;
      }
    }
  }
}

class gnu::xml::dom::DomDocumentConfiguration : public ::java::lang::Object
{

public: // actually package-private
  DomDocumentConfiguration();
public:
  virtual void setParameter(::java::lang::String *, ::java::lang::Object *);
  virtual ::java::lang::Object * getParameter(::java::lang::String *);
  virtual jboolean canSetParameter(::java::lang::String *, ::java::lang::Object *);
  virtual ::org::w3c::dom::DOMStringList * getParameterNames();
  virtual ::java::lang::String * item(jint);
  virtual jint getLength();
  virtual jboolean contains(::java::lang::String *);
private:
  static ::java::util::List * SUPPORTED_PARAMETERS;
public: // actually package-private
  jboolean __attribute__((aligned(__alignof__( ::java::lang::Object)))) cdataSections;
  jboolean comments;
  jboolean elementContentWhitespace;
  jboolean entities;
  ::org::w3c::dom::DOMErrorHandler * errorHandler;
  jboolean namespaceDeclarations;
  jboolean splitCdataSections;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_dom_DomDocumentConfiguration__
