2 #ifndef __CosRelationships_idl__
3 #define __CosRelationships_idl__
6 #include <coss/CosObjectIdentity.idl>
8 #pragma prefix "omg.org"
10 module CosRelationships {
12 interface RoleFactory;
13 interface RelationshipFactory;
14 interface Relationship;
16 interface RelationshipIterator;
18 typedef Object RelatedObject;
19 typedef sequence<Role> Roles;
20 typedef string RoleName;
21 typedef sequence<RoleName> RoleNames;
24 typedef sequence<::CORBA::InterfaceDef> InterfaceDefs;
27 struct NamedRole {RoleName name; Role aRole;};
28 typedef sequence<NamedRole> NamedRoles;
30 struct RelationshipHandle {
31 Relationship the_relationship;
32 CosObjectIdentity::ObjectIdentifier
36 typedef sequence<RelationshipHandle>
39 interface RelationshipFactory {
40 struct NamedRoleType {
42 ::CORBA::InterfaceDef named_role_type;
45 typedef sequence<NamedRoleType>
48 readonly attribute ::CORBA::InterfaceDef relationship_type;
49 readonly attribute unsigned short degree;
50 readonly attribute NamedRoleTypes named_role_types;
52 exception RoleTypeError {NamedRoles culprits;};
53 exception MaxCardinalityExceeded {NamedRoles culprits;};
54 exception DegreeError {unsigned short required_degree;};
55 exception DuplicateRoleName {NamedRoles culprits;};
56 exception UnknownRoleName {NamedRoles culprits;};
58 Relationship create (in NamedRoles named_roles)
59 raises (RoleTypeError, MaxCardinalityExceeded, DegreeError,
60 DuplicateRoleName, UnknownRoleName);
64 interface Relationship : CosObjectIdentity::IdentifiableObject {
65 exception CannotUnlink {Roles offending_roles;};
67 readonly attribute NamedRoles named_roles;
69 void destroy () raises(CannotUnlink);
73 exception UnknownRoleName {};
74 exception UnknownRelationship {};
75 exception RelationshipTypeError {};
76 exception CannotDestroyRelationship {RelationshipHandles offenders;};
77 exception ParticipatingInRelationship {
78 RelationshipHandles the_relationships;
81 readonly attribute RelatedObject related_object;
83 RelatedObject get_other_related_object (in RelationshipHandle rel,
84 in RoleName target_name)
85 raises (UnknownRoleName, UnknownRelationship);
87 Role get_other_role (in RelationshipHandle rel, in RoleName target_name)
88 raises (UnknownRoleName, UnknownRelationship);
90 void get_relationships (in unsigned long how_many,
91 out RelationshipHandles rels,
92 out RelationshipIterator iter);
94 void destroy_relationships()
95 raises(CannotDestroyRelationship);
98 raises(ParticipatingInRelationship);
100 boolean check_minimum_cardinality ();
102 void link (in RelationshipHandle rel,
103 in NamedRoles named_roles)
104 raises(RelationshipFactory::MaxCardinalityExceeded,
105 RelationshipTypeError);
107 void unlink (in RelationshipHandle rel)
108 raises (UnknownRelationship);
111 interface RoleFactory {
112 exception NilRelatedObject {};
113 exception RelatedObjectTypeError {};
115 readonly attribute ::CORBA::InterfaceDef role_type;
116 readonly attribute unsigned long max_cardinality;
117 readonly attribute unsigned long min_cardinality;
119 // readonly attribute sequence <::CORBA::InterfaceDef>
120 // related_object_types;
121 readonly attribute InterfaceDefs related_object_types;
124 Role create_role (in RelatedObject
126 raises (NilRelatedObject,
127 RelatedObjectTypeError);
130 interface RelationshipIterator {
131 boolean next_one (out RelationshipHandle rel);
132 boolean next_n (in unsigned long how_many,
133 out RelationshipHandles rels);