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

#ifndef __javax_management_MBeanPermission__
#define __javax_management_MBeanPermission__

#pragma interface

#include <java/security/Permission.h>
extern "Java"
{
  namespace java
  {
    namespace security
    {
        class Permission;
    }
  }
  namespace javax
  {
    namespace management
    {
        class MBeanPermission;
        class ObjectName;
    }
  }
}

class javax::management::MBeanPermission : public ::java::security::Permission
{

public:
  MBeanPermission(::java::lang::String *, ::java::lang::String *);
  MBeanPermission(::java::lang::String *, ::java::lang::String *, ::javax::management::ObjectName *, ::java::lang::String *);
  virtual jboolean equals(::java::lang::Object *);
  virtual ::java::lang::String * getActions();
  virtual jint hashCode();
  virtual jboolean implies(::java::security::Permission *);
public: // actually package-private
  virtual ::java::util::Set * getActionSet();
private:
  void updateActionSet();
  void readObject(::java::io::ObjectInputStream *);
  void checkActions();
  static const jlong serialVersionUID = -2416928705275160661LL;
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::security::Permission)))) actions;
  ::java::util::Set * actionSet;
  static ::java::util::Set * validSet;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_MBeanPermission__
