diff options
Diffstat (limited to 'trunk/TAO/orbsvcs/orbsvcs/PortableGroup.idl')
-rw-r--r-- | trunk/TAO/orbsvcs/orbsvcs/PortableGroup.idl | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/trunk/TAO/orbsvcs/orbsvcs/PortableGroup.idl b/trunk/TAO/orbsvcs/orbsvcs/PortableGroup.idl new file mode 100644 index 00000000000..310952a767a --- /dev/null +++ b/trunk/TAO/orbsvcs/orbsvcs/PortableGroup.idl @@ -0,0 +1,323 @@ +// -*- IDL -*- + +//============================================================================= +/** + * @file PortableGroup.idl + * + * $Id$ + */ +//============================================================================= + +#ifndef _PORTABLEGROUP_IDL_ +#define _PORTABLEGROUP_IDL_ + +#include "tao/PortableServer/PortableServer_include.pidl" +#include "CosNaming.idl" +#include "tao/IOP.pidl" +#include "tao/GIOP.pidl" +#include <orb.idl> +#include "PortableGroup_Simple_DS.idl" + +module PortableGroup +{ + typeprefix PortableGroup "omg.org"; + + /// MembershipStyle + const string PG_MEMBERSHIP_STYLE = + "org.omg.PortableGroup.MembershipStyle"; + + /// InitialNumberMembers + const string PG_INITIAL_NUMBER_MEMBERS = + "org.omg.PortableGroup.InitialNumberMembers"; + + /// MinimumNumberMembers + const string PG_MINIMUM_NUMBER_MEMBERS = + "org.omg.PortableGroup.MinimumNumberMembers"; + + /// Factories + const string PG_FACTORIES = "org.omg.PortableGroup.Factories"; + + typedef sequence <octet> GroupIIOPProfile; // tag = TAG_GROUP_IIOP + + // Specification of Common Types and Exceptions for Group Management + interface GenericFactory; + + typedef CORBA::RepositoryId _TypeId; + typedef Object ObjectGroup; + typedef sequence<ObjectGroup> ObjectGroups; + typedef CosNaming::Name Name; + typedef any Value; + + struct Property { + Name nam; + Value val; + }; + + typedef sequence<Property> Properties; + typedef Name Location; + typedef sequence<Location> Locations; + typedef Properties Criteria; + + struct FactoryInfo { + GenericFactory the_factory; + Location the_location; + Criteria the_criteria; + }; + typedef sequence<FactoryInfo> FactoryInfos; + + typedef long MembershipStyleValue; + const MembershipStyleValue MEMB_APP_CTRL = 0; + const MembershipStyleValue MEMB_INF_CTRL = 1; + + typedef FactoryInfos FactoriesValue; + typedef unsigned short InitialNumberMembersValue; + typedef unsigned short MinimumNumberMembersValue; + + exception InterfaceNotFound {}; + exception ObjectGroupNotFound {}; + exception MemberNotFound {}; + exception ObjectNotFound {}; + exception MemberAlreadyPresent {}; + exception ObjectNotCreated {}; + exception ObjectNotAdded {}; + /// TAO Specific: TypeConfict exception + exception TypeConflict {}; + exception UnsupportedProperty { + Name nam; + Value val; + }; + + exception InvalidProperty { + Name nam; + Value val; + }; + + exception NoFactory { + Location the_location; + _TypeId type_id; + }; + + exception InvalidCriteria { + Criteria invalid_criteria; + }; + + exception CannotMeetCriteria { + Criteria unmet_criteria; + }; + + // Specification of PropertyManager Interface + interface PropertyManager { + + void set_default_properties (in Properties props) + raises (InvalidProperty, UnsupportedProperty); + + Properties get_default_properties(); + + void remove_default_properties (in Properties props) + raises (InvalidProperty, UnsupportedProperty); + + void set_type_properties (in _TypeId type_id, in Properties overrides) + raises (InvalidProperty, UnsupportedProperty); + + Properties get_type_properties(in _TypeId type_id); + + void remove_type_properties (in _TypeId type_id, in Properties props) + raises (InvalidProperty, UnsupportedProperty); + + void set_properties_dynamically + (in ObjectGroup object_group, in Properties overrides) + raises (ObjectGroupNotFound, + InvalidProperty, + UnsupportedProperty); + + Properties get_properties (in ObjectGroup object_group) + raises (ObjectGroupNotFound); + }; // endPropertyManager + + + // Specification of ObjectGroupManager Interface + interface ObjectGroupManager { + ObjectGroup create_member (in ObjectGroup object_group, + in Location the_location, + in _TypeId type_id, + in Criteria the_criteria) + raises (ObjectGroupNotFound, + MemberAlreadyPresent, + NoFactory, + ObjectNotCreated, + InvalidCriteria, + CannotMeetCriteria); + + ObjectGroup add_member (in ObjectGroup object_group, + in Location the_location, + in Object member) + raises (ObjectGroupNotFound, + MemberAlreadyPresent, + ObjectNotAdded); + + ObjectGroup remove_member (in ObjectGroup object_group, + in Location the_location) + raises (ObjectGroupNotFound, MemberNotFound); + + Locations locations_of_members (in ObjectGroup object_group) + raises (ObjectGroupNotFound); + + ObjectGroups groups_at_location (in Location the_location); + + ObjectGroupId get_object_group_id (in ObjectGroup object_group) + raises (ObjectGroupNotFound); + + ObjectGroup get_object_group_ref (in ObjectGroup object_group) + raises (ObjectGroupNotFound); + + Object get_member_ref (in ObjectGroup object_group, + in Location loc) + raises (ObjectGroupNotFound, MemberNotFound); + + // TAO-specific extension. + ObjectGroup get_object_group_ref_from_id ( + in ObjectGroupId group_id) + raises (ObjectGroupNotFound); + + }; // end ObjectGroupManager + + + // Specification of GenericFactory Interface + interface GenericFactory { + typedef any FactoryCreationId; + + Object create_object (in _TypeId type_id, + in Criteria the_criteria, + out FactoryCreationId factory_creation_id) + raises (NoFactory, + ObjectNotCreated, + InvalidCriteria, + InvalidProperty, + CannotMeetCriteria); + + void delete_object (in FactoryCreationId factory_creation_id) + raises (ObjectNotFound); + + }; // end GenericFactory + + /////////////////////// + // The following FactoryRegistry interface is not included in the OMG PortableGroup IDL. + // It's an extension needed as part of implementing the FT CORBA specification. + + + /** + * a name for the role the object will play + * This allows multiple objects that implement the same interface (TypeId) + * to exist at a location as long as they play different roles. + */ + typedef CORBA::Identifier RoleName; + + /** + * Reserved criteria name for specifing role. + */ + const string role_criterion = "org.omg.portablegroup.Role"; + + /** + * Interface to allow generic factories for replicas to register themselves. + * Factories are distinguished by the role to be played by the created-object (role) and the + * location at which they create the object (FactoryInfo.the_location) + * + * Because this is an extension to the FT CORBA specification applications that wish to + * adhere to the specification as written should use the type id as the role name when + * interacting with the FactoryRegistry. + */ + interface FactoryRegistry + { + /** + * register a factory to create objects of the given type + * at the location given in the FactoryInfo. + * + * @param role the role the object-to-be-created plays. + * @param type_id type id of the object-to-be-created. + * @param factory_info information about the factory including its location. + * @throws MemberAlreadyPresent if there is already a factory for this type of object + * at this location. + * @throws TypeConflict if the specified type_id is different from the type_id previously + * registered for this role. + */ + void register_factory(in RoleName role, in _TypeId type_id, in FactoryInfo factory_info) + raises (MemberAlreadyPresent, TypeConflict); + + /** + * Remove the registration of a factory. + * @param role the role played by the object formerly created by this factory. + * @param location where the factory formerly created objects. + * @throws MemberNotPresent if no factory is available for the given role at this location. + */ + void unregister_factory(in RoleName role, in Location the_location) + raises (MemberNotFound); + + /** + * Remove the registration of all factories that create a particular type of object. + * If no factories exist for the given type, the registry is unchanged. + * This is not an error. + * @param type_id the type of object formerly created by the factories to be unregistered. + */ + void unregister_factory_by_role(in RoleName role); + + /** + * Remove the registration of all factories that create objects at a particular location. + * If the location is unknown the registry is unchanged. + * This is not an error. + * @param location where the factories formerly created objects. + */ + void unregister_factory_by_location(in Location the_location); + + /** + * List all the factories that create objects that fill a given role + * If the role is unknown, an empty list is returned. This is not an error. + * @param role the type of object the factories create. + * @param type_id what type of object is created to fill this role. + */ + FactoryInfos list_factories_by_role(in RoleName role, out _TypeId type_id); + + /** + * List all the factories that create a objects at a given location. + * If no factories are registered for this location, an empty list is returned. + * This is not an error. + * @param location where the factories create objects. + */ + FactoryInfos list_factories_by_location(in Location the_location); + + }; // end of FactoryRegistry + + + const string TAO_UPDATE_OBJECT_GROUP_METHOD_NAME = "tao_update_object_group"; + + interface TAO_UpdateObjectGroup { + /** + * Pseudo used method to update IOGR in Object Group Members + * TAO specific. The CORBA spec. doesn't address the issue. + */ + void tao_update_object_group ( + in string iogr, + in PortableGroup::ObjectGroupRefVersion version, + in boolean is_primary); + }; + + exception NotAGroupObject {}; + typedef sequence <PortableServer::ObjectId> IDs; + + local interface GOA : PortableServer::POA { + PortableServer::ObjectId create_id_for_reference(in Object the_ref) + raises (NotAGroupObject); + + IDs reference_to_ids(in Object the_ref) + raises (NotAGroupObject); + + void associate_reference_with_id (in Object ref, + in PortableServer::ObjectId oid) + raises (NotAGroupObject); + + void disassociate_reference_with_id (in Object ref, + in PortableServer::ObjectId oid) + raises (NotAGroupObject); + }; +}; // end PortableGroup + +#endif /* _PORTABLEGROUP_IDL_ */ |