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

#ifndef __gnu_javax_management_Server__
#define __gnu_javax_management_Server__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace management
      {
          class Server;
      }
    }
  }
  namespace javax
  {
    namespace management
    {
        class Attribute;
        class AttributeList;
        class MBeanInfo;
        class MBeanServer;
        class MBeanServerDelegate;
        class NotificationFilter;
        class NotificationListener;
        class ObjectInstance;
        class ObjectName;
        class QueryExp;
      namespace loading
      {
          class ClassLoaderRepository;
      }
    }
  }
}

class gnu::javax::management::Server : public ::java::lang::Object
{

public:
  Server(::java::lang::String *, ::javax::management::MBeanServer *, ::javax::management::MBeanServerDelegate *);
private:
  void checkSecurity(::javax::management::ObjectName *, ::java::lang::String *, ::java::lang::String *);
  ::java::lang::Object * getBean(::javax::management::ObjectName *);
public:
  virtual void addNotificationListener(::javax::management::ObjectName *, ::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual void addNotificationListener(::javax::management::ObjectName *, ::javax::management::ObjectName *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual ::javax::management::ObjectInstance * createMBean(::java::lang::String *, ::javax::management::ObjectName *);
  virtual ::javax::management::ObjectInstance * createMBean(::java::lang::String *, ::javax::management::ObjectName *, JArray< ::java::lang::Object * > *, JArray< ::java::lang::String * > *);
  virtual ::javax::management::ObjectInstance * createMBean(::java::lang::String *, ::javax::management::ObjectName *, ::javax::management::ObjectName *);
  virtual ::javax::management::ObjectInstance * createMBean(::java::lang::String *, ::javax::management::ObjectName *, ::javax::management::ObjectName *, JArray< ::java::lang::Object * > *, JArray< ::java::lang::String * > *);
  virtual ::java::io::ObjectInputStream * deserialize(::javax::management::ObjectName *, JArray< jbyte > *);
  virtual ::java::io::ObjectInputStream * deserialize(::java::lang::String *, JArray< jbyte > *);
  virtual ::java::io::ObjectInputStream * deserialize(::java::lang::String *, ::javax::management::ObjectName *, JArray< jbyte > *);
  virtual ::java::lang::Object * getAttribute(::javax::management::ObjectName *, ::java::lang::String *);
  virtual ::javax::management::AttributeList * getAttributes(::javax::management::ObjectName *, JArray< ::java::lang::String * > *);
  virtual ::java::lang::ClassLoader * getClassLoader(::javax::management::ObjectName *);
  virtual ::java::lang::ClassLoader * getClassLoaderFor(::javax::management::ObjectName *);
  virtual ::javax::management::loading::ClassLoaderRepository * getClassLoaderRepository();
  virtual ::java::lang::String * getDefaultDomain();
  virtual JArray< ::java::lang::String * > * getDomains();
  virtual ::java::lang::Integer * getMBeanCount();
  virtual ::javax::management::MBeanInfo * getMBeanInfo(::javax::management::ObjectName *);
  virtual ::javax::management::ObjectInstance * getObjectInstance(::javax::management::ObjectName *);
  virtual ::java::lang::Object * instantiate(::java::lang::String *);
  virtual ::java::lang::Object * instantiate(::java::lang::String *, JArray< ::java::lang::Object * > *, JArray< ::java::lang::String * > *);
  virtual ::java::lang::Object * instantiate(::java::lang::String *, ::javax::management::ObjectName *);
  virtual ::java::lang::Object * instantiate(::java::lang::String *, ::javax::management::ObjectName *, JArray< ::java::lang::Object * > *, JArray< ::java::lang::String * > *);
  virtual ::java::lang::Object * invoke(::javax::management::ObjectName *, ::java::lang::String *, JArray< ::java::lang::Object * > *, JArray< ::java::lang::String * > *);
  virtual jboolean isInstanceOf(::javax::management::ObjectName *, ::java::lang::String *);
  virtual jboolean isRegistered(::javax::management::ObjectName *);
  virtual ::java::util::Set * queryMBeans(::javax::management::ObjectName *, ::javax::management::QueryExp *);
  virtual ::java::util::Set * queryNames(::javax::management::ObjectName *, ::javax::management::QueryExp *);
  virtual ::javax::management::ObjectInstance * registerMBean(::java::lang::Object *, ::javax::management::ObjectName *);
  virtual void removeNotificationListener(::javax::management::ObjectName *, ::javax::management::NotificationListener *);
  virtual void removeNotificationListener(::javax::management::ObjectName *, ::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual void removeNotificationListener(::javax::management::ObjectName *, ::javax::management::ObjectName *);
  virtual void removeNotificationListener(::javax::management::ObjectName *, ::javax::management::ObjectName *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual void setAttribute(::javax::management::ObjectName *, ::javax::management::Attribute *);
  virtual ::javax::management::AttributeList * setAttributes(::javax::management::ObjectName *, ::javax::management::AttributeList *);
  virtual void unregisterMBean(::javax::management::ObjectName *);
private:
  void notify(::javax::management::ObjectName *, ::java::lang::String *);
  static ::javax::management::ObjectName * DELEGATE_NAME;
  ::java::util::concurrent::ConcurrentHashMap * __attribute__((aligned(__alignof__( ::java::lang::Object)))) beans;
  ::java::lang::String * defaultDomain;
  ::javax::management::MBeanServer * outer;
  ::javax::management::loading::ClassLoaderRepository * repository;
  ::javax::management::MBeanServerDelegate * delegate;
  static ::java::util::concurrent::atomic::AtomicLong * sequenceNumber;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_management_Server__
