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

#ifndef __gnu_java_security_PolicyFile__
#define __gnu_java_security_PolicyFile__

#pragma interface

#include <java/security/Policy.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace security
      {
          class PolicyFile;
        namespace action
        {
            class GetPropertyAction;
        }
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class URL;
    }
    namespace security
    {
        class CodeSource;
        class PermissionCollection;
    }
  }
}

class gnu::java::security::PolicyFile : public ::java::security::Policy
{

public:
  PolicyFile();
  ::java::security::PermissionCollection * getPermissions(::java::security::CodeSource *);
  void refresh();
  ::java::lang::String * toString();
private:
  void parse(::java::net::URL *);
  static ::java::lang::String * expand(::java::lang::String *);
  static void error(::java::net::URL *, ::java::io::StreamTokenizer *, ::java::lang::String *);
public: // actually protected
  static ::java::util::logging::Logger * logger;
private:
  static ::gnu::java::security::action::GetPropertyAction * prop;
  static ::java::lang::String * fs;
  static ::java::lang::String * DEFAULT_POLICY;
  static ::java::lang::String * DEFAULT_USER_POLICY;
  ::java::util::Map * __attribute__((aligned(__alignof__( ::java::security::Policy)))) cs2pc;
  static const jint STATE_BEGIN = 0;
  static const jint STATE_GRANT = 1;
  static const jint STATE_PERMS = 2;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_security_PolicyFile__
