diff options
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h | 327 |
1 files changed, 0 insertions, 327 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h b/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h deleted file mode 100644 index 4f5b959b216..00000000000 --- a/TAO/orbsvcs/orbsvcs/Trader/Service_Type_Repository.h +++ /dev/null @@ -1,327 +0,0 @@ -// -*- C++ -*- - -//============================================================================= -/** - * @file Service_Type_Repository.h - * - * $Id$ - * - * @author Marina Spivak <marina@cs.wustl.edu> - * @author Seth Widoff <sbw1@cs.wustl.edu> - */ -//============================================================================= - - -#ifndef TAO_SERVICE_TYPE_REPOSITORY_H -#define TAO_SERVICE_TYPE_REPOSITORY_H -#include /**/ "ace/pre.h" - -#include "orbsvcs/Trader/Trader.h" -#include "ace/Hash_Map_Manager.h" -#include "ace/Null_Mutex.h" - -TAO_BEGIN_VERSIONED_NAMESPACE_DECL - -/** - * @class TAO_Service_Type_Repository - * - * @brief This class implements CosTradingRepos::ServiceTypeRepository - * IDL interface. - */ -class TAO_Trading_Serv_Export TAO_Service_Type_Repository - : public POA_CosTradingRepos::ServiceTypeRepository -{ -public: - /** - * Parameterize the Service_Type_Repository with a lock to serialize - * access to the type repository map. A reader/writer lock is - * probably best. The Service_Type_Repository assumes control of the - * lock. - */ - TAO_Service_Type_Repository (ACE_Lock *lock = 0); - - ~TAO_Service_Type_Repository (void); - - virtual CosTradingRepos::ServiceTypeRepository::IncarnationNumber - incarnation (ACE_ENV_SINGLE_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException)); - - /** - * BEGIN SPEC - * The add_type operation enables the creation of new service types - * in the service type repository. The caller supplies the "name" - * for the new type, the identifier for the interface associated - * with instances of this service type, the properties definitions - * for this service type, and the service type names of the - * immediate super-types to this service type. - */ - virtual CosTradingRepos::ServiceTypeRepository::IncarnationNumber - add_type (const char *name, - const char *if_name, - const CosTradingRepos::ServiceTypeRepository::PropStructSeq &props, - const CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq &super_types - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTradingRepos::ServiceTypeRepository::ServiceTypeExists, - CosTradingRepos::ServiceTypeRepository::InterfaceTypeMismatch, - CosTrading::IllegalPropertyName, - CosTrading::DuplicatePropertyName, - CosTradingRepos::ServiceTypeRepository::ValueTypeRedefinition, - CosTrading::UnknownServiceType, - CosTradingRepos::ServiceTypeRepository::DuplicateServiceTypeName)); - - // If the type creation is successful, an incarnation number is - // returned as the value of the operation. Incarnation numbers are - // opaque values that are assigned to each modification to the - // repository's state. An incarnation number can be quoted when - // invoking the list_types operation to retrieve all changes to the - // service repository since a particular logical time. (Note: - // IncarnationNumber is currently declared as a struct consisting of - // two unsigned longs; what we really want here is an unsigned hyper - // [64-bit integer]. A future revision task force should modify this - // when CORBA systems support IDL 64-bit integers.) - - // If the "name" parameter is malformed, then the - // CosTrading::IllegalServiceType exception is raised. If the type - // already exists, then the ServiceTypeExists exception is raised. ° - // If the "if_name" parameter is not a sub-type of the interface - // associated with a service type from which this service type is - // derived, such that substitutability would be violated, then the - // InterfaceTypeMismatch exception is raised. If a property name - // supplied in the "props" parameter is malformed, the - // CosTrading::IllegalPropertyName exception is raised. If the - // same property name appears two or more times in the "props" - // parameter, the CosTrading::DuplicatePropertyName exception is - // raised. If a property value type associated with this service - // type illegally modifies the value type of a super-type's - // property, or if two super-types incompatibly declare value types - // for the same property name, then the ValueTypeRedefinition - // exception is raised. If one of the ServiceTypeNames in - // "super_types" is malformed, then the - // CosTrading::IllegalServiceType exception is raised. If one of the - // ServiceTypeNames in "super_types" does not exist, then the - // CosTrading::UnknownServiceType exception is raised. If the same - // service type name is included two or more times in this - // parameter, the DuplicateServiceTypeName exception is raised. - // END SPEC - - /** - * BEGIN SPEC - * The remove_type operation removes the named type from the service - * type repository. If "name" is malformed, then the - * CosTrading::IllegalServiceType exception is raised. If - * "name" does not exist within the repository, then the - * CosTrading::UnknownServiceType exception is raised. If - * "name" has a service type which has been derived from it, then - * the HasSubTypes exception is raised. END SPEC - */ - virtual void remove_type (const char *name - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType, - CosTradingRepos::ServiceTypeRepository::HasSubTypes)); - - virtual CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq * - list_types (const CosTradingRepos::ServiceTypeRepository::SpecifiedServiceTypes &which_types - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException)); - - // BEGIN SPEC - // The list_types operation permits a client to obtain the names of - // service types which are in the repository. The "which_types" - // parameter permits the client to specify one of two possible - // values: all types known to the repository all types - // added/modified since a particular incarnation number The names of - // the requested types are returned by the operation for subsequent - // querying via the describe_type or the fully_describe_type - // operation. - // END SPEC - - /** - * BEGIN SPEC - * The describe_type operation permits a client to obtain the - * details for a particular service type. If "name" is malformed, - * then the CosTrading::IllegalServiceType exception is raised. If - * "name" does not exist within the repository, then the - * CosTrading::UnknownServiceType exception is raised. - * END SPEC - */ - virtual CosTradingRepos::ServiceTypeRepository::TypeStruct * - describe_type (const char *name - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType)); - - /** - * BEGIN SPEC - * The fully_describe_type operation permits a client to obtain the - * details for a particular service type. The property sequence - * returned in the TypeStruct includes all properties inherited from - * the transitive closure of its super types; the sequence of super - * types in the TypeStruct contains the names of the types in the - * transitive closure of the super type relation. If "name" is - * malformed, then the CosTrading::IllegalServiceType exception is - * raised. If "name" does not exist within the repository, then - * the CosTrading::UnknownServiceType exception is raised. - * END SPEC - */ - virtual CosTradingRepos::ServiceTypeRepository::TypeStruct * - fully_describe_type (const char *name - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType)); - - /** - * BEGIN SPEC - * The mask_type operation permits the deprecation of a particular - * type (i.e., after being masked, exporters will no longer be able - * to advertise offers of that particular type). The type continues - * to exist in the service repository due to other service types - * being derived from it. If "name" is malformed, then the - * CosTrading::IllegalServiceType exception is raised. If "name" - * does not exist within the repository, then the - * CosTrading::UnknownServiceType exception is raised. If the type - * is currently in the masked state, then the AlreadyMasked - * exception is raised. - * END SPEC - */ - virtual void mask_type (const char *name - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType, - CosTradingRepos::ServiceTypeRepository::AlreadyMasked)); - - /** - * BEGIN SPEC - * The unmask_type undeprecates a type (i.e., after being unmasked, - * exporters will be able to resume advertisement of offers of that - * particular type). If "name" is malformed, then the - * CosTrading::IllegalServiceType exception is raised. If "name" - * does not exist within the repository, then the - * CosTrading::UnknownServiceType exception is raised. If the type - * is not currently in the masked state, then the NotMasked - * exception is raised. - * END SPEC - */ - virtual void unmask_type (const char *name - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CORBA::SystemException, - CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType, - CosTradingRepos::ServiceTypeRepository::NotMasked)); - -private: - - /** - * @class Type_Info - * - * @brief Storage structure for information pertinent to the type. - */ - class Type_Info - { - public: - /// Standard type info. - CosTradingRepos::ServiceTypeRepository::TypeStruct type_struct_; - - /// Names of subtypes. - CORBA::Boolean has_subtypes_; - }; - - typedef ACE_Hash_Map_Manager_Ex <CORBA::String_var, - CosTradingRepos::ServiceTypeRepository::PropStruct *, - ACE_Hash<CORBA::String_var>, - ACE_Equal_To<CORBA::String_var>, - ACE_Null_Mutex> - Prop_Map; - - typedef ACE_Hash_Map_Manager_Ex <CORBA::String_var, - Type_Info *, - ACE_Hash<CORBA::String_var>, - ACE_Equal_To<CORBA::String_var>, - ACE_Null_Mutex> - Service_Type_Map; - - typedef ACE_Hash_Map_Iterator_Ex<CORBA::String_var, - Type_Info *, - ACE_Hash<CORBA::String_var>, - ACE_Equal_To<CORBA::String_var>, - ACE_Null_Mutex> - Service_Type_Map_Iterator; - - /** - * Build a sequence aggregating the property names from all - * supertypes of the type, and a sequence representing the - * transitive closure of the super type relation. - */ - void fully_describe_type_i (const CosTradingRepos::ServiceTypeRepository::TypeStruct &type_struct, - CosTradingRepos::ServiceTypeRepository::PropStructSeq &props, - CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq &super_types); - - void collect_inheritance_hierarchy (const CosTradingRepos::ServiceTypeRepository::TypeStruct &type_struct, - TAO_String_Queue &target); - - /// Confirm that the properties in props have valid names, and aren't - /// duplicated. Cram those properties into the prop_map. - void validate_properties (Prop_Map &prop_map, - const CosTradingRepos::ServiceTypeRepository::PropStructSeq &props - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CosTrading::IllegalPropertyName, - CosTrading::DuplicatePropertyName)); - - /// Confirm that the each super type exists, and cram them into super_map. - void validate_supertypes (Service_Type_Map &super_map, - const CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq &super_types - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CosTrading::IllegalServiceType, - CosTrading::UnknownServiceType, - CosTradingRepos::ServiceTypeRepository::DuplicateServiceTypeName)); - - /// Ensure that properties of a super_type aren't having their types - /// or retstrictions redefined. - void validate_inheritance (Prop_Map &prop_map, - const CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq &super_types - ACE_ENV_ARG_DECL_NOT_USED) - ACE_THROW_SPEC ((CosTradingRepos::ServiceTypeRepository::ValueTypeRedefinition)); - - // void validate_interface (const char *if_name, - // Service_Type_Map &super_map, - // ACE_ENV_SINGLE_ARG_DECL) - // ACE_THROW_SPEC ((CosTradingRepos::ServiceTypeRepository::InterfaceTypeMismatch)); - // Ensure that the interface type derives from its superclasses'. - - /// Update the type map with the information contained in the - /// TypeStruct, prop_map, and super_map. - void update_type_map (const char *name, - const char *if_name, - const CosTradingRepos::ServiceTypeRepository::PropStructSeq &props, - const CosTradingRepos::ServiceTypeRepository::ServiceTypeNameSeq &super_types, - Prop_Map &prop_map, - Service_Type_Map &super_map); - - TAO_Service_Type_Repository (const TAO_Service_Type_Repository &); - TAO_Service_Type_Repository &operator= (const TAO_Service_Type_Repository &); - - /// Lock with which to serialize access to the service type map. - ACE_Lock *lock_; - - /** - * Stores information for each service type in the repository. This - * is a mapping from service type name to a Type_Info struct which - * serves as a storage for various information for the given type. - */ - Service_Type_Map type_map_; - - /// Incarnation number to be used for the next modification to the - /// repository. - CosTradingRepos::ServiceTypeRepository::IncarnationNumber incarnation_; -}; - -TAO_END_VERSIONED_NAMESPACE_DECL - -#include /**/ "ace/post.h" -#endif /* TAO_SERVICE_TYPE_REPOSITORY_H */ |