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

#ifndef __javax_management_MBeanServerPermission__
#define __javax_management_MBeanServerPermission__

#pragma interface

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

class javax::management::MBeanServerPermission : public ::java::security::BasicPermission
{

public:
  MBeanServerPermission(::java::lang::String *);
  MBeanServerPermission(::java::lang::String *, ::java::lang::String *);
  virtual jboolean equals(::java::lang::Object *);
  virtual jint hashCode();
  virtual jboolean implies(::java::security::Permission *);
  virtual ::java::security::PermissionCollection * newPermissionCollection();
private:
  static ::java::lang::String * checkName(::java::lang::String *);
  static const jlong serialVersionUID = -5661980843569388590LL;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_MBeanServerPermission__
