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

#ifndef __org_omg_PortableServer_POA__
#define __org_omg_PortableServer_POA__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Context;
          class ContextList;
          class DomainManager;
          class ExceptionList;
          class NVList;
          class NamedValue;
          class Object;
          class Policy;
          class Request;
          class SetOverrideType;
      }
      namespace PortableServer
      {
          class AdapterActivator;
          class IdAssignmentPolicy;
          class IdAssignmentPolicyValue;
          class IdUniquenessPolicy;
          class IdUniquenessPolicyValue;
          class ImplicitActivationPolicy;
          class ImplicitActivationPolicyValue;
          class LifespanPolicy;
          class LifespanPolicyValue;
          class POA;
          class POAManager;
          class RequestProcessingPolicy;
          class RequestProcessingPolicyValue;
          class Servant;
          class ServantManager;
          class ServantRetentionPolicy;
          class ServantRetentionPolicyValue;
          class ThreadPolicy;
          class ThreadPolicyValue;
      }
    }
  }
}

class org::omg::PortableServer::POA : public ::java::lang::Object
{

public:
  virtual ::org::omg::PortableServer::POA * create_POA(::java::lang::String *, ::org::omg::PortableServer::POAManager *, JArray< ::org::omg::CORBA::Policy * > *) = 0;
  virtual ::org::omg::PortableServer::POA * find_POA(::java::lang::String *, jboolean) = 0;
  virtual JArray< jbyte > * activate_object(::org::omg::PortableServer::Servant *) = 0;
  virtual void activate_object_with_id(JArray< jbyte > *, ::org::omg::PortableServer::Servant *) = 0;
  virtual void deactivate_object(JArray< jbyte > *) = 0;
  virtual ::org::omg::CORBA::Object * create_reference(::java::lang::String *) = 0;
  virtual ::org::omg::CORBA::Object * create_reference_with_id(JArray< jbyte > *, ::java::lang::String *) = 0;
  virtual ::org::omg::PortableServer::Servant * get_servant() = 0;
  virtual void set_servant(::org::omg::PortableServer::Servant *) = 0;
  virtual void set_servant_manager(::org::omg::PortableServer::ServantManager *) = 0;
  virtual ::org::omg::PortableServer::ServantManager * get_servant_manager() = 0;
  virtual JArray< jbyte > * id() = 0;
  virtual ::org::omg::CORBA::Object * id_to_reference(JArray< jbyte > *) = 0;
  virtual ::org::omg::PortableServer::Servant * id_to_servant(JArray< jbyte > *) = 0;
  virtual JArray< jbyte > * reference_to_id(::org::omg::CORBA::Object *) = 0;
  virtual ::org::omg::PortableServer::Servant * reference_to_servant(::org::omg::CORBA::Object *) = 0;
  virtual JArray< jbyte > * servant_to_id(::org::omg::PortableServer::Servant *) = 0;
  virtual ::org::omg::CORBA::Object * servant_to_reference(::org::omg::PortableServer::Servant *) = 0;
  virtual ::org::omg::PortableServer::POAManager * the_POAManager() = 0;
  virtual ::org::omg::PortableServer::AdapterActivator * the_activator() = 0;
  virtual void the_activator(::org::omg::PortableServer::AdapterActivator *) = 0;
  virtual JArray< ::org::omg::PortableServer::POA * > * the_children() = 0;
  virtual ::java::lang::String * the_name() = 0;
  virtual ::org::omg::PortableServer::POA * the_parent() = 0;
  virtual void destroy(jboolean, jboolean) = 0;
  virtual ::org::omg::PortableServer::IdUniquenessPolicy * create_id_uniqueness_policy(::org::omg::PortableServer::IdUniquenessPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::ImplicitActivationPolicy * create_implicit_activation_policy(::org::omg::PortableServer::ImplicitActivationPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::LifespanPolicy * create_lifespan_policy(::org::omg::PortableServer::LifespanPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::RequestProcessingPolicy * create_request_processing_policy(::org::omg::PortableServer::RequestProcessingPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::ServantRetentionPolicy * create_servant_retention_policy(::org::omg::PortableServer::ServantRetentionPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::ThreadPolicy * create_thread_policy(::org::omg::PortableServer::ThreadPolicyValue *) = 0;
  virtual ::org::omg::PortableServer::IdAssignmentPolicy * create_id_assignment_policy(::org::omg::PortableServer::IdAssignmentPolicyValue *) = 0;
  virtual ::org::omg::CORBA::Request * _create_request(::org::omg::CORBA::Context *, ::java::lang::String *, ::org::omg::CORBA::NVList *, ::org::omg::CORBA::NamedValue *) = 0;
  virtual ::org::omg::CORBA::Request * _create_request(::org::omg::CORBA::Context *, ::java::lang::String *, ::org::omg::CORBA::NVList *, ::org::omg::CORBA::NamedValue *, ::org::omg::CORBA::ExceptionList *, ::org::omg::CORBA::ContextList *) = 0;
  virtual ::org::omg::CORBA::Object * _duplicate() = 0;
  virtual JArray< ::org::omg::CORBA::DomainManager * > * _get_domain_managers() = 0;
  virtual ::org::omg::CORBA::Object * _get_interface_def() = 0;
  virtual ::org::omg::CORBA::Policy * _get_policy(jint) = 0;
  virtual jint _hash(jint) = 0;
  virtual jboolean _is_a(::java::lang::String *) = 0;
  virtual jboolean _is_equivalent(::org::omg::CORBA::Object *) = 0;
  virtual jboolean _non_existent() = 0;
  virtual void _release() = 0;
  virtual ::org::omg::CORBA::Request * _request(::java::lang::String *) = 0;
  virtual ::org::omg::CORBA::Object * _set_policy_override(JArray< ::org::omg::CORBA::Policy * > *, ::org::omg::CORBA::SetOverrideType *) = 0;
  static ::java::lang::Class class$;
} __attribute__ ((java_interface));

#endif // __org_omg_PortableServer_POA__
