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

#ifndef __javax_management_NotificationBroadcasterSupport__
#define __javax_management_NotificationBroadcasterSupport__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace management
    {
        class MBeanNotificationInfo;
        class Notification;
        class NotificationBroadcasterSupport;
        class NotificationFilter;
        class NotificationListener;
    }
  }
}

class javax::management::NotificationBroadcasterSupport : public ::java::lang::Object
{

public:
  NotificationBroadcasterSupport();
  NotificationBroadcasterSupport(::java::util::concurrent::Executor *);
  NotificationBroadcasterSupport(JArray< ::javax::management::MBeanNotificationInfo * > *);
  NotificationBroadcasterSupport(::java::util::concurrent::Executor *, JArray< ::javax::management::MBeanNotificationInfo * > *);
  virtual void addNotificationListener(::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual JArray< ::javax::management::MBeanNotificationInfo * > * getNotificationInfo();
public: // actually protected
  virtual void handleNotification(::javax::management::NotificationListener *, ::javax::management::Notification *, ::java::lang::Object *);
public:
  virtual void removeNotificationListener(::javax::management::NotificationListener *);
  virtual void removeNotificationListener(::javax::management::NotificationListener *, ::javax::management::NotificationFilter *, ::java::lang::Object *);
  virtual void sendNotification(::javax::management::Notification *);
private:
  ::java::util::concurrent::Executor * __attribute__((aligned(__alignof__( ::java::lang::Object)))) executor;
  JArray< ::javax::management::MBeanNotificationInfo * > * info;
  ::java::util::List * listeners;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_management_NotificationBroadcasterSupport__
