#include <Admin.h>
Inheritance diagram for TAO_Notify_Admin:
Public Types | |
typedef CosNotifyChannelAdmin::AdminIDSeq | SEQ |
typedef CosNotifyChannelAdmin::AdminIDSeq_var | SEQ_VAR |
Public Member Functions | |
TAO_Notify_Admin () | |
Constructor. | |
virtual | ~TAO_Notify_Admin () |
Destructor. | |
void | init (TAO_Notify::Topology_Parent *parent) |
Init. | |
void | insert (TAO_Notify_Proxy *proxy) |
Insert the proxy in the <proxy_container_>. | |
void | cleanup_proxy (TAO_Notify_Proxy *proxy, bool is_supplier) |
Remove type from container_ and cleanup any EC resources. | |
TAO_Notify_FilterAdmin & | filter_admin (void) |
Access Admin FilterAdmin. | |
void | filter_operator (CosNotifyChannelAdmin::InterFilterGroupOperator filter_operator) |
Set Filter operator. | |
CosNotifyChannelAdmin::InterFilterGroupOperator | filter_operator (void) |
Access Filter operator. | |
void | subscribed_types (TAO_Notify_EventTypeSeq &subscribed_types) |
Obtain the Admin's subscribed types. | |
TAO_Notify_EventChannel * | event_channel () const |
virtual int | shutdown (void) |
Shutdown. | |
virtual void | save_persistent (TAO_Notify::Topology_Saver &saver) |
virtual TAO_Notify::Topology_Object * | load_child (const ACE_CString &type, CORBA::Long id, const TAO_Notify::NVPList &attrs) |
Create a child of the appropriate type and return it. | |
virtual void | reconnect (void) |
void | set_default (bool is_default) |
bool | is_default () const |
virtual void | load_attrs (const TAO_Notify::NVPList &attrs) |
Protected Types | |
typedef TAO_Notify_Container_T< TAO_Notify_Proxy > | TAO_Notify_Proxy_Container |
Protected Member Functions | |
void | save_attrs (TAO_Notify::NVPList &attrs) |
virtual const char * | get_admin_type_name (void) const =0 |
TAO_Notify_Proxy_Container & | proxy_container () |
Protected Attributes | |
TAO_Notify_EventChannel::Ptr | ec_ |
The EventChannel. | |
TAO_Notify_EventTypeSeq | subscribed_types_ |
The types that we've subscribed our proxy objects with the event manager. | |
TAO_Notify_FilterAdmin | filter_admin_ |
Filter Administration. | |
CosNotifyChannelAdmin::InterFilterGroupOperator | filter_operator_ |
Filter operator. | |
bool | is_default_ |
Private Member Functions | |
void | remove (TAO_Notify_Proxy *proxy) |
Remove type from container_. | |
Private Attributes | |
ACE_Auto_Ptr< TAO_Notify_Proxy_Container > | proxy_container_ |
The Proxy Container. | |
Friends | |
class | TAO_Notify_Builder |
Definition at line 40 of file Admin.h.
typedef CosNotifyChannelAdmin::AdminIDSeq_var TAO_Notify_Admin::SEQ_VAR |
typedef TAO_Notify_Container_T<TAO_Notify_Proxy> TAO_Notify_Admin::TAO_Notify_Proxy_Container [protected] |
TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_Notify_Admin::TAO_Notify_Admin | ( | ) |
Constructor.
Definition at line 34 of file Admin.cpp.
References ACE_Unbounded_Set_Ex< T, C >::insert(), TAO_Notify_EventType::special(), and subscribed_types_.
00035 : ec_ (0) 00036 , filter_operator_ (CosNotifyChannelAdmin::OR_OP) 00037 , is_default_ (false) 00038 { 00039 // Initialize all Admin objects to initially be subscribed for all 00040 // events. This is a reasonable default and is required to allow 00041 // Cos Event consumers/suppliers to send/receive events, 00042 this->subscribed_types_.insert (TAO_Notify_EventType::special ()); 00043 }
TAO_Notify_Admin::~TAO_Notify_Admin | ( | ) | [virtual] |
void TAO_Notify_Admin::cleanup_proxy | ( | TAO_Notify_Proxy * | proxy, | |
bool | is_supplier | |||
) |
Remove type from container_ and cleanup any EC resources.
Definition at line 71 of file Admin.cpp.
References ec_, TAO_Notify_Object::id(), and remove().
00073 { 00074 // We must clean up the proxy before calling remove. Doing it in the 00075 // opposite order causes us to use invalid memory (through the call of 00076 // id() into the proxy). 00077 ec_->cleanup_proxy (proxy->id(), is_supplier); 00078 00079 this->remove (proxy); 00080 }
TAO_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE TAO_Notify_EventChannel * TAO_Notify_Admin::event_channel | ( | ) | const |
ACE_INLINE TAO_Notify_FilterAdmin & TAO_Notify_Admin::filter_admin | ( | void | ) |
Access Admin FilterAdmin.
Definition at line 16 of file Admin.inl.
References filter_admin_.
Referenced by TAO_Notify_Method_Request_Lookup::execute_i(), and TAO_Notify_Method_Request_Dispatch::execute_i().
00017 { 00018 return this->filter_admin_; 00019 }
ACE_INLINE CosNotifyChannelAdmin::InterFilterGroupOperator TAO_Notify_Admin::filter_operator | ( | void | ) |
Access Filter operator.
Definition at line 28 of file Admin.inl.
References filter_operator_.
00029 { 00030 return this->filter_operator_; 00031 }
ACE_INLINE void TAO_Notify_Admin::filter_operator | ( | CosNotifyChannelAdmin::InterFilterGroupOperator | filter_operator | ) |
Set Filter operator.
Definition at line 22 of file Admin.inl.
References filter_operator_.
Referenced by TAO_Notify_Builder::build_consumer_admin(), TAO_Notify_Builder::build_supplier_admin(), TAO_Notify_Method_Request_Lookup::execute_i(), and TAO_Notify_Method_Request_Dispatch::execute_i().
00023 { 00024 this->filter_operator_ = filter_operator; 00025 }
virtual const char* TAO_Notify_Admin::get_admin_type_name | ( | void | ) | const [protected, pure virtual] |
Implemented in TAO_Notify_ConsumerAdmin, and TAO_Notify_SupplierAdmin.
Referenced by save_persistent().
void TAO_Notify_Admin::init | ( | TAO_Notify::Topology_Parent * | parent | ) |
Init.
Definition at line 50 of file Admin.cpp.
References ACE_ASSERT, ACE_NEW_THROW_EX, ec_, TAO_Notify_Container_T< TYPE >::init(), TAO_Notify::Topology_Object::initialize(), proxy_container(), proxy_container_, and TAO_Notify_Refcountable_Guard_T< T >::reset().
Referenced by TAO_Notify_SupplierAdmin::init(), and TAO_Notify_ConsumerAdmin::init().
00051 { 00052 ACE_ASSERT (this->ec_.get() == 0); 00053 00054 this->ec_.reset (dynamic_cast<TAO_Notify_EventChannel *>(parent)); 00055 ACE_ASSERT (this->ec_.get() != 0); 00056 00057 // this-> on the following line confuses VC6 00058 initialize (parent); 00059 00060 TAO_Notify_Proxy_Container* proxy_container = 0; 00061 ACE_NEW_THROW_EX (proxy_container, 00062 TAO_Notify_Proxy_Container (), 00063 CORBA::INTERNAL ()); 00064 this->proxy_container_.reset (proxy_container); 00065 00066 this->proxy_container().init (); 00067 00068 }
void TAO_Notify_Admin::insert | ( | TAO_Notify_Proxy * | proxy | ) |
Insert the proxy in the <proxy_container_>.
Definition at line 114 of file Admin.cpp.
References TAO_Notify_Container_T< TYPE >::insert(), and proxy_container().
00115 { 00116 this->proxy_container().insert (proxy); 00117 }
ACE_INLINE bool TAO_Notify_Admin::is_default | ( | ) | const |
Definition at line 42 of file Admin.inl.
References is_default_.
Referenced by TAO_Notify_EventChannel::load_child().
00043 { 00044 return this->is_default_; 00045 }
void TAO_Notify_Admin::load_attrs | ( | const TAO_Notify::NVPList & | attrs | ) | [virtual] |
Load our attributes. Each derived type should call the superclass load first before loading its own attributes.
Reimplemented from TAO_Notify_Object.
Definition at line 166 of file Admin.cpp.
References ACE_OS::atoi(), TAO_Notify::NVPList::find(), TAO_Notify_Object::load_attrs(), and ACE_OS::strcmp().
Referenced by TAO_Notify_EventChannel::load_child().
00167 { 00168 TAO_Notify_Object::load_attrs (attrs); 00169 const char* value = 0; 00170 if (attrs.find ("InterFilterGroupOperator", value)) 00171 { 00172 this->filter_operator_ = static_cast <CosNotifyChannelAdmin::InterFilterGroupOperator> (ACE_OS::atoi (value)); 00173 } 00174 00175 if (attrs.find ("default", value)) 00176 { 00177 this->is_default_ = (ACE_OS::strcmp (value, "yes") == 0); 00178 } 00179 }
TAO_Notify::Topology_Object * TAO_Notify_Admin::load_child | ( | const ACE_CString & | type, | |
CORBA::Long | id, | |||
const TAO_Notify::NVPList & | attrs | |||
) | [virtual] |
Create a child of the appropriate type and return it.
Use "type" as passed in to determine what kind of child (supporting the Topology_Object interface) to create and return. Inform it of its new ID.
Reimplemented from TAO_Notify::Topology_Object.
Reimplemented in TAO_Notify_ConsumerAdmin, and TAO_Notify_SupplierAdmin.
Definition at line 182 of file Admin.cpp.
References ACE_DEBUG, ACE_TEXT(), DEBUG_LEVEL, filter_admin_, LM_DEBUG, ACE_Unbounded_Set_Ex< T, C >::reset(), and subscribed_types_.
Referenced by TAO_Notify_SupplierAdmin::load_child(), and TAO_Notify_ConsumerAdmin::load_child().
00185 { 00186 ACE_UNUSED_ARG (attrs); 00187 TAO_Notify::Topology_Object* result = this; 00188 if (type == "subscriptions") 00189 { 00190 if (DEBUG_LEVEL) 00191 ACE_DEBUG ((LM_DEBUG, 00192 ACE_TEXT ("(%P|%t) Admin reload subscription %d\n"), 00193 static_cast<int> (id) 00194 )); 00195 // since we initialized our subscribed types to everything 00196 // in the constructor. we have to clear it out first. 00197 this->subscribed_types_.reset(); 00198 result = &this->subscribed_types_; 00199 } 00200 else if (type == "filter_admin") 00201 { 00202 if (DEBUG_LEVEL) 00203 ACE_DEBUG ((LM_DEBUG, 00204 ACE_TEXT ("(%P|%t) Admin reload filter_admin %d\n"), 00205 static_cast<int> (id) 00206 )); 00207 result = & this->filter_admin_; 00208 } 00209 return result; 00210 }
ACE_INLINE TAO_Notify_Admin::TAO_Notify_Proxy_Container & TAO_Notify_Admin::proxy_container | ( | ) | [protected] |
Definition at line 48 of file Admin.inl.
References ACE_ASSERT, and proxy_container_.
Referenced by TAO_Notify_SupplierAdmin::destroy(), TAO_Notify_ConsumerAdmin::destroy(), init(), insert(), TAO_Notify_SupplierAdmin::offer_change(), reconnect(), remove(), save_persistent(), shutdown(), and TAO_Notify_ConsumerAdmin::subscription_change().
00049 { 00050 ACE_ASSERT( proxy_container_.get() != 0 ); 00051 return *proxy_container_; 00052 }
void TAO_Notify_Admin::reconnect | ( | void | ) | [virtual] |
Re-establish connections that we had before a shutdown.
After a topology restore, this method is called so we can reconnect to any external objects with whom we were interacting. We should call the reconnect() method on all of our children to give them the chance to do the same.
Reimplemented from TAO_Notify::Topology_Savable.
Definition at line 213 of file Admin.cpp.
References TAO_Notify_Container_T< TYPE >::collection(), and proxy_container().
00214 { 00215 TAO_Notify::Reconnect_Worker<TAO_Notify_Proxy> wrk; 00216 this->proxy_container().collection()->for_each(&wrk); 00217 }
void TAO_Notify_Admin::remove | ( | TAO_Notify_Proxy * | proxy | ) | [private] |
Remove type from container_.
Definition at line 83 of file Admin.cpp.
References proxy_container(), and TAO_Notify_Container_T< TYPE >::remove().
Referenced by cleanup_proxy().
00084 { 00085 this->proxy_container().remove (proxy); 00086 }
void TAO_Notify_Admin::save_attrs | ( | TAO_Notify::NVPList & | attrs | ) | [protected, virtual] |
Called by derived types to save their attributes. Each derived type should call its superclass version before saving its own attrs.
Reimplemented from TAO_Notify_Object.
Definition at line 154 of file Admin.cpp.
References TAO_Notify::NVPList::push_back(), and TAO_Notify_Object::save_attrs().
Referenced by save_persistent().
00155 { 00156 TAO_Notify_Object::save_attrs(attrs); 00157 attrs.push_back(TAO_Notify::NVP("InterFilterGroupOperator", 00158 this->filter_operator_)); 00159 if (this->is_default_) 00160 { 00161 attrs.push_back (TAO_Notify::NVP ("default", "yes")); 00162 } 00163 }
void TAO_Notify_Admin::save_persistent | ( | TAO_Notify::Topology_Saver & | saver | ) | [virtual] |
Save our state to a Topology_Saver.
Use the methods of a Topology_Saver to store all information we want persisted. This function is called by our parent, which gives us a saver to use. In turn, we must call this function on all of our children. The implementation should look like: bool change = this->self_changed_; this->self_changed_ = false; this->children_changed_ = false; if (is_persistent ()) { bool want_all_children = saver.begin_object( this->id(), type, attrs, change); for all children { if (want_all_children || child.is_changed()) { child.save_persistent(saver); } } for all deleted children { saver.delete_child(child_type, child_id); } saver.end_object(this->id(), type); )
Implements TAO_Notify::Topology_Savable.
Definition at line 120 of file Admin.cpp.
References TAO_Notify::Topology_Saver::begin_object(), TAO_Notify::Topology_Object::children_changed_, TAO_Notify_Container_T< TYPE >::collection(), TAO_Notify::Topology_Saver::end_object(), get_admin_type_name(), TAO_Notify::Topology_Object::is_persistent(), proxy_container(), save_attrs(), and TAO_Notify::Topology_Object::self_changed_.
00121 { 00122 bool changed = this->children_changed_; 00123 this->children_changed_ = false; 00124 this->self_changed_ = false; 00125 00126 if (is_persistent ()) 00127 { 00128 TAO_Notify::NVPList attrs; 00129 this->save_attrs(attrs); 00130 00131 const char* type = this->get_admin_type_name(); 00132 00133 bool want_all_children = 00134 saver.begin_object(this->id(), type, attrs, changed); 00135 00136 if (want_all_children || this->filter_admin_.is_changed ()) 00137 { 00138 this->filter_admin_.save_persistent(saver); 00139 } 00140 if (want_all_children || this->subscribed_types_.is_changed ()) 00141 { 00142 this->subscribed_types_.save_persistent(saver); 00143 } 00144 00145 TAO_Notify::Save_Persist_Worker<TAO_Notify_Proxy> 00146 wrk(saver, want_all_children); 00147 this->proxy_container().collection()->for_each(&wrk); 00148 00149 saver.end_object(this->id(), type); 00150 } 00151 }
ACE_INLINE void TAO_Notify_Admin::set_default | ( | bool | is_default | ) |
Definition at line 35 of file Admin.inl.
References is_default_.
Referenced by TAO_Notify_EventChannel::default_consumer_admin(), and TAO_Notify_EventChannel::default_supplier_admin().
00036 { 00037 this->is_default_ = is_default; 00038 }
int TAO_Notify_Admin::shutdown | ( | void | ) | [virtual] |
Shutdown.
Reimplemented from TAO_Notify_Object.
Definition at line 103 of file Admin.cpp.
References proxy_container(), TAO_Notify_Container_T< TYPE >::shutdown(), and TAO_Notify_Object::shutdown().
Referenced by TAO_Notify_SupplierAdmin::destroy(), and TAO_Notify_ConsumerAdmin::destroy().
00104 { 00105 if (TAO_Notify_Object::shutdown () == 1) 00106 return 1; 00107 00108 this->proxy_container().shutdown (); 00109 00110 return 0; 00111 }
void TAO_Notify_Admin::subscribed_types | ( | TAO_Notify_EventTypeSeq & | subscribed_types | ) |
Obtain the Admin's subscribed types.
Definition at line 89 of file Admin.cpp.
References ACE_GUARD_THROW_EX, and TAO_SYNCH_MUTEX.
00090 { 00091 ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, ace_mon, this->lock_, 00092 CORBA::INTERNAL ()); 00093 00094 // Adopt the Admin's subscription. 00095 TAO_Notify_EventTypeSeq added (this->subscribed_types_), removed; 00096 00097 added.add_and_remove (subscribed_types, removed); 00098 00099 subscribed_types = added; 00100 }
friend class TAO_Notify_Builder [friend] |
TAO_Notify_EventChannel::Ptr TAO_Notify_Admin::ec_ [protected] |
The EventChannel.
Definition at line 99 of file Admin.h.
Referenced by cleanup_proxy(), TAO_Notify_SupplierAdmin::destroy(), TAO_Notify_ConsumerAdmin::destroy(), event_channel(), init(), TAO_Notify_SupplierAdmin::MyChannel(), and TAO_Notify_ConsumerAdmin::MyChannel().
Filter Administration.
Definition at line 105 of file Admin.h.
Referenced by TAO_Notify_SupplierAdmin::add_filter(), TAO_Notify_ConsumerAdmin::add_filter(), filter_admin(), TAO_Notify_SupplierAdmin::get_all_filters(), TAO_Notify_ConsumerAdmin::get_all_filters(), TAO_Notify_SupplierAdmin::get_filter(), TAO_Notify_ConsumerAdmin::get_filter(), load_child(), TAO_Notify_SupplierAdmin::remove_all_filters(), TAO_Notify_ConsumerAdmin::remove_all_filters(), TAO_Notify_SupplierAdmin::remove_filter(), and TAO_Notify_ConsumerAdmin::remove_filter().
Filter operator.
Definition at line 108 of file Admin.h.
Referenced by filter_operator(), TAO_Notify_SupplierAdmin::MyOperator(), and TAO_Notify_ConsumerAdmin::MyOperator().
bool TAO_Notify_Admin::is_default_ [protected] |
The Proxy Container.
Definition at line 116 of file Admin.h.
Referenced by init(), and proxy_container().
The types that we've subscribed our proxy objects with the event manager.
Definition at line 102 of file Admin.h.
Referenced by load_child(), TAO_Notify_SupplierAdmin::offer_change(), TAO_Notify_ConsumerAdmin::subscription_change(), and TAO_Notify_Admin().