2.1.5.3. Navigation Interfaces

module Components {
    typedef string FeatureName;
    typedef sequence<FeatureName> NameList;

    valuetype PortDescription {
        public FeatureName name;
        public CORBA::RepositoryId type_id;
    };

  ...
    valuetype FacetDescription : PortDescription {
        public Object facet_ref;
    };
    typedef sequence<FacetDescription> FacetDescriptions;

    interface Navigation {
        FacetDescriptions get_all_facets ();
        Object provide_facet (in FeatureName name) raises (InvalidName);
        FacetDescriptions get_named_facets (in NameList names) raises (InvalidName);

    ...
    };

    ...
    valuetype PublisherDescription : PortDescription {
        public SubscriberDescriptions consumers;
    };
    typedef sequence<PublisherDescription> PublisherDescriptions;

    valuetype ConsumerDescription : PortDescription {
        public EventConsumerBase consumer;
    };
    typedef sequence<ConsumerDescription> ConsumerDescriptions;

    PublisherDescriptions get_all_publishers ();
    PublisherDescriptions get_named_publishers (in NameList names) raises (InvalidName);

    ConsumerDescriptions get_all_consumers ();
    ConsumerDescriptions get_named_consumers (in NameList names) raises (InvalidName);

    ...
};