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

#ifndef __gnu_xml_transform_Template__
#define __gnu_xml_transform_Template__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace transform
      {
          class Stylesheet;
          class Template;
          class TemplateNode;
      }
      namespace xpath
      {
          class Expr;
          class Pattern;
          class Test;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class QName;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::transform::Template : public ::java::lang::Object
{

public: // actually package-private
  Template(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace$::QName *, ::gnu::xml::xpath::Pattern *, ::gnu::xml::transform::TemplateNode *, jint, ::java::lang::String *, ::javax::xml::namespace$::QName *);
private:
  Template(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace$::QName *, ::gnu::xml::xpath::Pattern *, ::gnu::xml::transform::TemplateNode *, jint, jdouble, ::javax::xml::namespace$::QName *, jboolean);
public: // actually package-private
  virtual ::gnu::xml::transform::Template * clone(::gnu::xml::transform::Stylesheet *);
public:
  virtual jint compareTo(::java::lang::Object *);
public: // actually package-private
  virtual ::gnu::xml::xpath::Test * getNodeTest(::gnu::xml::xpath::Expr *);
  virtual jboolean matches(::javax::xml::namespace$::QName *, ::org::w3c::dom::Node *);
  virtual jboolean matches(::javax::xml::namespace$::QName *);
  virtual jboolean imports(::gnu::xml::transform::Template *);
  virtual void apply(::gnu::xml::transform::Stylesheet *, ::javax::xml::namespace$::QName *, ::org::w3c::dom::Node *, jint, jint, ::org::w3c::dom::Node *, ::org::w3c::dom::Node *);
public:
  virtual ::java::lang::String * toString();
public: // actually package-private
  virtual void list(::java::io::PrintStream *);
  static jdouble DEFAULT_PRIORITY;
  ::gnu::xml::transform::Stylesheet * __attribute__((aligned(__alignof__( ::java::lang::Object)))) stylesheet;
  ::javax::xml::namespace$::QName * name;
  ::gnu::xml::xpath::Pattern * match;
  ::gnu::xml::transform::TemplateNode * node;
  jdouble priority;
  jint precedence;
  ::javax::xml::namespace$::QName * mode;
  jboolean isAnyNode;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_transform_Template__
