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

#ifndef __org_omg_PortableInterceptor_ClientRequestInfo__
#define __org_omg_PortableInterceptor_ClientRequestInfo__

#pragma interface

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

extern "Java"
{
  namespace org
  {
    namespace omg
    {
      namespace CORBA
      {
          class Any;
          class Context;
          class ContextList;
          class DomainManager;
          class ExceptionList;
          class NVList;
          class NamedValue;
          class Object;
          class Policy;
          class Request;
          class SetOverrideType;
          class TypeCode;
      }
      namespace Dynamic
      {
          class Parameter;
      }
      namespace IOP
      {
          class ServiceContext;
          class TaggedComponent;
          class TaggedProfile;
      }
      namespace PortableInterceptor
      {
          class ClientRequestInfo;
      }
    }
  }
}

class org::omg::PortableInterceptor::ClientRequestInfo : public ::java::lang::Object
{

public:
  virtual ::org::omg::CORBA::Object * target() = 0;
  virtual ::org::omg::CORBA::Object * effective_target() = 0;
  virtual ::org::omg::IOP::TaggedProfile * effective_profile() = 0;
  virtual ::org::omg::IOP::TaggedComponent * get_effective_component(jint) = 0;
  virtual JArray< ::org::omg::IOP::TaggedComponent * > * get_effective_components(jint) = 0;
  virtual ::org::omg::CORBA::Policy * get_request_policy(jint) = 0;
  virtual ::java::lang::String * received_exception_id() = 0;
  virtual ::org::omg::CORBA::Any * received_exception() = 0;
  virtual void add_request_service_context(::org::omg::IOP::ServiceContext *, jboolean) = 0;
  virtual JArray< ::org::omg::Dynamic::Parameter * > * arguments() = 0;
  virtual JArray< ::java::lang::String * > * contexts() = 0;
  virtual JArray< ::org::omg::CORBA::TypeCode * > * exceptions() = 0;
  virtual ::org::omg::CORBA::Object * forward_reference() = 0;
  virtual ::org::omg::IOP::ServiceContext * get_reply_service_context(jint) = 0;
  virtual ::org::omg::IOP::ServiceContext * get_request_service_context(jint) = 0;
  virtual ::org::omg::CORBA::Any * get_slot(jint) = 0;
  virtual JArray< ::java::lang::String * > * operation_context() = 0;
  virtual ::java::lang::String * operation() = 0;
  virtual jshort reply_status() = 0;
  virtual jint request_id() = 0;
  virtual jboolean response_expected() = 0;
  virtual ::org::omg::CORBA::Any * result() = 0;
  virtual jshort sync_scope() = 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_PortableInterceptor_ClientRequestInfo__
