// **********************************************************************
//
// Copyright (c) 2002
// IONA Technologies, Inc.
// Waltham, MA, USA
//
// All Rights Reserved
//
// **********************************************************************

#ifndef OBPOA_INTERFACE_IDL
#define OBPOA_INTERFACE_IDL

#include <OB/OBPOAPolicies.idl>
#include <OB/POAInterface.idl>
#include <OB/PIORT.idl>

#pragma prefix "omg.org"

module CORBA
{

local interface ORB;

};

#pragma prefix "ooc.com"

module OBPortableServer
{

/**
 *
 * This interface is a proprietary extension to the standard POA.
 *
 * @see PortableServer::POAManager
 *
 **/
local interface POA : PortableServer::POA
{
    /**
     *
     * Determine the policies that this POA was created with
     *
     **/
    readonly attribute CORBA::PolicyList the_policies;

    /**
     *
     * Determine the DispatchStrategy in use by this POA
     *
     */
    readonly attribute OB::DispatchStrategy the_dispatch_strategy;

    /**
     *
     * Retrieve the Primary Object Reference Template
     *
     **/
    readonly attribute PortableInterceptor::ObjectReferenceTemplate
    adapter_template;

    /**
     *
     * Retrieve the Secondary Object Reference Template
     *
     **/
    readonly attribute PortableInterceptor::ObjectReferenceFactory
    current_factory;

    /**
     *
     * Retrieve the ORB on which the POA was created
     *
     **/
    readonly attribute CORBA::ORB the_ORB;

    /**
     *
     * Create a synchronization policy
     *
     * @param value The SynchronizationPolicyValue
     *
     * @return A new SynchronizationPolicy
     *
     **/
    SynchronizationPolicy create_synchronization_policy(
	in SynchronizationPolicyValue value);

    /**
     *
     * Create a dispatch strategy policy
     *
     * @param value The DispatchStrategyPolicy
     *
     * @return A new DisptachStrategy
     *
     **/
    DispatchStrategyPolicy create_dispatch_strategy_policy(
	in OB::DispatchStrategy value);
};

}; // End module OBPortableServer

#endif
