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

#ifndef __org_omg_PortableInterceptor_ServerRequestInfo__
#define __org_omg_PortableInterceptor_ServerRequestInfo__

#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;
      }
      namespace PortableInterceptor
      {
          class ServerRequestInfo;
      }
    }
  }
}

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

public:
  virtual void add_reply_service_context(::org::omg::IOP::ServiceContext *, jboolean) = 0;
  virtual JArray< jbyte > * adapter_id() = 0;
  virtual JArray< jbyte > * object_id() = 0;
  virtual ::org::omg::CORBA::Policy * get_server_policy(jint) = 0;
  virtual ::org::omg::CORBA::Any * sending_exception() = 0;
  virtual void set_slot(jint, ::org::omg::CORBA::Any *) = 0;
  virtual jboolean target_is_a(::java::lang::String *) = 0;
  virtual ::java::lang::String * target_most_derived_interface() = 0;
  virtual JArray< ::java::lang::String * > * adapter_name() = 0;
  virtual ::java::lang::String * orb_id() = 0;
  virtual ::java::lang::String * server_id() = 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_ServerRequestInfo__
