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

#ifndef __gnu_javax_naming_giop_CorbalocParser__
#define __gnu_javax_naming_giop_CorbalocParser__

#pragma interface

#include <gnu/CORBA/NamingService/NameTransformer.h>
#include <gcj/array.h>

extern "Java"
{
  namespace gnu
  {
    namespace CORBA
    {
      namespace NamingService
      {
          class NameTransformer;
      }
    }
    namespace javax
    {
      namespace naming
      {
        namespace giop
        {
            class CorbalocParser;
        }
      }
    }
  }
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class ORB;
      }
    }
  }
}

class gnu::javax::naming::giop::CorbalocParser : public ::gnu::CORBA::NamingService::NameTransformer
{

public:
  CorbalocParser();
  virtual JArray< ::java::lang::String * > * corbaloc(::java::lang::String *, ::org::omg::CORBA::ORB *);
private:
  JArray< ::java::lang::String * > * corbaloc(::java::lang::String *, ::org::omg::CORBA::ORB *, jint);
public: // actually package-private
  virtual ::java::lang::String * readFile(::java::lang::String *);
  virtual ::java::lang::String * readUrl(::java::lang::String *);
private:
  JArray< ::java::lang::String * > * resolve(::java::lang::String *);
  ::java::lang::String * readKey(::java::lang::String *);
public:
  static ::java::lang::String * pxCORBALOC;
  static ::java::lang::String * pxCORBANAME;
  static ::java::lang::String * pxIOR;
  static ::java::lang::String * pxFILE;
  static ::java::lang::String * pxFTP;
  static ::java::lang::String * pxHTTP;
  static ::java::lang::String * IIOP;
  static ::java::lang::String * RIR;
  static const jint DEFAULT_PORT = 2809;
  static ::java::lang::String * DEFAULT_NAME;
public: // actually package-private
  static ::gnu::CORBA::NamingService::NameTransformer * converter;
  jint __attribute__((aligned(__alignof__( ::gnu::CORBA::NamingService::NameTransformer)))) p;
  JArray< ::java::lang::String * > * t;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_javax_naming_giop_CorbalocParser__
