/*************************************************************************
 *
 *  $RCSfile: XLoggerRemote.idl,v $
 *
 *  $Revision: 1.5 $
 *
 *  last change: $Author: rt $  $Date: 2003/04/17 09:36:03 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., August, 2001
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 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
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (the "License"); You may not use this file
 *  except in compliance with the License. You may obtain a copy of the
 *  License at http://www.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2001 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/

#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 #107627#
*/

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
