## BonoboPersistFile

BonoboPersistFile — Interface for anything that can save / load itself from a file.

## Synopsis

                        BonoboPersistFile;
    int                 (*BonoboPersistFileIOFn)            (BonoboPersistFile *pf,
                                                             const CORBA_char *uri,
                                                             CORBA_Environment *ev,
                                                             void *closure);
                        BonoboPersistFileClass;
    BonoboPersistFile * bonobo_persist_file_new             (BonoboPersistFileIOFn load_fn,
                                                             BonoboPersistFileIOFn save_fn,
                                                             const gchar *iid,
                                                             void *closure);
    BonoboPersistFile * bonobo_persist_file_construct       (BonoboPersistFile *pf,
                                                             BonoboPersistFileIOFn load_fn,
                                                             BonoboPersistFileIOFn save_fn,
                                                             const gchar *iid,
                                                             void *closure);

## Object Hierarchy

      GObject
       +----BonoboObject
             +----BonoboPersist
                   +----BonoboPersistFile

## Description

The PersistFile interface is a useful interface for Bonoboizing legacy applications, however, for new / correct applications it is far preferable to implement the BonoboPersistStream interface, since this will not only result in a nice clean to your application architecture, but also allow the transparent use of local, remote, and synthetic streams.

This interface works by connecting callbacks to the methods, in a pretty deprecated fashion, it is probably better nowadays to simply sub-class the BonoboXObject and override the epv methods. Either way, after all the caveats here is an example use:

Example 25. Persist file implementation

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    static gint
    load_from_file (BonoboPersistFile *pf,
                    const CORBA_char  *filename,
            CORBA_Environment *ev,
                    void              *closure)
    {
        EogImageData *image_data = closure;
        g_warning ("Load from '%s'", filename);
        return 0; /* Return 0 on success */
    }
    static gint
    save_to_file (BonoboPersistFile *pf,
                  const CORBA_char  *filename,
                  CORBA_Environment *ev,
                  void              *closure)
    {
        EogImageData *image_data = closure;
        g_warning ("Save to '%s'", filename);
        return 0; /* Return 0 on success */
    }

Having implemented the callbacks we then have to register them and aggregate the interface to our object:

Example 26. Aggregating a new PersistFile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    EogImageData *
    eog_image_data_construct (EogImageData *image_data)
    {
        BonoboObject        *retval;
        BonoboPersistFile   *file;
        file = bonobo_persist_file_new (
            load_from_file, save_to_file, image_data);
        if (file == NULL) {
            bonobo_object_unref (BONOBO_OBJECT (image_data));
            return NULL;
        }
        bonobo_object_add_interface (BONOBO_OBJECT (image_data),
                         BONOBO_OBJECT (file));
        return image_data;
    }

Note again, that you should be writing a BonoboPersistStream interface, however if you have already done this you might like to just have hooks through so that old apps can use the PersistFile interface:

Example 27. Chaining to a PersistStream implementation

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36

    static gint
    load_from_file (BonoboPersistFile *pf,
                    const CORBA_char  *filename,
            CORBA_Environment *ev,
                    void              *closure)
    {
        Bonobo_PersistStream ps = closure;
        BonoboStream *stream;
        stream = bonobo_stream_open (
            BONOBO_IO_DRIVER_FS,
            filename, Bonobo_STORAGE_READ,
            0);
        if (!stream)
            return 0;
        .. extract content type from file ...
        Bonobo_PersistStream_load (ps, type, ev);
        return 0; /* Return 0 on success */
    }
    static gint
    save_to_file (BonoboPersistFile *pf,
                  const CORBA_char  *filename,
                  CORBA_Environment *ev,
                  void              *closure)
    {
        Bonobo_PersistStream ps = closure;
        BonoboStream *stream;
        stream = bonobo_stream_open (
            BONOBO_IO_DRIVER_FS,
            filename, Bonobo_STORAGE_WRITE | Bonobo_STORAGE_CREATE,
            S_IRUSR | S_IWUSR | S_IRGRP);
        if (!stream)
            return 0;
        .. work out content type we want to save ...
        Bonobo_PersistStream_save (ps, type, ev);
        return 0; /* Return 0 on success */
    }

The mime type data can be extracted from gnome-vfs or gnome-mime.

## Details

### BonoboPersistFile

    typedef struct _BonoboPersistFile BonoboPersistFile;

### Warning

`BonoboPersistFile` is deprecated and should not be used in newly-written code.

### BonoboPersistFileIOFn ()

    int                 (*BonoboPersistFileIOFn)            (BonoboPersistFile *pf,
                                                             const CORBA_char *uri,
                                                             CORBA_Environment *ev,
                                                             void *closure);

### Warning

`BonoboPersistFileIOFn` is deprecated and should not be used in newly-written code.

`pf` : |
`uri` : |
`ev` : |
`closure` : |
Returns : |

### BonoboPersistFileClass

    typedef struct {
    	BonoboPersistClass parent_class;

    	POA_Bonobo_PersistFile__epv epv;

    	/* methods */
    	int   (*load)             (BonoboPersistFile *ps,
    				   const CORBA_char  *uri,
    				   CORBA_Environment *ev);

    	int   (*save)             (BonoboPersistFile *ps,
    				   const CORBA_char  *uri,
    				   CORBA_Environment *ev);

    	char *(*get_current_file) (BonoboPersistFile *ps,
    				   CORBA_Environment *ev);
    } BonoboPersistFileClass;

### Warning

`BonoboPersistFileClass` is deprecated and should not be used in newly-written code.

### bonobo_persist_file_new ()

    BonoboPersistFile * bonobo_persist_file_new             (BonoboPersistFileIOFn load_fn,
                                                             BonoboPersistFileIOFn save_fn,
                                                             const gchar *iid,
                                                             void *closure);

### Warning

`bonobo_persist_file_new` is deprecated and should not be used in newly-written code.

Creates a BonoboPersistFile object. The `load_fn` and `save_fn` parameters might be NULL. If this is the case, the load and save operations are performed by the class load and save methods

`load_fn` : | Loading routine
`save_fn` : | Saving routine
`iid` : | OAF IID of the object this interface is aggregated to
`closure` : | Data passed to IO routines.
Returns : | the BonoboPersistFile.

### bonobo_persist_file_construct ()

    BonoboPersistFile * bonobo_persist_file_construct       (BonoboPersistFile *pf,
                                                             BonoboPersistFileIOFn load_fn,
                                                             BonoboPersistFileIOFn save_fn,
                                                             const gchar *iid,
                                                             void *closure);

### Warning

`bonobo_persist_file_construct` is deprecated and should not be used in newly-written code.

Initializes the BonoboPersistFile object. The `load_fn` and `save_fn` parameters might be NULL. If this is the case, the load and save operations are performed by the class load and save methods

`pf` : | A BonoboPersistFile
`load_fn` : | Loading routine
`save_fn` : | Saving routine
`iid` : | OAF IID of the object this interface is aggregated to
`closure` : | Data passed to IO routines.
Returns : | the BonoboPersistFile.

## See Also

BonoboPersistStream, BonoboPersist