diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp | 138 |
1 files changed, 130 insertions, 8 deletions
diff --git a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp index 3893abbc868..835a4b5d450 100644 --- a/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp +++ b/TAO/orbsvcs/orbsvcs/LoadBalancing/LB_PropertyManager.cpp @@ -6,9 +6,13 @@ ACE_RCSID (LoadBalancing, LB_PropertyManager, "$Id$") -// TAO_LB_PropertyManager::TAO_LB_PropertyManager (void) -// { -// } +TAO_LB_PropertyManager::TAO_LB_PropertyManager (void) + : default_properties_ (), + type_properties_ (), + creation_properties_ (), + dynamic_properties_ () +{ +} void TAO_LB_PropertyManager::set_default_properties ( @@ -18,6 +22,10 @@ TAO_LB_PropertyManager::set_default_properties ( LoadBalancing::InvalidProperty, LoadBalancing::UnsupportedProperty)) { + this->validate_properties (props, ACE_TRY_ENV); + ACE_CHECK; + + this->default_properties_ = props; } LoadBalancing::Properties * @@ -25,33 +33,51 @@ TAO_LB_PropertyManager::get_default_properties ( CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) { - ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); + LoadBalancing::Properties *props = 0; + ACE_NEW_THROW_EX (props, + LoadBalancing::Properties (this->default_properties_), + CORBA::NO_MEMORY ( + CORBA::SystemException::_tao_minor_code ( + TAO_DEFAULT_MINOR_CODE, + ENOMEM), + CORBA::COMPLETED_NO)); + ACE_CHECK_RETURN (0); + + return props; } void TAO_LB_PropertyManager::remove_default_properties ( - const LoadBalancing::Properties & props, + const LoadBalancing::Properties &props, CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException, LoadBalancing::InvalidProperty, LoadBalancing::UnsupportedProperty)) { + this->validate_properties (props, ACE_TRY_ENV); + ACE_CHECK; + + ACE_THROW (CORBA::NO_IMPLEMENT ()); } void TAO_LB_PropertyManager::set_type_properties ( - const char * type_id, + const char * /* type_id */, const LoadBalancing::Properties & overrides, CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException, LoadBalancing::InvalidProperty, LoadBalancing::UnsupportedProperty)) { + this->validate_properties (overrides, ACE_TRY_ENV); + ACE_CHECK; + + ACE_THROW (CORBA::NO_IMPLEMENT ()); } LoadBalancing::Properties * TAO_LB_PropertyManager::get_type_properties ( - const char * type_id, + const char * /* type_id */, CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) { @@ -60,13 +86,17 @@ TAO_LB_PropertyManager::get_type_properties ( void TAO_LB_PropertyManager::remove_type_properties ( - const char * type_id, + const char * /* type_id */, const LoadBalancing::Properties & props, CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException, LoadBalancing::InvalidProperty, LoadBalancing::UnsupportedProperty)) { + this->validate_properties (props, ACE_TRY_ENV); + ACE_CHECK; + + ACE_THROW (CORBA::NO_IMPLEMENT ()); } void @@ -79,6 +109,10 @@ TAO_LB_PropertyManager::set_properties_dynamically ( LoadBalancing::InvalidProperty, LoadBalancing::UnsupportedProperty)) { + this->validate_properties (overrides, ACE_TRY_ENV); + ACE_CHECK; + + ACE_THROW (CORBA::NO_IMPLEMENT ()); } LoadBalancing::Properties * @@ -90,3 +124,91 @@ TAO_LB_PropertyManager::get_properties ( { ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0); } + +void +TAO_LB_PropertyManager::validate_properties ( + const LoadBalancing::Properties & props, + CORBA::Environment &ACE_TRY_ENV) + ACE_THROW_SPEC ((LoadBalancing::InvalidProperty, + LoadBalancing::UnsupportedProperty)) +{ + // @todo FIXME! Just a hack to get things going... + + CORBA::ULong len = props.length (); + for (CORBA::ULong i = 0; i < len; ++i) + { + if (ACE_OS::strcmp (props[i].nam.id[0], + "Factories") == 0) + return; + else if (ACE_OS::strcmp (props[i].nam.id[0], + "InitialNumberReplicas") == 0) + return; + else if (ACE_OS::strcmp (props[i].nam.id[0], + "MinimumNumberReplicas") == 0) + return; + else + ACE_THROW (LoadBalancing::UnsupportedProperty (props[i].nam)); + } +} + +// ----------------------------------------------------------- + +CORBA::Boolean +operator== (const LoadBalancing::Property &lhs, + const LoadBalancing::Property &rhs) +{ + // @todo Interim implementation until we figure out what to do when a + // property has multiple components. + CORBA::ULong lhs_len = lhs.length (); + CORBA::ULong rhs_len = rhs.length (); + + if (lhs_len != rhs_len) + return 0; + + for (CORBA::ULong i = 0; i < lhs_len; ++i) + if (ACE_OS::strcmp (lhs[i].id, rhs[i].id) != 0 + || ACE_OS::strcmp (lhs[i].kind, rhs[i].kind) != 0) + return 0; + + return 1; +} + +// ----------------------------------------------------------- + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) + +// Type-specific property hash map template instantiations +template class ACE_Hash_Map_Entry<const char *, LoadBalancing::Properties>; +template class ACE_Hash_Map_Manager_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Iterator_Base_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Iterator_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Reverse_Iterator_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX>; + +// ObjectGroup-specific property hash map template instantiations +template class ACE_Hash_Map_Entry<PortableServer::ObjectId, LoadBalancing::Properties>; +template class ACE_Hash_Map_Manager_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Iterator_Base_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Iterator_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX>; +template class ACE_Hash_Map_Reverse_Iterator_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX>; + +template class ACE_Equal_To<PortableServer::ObjectId>; + +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) + +// Type-specific property hash map template instantiations +#pragma instantiate ACE_Hash_Map_Entry<const char *, LoadBalancing::Properties> +#pragma instantiate ACE_Hash_Map_Manager_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<const char *, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<const char *>, TAO_SYNCH_MUTEX> + +// ObjectGroup-specific property hash map template instantiations +#pragma instantiate ACE_Hash_Map_Entry<PortableServer::ObjectId, LoadBalancing::Properties> +#pragma instantiate ACE_Hash_Map_Manager_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Iterator_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX> +#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<PortableServer::ObjectId, LoadBalancing::Properties, TAO_ObjectId_Hash, ACE_Equal_To<PortableServer::ObjectId>, TAO_SYNCH_MUTEX> + +#pragma instantiate ACE_Equal_To<PortableServer::ObjectId> + +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ |