## BonoboMonikerSimple BonoboMonikerSimple — A super easy to use moniker implementation wrapper |

## Synopsis

                        BonoboMonikerSimple;
                        BonoboMonikerSimpleClass;
    Bonobo_Unknown      (*BonoboMonikerSimpleResolveFn)     (BonoboMoniker *moniker,
                                                             const Bonobo_ResolveOptions *options,
                                                             const CORBA_char *requested_interface,
                                                             CORBA_Environment *ev);
    BonoboMoniker *     bonobo_moniker_simple_construct     (BonoboMonikerSimple *moniker,
                                                             const char *name,
                                                             GClosure *resolve_closure);
    BonoboMoniker *     bonobo_moniker_simple_new           (const char *name,
                                                             BonoboMonikerSimpleResolveFn resolve_fn);
    BonoboMoniker *     bonobo_moniker_simple_new_closure   (const char *name,
                                                             GClosure *resolve_closure);

## Object Hierarchy

      GObject
       +----BonoboObject
             +----BonoboMoniker
                   +----BonoboMonikerSimple

## Description

BonoboMonikerSimple makes writing monikers really extremely easy. To implement a moniker you only have to write 1 function. To register create the moniker object you have to use only 1 call. It can't get much simpler. If you want to use monikers instead of implementing them, you probably want to see bonobo-moniker-util instead.

Few people need to implement monikers, but if they do, this is how they should do it:

Example 15. A cut down file: moniker implementation

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Bonobo_Unknown
    bonobo_moniker_file_resolve (BonoboMoniker               *moniker,
                     const Bonobo_ResolveOptions *options,
                     const CORBA_char            *requested_interface,
                     CORBA_Environment           *ev)
    {
        const char    *fname = bonobo_moniker_get_name (moniker);
        Bonobo_Unknown retval;
        g_warning ("Fname '%s'", fname);
        if (!strcmp (requested_interface, "IDL:Bonobo/Stream:1.0")) {
            BonoboStream *stream;
            stream = bonobo_stream_open ("fs", fname,
                             Bonobo_Storage_READ, 0664);
            if (!stream) {
                g_warning ("Failed to open stream '%s'", fname);
                CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
                             ex_Bonobo_Moniker_InterfaceNotFound, NULL);
                return CORBA_OBJECT_NIL;
            }
            return CORBA_Object_duplicate (BONOBO_OBJREF (stream), ev);
        }
        return CORBA_OBJECT_NIL;
    }

After implementing the resolve function, you need to create the new moniker in your standard factory:

Example 16. Creating a new simple moniker

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static BonoboObject *
    bonobo_std_moniker_factory (BonoboGenericFactory *this,
                    const char           *object_id,
                    void                 *data)
    {
        g_return_val_if_fail (object_id != NULL, NULL);
        if (!strcmp (object_id, "OAFIID:Bonobo_Moniker_File"))
            return BONOBO_OBJECT (bonobo_moniker_simple_new (
                "file:", bonobo_moniker_file_resolve));
        else
            return NULL;
    }

## Details

### BonoboMonikerSimple

    typedef struct _BonoboMonikerSimple BonoboMonikerSimple;

A simplified BonoboMoniker.

### BonoboMonikerSimpleClass

    typedef struct {
    	BonoboMonikerClass parent_class;
    } BonoboMonikerSimpleClass;

BonoboMonikerSimple's class.

### BonoboMonikerSimpleResolveFn ()

    Bonobo_Unknown      (*BonoboMonikerSimpleResolveFn)     (BonoboMoniker *moniker,
                                                             const Bonobo_ResolveOptions *options,
                                                             const CORBA_char *requested_interface,
                                                             CORBA_Environment *ev);

Type of callback function that implements a simple moniker resolution.

`moniker` : | the moniker
`options` : | resolve options
`requested_interface` : | the requested interface (repoid string)
`ev` : | CORBA environment, in case an exception needs to be raised
Returns : | a Bonobo_Unknown as the result of the resolution

### bonobo_moniker_simple_construct ()

    BonoboMoniker *     bonobo_moniker_simple_construct     (BonoboMonikerSimple *moniker,
                                                             const char *name,
                                                             GClosure *resolve_closure);

Constructs a simple moniker

`moniker` : | the moniker to construct
`name` : | the name of the moniker eg. 'file:'
`resolve_closure` : | the closure used to resolve the moniker
Returns : | the constructed moniker or NULL on failure.

### bonobo_moniker_simple_new ()

    BonoboMoniker *     bonobo_moniker_simple_new           (const char *name,
                                                             BonoboMonikerSimpleResolveFn resolve_fn);

Create a new instance of a simplified moniker.

`name` : | the display name for the moniker
`resolve_fn` : | a resolve function for the moniker
Returns : | the moniker object

### bonobo_moniker_simple_new_closure ()

    BonoboMoniker *     bonobo_moniker_simple_new_closure   (const char *name,
                                                             GClosure *resolve_closure);

Create a new instance of a simplified moniker.

Instead of the Bonobo_ResolveOptions struct, the closure takes its contents as two arguments: BONOBO_TYPE_RESOLVE_FLAG and G_TYPE_LONG.

`name` : | the display name for the moniker
`resolve_closure` : | a closure for the resolve process.
Returns : | the moniker object

## See Also

BonoboMoniker, BonoboMonikerSimple, bonobo-moniker-util, BonoboMonikerExtender