00001 #ifndef COSNOTIFYCHANNELADMIN_IDL
00002 #define COSNOTIFYCHANNELADMIN_IDL
00003
00004 #include <CosEventComm.idl>
00005 #include <CosEventChannelAdmin.idl>
00006 #include <CosNotification.idl>
00007 #include <CosNotifyFilter.idl>
00008
00019 #pragma prefix "omg.org"
00020
00021 module CosNotifyChannelAdmin
00022 {
00026 exception ConnectionAlreadyActive {};
00027
00031 exception ConnectionAlreadyInactive {};
00032
00036 exception NotConnected {};
00037
00038
00039 interface ConsumerAdmin;
00040 interface SupplierAdmin;
00041 interface EventChannel;
00042 interface EventChannelFactory;
00043
00047 enum ProxyType
00048 {
00049 PUSH_ANY,
00050 PULL_ANY,
00051 PUSH_STRUCTURED,
00052 PULL_STRUCTURED,
00053 PUSH_SEQUENCE,
00054 PULL_SEQUENCE,
00055 PUSH_TYPED,
00056 PULL_TYPED
00057 };
00058
00062 enum ObtainInfoMode
00063 {
00064 ALL_NOW_UPDATES_OFF,
00065 ALL_NOW_UPDATES_ON,
00066 NONE_NOW_UPDATES_OFF,
00067 NONE_NOW_UPDATES_ON
00068 };
00069
00073 interface ProxyConsumer :
00074 CosNotification::QoSAdmin,
00075 CosNotifyFilter::FilterAdmin
00076 {
00080 readonly attribute ProxyType MyType;
00081
00085 readonly attribute SupplierAdmin MyAdmin;
00086
00093 CosNotification::EventTypeSeq obtain_subscription_types(
00094 in ObtainInfoMode mode );
00095
00106 void validate_event_qos (
00107 in CosNotification::QoSProperties required_qos,
00108 out CosNotification::NamedPropertyRangeSeq available_qos)
00109 raises (CosNotification::UnsupportedQoS);
00110
00111 };
00112
00116 interface ProxySupplier :
00117 CosNotification::QoSAdmin,
00118 CosNotifyFilter::FilterAdmin
00119 {
00123 readonly attribute ProxyType MyType;
00124
00128 readonly attribute ConsumerAdmin MyAdmin;
00129
00134 attribute CosNotifyFilter::MappingFilter priority_filter;
00135
00140 attribute CosNotifyFilter::MappingFilter lifetime_filter;
00141
00148 CosNotification::EventTypeSeq obtain_offered_types(
00149 in ObtainInfoMode mode );
00150
00161 void validate_event_qos (
00162 in CosNotification::QoSProperties required_qos,
00163 out CosNotification::NamedPropertyRangeSeq available_qos)
00164 raises (CosNotification::UnsupportedQoS);
00165
00166 };
00167
00171 interface ProxyPushConsumer :
00172 ProxyConsumer,
00173 CosNotifyComm::PushConsumer
00174 {
00181 void connect_any_push_supplier (
00182 in CosEventComm::PushSupplier push_supplier)
00183 raises(CosEventChannelAdmin::AlreadyConnected);
00184
00185 };
00186
00190 interface StructuredProxyPushConsumer :
00191 ProxyConsumer,
00192 CosNotifyComm::StructuredPushConsumer
00193 {
00200 void connect_structured_push_supplier (
00201 in CosNotifyComm::StructuredPushSupplier push_supplier)
00202 raises(CosEventChannelAdmin::AlreadyConnected);
00203
00204 };
00205
00209 interface SequenceProxyPushConsumer :
00210 ProxyConsumer,
00211 CosNotifyComm::SequencePushConsumer
00212 {
00219 void connect_sequence_push_supplier (
00220 in CosNotifyComm::SequencePushSupplier push_supplier)
00221 raises(CosEventChannelAdmin::AlreadyConnected);
00222
00223 };
00224
00228 interface ProxyPullSupplier :
00229 ProxySupplier,
00230 CosNotifyComm::PullSupplier
00231 {
00238 void connect_any_pull_consumer (
00239 in CosEventComm::PullConsumer pull_consumer)
00240 raises(CosEventChannelAdmin::AlreadyConnected);
00241
00242 };
00243
00247 interface StructuredProxyPullSupplier :
00248 ProxySupplier,
00249 CosNotifyComm::StructuredPullSupplier
00250 {
00257 void connect_structured_pull_consumer (
00258 in CosNotifyComm::StructuredPullConsumer pull_consumer)
00259 raises(CosEventChannelAdmin::AlreadyConnected);
00260
00261 };
00262
00266 interface SequenceProxyPullSupplier :
00267 ProxySupplier,
00268 CosNotifyComm::SequencePullSupplier
00269 {
00276 void connect_sequence_pull_consumer (
00277 in CosNotifyComm::SequencePullConsumer pull_consumer)
00278 raises(CosEventChannelAdmin::AlreadyConnected);
00279
00280 };
00281
00285 interface ProxyPullConsumer :
00286 ProxyConsumer,
00287 CosNotifyComm::PullConsumer
00288 {
00296 void connect_any_pull_supplier (
00297 in CosEventComm::PullSupplier pull_supplier)
00298 raises(CosEventChannelAdmin::AlreadyConnected,
00299 CosEventChannelAdmin::TypeError );
00300
00306 void suspend_connection()
00307 raises(ConnectionAlreadyInactive, NotConnected);
00308
00314 void resume_connection()
00315 raises(ConnectionAlreadyActive, NotConnected);
00316
00317 };
00318
00322 interface StructuredProxyPullConsumer :
00323 ProxyConsumer,
00324 CosNotifyComm::StructuredPullConsumer
00325 {
00333 void connect_structured_pull_supplier (
00334 in CosNotifyComm::StructuredPullSupplier pull_supplier)
00335 raises(CosEventChannelAdmin::AlreadyConnected,
00336 CosEventChannelAdmin::TypeError );
00337
00343 void suspend_connection()
00344 raises(ConnectionAlreadyInactive, NotConnected);
00345
00351 void resume_connection()
00352 raises(ConnectionAlreadyActive, NotConnected);
00353
00354 };
00355
00359 interface SequenceProxyPullConsumer :
00360 ProxyConsumer,
00361 CosNotifyComm::SequencePullConsumer
00362 {
00370 void connect_sequence_pull_supplier (
00371 in CosNotifyComm::SequencePullSupplier pull_supplier)
00372 raises(CosEventChannelAdmin::AlreadyConnected,
00373 CosEventChannelAdmin::TypeError );
00374
00380 void suspend_connection()
00381 raises(ConnectionAlreadyInactive, NotConnected);
00382
00388 void resume_connection()
00389 raises(ConnectionAlreadyActive, NotConnected);
00390
00391 };
00392
00396 interface ProxyPushSupplier :
00397 ProxySupplier,
00398 CosNotifyComm::PushSupplier
00399 {
00407 void connect_any_push_consumer (
00408 in CosEventComm::PushConsumer push_consumer)
00409 raises(CosEventChannelAdmin::AlreadyConnected,
00410 CosEventChannelAdmin::TypeError );
00411
00418 void suspend_connection()
00419 raises(ConnectionAlreadyInactive, NotConnected);
00420
00427 void resume_connection()
00428 raises(ConnectionAlreadyActive, NotConnected);
00429
00430 };
00431
00435 interface StructuredProxyPushSupplier :
00436 ProxySupplier,
00437 CosNotifyComm::StructuredPushSupplier
00438 {
00446 void connect_structured_push_consumer (
00447 in CosNotifyComm::StructuredPushConsumer push_consumer)
00448 raises(CosEventChannelAdmin::AlreadyConnected,
00449 CosEventChannelAdmin::TypeError );
00450
00457 void suspend_connection()
00458 raises(ConnectionAlreadyInactive, NotConnected);
00459
00466 void resume_connection()
00467 raises(ConnectionAlreadyActive, NotConnected);
00468
00469 };
00470
00474 interface SequenceProxyPushSupplier :
00475 ProxySupplier,
00476 CosNotifyComm::SequencePushSupplier
00477 {
00485 void connect_sequence_push_consumer (
00486 in CosNotifyComm::SequencePushConsumer push_consumer)
00487 raises(CosEventChannelAdmin::AlreadyConnected,
00488 CosEventChannelAdmin::TypeError );
00489
00496 void suspend_connection()
00497 raises(ConnectionAlreadyInactive, NotConnected);
00498
00505 void resume_connection()
00506 raises(ConnectionAlreadyActive, NotConnected);
00507
00508 };
00509
00513 typedef long ProxyID;
00514
00518 typedef sequence <ProxyID> ProxyIDSeq;
00519
00523 enum ClientType
00524 {
00525 ANY_EVENT,
00526 STRUCTURED_EVENT,
00527 SEQUENCE_EVENT
00528 };
00529
00533 enum InterFilterGroupOperator { AND_OP, OR_OP };
00534
00538 typedef long AdminID;
00539
00543 typedef sequence<AdminID> AdminIDSeq;
00544
00549 exception AdminNotFound {};
00550
00554 exception ProxyNotFound {};
00555
00560 struct AdminLimit
00561 {
00562 CosNotification::PropertyName name;
00563 CosNotification::PropertyValue value;
00564 };
00565
00570 exception AdminLimitExceeded { AdminLimit admin_property_err; };
00571
00575 interface ConsumerAdmin :
00576 CosNotification::QoSAdmin,
00577 CosNotifyComm::NotifySubscribe,
00578 CosNotifyFilter::FilterAdmin,
00579 CosEventChannelAdmin::ConsumerAdmin
00580 {
00584 readonly attribute AdminID MyID;
00585
00589 readonly attribute EventChannel MyChannel;
00590
00595 readonly attribute InterFilterGroupOperator MyOperator;
00596
00601 attribute CosNotifyFilter::MappingFilter priority_filter;
00602
00607 attribute CosNotifyFilter::MappingFilter lifetime_filter;
00608
00612 readonly attribute ProxyIDSeq pull_suppliers;
00613
00617 readonly attribute ProxyIDSeq push_suppliers;
00618
00625 ProxySupplier get_proxy_supplier (
00626 in ProxyID proxy_id )
00627 raises ( ProxyNotFound );
00628
00638 ProxySupplier obtain_notification_pull_supplier (
00639 in ClientType ctype,
00640 out ProxyID proxy_id)
00641 raises ( AdminLimitExceeded );
00642
00652 ProxySupplier obtain_notification_push_supplier (
00653 in ClientType ctype,
00654 out ProxyID proxy_id)
00655 raises ( AdminLimitExceeded );
00656
00660 void destroy();
00661
00662 };
00663
00667 interface SupplierAdmin :
00668 CosNotification::QoSAdmin,
00669 CosNotifyComm::NotifyPublish,
00670 CosNotifyFilter::FilterAdmin,
00671 CosEventChannelAdmin::SupplierAdmin
00672 {
00676 readonly attribute AdminID MyID;
00677
00681 readonly attribute EventChannel MyChannel;
00682
00687 readonly attribute InterFilterGroupOperator MyOperator;
00688
00692 readonly attribute ProxyIDSeq pull_consumers;
00693
00697 readonly attribute ProxyIDSeq push_consumers;
00698
00705 ProxyConsumer get_proxy_consumer (
00706 in ProxyID proxy_id )
00707 raises ( ProxyNotFound );
00708
00718 ProxyConsumer obtain_notification_pull_consumer (
00719 in ClientType ctype,
00720 out ProxyID proxy_id)
00721 raises ( AdminLimitExceeded );
00722
00732 ProxyConsumer obtain_notification_push_consumer (
00733 in ClientType ctype,
00734 out ProxyID proxy_id)
00735 raises ( AdminLimitExceeded );
00736
00740 void destroy();
00741
00742 };
00743
00747 interface EventChannel :
00748 CosNotification::QoSAdmin,
00749 CosNotification::AdminPropertiesAdmin,
00750 CosEventChannelAdmin::EventChannel
00751 {
00755 readonly attribute EventChannelFactory MyFactory;
00756
00761 readonly attribute ConsumerAdmin default_consumer_admin;
00762
00767 readonly attribute SupplierAdmin default_supplier_admin;
00768
00772 readonly attribute CosNotifyFilter::FilterFactory default_filter_factory;
00773
00783 ConsumerAdmin new_for_consumers(
00784 in InterFilterGroupOperator op,
00785 out AdminID id );
00786
00796 SupplierAdmin new_for_suppliers(
00797 in InterFilterGroupOperator op,
00798 out AdminID id );
00799
00808 ConsumerAdmin get_consumeradmin ( in AdminID id )
00809 raises (AdminNotFound);
00810
00819 SupplierAdmin get_supplieradmin ( in AdminID id )
00820 raises (AdminNotFound);
00821
00826 AdminIDSeq get_all_consumeradmins();
00827
00832 AdminIDSeq get_all_supplieradmins();
00833
00834 };
00835
00839 typedef long ChannelID;
00840
00844 typedef sequence<ChannelID> ChannelIDSeq;
00845
00849 exception ChannelNotFound {};
00850
00854 interface EventChannelFactory
00855 {
00869 EventChannel create_channel (
00870 in CosNotification::QoSProperties initial_qos,
00871 in CosNotification::AdminProperties initial_admin,
00872 out ChannelID id)
00873 raises(CosNotification::UnsupportedQoS,
00874 CosNotification::UnsupportedAdmin );
00875
00880 ChannelIDSeq get_all_channels();
00881
00889 EventChannel get_event_channel ( in ChannelID id )
00890 raises (ChannelNotFound);
00891
00892 };
00893
00894 };
00895
00896 #endif