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

#ifndef __gnu_javax_crypto_sasl_plain_PlainAuthInfoProvider__
#define __gnu_javax_crypto_sasl_plain_PlainAuthInfoProvider__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace javax
    {
      namespace crypto
      {
        namespace sasl
        {
          namespace plain
          {
              class PasswordFile;
              class PlainAuthInfoProvider;
          }
        }
      }
    }
  }
}

class gnu::javax::crypto::sasl::plain::PlainAuthInfoProvider : public ::java::lang::Object
{

public:
  PlainAuthInfoProvider();
  virtual void activate(::java::util::Map *);
  virtual void passivate();
  virtual jboolean contains(::java::lang::String *);
  virtual ::java::util::Map * lookup(::java::util::Map *);
  virtual void update(::java::util::Map *);
  virtual ::java::util::Map * getConfiguration(::java::lang::String *);
private:
  ::gnu::javax::crypto::sasl::plain::PasswordFile * __attribute__((aligned(__alignof__( ::java::lang::Object)))) passwordFile;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_crypto_sasl_plain_PlainAuthInfoProvider__
