module ir { typedef string Identifier; // Type de donnee d'un argument enum TCKind { // Pseudo-IDL tk_null, tk_void, tk_short, tk_long, tk_ushort, tk_ulong, tk_float, tk_double, tk_boolean, tk_char, tk_octet, tk_any, tk_TypeCode,tk_Principal, tk_objref, tk_struct, tk_union, tk_enum, tk_string, tk_sequence,tk_array, tk_alias, tk_except, tk_longlong,tk_ulonglong, tk_longdouble, tk_wchar, tk_wstring, tk_fixed, tk_value, tk_value_box, tk_native, tk_abstract_interface }; //////////////////////////////// // Attribut readonly ou read-write ?. enum AttributeMode {ATTR_NORMAL, ATTR_READONLY}; interface AttributeDescription { readonly attribute Identifier name; attribute TCKind type; attribute AttributeMode mode; }; //////////////////////////////// // Semantique de la methode : exactement une fois ou au plus fois ? enum OperationMode {OP_NORMAL, OP_ONEWAY}; // argument en in ? en out ? en inout ? enum ParameterMode {PARAM_IN, PARAM_OUT, PARAM_INOUT}; struct ParameterDescription { Identifier name; TCKind type; ParameterMode mode; }; typedef sequence ParDescriptionSeq; interface OperationDescription { readonly attribute Identifier name; attribute TCKind result; attribute ParDescriptionSeq params; attribute OperationMode mode; }; //////////////////////////////// typedef sequence OpDescriptionSeq; typedef sequence AttrDescriptionSeq; interface InterfaceDescription { readonly attribute Identifier name; attribute OpDescriptionSeq operations; attribute AttrDescriptionSeq attributes; // Mise a jour de l'IR pour l'interface associee // (creation d'attribut et de methode) AttributeDescription create_attribute ( in Identifier name, in TCKind type, in AttributeMode mode ); OperationDescription create_operation ( in Identifier name, in TCKind result, in OperationMode mode, in ParDescriptionSeq params ); }; //////////////////////// // Point d'entree IR /////////////////////// exception ObjectNotFound{}; exception ObjectAlreadyBound {}; interface IRepository { // recuperer la reference d'objet et la description d'interface // grace au nom symbolique void resolve(in Identifier object_name, inout InterfaceDescription interface_desc, inout Object ref_obj) raises (ObjectNotFound); // publication de l'objet et de sa description IDL via un nom // symbolique InterfaceDescription bind(in Object ref_obj, in Identifier object_name, in Identifier interface_name) raises (ObjectAlreadyBound); // publication de l'objet et de sa description IDL via un nom // symbolique : on suppose ici que le description d'IDL existe deja dans // l'interface repository : le client doit donc offrir une reference sur ce descriptif void bind_existing_interface(in Object ref_obj, in Identifier object_name, in InterfaceDescription interface_desc) raises (ObjectAlreadyBound); }; };