BonoboMonikerExtender

BonoboMonikerExtender

Name

BonoboMonikerExtender -- A way to extend arbitary monikers

Description

A moniker extender is used to extend the functionality of a moniker. There are two standard moniker extenders that cannot be system wide, since they use the oaf database to expand the scope of a moniker to arbitrarily many interfaces. These are invoked explicitely by monikers implementing the stream interface in the following way:

The moniker extender essentialy resolves 'moniker' against stream and my some means ( not known when the moniker was written ) converts this to a new exotic interface - via. the PersistStream interface.

All standard moniker extenders are registered by adding a fragment like this:

to the .oaf file. This registers the extender with the system, such that when a moniker resolve fails an extender can be found for any of the monikers with prefix specified in the "bonobo:moniker_extender" stringv.

Implementing your own extender is extremely simple, much like BonoboMonikerSimple.

It is registered again in much the same way in your factory:

Details

BONOBO_MONIKER_EXTENDER_TYPE

#define BONOBO_MONIKER_EXTENDER_TYPE        BONOBO_TYPE_MONIKER_EXTENDER /* deprecated, you should use BONOBO_TYPE_MONIKER_EXTENDER */


struct BonoboMonikerExtender

struct BonoboMonikerExtender {
        BonoboObject           object;
BonoboMonikerExtenderFn resolve;
gpointer                data;
};


BonoboMonikerExtenderFn ()

Bonobo_Unknown (*BonoboMonikerExtenderFn)   (BonoboMonikerExtender *extender,
                                             const Bonobo_Moniker parent,
                                             const Bonobo_ResolveOptions *options,
                                             const CORBA_char *display_name,
                                             const CORBA_char *requested_interface,
                                             CORBA_Environment *ev);


BonoboMonikerExtenderClass

typedef struct {
BonoboObjectClass      parent_class;

POA_Bonobo_MonikerExtender__epv epv;

BonoboMonikerExtenderFn resolve;
} BonoboMonikerExtenderClass;



bonobo_moniker_find_extender ()

Bonobo_MonikerExtender bonobo_moniker_find_extender
                                            (const gchar *name,
                                             const gchar *interface,
                                             CORBA_Environment *opt_ev);

This routine tries to locate an extender for our moniker by examining a registry of extenders that map new interfaces to certain moniker names.


bonobo_moniker_use_extender ()

Bonobo_Unknown bonobo_moniker_use_extender  (const gchar *extender_oafiid,
                                             BonoboMoniker *moniker,
                                             const Bonobo_ResolveOptions *options,
                                             const CORBA_char *requested_interface,
                                             CORBA_Environment *opt_ev);

Locates a known extender via. OAFIID; eg. OAFIID:Bonobo_Moniker_Extender_file