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

#ifndef __javax_management_openmbean_OpenMBeanAttributeInfoSupport__
#define __javax_management_openmbean_OpenMBeanAttributeInfoSupport__

#pragma interface

#include <javax/management/MBeanAttributeInfo.h>
#include <gcj/array.h>

extern "Java"
{
  namespace javax
  {
    namespace management
    {
      namespace openmbean
      {
          class OpenMBeanAttributeInfoSupport;
          class OpenType;
      }
    }
  }
}

class javax::management::openmbean::OpenMBeanAttributeInfoSupport : public ::javax::management::MBeanAttributeInfo
{

public:
  OpenMBeanAttributeInfoSupport(::java::lang::String *, ::java::lang::String *, ::javax::management::openmbean::OpenType *, jboolean, jboolean, jboolean);
  OpenMBeanAttributeInfoSupport(::java::lang::String *, ::java::lang::String *, ::javax::management::openmbean::OpenType *, jboolean, jboolean, jboolean, ::java::lang::Object *);
  OpenMBeanAttributeInfoSupport(::java::lang::String *, ::java::lang::String *, ::javax::management::openmbean::OpenType *, jboolean, jboolean, jboolean, ::java::lang::Object *, ::java::lang::Comparable *, ::java::lang::Comparable *);
  OpenMBeanAttributeInfoSupport(::java::lang::String *, ::java::lang::String *, ::javax::management::openmbean::OpenType *, jboolean, jboolean, jboolean, ::java::lang::Object *, JArray< ::java::lang::Object * > *);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::Object * getDefaultValue();
  virtual ::java::util::Set * getLegalValues();
  virtual ::java::lang::Comparable * getMaxValue();
  virtual ::java::lang::Comparable * getMinValue();
  virtual ::javax::management::openmbean::OpenType * getOpenType();
  virtual jboolean hasDefaultValue();
  virtual jint hashCode();
  virtual jboolean hasLegalValues();
  virtual jboolean hasMaxValue();
  virtual jboolean hasMinValue();
  virtual jboolean isValue(::java::lang::Object *);
  virtual ::java::lang::String * toString();
private:
  static const jlong serialVersionUID = -4867215622149721849LL;
  ::javax::management::openmbean::OpenType * __attribute__((aligned(__alignof__( ::javax::management::MBeanAttributeInfo)))) openType;
  ::java::lang::Object * defaultValue;
  ::java::util::Set * legalValues;
  ::java::lang::Comparable * minValue;
  ::java::lang::Comparable * maxValue;
  ::java::lang::Integer * hashCode__;
  ::java::lang::String * string;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_openmbean_OpenMBeanAttributeInfoSupport__
