/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: XAtomServer.idl,v $
 *
 *  $Revision: 1.8 $
 *
 *  last change: $Author: rt $ $Date: 2005/09/08 08:58:11 $
 *
 *  The Contents of this file are made available subject to
 *  the terms of GNU Lesser General Public License Version 2.1.
 *
 *
 *    GNU Lesser General Public License Version 2.1
 *    =============================================
 *    Copyright 2005 by Sun Microsystems, Inc.
 *    901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *    This library is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License version 2.1, as published by the Free Software Foundation.
 *
 *    This library is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with this library; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *    MA  02111-1307  USA
 *
 ************************************************************************/
#ifndef __com_sun_star_util_XAtomServer_idl__
#define __com_sun_star_util_XAtomServer_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_util_AtomDescription_idl__
#include <com/sun/star/util/AtomDescription.idl>
#endif

#ifndef __com_sun_star_util_AtomClassRequest_idl__
#include <com/sun/star/util/AtomClassRequest.idl>
#endif


module com
{
module sun
{
module star
{
module util
{

/** an interface to map between <i>string</i>s and <i>id</i>s

   <p>a note on atoms:<br>
   Atoms are abbreviations for strings.
   When a string gets registered, it is assigned a numeric id
   so that said string can always be referred to by this id.
   This way strings have to be transported only once over remote connections.
   Valid ids are (in this implementation) non zero, signed 32 bit values.
   An atom of 0 means that the string in question is not registered</p>
 
   <p>Additionally there is the abstraction of atom class:<br>
   Atoms are grouped into classes, so that an id can be assigned
   to multiple strings, depending on the class context. The main
   advantage of this is that atoms in one class may be kept
   to small numbers, so that bandwidth can be reduced by sending
   the atoms only as 16 bit values. Note that it is up to the user in this
   case to handle overflows.</p>
*/

published interface XAtomServer : com::sun::star::uno::XInterface
{
	/** returns a whole atom class

		@param atomClass
			which class to return

		@returns
			the descriptions for all atoms of class <code>atomClass</code>
	*/
	sequence< AtomDescription > getClass( [in] long atomClass );
	/** returns mutltiple atom classes

		@param atomClasses
			which classes to return

		@returns
			the descriptions for all atoms of the requested classes
	*/
	sequence< sequence< AtomDescription > > getClasses( [in] sequence< long > atomClasses );
	/** returns the strings for an arbitrary amount of atoms of multiple classes

		@param atoms
			describes which strings to return

		@returns
			the strings for the requested atoms
	*/
	sequence< string > getAtomDescriptions( [in] sequence< AtomClassRequest > atoms );

	//-----------------------------------------------------------------------
	/** returns the atoms that have been registered to a class after an
		already known atom

		<p>Hint to implementor: using ascending atoms is the easiest way
		to decide, which atoms are recent.</p>

		@param atomClass
			the class in question

		@param atom
			the last known atom

		@returns
			all atom description that have been added to class
			<code>atomClass</code> after <code>atom</code>
	*/
	sequence< AtomDescription > getRecentAtoms( [in] long atomClass, [in] long atom );

	//-----------------------------------------------------------------------
	/** registers or searches for a string

		@param atomClass
			the class of atoms in question

		@param description
			the string in question

		@param create 
			if true a new atom will be created for an unknown string
			else the invalid atom (0) will be returned for an unknown string

		@returns
			the atom for the string <code>description</code>
	*/
	long getAtom( [in] long atomClass, [in] string description, [in] boolean create );
};


}; // module util
}; // module star
}; // module sun
}; // module com


#endif
