summaryrefslogtreecommitdiff
path: root/TAO/tao/IORManipulation/IOR.pidl
blob: 20b010c84066d8cf2213e62a059a0f66c432f46d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/**
 * @file IOR.pidl
 *
 * $Id$
 *
 * @brief Pre-compiled IDL source for the TAO_IOP namespace.
 *
 * This file was used to generate the code in IORC.{h,cpp}.
 *
 * To regenerate the code use:
 *
 * tao_idl \
 *        -o orig -Gp -Gd -Ge 1 -GA -Sci \
 *          -Wb,export_macro=TAO_IORManip_Export \
 *          -Wb,export_include="ior_manip_export.h" \
 *          -Wb,pre_include="ace/pre.h" \
 *          -Wb,post_include="ace/post.h" \
 *   IOR.pidl
 *
 */

#ifndef TAO_IOR_PIDL
#define TAO_IOR_PIDL

module TAO_IOP
{
  /**
   * @exception EmptyProfileList
   *
   * @brief @@ Bala, please describe this exception
   */
  exception EmptyProfileList {};

  /**
   * @exception NotFound
   *
   * @brief @@ Bala, please describe this exception
   */
  exception NotFound {};

  /**
   * @exception Duplicate
   *
   * @brief @@ Bala, please describe this exception
   */
  exception Duplicate {};

  /**
   * @exception Invalid_IOR
   *
   * @brief @@ Bala, please describe this exception
   */
  exception Invalid_IOR {};

  /**
   * @exception MultiProfileList
   *
   * @brief @@ Bala, please describe this exception
   */
  exception MultiProfileList {};

  /**
   * @interface TAO_IOR_Property
   *
   * Allows setting properties  by the different services in the
   * IOR. The implementations of this interface would reside in the
   * services. This interface essentially performs a role of a
   * callback object.
   *
   * @todo This interface seems redundant in the face of the
   * PortableInterceptor::IORInterceptor and the
   * ObjectReferenceTemplate.  If that is the case we should deprecate
   * it and remove it.
   */
  local interface TAO_IOR_Property
  {
    /// Operation that would set the required properties in the <ior>
    /// as needed by the service.
    boolean set_property (inout Object ior)
      raises (Invalid_IOR);

    /// Sets the profile ior1, in the profile ior2 to be a
    /// primary.
    boolean set_primary (inout Object ior1,
                         in Object ior2)
      raises (Duplicate, NotFound);

    /// Returns the ior  of the primary from <ior> if it has been
    /// set. Else returns a NotFound exception
    Object get_primary (in Object ior)
      raises (NotFound);

    /// Returns a true or false depending on whether a primary member
    /// has been set in <ior>
    boolean is_primary_set (in Object ior);

    /// If any of the IOR's within the IOGR has a primary tag, just
    /// remove it. Returns zero if no primary was found.
    boolean remove_primary_tag (inout Object iogr)
      raises (NotFound);
  };

  /**
   * @interface TAO_IOR_Manipulation
   *
   * @brief Allows applications to manipulate object references.
   *
   * Manipulating Object References.  While this interface does not
   * assume the use of CORBA complient IOPs, the IOP termonology is
   * used throughout.
   * Object references (Object) are used since they encapsulate the
   * notion of object references and IORs.
   * Note, an IOR contains one or more profiles and a profile can be
   * considered to represent the location or route to a specific instance
   * of an object.
   * A profile may also contain supplimentary information useful for
   * differrent services such as security.
   * All Object references may have multiple profiles
   */
  local interface TAO_IOR_Manipulation
  {
      typedef sequence <Object> IORList;

      Object merge_iors (in IORList iors)
        raises (EmptyProfileList,Duplicate,Invalid_IOR);
      // Create a new object reference by merging the profiles lists in the
      // supplied list of one or more object references.

      Object add_profiles (in Object ior1,
                           in Object ior2)
        raises (EmptyProfileList, Duplicate, Invalid_IOR);
      // copy the profile list from "ior2" to "ior1".
      // Note on ordering, while the current implementation will place
      // the profiles from ior2 (which are not already in ior1) on the
      // end of the profile list in ior1, there is no guarantee this ordering
      // will be maintained.  For example, string_to_object or object_to_string
      // may reorder the profile lists.  So, if it is important to use one
      // profile before another then policies should be used along with tagged
      // components/tagged profiles.

      Object remove_profiles (in Object ior1,
                              in Object ior2)
        raises (Invalid_IOR, EmptyProfileList, NotFound);
      // Any profile in ior1 which matches at least one profile in ior2
      // will be removed.  Returns a new object reference


      boolean set_property (in TAO_IOR_Property prop,
                            in Object ior)
        raises (Invalid_IOR, Duplicate);
      // Allows setting of properties as defined by the <prop> object
      // in the <ior> list

      // @@ Primary is specific to FT.. But let us have these
      // @@ operations around. Further, as we pass the property object
      // @@ around the implementation will not be tied with the FT
      // @@ service. Any service can use their own ways of defining a
      // @@ primary. For example FT service uses IOP::TAG_FT_PRIMARY
      // @@ to identify a primary and some other service could use
      // @@ something else. But the actual implementation of the
      // @@ property object would take care of that.
      boolean set_primary (in TAO_IOR_Property prop,
                           in Object ior1,
                           in Object ior2)
        raises (Invalid_IOR, Duplicate, MultiProfileList, NotFound);
      // Sets the profile ior1, in the profile ior2 to be a
      // primary. If ior1 is a multi-profile IOR then the operation
      // raises the MultiProfileList exception. If ior1 is not found
      // in ior2, it raises an Invalid_IOR exception. If ior2 has a
      // primary already defined then it raises a Duplicate
      // exception.

      /// If any of the IOR's within the IOGR has a primary tag, just remove
      /// it. Return zero if no primary found.
      boolean remove_primary_tag (in TAO_IOR_Property prop,
                                  in Object ior);


      Object get_primary (in TAO_IOR_Property prop,
                          in Object ior)
        raises (NotFound);
      // Returns the ior  of the primary from <ior> if it has been
      // set. Else returns a NotFound exception

      boolean is_primary_set (in TAO_IOR_Property prop,
                              in Object ior);
      // Returns a true or false depending on whether a primary member
      // has been set in <ior>

      unsigned long is_in_ior(in Object ior1, in Object ior2)
        raises (NotFound);
      // returns number of profiles which are in both ior1 and ior2.

      unsigned long get_profile_count (in Object ior)
        raises (EmptyProfileList);
      // This will return the number of profiles contained in the
      // corresponding object reference for this object.
  };
};

#endif /* TAO_IOR_PIDL */