TAO_Notify_Admin Class Reference

Base class for the ConsumerAdmin and SupplierAdmin. More...

#include <Admin.h>

Inheritance diagram for TAO_Notify_Admin:

Inheritance graph
[legend]
Collaboration diagram for TAO_Notify_Admin:

Collaboration graph
[legend]
List of all members.

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_FilterAdminfilter_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_EventChannelevent_channel () const
virtual int shutdown (void)
 Shutdown.
virtual void save_persistent (TAO_Notify::Topology_Saver &saver)
virtual TAO_Notify::Topology_Objectload_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_Containerproxy_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_Containerproxy_container_
 The Proxy Container.

Friends

class TAO_Notify_Builder

Detailed Description

Base class for the ConsumerAdmin and SupplierAdmin.

Definition at line 40 of file Admin.h.


Member Typedef Documentation

typedef CosNotifyChannelAdmin::AdminIDSeq TAO_Notify_Admin::SEQ

Definition at line 44 of file Admin.h.

typedef CosNotifyChannelAdmin::AdminIDSeq_var TAO_Notify_Admin::SEQ_VAR

Definition at line 45 of file Admin.h.

typedef TAO_Notify_Container_T<TAO_Notify_Proxy> TAO_Notify_Admin::TAO_Notify_Proxy_Container [protected]

Definition at line 93 of file Admin.h.


Constructor & Destructor Documentation

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]

Destructor.

Definition at line 45 of file Admin.cpp.

00046 {
00047 }


Member Function Documentation

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

Definition at line 9 of file Admin.inl.

References ec_, and TAO_Notify_Refcountable_Guard_T< T >::get().

00010 {
00011   return this->ec_.get();
00012 }

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 }


Friends And Related Function Documentation

friend class TAO_Notify_Builder [friend]

Reimplemented from TAO_Notify_Object.

Definition at line 42 of file Admin.h.


Member Data Documentation

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().

TAO_Notify_FilterAdmin TAO_Notify_Admin::filter_admin_ [protected]

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().

CosNotifyChannelAdmin::InterFilterGroupOperator TAO_Notify_Admin::filter_operator_ [protected]

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]

Definition at line 110 of file Admin.h.

Referenced by is_default(), and set_default().

ACE_Auto_Ptr< TAO_Notify_Proxy_Container > TAO_Notify_Admin::proxy_container_ [private]

The Proxy Container.

Definition at line 116 of file Admin.h.

Referenced by init(), and proxy_container().

TAO_Notify_EventTypeSeq TAO_Notify_Admin::subscribed_types_ [protected]

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().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:46:15 2010 for TAO_CosNotification by  doxygen 1.4.7