diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.h')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.h b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.h new file mode 100644 index 00000000000..33162cb722b --- /dev/null +++ b/TAO/orbsvcs/orbsvcs/PortableGroup/PG_PropertyManager.h @@ -0,0 +1,160 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file PG_PropertyManager.h + * + * $Id$ + * + * @author Ossama Othman <ossama@uci.edu> + */ +//============================================================================= + +#ifndef TAO_PG_PROPERTY_MANAGER_H +#define TAO_PG_PROPERTY_MANAGER_H + +#include /**/ "ace/pre.h" + +#include "ace/config-all.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +#pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "orbsvcs/PortableGroup/PG_Default_Property_Validator.h" +#include "orbsvcs/PortableGroup/portablegroup_export.h" +#include "orbsvcs/PortableGroupS.h" + +#include "ace/SString.h" +#include "ace/Null_Mutex.h" +#include "ace/Functor.h" +#include "ace/Hash_Map_Manager_T.h" + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +/// Forward declarations. +class TAO_PG_ObjectGroupManager; + +/** + * @class TAO_PG_PropertyManager + * + * @brief Class that implements the PortableGroup::PropertyManager + * interface. + * + * Only the default and type-specific properties are housed in this + * class. The properties used at creation time of an object group and + * those set dynamically after object group creation are stored in the + * TAO_PG_ObjectGroup_Map_Entry structure. However, the + * PropertyManager is still used to manage those properties. + */ +class TAO_PortableGroup_Export TAO_PG_PropertyManager + : public virtual POA_PortableGroup::PropertyManager +{ +public: + + /// Constructor. + TAO_PG_PropertyManager (TAO_PG_ObjectGroupManager & object_group_manager); + + /** + * @name PortableGroup::PropertyManager methods + * + * Methods required by the PortableGroup::PropertyManager + * interface. + */ + //@{ + + /// Set the default properties to be used by all object groups. + virtual void set_default_properties ( + const PortableGroup::Properties & props); + + /// Get the default properties used by all object groups. + virtual PortableGroup::Properties * get_default_properties (); + + /// Remove default properties. + virtual void remove_default_properties ( + const PortableGroup::Properties & props); + + /// Set properties associated with a given Member type. These + /// properties override the default properties. + virtual void set_type_properties ( + const char * type_id, + const PortableGroup::Properties & overrides); + + /** + * Return the properties associated with a give Replica type. These + * properties include the type-specific properties in use, in + * addition to the default properties that were not overridden. + */ + virtual PortableGroup::Properties * get_type_properties ( + const char * type_id); + + /// Remove the given properties associated with the Replica type ID. + virtual void remove_type_properties ( + const char * type_id, + const PortableGroup::Properties & props); + + /** + * Dynamically set the properties associated with a given object + * group as the load balancer and replicas are being executed. + * These properties override the type-specific and default + * properties. + */ + virtual void set_properties_dynamically ( + PortableGroup::ObjectGroup_ptr object_group, + const PortableGroup::Properties & overrides); + + /** + * Return the properties currently in use by the given object + * group. These properties include those that were set dynamically, + * type-specific properties that weren't overridden, properties that + * were used when the replica was created, and default properties + * that weren't overridden. + */ + virtual PortableGroup::Properties * get_properties ( + PortableGroup::ObjectGroup_ptr object_group); + + //@} + + /// Type-specific property hash map. + typedef ACE_Hash_Map_Manager_Ex< + ACE_CString, + PortableGroup::Properties, + ACE_Hash<ACE_CString>, + ACE_Equal_To<ACE_CString>, + ACE_Null_Mutex> Type_Prop_Table; + +private: + + /// Remove properties "to_be_removed" from the given list of + /// properties. + void remove_properties (const PortableGroup::Properties & to_be_removed, + PortableGroup::Properties &properties); + +private: + + /// Table that maps ObjectId to Object Group related information. + TAO_PG_ObjectGroupManager & object_group_manager_; + + /// Default properties. + PortableGroup::Properties default_properties_; + + /// Table of type-specific object group properties. + Type_Prop_Table type_properties_; + + /// Lock used to synchronize access to the default properties and + /// the type-specific properties. + TAO_SYNCH_MUTEX lock_; + + /// The property validator. + /** + * @todo Strategize the validator, or use template policies. + */ + TAO_PG_Default_Property_Validator property_validator_; + +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" + +#endif /* TAO_PG_PROPERTY_MANAGER_H */ |