//File: CosTypedNotifyChannelAdmin.idl
//Part of the Notification Service
//OMG File: 04-10-12

#ifndef _COS_TYPED_NOTIFY_CHANNEL_ADMIN_IDL_
#define _COS_TYPED_NOTIFY_CHANNEL_ADMIN_IDL_

#ifdef _PRE_3_0_COMPILER_
#include <CosNotifyChannelAdmin.idl>
#include <CosTypedNotifyComm.idl>
#include <CosTypedEventChannelAdmin.idl>
#pragma prefix "omg.org"
#else
import ::CosNotifyChannelAdmin;
import ::CosTypedNotifyComm;
import ::CosTypedEventChannelAdmin;
#endif // _PRE_3_0_COMPILER_

module CosTypedNotifyChannelAdmin {

#ifndef _PRE_3_0_COMPILER_
typeprefix CosTypedNotifyChannelAdmin "omg.org";
#endif // _PRE_3_0_COMPILER_

// Forward declaration
interface TypedEventChannelFactory;

typedef string Key;

interface TypedProxyPushConsumer : 
	CosNotifyChannelAdmin::ProxyConsumer, 
	CosTypedNotifyComm::TypedPushConsumer {

void connect_typed_push_supplier (
		in CosEventComm::PushSupplier push_supplier )
	raises ( CosEventChannelAdmin::AlreadyConnected );

}; // TypedProxyPushConsumer

interface TypedProxyPullSupplier : 
	CosNotifyChannelAdmin::ProxySupplier,
	CosTypedNotifyComm::TypedPullSupplier {

void connect_typed_pull_consumer (
		in CosEventComm::PullConsumer pull_consumer )
	raises ( CosEventChannelAdmin::AlreadyConnected );

}; // TypedProxyPullSupplier

interface TypedProxyPullConsumer : 
	CosNotifyChannelAdmin::ProxyConsumer,
	CosNotifyComm::PullConsumer {

void connect_typed_pull_supplier (
		in CosTypedEventComm::TypedPullSupplier pull_supplier)
	raises ( CosEventChannelAdmin::AlreadyConnected,
		CosEventChannelAdmin::TypeError );

void suspend_connection()
	raises (CosNotifyChannelAdmin::ConnectionAlreadyInactive,
		CosNotifyChannelAdmin::NotConnected);

void resume_connection()
	raises (CosNotifyChannelAdmin::ConnectionAlreadyActive,
		CosNotifyChannelAdmin::NotConnected);

}; // TypedProxyPullConsumer

interface TypedProxyPushSupplier : 
	CosNotifyChannelAdmin::ProxySupplier,
	CosNotifyComm::PushSupplier {

void connect_typed_push_consumer (
		in CosTypedEventComm::TypedPushConsumer push_consumer)
	raises ( CosEventChannelAdmin::AlreadyConnected,
		CosEventChannelAdmin::TypeError );

void suspend_connection()
	raises (CosNotifyChannelAdmin::ConnectionAlreadyInactive,
		CosNotifyChannelAdmin::NotConnected);


void resume_connection()
	raises (CosNotifyChannelAdmin::ConnectionAlreadyActive,
		CosNotifyChannelAdmin::NotConnected);

}; // TypedProxyPushSupplier

interface TypedConsumerAdmin : 
	CosNotifyChannelAdmin::ConsumerAdmin,
	CosTypedEventChannelAdmin::TypedConsumerAdmin {

	TypedProxyPullSupplier obtain_typed_notification_pull_supplier(
		in Key supported_interface,
		out CosNotifyChannelAdmin::ProxyID proxy_id )
	raises( CosTypedEventChannelAdmin::InterfaceNotSupported,
		CosNotifyChannelAdmin::AdminLimitExceeded );

	TypedProxyPushSupplier obtain_typed_notification_push_supplier( 
		in Key uses_interface,
		out CosNotifyChannelAdmin::ProxyID proxy_id )
	raises( CosTypedEventChannelAdmin::NoSuchImplementation,
		CosNotifyChannelAdmin::AdminLimitExceeded );

}; // TypedConsumerAdmin

interface TypedSupplierAdmin : 
	CosNotifyChannelAdmin::SupplierAdmin,
	CosTypedEventChannelAdmin::TypedSupplierAdmin {

	TypedProxyPushConsumer obtain_typed_notification_push_consumer( 
		in Key supported_interface,
		out CosNotifyChannelAdmin::ProxyID proxy_id )
	raises( CosTypedEventChannelAdmin::InterfaceNotSupported,
		CosNotifyChannelAdmin::AdminLimitExceeded );

	TypedProxyPullConsumer obtain_typed_notification_pull_consumer(
		in Key uses_interface,
		out CosNotifyChannelAdmin::ProxyID proxy_id )
	raises( CosTypedEventChannelAdmin::NoSuchImplementation,
		CosNotifyChannelAdmin::AdminLimitExceeded );

}; // TypedSupplierAdmin

interface TypedEventChannel : 
	CosNotification::QoSAdmin,
	CosNotification::AdminPropertiesAdmin,
	CosTypedEventChannelAdmin::TypedEventChannel {

readonly attribute TypedEventChannelFactory MyFactory;

readonly attribute TypedConsumerAdmin default_consumer_admin;
readonly attribute TypedSupplierAdmin default_supplier_admin;

readonly attribute CosNotifyFilter::FilterFactory
					default_filter_factory;

TypedConsumerAdmin new_for_typed_notification_consumers( 
		in CosNotifyChannelAdmin::InterFilterGroupOperator op,
		out CosNotifyChannelAdmin::AdminID id );

TypedSupplierAdmin new_for_typed_notification_suppliers(
		in CosNotifyChannelAdmin::InterFilterGroupOperator op,
		out CosNotifyChannelAdmin::AdminID id );

TypedConsumerAdmin get_consumeradmin (
		in CosNotifyChannelAdmin::AdminID id )
	raises ( CosNotifyChannelAdmin::AdminNotFound );

TypedSupplierAdmin get_supplieradmin (
		in CosNotifyChannelAdmin::AdminID id )
	raises ( CosNotifyChannelAdmin::AdminNotFound );

CosNotifyChannelAdmin::AdminIDSeq get_all_consumeradmins();
CosNotifyChannelAdmin::AdminIDSeq get_all_supplieradmins();

}; // TypedEventChannel

interface TypedEventChannelFactory {

TypedEventChannel create_typed_channel (
		in CosNotification::QoSProperties initial_QoS,
		in CosNotification::AdminProperties initial_admin,
		out CosNotifyChannelAdmin::ChannelID id)
	raises( CosNotification::UnsupportedQoS,
		CosNotification::UnsupportedAdmin );

CosNotifyChannelAdmin::ChannelIDSeq get_all_typed_channels();

TypedEventChannel get_typed_event_channel (
		in CosNotifyChannelAdmin::ChannelID id )
	raises ( CosNotifyChannelAdmin::ChannelNotFound );

}; // TypedEventChannelFactory

}; // CosTypedNotifyChannelAdmin

#endif /* _COS_TYPED_NOTIFY_CHANNEL_ADMIN_IDL_ */
