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

#ifndef __java_net_JarURLConnection__
#define __java_net_JarURLConnection__

#pragma interface

#include <java/net/URLConnection.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class JarURLConnection;
        class URL;
        class URLConnection;
    }
    namespace security
    {
      namespace cert
      {
          class Certificate;
      }
    }
  }
}

class java::net::JarURLConnection : public ::java::net::URLConnection
{

public: // actually protected
  JarURLConnection(::java::net::URL *);
public:
  virtual ::java::net::URL * getJarFileURL();
  virtual ::java::lang::String * getEntryName();
  virtual ::java::util::jar::JarEntry * getJarEntry();
  virtual ::java::util::jar::JarFile * getJarFile() = 0;
  virtual JArray< ::java::security::cert::Certificate * > * getCertificates();
  virtual ::java::util::jar::Attributes * getMainAttributes();
  virtual ::java::util::jar::Attributes * getAttributes();
  virtual ::java::util::jar::Manifest * getManifest();
private:
  ::java::net::URL * __attribute__((aligned(__alignof__( ::java::net::URLConnection)))) jarFileURL;
public: // actually protected
  ::java::net::URLConnection * jarFileURLConnection;
private:
  ::java::lang::String * entryName;
public:
  static ::java::lang::Class class$;
};

#endif // __java_net_JarURLConnection__
