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

#ifndef __gnu_javax_security_auth_callback_AWTCallbackHandler__
#define __gnu_javax_security_auth_callback_AWTCallbackHandler__

#pragma interface

#include <gnu/javax/security/auth/callback/AbstractCallbackHandler.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace security
      {
        namespace auth
        {
          namespace callback
          {
              class AWTCallbackHandler;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class ActionEvent;
          class WindowEvent;
      }
    }
  }
  namespace javax
  {
    namespace security
    {
      namespace auth
      {
        namespace callback
        {
            class ChoiceCallback;
            class ConfirmationCallback;
            class LanguageCallback;
            class NameCallback;
            class PasswordCallback;
            class TextInputCallback;
            class TextOutputCallback;
        }
      }
    }
  }
}

class gnu::javax::security::auth::callback::AWTCallbackHandler : public ::gnu::javax::security::auth::callback::AbstractCallbackHandler
{

public:
  AWTCallbackHandler();
public: // actually protected
  virtual void handleChoice(::javax::security::auth::callback::ChoiceCallback *);
  virtual void handleConfirmation(::javax::security::auth::callback::ConfirmationCallback *);
  virtual void handleLanguage(::javax::security::auth::callback::LanguageCallback *);
  virtual void handleName(::javax::security::auth::callback::NameCallback *);
  virtual void handlePassword(::javax::security::auth::callback::PasswordCallback *);
  virtual void handleTextInput(::javax::security::auth::callback::TextInputCallback *);
  virtual void handleTextOutput(::javax::security::auth::callback::TextOutputCallback *);
public:
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
  virtual void windowClosing(::java::awt::event::WindowEvent *);
  virtual void windowOpened(::java::awt::event::WindowEvent *);
  virtual void windowClosed(::java::awt::event::WindowEvent *);
  virtual void windowIconified(::java::awt::event::WindowEvent *);
  virtual void windowDeiconified(::java::awt::event::WindowEvent *);
  virtual void windowActivated(::java::awt::event::WindowEvent *);
  virtual void windowDeactivated(::java::awt::event::WindowEvent *);
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::javax::security::auth::callback::AbstractCallbackHandler)))) actionCommand;
private:
  static ::java::lang::String * ACTION_CANCEL;
  static ::java::lang::String * ACTION_NO;
  static ::java::lang::String * ACTION_NONE;
  static ::java::lang::String * ACTION_OK;
  static ::java::lang::String * ACTION_YES;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_security_auth_callback_AWTCallbackHandler__
