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

#ifndef __gnu_javax_print_ipp_attribute_supported_OrientationRequestedSupported__
#define __gnu_javax_print_ipp_attribute_supported_OrientationRequestedSupported__

#pragma interface

#include <javax/print/attribute/EnumSyntax.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace print
      {
        namespace ipp
        {
          namespace attribute
          {
            namespace supported
            {
                class OrientationRequestedSupported;
            }
          }
        }
      }
    }
  }
  namespace javax
  {
    namespace print
    {
      namespace attribute
      {
          class EnumSyntax;
        namespace standard
        {
            class OrientationRequested;
        }
      }
    }
  }
}

class gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported : public ::javax::print::attribute::EnumSyntax
{

public: // actually protected
  OrientationRequestedSupported(jint);
public:
  ::java::lang::Class * getCategory();
  ::java::lang::String * getName();
public: // actually protected
  JArray< ::java::lang::String * > * getStringTable();
  JArray< ::javax::print::attribute::EnumSyntax * > * getEnumValueTable();
  jint getOffset();
public:
  ::javax::print::attribute::standard::OrientationRequested * getAssociatedAttribute();
  static JArray< ::javax::print::attribute::standard::OrientationRequested * > * getAssociatedAttributeArray(::java::util::Set *);
  static ::gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported * PORTRAIT;
  static ::gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported * LANDSCAPE;
  static ::gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported * REVERSE_LANDSCAPE;
  static ::gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported * REVERSE_PORTRAIT;
private:
  static JArray< ::java::lang::String * > * stringTable;
  static JArray< ::gnu::javax::print::ipp::attribute::supported::OrientationRequestedSupported * > * enumValueTable;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_print_ipp_attribute_supported_OrientationRequestedSupported__
