module CosTrading { // forward references to our interfaces interface Lookup; interface Register; interface Link; interface Proxy; interface Admin; interface OfferIterator; interface OfferIdIterator; // type definitions used in more than one interface typedef string Istring; typedef Object TypeRepository; typedef Istring PropertyName; typedef sequence PropertyNameSeq; typedef any PropertyValue; struct Property { PropertyName name; PropertyValue value; }; typedef sequence PropertySeq; struct Offer { Object reference; PropertySeq properties; }; typedef sequence OfferSeq; typedef string OfferId; typedef sequence OfferIdSeq; typedef Istring ServiceTypeName; // similar structure to IR::Identifier typedef Istring Constraint; enum FollowOption { local_only, if_no_local, always }; typedef Istring LinkName; typedef sequence LinkNameSeq; typedef LinkNameSeq TraderName; typedef string PolicyName; // policy names restricted to Latin1 typedef sequence PolicyNameSeq; typedef any PolicyValue; struct Policy { PolicyName name; PolicyValue value; }; typedef sequence PolicySeq; // exceptions used in more than one interface exception UnknownMaxLeft {}; exception NotImplemented {}; exception IllegalServiceType { ServiceTypeName type; }; exception UnknownServiceType { ServiceTypeName type; }; exception IllegalPropertyName { PropertyName name; }; exception DuplicatePropertyName { PropertyName name; }; exception PropertyTypeMismatch { ServiceTypeName type; Property prop; }; exception MissingMandatoryProperty { ServiceTypeName type; PropertyName name; }; exception ReadonlyDynamicProperty { ServiceTypeName type; PropertyName name; }; exception IllegalConstraint { Constraint constr; }; exception InvalidLookupRef { Lookup target; }; exception IllegalOfferId { OfferId id; }; exception UnknownOfferId { OfferId id; }; exception DuplicatePolicyName { PolicyName name; }; // the interfaces interface TraderComponents { readonly attribute Lookup lookup_if; readonly attribute Register register_if; readonly attribute Link link_if; readonly attribute Proxy proxy_if; readonly attribute Admin admin_if; }; interface SupportAttributes { readonly attribute boolean supports_modifiable_properties; readonly attribute boolean supports_dynamic_properties; readonly attribute boolean supports_proxy_offers; readonly attribute TypeRepository type_repos; }; interface ImportAttributes { readonly attribute unsigned long def_search_card; readonly attribute unsigned long max_search_card; readonly attribute unsigned long def_match_card; readonly attribute unsigned long max_match_card; readonly attribute unsigned long def_return_card; readonly attribute unsigned long max_return_card; readonly attribute unsigned long max_list; readonly attribute unsigned long def_hop_count; readonly attribute unsigned long max_hop_count; readonly attribute FollowOption def_follow_policy; readonly attribute FollowOption max_follow_policy; }; interface LinkAttributes { readonly attribute FollowOption max_link_follow_policy; }; interface Lookup:TraderComponents,SupportAttributes,ImportAttributes { typedef Istring Preference; enum HowManyProps { none, some, all }; union SpecifiedProps switch ( HowManyProps ) { case some: PropertyNameSeq prop_names; }; exception IllegalPreference { Preference pref; }; exception IllegalPolicyName { PolicyName name; }; exception PolicyTypeMismatch { Policy the_policy; }; exception InvalidPolicyValue { Policy the_policy; }; void query ( in ServiceTypeName type, in Constraint constr, in Preference pref, in PolicySeq policies, in SpecifiedProps desired_props, in unsigned long how_many, out OfferSeq offers, out OfferIterator offer_itr, out PolicyNameSeq limits_applied ) raises ( IllegalServiceType, UnknownServiceType, IllegalConstraint, IllegalPreference, IllegalPolicyName, PolicyTypeMismatch, InvalidPolicyValue, IllegalPropertyName, DuplicatePropertyName, DuplicatePolicyName ); }; interface Register : TraderComponents, SupportAttributes { struct OfferInfo { Object reference; ServiceTypeName type; PropertySeq properties; }; exception InvalidObjectRef { Object ref; }; exception UnknownPropertyName { PropertyName name; }; exception InterfaceTypeMismatch { ServiceTypeName type; Object reference; }; exception ProxyOfferId { OfferId id; }; exception MandatoryProperty { ServiceTypeName type; PropertyName name; }; exception ReadonlyProperty { ServiceTypeName type; PropertyName name; }; exception NoMatchingOffers { Constraint constr; }; exception IllegalTraderName { TraderName name; }; exception UnknownTraderName { TraderName name; }; exception RegisterNotSupported { TraderName name; }; OfferId export ( in Object reference, in ServiceTypeName type, in PropertySeq properties ) raises ( InvalidObjectRef, IllegalServiceType, UnknownServiceType, InterfaceTypeMismatch, IllegalPropertyName, // e.g. prop_name = " OctetSeq; readonly attribute OctetSeq request_id_stem; unsigned long set_def_search_card (in unsigned long value); unsigned long set_max_search_card (in unsigned long value); unsigned long set_def_match_card (in unsigned long value); unsigned long set_max_match_card (in unsigned long value); unsigned long set_def_return_card (in unsigned long value); unsigned long set_max_return_card (in unsigned long value); unsigned long set_max_list (in unsigned long value); boolean set_supports_modifiable_properties (in boolean value); boolean set_supports_dynamic_properties (in boolean value); boolean set_supports_proxy_offers (in boolean value); unsigned long set_def_hop_count (in unsigned long value); unsigned long set_max_hop_count (in unsigned long value); FollowOption set_def_follow_policy (in FollowOption policy); FollowOption set_max_follow_policy (in FollowOption policy); FollowOption set_max_link_follow_policy (in FollowOption policy); TypeRepository set_type_repos (in TypeRepository repository); OctetSeq set_request_id_stem (in OctetSeq stem); void list_offers ( in unsigned long how_many, out OfferIdSeq ids, out OfferIdIterator id_itr ) raises ( NotImplemented ); void list_proxies ( in unsigned long how_many, out OfferIdSeq ids, out OfferIdIterator id_itr ) raises ( NotImplemented ); }; interface OfferIterator { unsigned long max_left ( ) raises ( UnknownMaxLeft ); boolean next_n ( in unsigned long n, out OfferSeq offers ); void destroy (); }; interface OfferIdIterator { unsigned long max_left ( ) raises ( UnknownMaxLeft ); boolean next_n ( in unsigned long n, out OfferIdSeq ids ); void destroy (); }; }; /* end module CosTrading */