/*************************************************************************
 *
 *  OpenOffice.org - a multi-platform office productivity suite
 *
 *  $RCSfile: XLoggerRemote.idl,v $
 *
 *  $Revision: 1.9 $
 *
 *  last change: $Author: rt $ $Date: 2005/09/09 16:43:02 $
 *
 *  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_logging_XLoggerRemote_idl__
#define __com_sun_star_util_logging_XLoggerRemote_idl__

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

#ifndef __com_sun_star_beans_XPropertiesChangeListener_idl__ 
#include <com/sun/star/beans/XPropertiesChangeListener.idl>
#endif

//=============================================================================

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

//=============================================================================
/** Remote logging interface. The twin of XLogger. This interface will do the
    remote communication. Differences compared with XLogger:
    
    getLogger() is omitted as createInstance will suffice here.
    No need to obey to the java API here.

    getName() and isLoggable() are added here just in case.
    Normally these two can be handled by XLogger without using this interface.
    
    logp() contains an additional parameter "thread" which enables the server
    to display the client thread of this call
    
    addPropertiesChangeListener() is used to register a call back with the server.
    This enables ther server to communicate any changes in the configuration
    to the client. The client can use this info to do some prechecks thus
    avoiding unneccessary remote calls.

    @since OOo 1.1.2
*/

published interface XLoggerRemote: com::sun::star::uno::XInterface
{
    /** gets logging level of this XLoggerRemote
    
        @returns logging level of this XLoggerRemote
    */

    long getLevel();

    //-------------------------------------------------------------------------

    /** gets name of this XLoggerRemote

        @returns name of this XLoggerRemote
    */

    string getName();

    //-------------------------------------------------------------------------

    /** will this XLoggerRemote produce any output for the given level?
        can be used to optimize performance as maybe complex parameter evaluation
        in the logp call can be omitted if isLoggable evaluates to false

        @param level
        level to be checked against
        
        @returns true if there will be some output for this XLoggerRemote for the given level,
                 false otherwise
    */

    boolean isLoggable( [in] long level );

    //-------------------------------------------------------------------------

    /** Log a message. The p in logp is derived from "precise" as given 
        is the java.util.logging API

        @param level
        the log level of this message

        @param sourceClass
        name of class that issued the logging request

        @param sourceMethod
        name of method that issued the logging request

        @param msg
        the string message

        @param thread
        client thread that initially called this method
    */

    [oneway] void logp( [in] long   level,
                        [in] string sourceClass,
                        [in] string sourceMethod,
                        [in] string msg,
                        [in] string thread );

    //-------------------------------------------------------------------------

    /** adds a properties change listener that informs the client if some
        performance relevant data changed on server side.
        For now we just transmit the LogLevel thus we do not need any remote
        calls just for checking the need to log.

        @param listener
        properties change listener
    */

    [oneway] void addPropertiesChangeListener(
                [in] com::sun::star::beans::XPropertiesChangeListener listener);
};

//=============================================================================

}; }; }; }; };

#endif
