/* * bonobo-storage.idl: Handles structured storage * * Copyright (C) 1999, 2000 Helix Code, Inc. * * Author: * Miguel de Icaza (miguel@gnu.org) * Dietmar Maurer (dietmar@maurer-it.com) * * Terms: * * Storage: This interface provides access to a directory * like storage facility. * * Stream: Used to read and write bytes to a storage. The * Streams are equivalent to files. */ #ifndef BONOBO_STORAGE_IDL #define BONOBO_STORAGE_IDL #include "Bonobo_Unknown.idl" module Bonobo { typedef long StorageInfoFields; const StorageInfoFields FIELD_CONTENT_TYPE = 1; const StorageInfoFields FIELD_SIZE = 2; const StorageInfoFields FIELD_TYPE = 4; typedef string ContentType; enum StorageType { STORAGE_TYPE_REGULAR, STORAGE_TYPE_DIRECTORY }; struct StorageInfo { string name; StorageType type; ContentType content_type; long size; }; interface Stream : Unknown { typedef sequence iobuf; exception NoPermission {}; exception NotSupported {}; exception IOError {}; enum SeekType { SEEK_SET, SEEK_CUR, SEEK_END }; /** * getInfo: * @mask: * * Returns a StorageInfo structure which contains * the name, content_type and size info. */ StorageInfo getInfo (in StorageInfoFields mask) raises (IOError, NoPermission, NotSupported); /** * setInfo: * @info: * @mask: * */ void setInfo (in StorageInfo info, in StorageInfoFields mask) raises (IOError, NoPermission, NotSupported); /** * read: * @count: number of bytes to read. * @buffer: the buffer where the data is returned. */ void read (in long count, out iobuf buffer) raises (NoPermission, IOError); /** * write: * @buffer: a buffer to write. * * writes the buffer to this stream. */ void write (in iobuf buffer) raises (NoPermission, IOError); /** * seek: * @offset: offset * @whence: * * Sets the read/write pointer to @offset (relative to @whence) */ long seek (in long offset, in SeekType whence) raises (IOError, NotSupported); /** * truncate: * @length: new size of the stream * */ void truncate (in long length) raises (IOError, NoPermission, NotSupported); /** * copyTo: * @dest: destination file. * @bytes: number of bytes to copy, or -1 to copy until eof * @read: output, how many bytes were read. * @writen: output, how many bytes were written. * * Copies @bytes bytes (or until EOF if @bytes is -1) starting * at the current read/write pointer to the component in @dest * inside the Storage. * -- This API is badly broken and deprecated; expect * NotSupported */ void copyTo (in string dest, in long bytes, out long read, out long written) raises (IOError, NoPermission, NotSupported); /** * commit: * * Commits any pending changes to the Storage */ void commit () raises (IOError, NoPermission, NotSupported); /** * revert: * * Discards any changes since the last commit. */ void revert () raises (IOError, NoPermission, NotSupported); }; interface Storage : Unknown { typedef sequence DirectoryList; typedef long OpenMode; const OpenMode READ = 1; const OpenMode WRITE = 2; const OpenMode CREATE = 4; const OpenMode FAILIFEXIST = 8; const OpenMode COMPRESSED = 16; const OpenMode TRANSACTED = 32; exception IOError {}; exception NameExists {}; exception NotFound {}; exception NoPermission {}; exception NotSupported {}; exception NotStream {}; exception NotStorage {}; exception NotEmpty {}; /** * getInfo: * @path: * @mask: * * Returns a StorageInfo structure which contains * the name, content_type and size info. */ StorageInfo getInfo (in string path, in StorageInfoFields mask) raises (IOError, NoPermission, NotFound, NotSupported); /** * setInfo: * @path: * @info: * @mask: * */ void setInfo (in string path, in StorageInfo info, in StorageInfoFields mask) raises (IOError, NoPermission, NotFound, NotSupported); /** * openStream: * @path: path of the stream to open * @mode: open flags * * Opens a Stream whose name is @path. */ Stream openStream (in string path, in OpenMode mode) raises (IOError, NotFound, NoPermission, NotStream, NameExists); /** * openStorage: * @path: path of the storage to open. * @mode: open mode. * * Returns a storage object for @path. */ Storage openStorage (in string path, in OpenMode mode) raises (IOError, NotFound, NoPermission, NotStorage, NameExists); /** * copyTo: * @target: where to copy this storage to. * * Copies this storages contents to the @target storage */ void copyTo (in Storage target) raises (IOError, NoPermission); /** * listContents: * @path: path that we want to examine. * @mask: * * Returns a list of all the Storage and Streams available * at @path. */ DirectoryList listContents (in string path, in StorageInfoFields mask) raises (IOError, NotStorage, NotFound, NotSupported); /** * erase: * @path: path to the element to erase. * * Destroys the element pointed to by @path. The element * can be a Storage or a Stream. */ void erase (in string path) raises (IOError, NoPermission, NotFound, NotEmpty); /** * rename: * @path_name: element name to rename * @new_path_name: new name we want to use * * Renames a Stream or Storage component inside a Storage. */ void rename (in string path_name, in string new_path_name) raises (IOError, NameExists, NotFound, NoPermission); /** * commit: * * Commits any pending changes to the Storage since it was * opened. This operation is syncronous. */ void commit () raises (IOError, NoPermission, NotSupported); /** * revert: * * Discards any changes since the last commit. */ void revert () raises (IOError, NoPermission, NotSupported); }; }; #endif /* BONOBO_STORAGE_IDL */