TAO_POAManager_Factory Class Reference

#include <POAManagerFactory.h>

Inheritance diagram for TAO_POAManager_Factory:

Inheritance graph
[legend]
Collaboration diagram for TAO_POAManager_Factory:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 TAO_POAManager_Factory (TAO_Object_Adapter &object_adapter)
virtual ~TAO_POAManager_Factory (void)
virtual::PortableServer::POAManager_ptr create_POAManager (const char *id, const::CORBA::PolicyList &policies) throw (CORBA::SystemException, ::PortableServer::POAManagerFactory::ManagerAlreadyExists, ::CORBA::PolicyError)
virtual::PortableServer::POAManagerFactory::POAManagerSeq * list () throw (CORBA::SystemException)
virtual::PortableServer::POAManager_ptr find (const char *id) throw (CORBA::SystemException)
int remove_poamanager (::PortableServer::POAManager_ptr poamanager)
int register_poamanager (::PortableServer::POAManager_ptr poamanager)

Private Types

typedef ACE_Unbounded_Set<
::PortableServer::POAManager_ptr
POAMANAGERSET

Private Attributes

TAO_Object_Adapterobject_adapter_
POAMANAGERSET poamanager_set_

Member Typedef Documentation

typedef ACE_Unbounded_Set< ::PortableServer::POAManager_ptr> TAO_POAManager_Factory::POAMANAGERSET [private]
 

Definition at line 73 of file POAManagerFactory.h.


Constructor & Destructor Documentation

TAO_BEGIN_VERSIONED_NAMESPACE_DECL TAO_POAManager_Factory::TAO_POAManager_Factory TAO_Object_Adapter object_adapter  ) 
 

Definition at line 17 of file POAManagerFactory.cpp.

00017                                                                                   :
00018   object_adapter_ (object_adapter)
00019 {
00020 }

TAO_POAManager_Factory::~TAO_POAManager_Factory void   )  [virtual]
 

Definition at line 22 of file POAManagerFactory.cpp.

References ACE_Unbounded_Set< T >::begin(), ACE_Unbounded_Set< T >::end(), poamanager_set_, and CORBA::release().

00023 {
00024   for (POAMANAGERSET::iterator iterator = this->poamanager_set_.begin ();
00025         iterator != this->poamanager_set_.end ();
00026         ++iterator)
00027     {
00028       ::PortableServer::POAManager_ptr poamanager = (*iterator);
00029       CORBA::release (poamanager);
00030     }
00031 }


Member Function Documentation

PortableServer::POAManager_ptr TAO_POAManager_Factory::create_POAManager const char *  id,
const::CORBA::PolicyList &  policies
throw (CORBA::SystemException, ::PortableServer::POAManagerFactory::ManagerAlreadyExists, ::CORBA::PolicyError)
 

Definition at line 34 of file POAManagerFactory.cpp.

References ACE_CHECK_RETURN, ACE_ENV_ARG_PARAMETER, ACE_NEW_THROW_EX, ACE_THROW_RETURN, TAO_Objref_Var_T< T >::in(), CORBA::is_nil(), PortableServer::POAManager_ptr, and PortableServer::POAManager_var.

Referenced by TAO_Object_Adapter::open().

00041 {
00042   if (policies.length () > 1
00043     || (policies.length () == 1 &&
00044         policies[0]->policy_type () != EndpointPolicy::ENDPOINT_POLICY_TYPE))
00045   {
00046     ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY),
00047                       ::PortableServer::POAManager::_nil ());
00048   }
00049 
00050   PortableServer::POAManager_var poamanager =
00051     PortableServer::POAManager::_nil ();
00052   if (id != 0)
00053   {
00054     poamanager = this->find (id ACE_ENV_ARG_PARAMETER);
00055     ACE_CHECK_RETURN (::PortableServer::POAManager::_nil ());
00056 
00057     // If we already have a manager with the same name throw an exception
00058     if (!CORBA::is_nil (poamanager.in()))
00059       {
00060         ACE_THROW_RETURN (
00061           ::PortableServer::POAManagerFactory::ManagerAlreadyExists (),
00062           ::PortableServer::POAManager::_nil ());
00063       }
00064   }
00065 
00066   // this indirection brought to you by borland's compiler and its refusal
00067   // to directly assign the newly created TAO_POA_Manager to a POAManager_var.
00068   {
00069     PortableServer::POAManager_ptr pm = 0;
00070     ACE_NEW_THROW_EX (pm,
00071                       TAO_POA_Manager (object_adapter_, id, policies, this),
00072                       CORBA::NO_MEMORY
00073                       (CORBA::SystemException::_tao_minor_code (0, ENOMEM),
00074                        CORBA::COMPLETED_NO));
00075     ACE_CHECK_RETURN (::PortableServer::POAManager::_nil ());
00076     poamanager = pm;
00077   }
00078 
00079   this->register_poamanager (poamanager.in ());
00080 
00081   return PortableServer::POAManager::_duplicate (poamanager.in ());
00082 }

PortableServer::POAManager_ptr TAO_POAManager_Factory::find const char *  id  )  throw (CORBA::SystemException)
 

Definition at line 114 of file POAManagerFactory.cpp.

References ACE_CHECK_RETURN, ACE_ENV_SINGLE_ARG_PARAMETER, and ACE_OS::strcmp().

00117 {
00118   ::PortableServer::POAManager_ptr poamanager =
00119     ::PortableServer::POAManager::_nil();
00120 
00121   for (POAMANAGERSET::iterator iterator = this->poamanager_set_.begin ();
00122         iterator != this->poamanager_set_.end ();
00123         ++iterator)
00124     {
00125       CORBA::String_var poamanagerid =
00126         (*iterator)->get_id (ACE_ENV_SINGLE_ARG_PARAMETER);
00127       ACE_CHECK_RETURN (::PortableServer::POAManager::_nil());
00128 
00129       if (ACE_OS::strcmp (id, poamanagerid.in()) == 0)
00130         {
00131           poamanager = PortableServer::POAManager::_duplicate (*iterator);
00132           break;
00133         }
00134     }
00135 
00136   return poamanager;
00137 }

PortableServer::POAManagerFactory::POAManagerSeq * TAO_POAManager_Factory::list  )  throw (CORBA::SystemException)
 

Implements PortableServer::POAManagerFactory.

Definition at line 85 of file POAManagerFactory.cpp.

References ACE_CHECK_RETURN, ACE_NEW_THROW_EX, and PortableServer::POAManagerFactory::POAManagerSeq.

00088 {
00089   ::PortableServer::POAManagerFactory::POAManagerSeq_var poamanagers;
00090   CORBA::ULong number_of_poamanagers = static_cast <CORBA::ULong>
00091                                               (this->poamanager_set_.size ());
00092   ACE_NEW_THROW_EX (poamanagers,
00093                     PortableServer::POAManagerFactory::POAManagerSeq (
00094                       number_of_poamanagers),
00095                     CORBA::NO_MEMORY ());
00096   ACE_CHECK_RETURN (0);
00097 
00098   poamanagers->length (number_of_poamanagers);
00099 
00100   CORBA::ULong index = 0;
00101   for (POAMANAGERSET::iterator iterator = this->poamanager_set_.begin ();
00102         iterator != this->poamanager_set_.end ();
00103         ++iterator, ++index)
00104     {
00105       ::PortableServer::POAManager_ptr poamanager = (*iterator);
00106       poamanagers[index] =
00107         PortableServer::POAManager::_duplicate (poamanager);
00108     }
00109 
00110   return poamanagers._retn ();
00111 }

int TAO_POAManager_Factory::register_poamanager ::PortableServer::POAManager_ptr  poamanager  ) 
 

Definition at line 155 of file POAManagerFactory.cpp.

References ACE_Unbounded_Set< T >::insert(), PortableServer::POAManager_ptr, and poamanager_set_.

00157 {
00158   return this->poamanager_set_.insert (
00159     PortableServer::POAManager::_duplicate (poamanager));
00160 }

int TAO_POAManager_Factory::remove_poamanager ::PortableServer::POAManager_ptr  poamanager  ) 
 

Definition at line 140 of file POAManagerFactory.cpp.

References PortableServer::POAManager_ptr, poamanager_set_, CORBA::release(), and ACE_Unbounded_Set< T >::remove().

Referenced by TAO_POA_Manager::remove_poa().

00142 {
00143   int retval = 0;
00144   retval = this->poamanager_set_.remove (poamanager);
00145 
00146   if (retval == 0)
00147     {
00148       CORBA::release (poamanager);
00149     }
00150 
00151   return retval;
00152 }


Member Data Documentation

TAO_Object_Adapter& TAO_POAManager_Factory::object_adapter_ [private]
 

Definition at line 71 of file POAManagerFactory.h.

POAMANAGERSET TAO_POAManager_Factory::poamanager_set_ [private]
 

Definition at line 75 of file POAManagerFactory.h.

Referenced by register_poamanager(), remove_poamanager(), and ~TAO_POAManager_Factory().


The documentation for this class was generated from the following files:
Generated on Thu Nov 9 12:45:59 2006 for TAO_PortableServer by doxygen 1.3.6