00001 /** 00002 * @file IOR.pidl 00003 * 00004 * $Id: IOR.pidl 81200 2008-04-01 13:03:30Z johnnyw $ 00005 * 00006 * @brief Pre-compiled IDL source for the TAO_IOP namespace. 00007 * 00008 * This file is used to generate the code in IORC.{h,cpp}. 00009 * 00010 * To regenerate the code use: 00011 * 00012 * tao_idl \ 00013 * -o orig -Gp -Gd -GA -Sci \ 00014 * -Wb,export_macro=TAO_IORManip_Export \ 00015 * -Wb,export_include="ior_manip_export.h" \ 00016 * -Wb,pre_include="ace/pre.h" \ 00017 * -Wb,post_include="ace/post.h" \ 00018 * IOR.pidl 00019 * 00020 */ 00021 00022 #ifndef TAO_IOR_PIDL 00023 #define TAO_IOR_PIDL 00024 00025 module TAO_IOP 00026 { 00027 /** 00028 * @exception EmptyProfileList 00029 * 00030 * @brief @@ Bala, please describe this exception 00031 */ 00032 exception EmptyProfileList {}; 00033 00034 /** 00035 * @exception NotFound 00036 * 00037 * @brief @@ Bala, please describe this exception 00038 */ 00039 exception NotFound {}; 00040 00041 /** 00042 * @exception Duplicate 00043 * 00044 * @brief @@ Bala, please describe this exception 00045 */ 00046 exception Duplicate {}; 00047 00048 /** 00049 * @exception Invalid_IOR 00050 * 00051 * @brief @@ Bala, please describe this exception 00052 */ 00053 exception Invalid_IOR {}; 00054 00055 /** 00056 * @exception MultiProfileList 00057 * 00058 * @brief @@ Bala, please describe this exception 00059 */ 00060 exception MultiProfileList {}; 00061 00062 /** 00063 * @interface TAO_IOR_Property 00064 * 00065 * Allows setting properties by the different services in the 00066 * IOR. The implementations of this interface would reside in the 00067 * services. This interface essentially performs a role of a 00068 * callback object. 00069 * 00070 * @todo This interface seems redundant in the face of the 00071 * PortableInterceptor::IORInterceptor and the 00072 * ObjectReferenceTemplate. If that is the case we should deprecate 00073 * it and remove it. 00074 */ 00075 local interface TAO_IOR_Property 00076 { 00077 /// Operation that would set the required properties in the <ior> 00078 /// as needed by the service. 00079 boolean set_property (inout Object ior) 00080 raises (Invalid_IOR); 00081 00082 /// Sets the profile ior1, in the profile ior2 to be a 00083 /// primary. 00084 boolean set_primary (inout Object ior1, 00085 in Object ior2) 00086 raises (Duplicate, NotFound); 00087 00088 /// Returns the ior of the primary from <ior> if it has been 00089 /// set. Else returns a NotFound exception 00090 Object get_primary (in Object ior) 00091 raises (NotFound); 00092 00093 /// Returns a true or false depending on whether a primary member 00094 /// has been set in <ior> 00095 boolean is_primary_set (in Object ior); 00096 00097 /// If any of the IOR's within the IOGR has a primary tag, just 00098 /// remove it. Returns zero if no primary was found. 00099 boolean remove_primary_tag (inout Object iogr) 00100 raises (NotFound); 00101 }; 00102 00103 /** 00104 * @interface TAO_IOR_Manipulation 00105 * 00106 * @brief Allows applications to manipulate object references. 00107 * 00108 * Manipulating Object References. While this interface does not 00109 * assume the use of CORBA complient IOPs, the IOP termonology is 00110 * used throughout. 00111 * Object references (Object) are used since they encapsulate the 00112 * notion of object references and IORs. 00113 * Note, an IOR contains one or more profiles and a profile can be 00114 * considered to represent the location or route to a specific instance 00115 * of an object. 00116 * A profile may also contain supplimentary information useful for 00117 * differrent services such as security. 00118 * All Object references may have multiple profiles 00119 */ 00120 local interface TAO_IOR_Manipulation 00121 { 00122 typedef sequence <Object> IORList; 00123 00124 /// Create a new object reference by merging the profiles lists in the 00125 /// supplied list of one or more object references. 00126 Object merge_iors (in IORList iors) 00127 raises (EmptyProfileList,Duplicate,Invalid_IOR); 00128 00129 /// copy the profile list from "ior2" to "ior1". 00130 /// Note on ordering, while the current implementation will place 00131 /// the profiles from ior2 (which are not already in ior1) on the 00132 /// end of the profile list in ior1, there is no guarantee this ordering 00133 /// will be maintained. For example, string_to_object or object_to_string 00134 /// may reorder the profile lists. So, if it is important to use one 00135 /// profile before another then policies should be used along with tagged 00136 /// components/tagged profiles. 00137 Object add_profiles (in Object ior1, 00138 in Object ior2) 00139 raises (EmptyProfileList, Duplicate, Invalid_IOR); 00140 00141 // Any profile in ior1 which matches at least one profile in ior2 00142 // will be removed. Returns a new object reference 00143 Object remove_profiles (in Object ior1, 00144 in Object ior2) 00145 raises (Invalid_IOR, EmptyProfileList, NotFound); 00146 00147 /// Allows setting of properties as defined by the @a prop object 00148 /// in the @a ior list 00149 boolean set_property (in TAO_IOR_Property prop, 00150 in Object ior) 00151 raises (Invalid_IOR, Duplicate); 00152 00153 // @@ Primary is specific to FT.. But let us have these 00154 // @@ operations around. Further, as we pass the property object 00155 // @@ around the implementation will not be tied with the FT 00156 // @@ service. Any service can use their own ways of defining a 00157 // @@ primary. For example FT service uses IOP::TAG_FT_PRIMARY 00158 // @@ to identify a primary and some other service could use 00159 // @@ something else. But the actual implementation of the 00160 // @@ property object would take care of that. 00161 // Sets the profile ior1, in the profile ior2 to be a 00162 // primary. If ior1 is a multi-profile IOR then the operation 00163 // raises the MultiProfileList exception. If ior1 is not found 00164 // in ior2, it raises an Invalid_IOR exception. If ior2 has a 00165 // primary already defined then it raises a Duplicate 00166 // exception. 00167 boolean set_primary (in TAO_IOR_Property prop, 00168 in Object ior1, 00169 in Object ior2) 00170 raises (Invalid_IOR, Duplicate, MultiProfileList, NotFound); 00171 00172 /// If any of the IOR's within the IOGR has a primary tag, just remove 00173 /// it. Return zero if no primary found. 00174 boolean remove_primary_tag (in TAO_IOR_Property prop, 00175 in Object ior); 00176 00177 00178 /// Returns the ior of the primary from @a ior if it has been 00179 /// set. Else returns a NotFound exception 00180 Object get_primary (in TAO_IOR_Property prop, 00181 in Object ior) 00182 raises (NotFound); 00183 00184 /// Returns a true or false depending on whether a primary member 00185 /// has been set in @a ior 00186 boolean is_primary_set (in TAO_IOR_Property prop, 00187 in Object ior); 00188 00189 /// Returns number of profiles which are in both ior1 and ior2. 00190 unsigned long is_in_ior(in Object ior1, in Object ior2) 00191 raises (NotFound); 00192 00193 /// This will return the number of profiles contained in the 00194 /// corresponding object reference for this object. 00195 unsigned long get_profile_count (in Object ior) 00196 raises (EmptyProfileList); 00197 }; 00198 }; 00199 00200 #endif /* TAO_IOR_PIDL */