1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_extensions.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "log_module.hxx"
28*b1cdbd2cSJim Jagielski #include "methodguard.hxx"
29*b1cdbd2cSJim Jagielski #include "loghandler.hxx"
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
32*b1cdbd2cSJim Jagielski #include <com/sun/star/logging/XConsoleHandler.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/logging/LogLevel.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/AlreadyInitializedException.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/NamedValue.hpp>
39*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include <comphelper/componentcontext.hxx>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase3.hxx>
46*b1cdbd2cSJim Jagielski #include <cppuhelper/basemutex.hxx>
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #include <stdio.h>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski //........................................................................
51*b1cdbd2cSJim Jagielski namespace logging
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski //........................................................................
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski 	/** === begin UNO using === **/
56*b1cdbd2cSJim Jagielski     using ::com::sun::star::logging::XConsoleHandler;
57*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::XServiceInfo;
58*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Reference;
59*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::XComponentContext;
60*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::RuntimeException;
61*b1cdbd2cSJim Jagielski     using ::com::sun::star::logging::XLogFormatter;
62*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Sequence;
63*b1cdbd2cSJim Jagielski     using ::com::sun::star::logging::LogRecord;
64*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::UNO_QUERY_THROW;
65*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Exception;
66*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::Any;
67*b1cdbd2cSJim Jagielski     using ::com::sun::star::uno::XInterface;
68*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::XInitialization;
69*b1cdbd2cSJim Jagielski     using ::com::sun::star::ucb::AlreadyInitializedException;
70*b1cdbd2cSJim Jagielski     using ::com::sun::star::lang::IllegalArgumentException;
71*b1cdbd2cSJim Jagielski     using ::com::sun::star::beans::NamedValue;
72*b1cdbd2cSJim Jagielski 	/** === end UNO using === **/
73*b1cdbd2cSJim Jagielski     namespace LogLevel = ::com::sun::star::logging::LogLevel;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	//====================================================================
76*b1cdbd2cSJim Jagielski 	//= ConsoleHandler - declaration
77*b1cdbd2cSJim Jagielski 	//====================================================================
78*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
79*b1cdbd2cSJim Jagielski     typedef ::cppu::WeakComponentImplHelper3    <   XConsoleHandler
80*b1cdbd2cSJim Jagielski                                                 ,   XServiceInfo
81*b1cdbd2cSJim Jagielski                                                 ,   XInitialization
82*b1cdbd2cSJim Jagielski                                                 >   ConsoleHandler_Base;
83*b1cdbd2cSJim Jagielski     class ConsoleHandler    :public ::cppu::BaseMutex
84*b1cdbd2cSJim Jagielski                             ,public ConsoleHandler_Base
85*b1cdbd2cSJim Jagielski 	{
86*b1cdbd2cSJim Jagielski     private:
87*b1cdbd2cSJim Jagielski         ::comphelper::ComponentContext  m_aContext;
88*b1cdbd2cSJim Jagielski         LogHandlerHelper                m_aHandlerHelper;
89*b1cdbd2cSJim Jagielski         sal_Int32                       m_nThreshold;
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski     protected:
92*b1cdbd2cSJim Jagielski         ConsoleHandler( const Reference< XComponentContext >& _rxContext );
93*b1cdbd2cSJim Jagielski         virtual ~ConsoleHandler();
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski         // XConsoleHandler
96*b1cdbd2cSJim Jagielski         virtual ::sal_Int32 SAL_CALL getThreshold() throw (RuntimeException);
97*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setThreshold( ::sal_Int32 _threshold ) throw (RuntimeException);
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski         // XLogHandler
100*b1cdbd2cSJim Jagielski         virtual ::rtl::OUString SAL_CALL getEncoding() throw (RuntimeException);
101*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setEncoding( const ::rtl::OUString& _encoding ) throw (RuntimeException);
102*b1cdbd2cSJim Jagielski         virtual Reference< XLogFormatter > SAL_CALL getFormatter() throw (RuntimeException);
103*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setFormatter( const Reference< XLogFormatter >& _formatter ) throw (RuntimeException);
104*b1cdbd2cSJim Jagielski         virtual ::sal_Int32 SAL_CALL getLevel() throw (RuntimeException);
105*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setLevel( ::sal_Int32 _level ) throw (RuntimeException);
106*b1cdbd2cSJim Jagielski         virtual void SAL_CALL flush(  ) throw (RuntimeException);
107*b1cdbd2cSJim Jagielski         virtual ::sal_Bool SAL_CALL publish( const LogRecord& Record ) throw (RuntimeException);
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski         // XInitialization
110*b1cdbd2cSJim Jagielski         virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski         // XServiceInfo
113*b1cdbd2cSJim Jagielski 		virtual ::rtl::OUString SAL_CALL getImplementationName() throw(RuntimeException);
114*b1cdbd2cSJim Jagielski         virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException);
115*b1cdbd2cSJim Jagielski         virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(RuntimeException);
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski         // OComponentHelper
118*b1cdbd2cSJim Jagielski         virtual void SAL_CALL disposing();
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski     public:
121*b1cdbd2cSJim Jagielski         // XServiceInfo - static version
122*b1cdbd2cSJim Jagielski 		static ::rtl::OUString SAL_CALL getImplementationName_static();
123*b1cdbd2cSJim Jagielski         static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
124*b1cdbd2cSJim Jagielski         static Reference< XInterface > Create( const Reference< XComponentContext >& _rxContext );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski     public:
127*b1cdbd2cSJim Jagielski         typedef ComponentMethodGuard< ConsoleHandler > MethodGuard;
128*b1cdbd2cSJim Jagielski         void    enterMethod( MethodGuard::Access );
129*b1cdbd2cSJim Jagielski         void    leaveMethod( MethodGuard::Access );
130*b1cdbd2cSJim Jagielski 	};
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski     //====================================================================
133*b1cdbd2cSJim Jagielski 	//= ConsoleHandler - implementation
134*b1cdbd2cSJim Jagielski 	//====================================================================
135*b1cdbd2cSJim Jagielski 	//--------------------------------------------------------------------
ConsoleHandler(const Reference<XComponentContext> & _rxContext)136*b1cdbd2cSJim Jagielski     ConsoleHandler::ConsoleHandler( const Reference< XComponentContext >& _rxContext )
137*b1cdbd2cSJim Jagielski         :ConsoleHandler_Base( m_aMutex )
138*b1cdbd2cSJim Jagielski         ,m_aContext( _rxContext )
139*b1cdbd2cSJim Jagielski         ,m_aHandlerHelper( _rxContext, m_aMutex, rBHelper )
140*b1cdbd2cSJim Jagielski         ,m_nThreshold( LogLevel::SEVERE )
141*b1cdbd2cSJim Jagielski     {
142*b1cdbd2cSJim Jagielski     }
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
~ConsoleHandler()145*b1cdbd2cSJim Jagielski     ConsoleHandler::~ConsoleHandler()
146*b1cdbd2cSJim Jagielski     {
147*b1cdbd2cSJim Jagielski         if ( !rBHelper.bDisposed )
148*b1cdbd2cSJim Jagielski         {
149*b1cdbd2cSJim Jagielski             acquire();
150*b1cdbd2cSJim Jagielski             dispose();
151*b1cdbd2cSJim Jagielski         }
152*b1cdbd2cSJim Jagielski     }
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
disposing()155*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::disposing()
156*b1cdbd2cSJim Jagielski     {
157*b1cdbd2cSJim Jagielski         m_aHandlerHelper.setFormatter( NULL );
158*b1cdbd2cSJim Jagielski     }
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
enterMethod(MethodGuard::Access)161*b1cdbd2cSJim Jagielski     void ConsoleHandler::enterMethod( MethodGuard::Access )
162*b1cdbd2cSJim Jagielski     {
163*b1cdbd2cSJim Jagielski         m_aHandlerHelper.enterMethod();
164*b1cdbd2cSJim Jagielski     }
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
leaveMethod(MethodGuard::Access)167*b1cdbd2cSJim Jagielski     void ConsoleHandler::leaveMethod( MethodGuard::Access )
168*b1cdbd2cSJim Jagielski     {
169*b1cdbd2cSJim Jagielski         m_aMutex.release();
170*b1cdbd2cSJim Jagielski     }
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getThreshold()173*b1cdbd2cSJim Jagielski     ::sal_Int32 SAL_CALL ConsoleHandler::getThreshold() throw (RuntimeException)
174*b1cdbd2cSJim Jagielski     {
175*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
176*b1cdbd2cSJim Jagielski         return m_nThreshold;
177*b1cdbd2cSJim Jagielski     }
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setThreshold(::sal_Int32 _threshold)180*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::setThreshold( ::sal_Int32 _threshold ) throw (RuntimeException)
181*b1cdbd2cSJim Jagielski     {
182*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
183*b1cdbd2cSJim Jagielski         m_nThreshold = _threshold;
184*b1cdbd2cSJim Jagielski     }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getEncoding()187*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL ConsoleHandler::getEncoding() throw (RuntimeException)
188*b1cdbd2cSJim Jagielski     {
189*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
190*b1cdbd2cSJim Jagielski         ::rtl::OUString sEncoding;
191*b1cdbd2cSJim Jagielski         OSL_VERIFY( m_aHandlerHelper.getEncoding( sEncoding ) );
192*b1cdbd2cSJim Jagielski         return sEncoding;
193*b1cdbd2cSJim Jagielski     }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setEncoding(const::rtl::OUString & _rEncoding)196*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::setEncoding( const ::rtl::OUString& _rEncoding ) throw (RuntimeException)
197*b1cdbd2cSJim Jagielski     {
198*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
199*b1cdbd2cSJim Jagielski         OSL_VERIFY( m_aHandlerHelper.setEncoding( _rEncoding ) );
200*b1cdbd2cSJim Jagielski     }
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getFormatter()203*b1cdbd2cSJim Jagielski     Reference< XLogFormatter > SAL_CALL ConsoleHandler::getFormatter() throw (RuntimeException)
204*b1cdbd2cSJim Jagielski     {
205*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
206*b1cdbd2cSJim Jagielski         return m_aHandlerHelper.getFormatter();
207*b1cdbd2cSJim Jagielski     }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setFormatter(const Reference<XLogFormatter> & _rxFormatter)210*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::setFormatter( const Reference< XLogFormatter >& _rxFormatter ) throw (RuntimeException)
211*b1cdbd2cSJim Jagielski     {
212*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
213*b1cdbd2cSJim Jagielski         m_aHandlerHelper.setFormatter( _rxFormatter );
214*b1cdbd2cSJim Jagielski     }
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getLevel()217*b1cdbd2cSJim Jagielski     ::sal_Int32 SAL_CALL ConsoleHandler::getLevel() throw (RuntimeException)
218*b1cdbd2cSJim Jagielski     {
219*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
220*b1cdbd2cSJim Jagielski         return m_aHandlerHelper.getLevel();
221*b1cdbd2cSJim Jagielski     }
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
setLevel(::sal_Int32 _nLevel)224*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::setLevel( ::sal_Int32 _nLevel ) throw (RuntimeException)
225*b1cdbd2cSJim Jagielski     {
226*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
227*b1cdbd2cSJim Jagielski         m_aHandlerHelper.setLevel( _nLevel );
228*b1cdbd2cSJim Jagielski     }
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
flush()231*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::flush(  ) throw (RuntimeException)
232*b1cdbd2cSJim Jagielski     {
233*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
234*b1cdbd2cSJim Jagielski         fflush( stdout );
235*b1cdbd2cSJim Jagielski         fflush( stderr );
236*b1cdbd2cSJim Jagielski     }
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
publish(const LogRecord & _rRecord)239*b1cdbd2cSJim Jagielski     ::sal_Bool SAL_CALL ConsoleHandler::publish( const LogRecord& _rRecord ) throw (RuntimeException)
240*b1cdbd2cSJim Jagielski     {
241*b1cdbd2cSJim Jagielski         MethodGuard aGuard( *this );
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski         ::rtl::OString sEntry;
244*b1cdbd2cSJim Jagielski         if ( !m_aHandlerHelper.formatForPublishing( _rRecord, sEntry ) )
245*b1cdbd2cSJim Jagielski             return sal_False;
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski         if ( _rRecord.Level >= m_nThreshold )
248*b1cdbd2cSJim Jagielski             fprintf( stderr, sEntry.getStr() );
249*b1cdbd2cSJim Jagielski         else
250*b1cdbd2cSJim Jagielski             fprintf( stdout, sEntry.getStr() );
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski         return sal_True;
253*b1cdbd2cSJim Jagielski     }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
initialize(const Sequence<Any> & _rArguments)256*b1cdbd2cSJim Jagielski     void SAL_CALL ConsoleHandler::initialize( const Sequence< Any >& _rArguments ) throw (Exception, RuntimeException)
257*b1cdbd2cSJim Jagielski     {
258*b1cdbd2cSJim Jagielski         ::osl::MutexGuard aGuard( m_aMutex );
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski         if ( m_aHandlerHelper.getIsInitialized() )
261*b1cdbd2cSJim Jagielski             throw AlreadyInitializedException();
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski         if ( _rArguments.getLength() == 0 )
264*b1cdbd2cSJim Jagielski         {   // create() - nothing to init
265*b1cdbd2cSJim Jagielski             m_aHandlerHelper.setIsInitialized();
266*b1cdbd2cSJim Jagielski             return;
267*b1cdbd2cSJim Jagielski         }
268*b1cdbd2cSJim Jagielski 
269*b1cdbd2cSJim Jagielski         if ( _rArguments.getLength() != 1 )
270*b1cdbd2cSJim Jagielski             throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski         Sequence< NamedValue > aSettings;
273*b1cdbd2cSJim Jagielski         if ( !( _rArguments[0] >>= aSettings ) )
274*b1cdbd2cSJim Jagielski             throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski         // createWithSettings( [in] sequence< ::com::sun::star::beans::NamedValue > Settings )
277*b1cdbd2cSJim Jagielski         ::comphelper::NamedValueCollection aTypedSettings( aSettings );
278*b1cdbd2cSJim Jagielski         m_aHandlerHelper.initFromSettings( aTypedSettings );
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski         aTypedSettings.get_ensureType( "Threshold", m_nThreshold );
281*b1cdbd2cSJim Jagielski 
282*b1cdbd2cSJim Jagielski         m_aHandlerHelper.setIsInitialized();
283*b1cdbd2cSJim Jagielski     }
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getImplementationName()286*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL ConsoleHandler::getImplementationName() throw(RuntimeException)
287*b1cdbd2cSJim Jagielski     {
288*b1cdbd2cSJim Jagielski         return getImplementationName_static();
289*b1cdbd2cSJim Jagielski     }
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
supportsService(const::rtl::OUString & _rServiceName)292*b1cdbd2cSJim Jagielski     ::sal_Bool SAL_CALL ConsoleHandler::supportsService( const ::rtl::OUString& _rServiceName ) throw(RuntimeException)
293*b1cdbd2cSJim Jagielski     {
294*b1cdbd2cSJim Jagielski         const Sequence< ::rtl::OUString > aServiceNames( getSupportedServiceNames() );
295*b1cdbd2cSJim Jagielski         for (   const ::rtl::OUString* pServiceNames = aServiceNames.getConstArray();
296*b1cdbd2cSJim Jagielski                 pServiceNames != aServiceNames.getConstArray() + aServiceNames.getLength();
297*b1cdbd2cSJim Jagielski                 ++pServiceNames
298*b1cdbd2cSJim Jagielski             )
299*b1cdbd2cSJim Jagielski             if ( _rServiceName == *pServiceNames )
300*b1cdbd2cSJim Jagielski                 return sal_True;
301*b1cdbd2cSJim Jagielski         return sal_False;
302*b1cdbd2cSJim Jagielski     }
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getSupportedServiceNames()305*b1cdbd2cSJim Jagielski     Sequence< ::rtl::OUString > SAL_CALL ConsoleHandler::getSupportedServiceNames() throw(RuntimeException)
306*b1cdbd2cSJim Jagielski     {
307*b1cdbd2cSJim Jagielski         return getSupportedServiceNames_static();
308*b1cdbd2cSJim Jagielski     }
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getImplementationName_static()311*b1cdbd2cSJim Jagielski     ::rtl::OUString SAL_CALL ConsoleHandler::getImplementationName_static()
312*b1cdbd2cSJim Jagielski     {
313*b1cdbd2cSJim Jagielski         return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.extensions.ConsoleHandler" ) );
314*b1cdbd2cSJim Jagielski     }
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
getSupportedServiceNames_static()317*b1cdbd2cSJim Jagielski     Sequence< ::rtl::OUString > SAL_CALL ConsoleHandler::getSupportedServiceNames_static()
318*b1cdbd2cSJim Jagielski     {
319*b1cdbd2cSJim Jagielski         Sequence< ::rtl::OUString > aServiceNames(1);
320*b1cdbd2cSJim Jagielski         aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.logging.ConsoleHandler" ) );
321*b1cdbd2cSJim Jagielski         return aServiceNames;
322*b1cdbd2cSJim Jagielski     }
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
Create(const Reference<XComponentContext> & _rxContext)325*b1cdbd2cSJim Jagielski     Reference< XInterface > ConsoleHandler::Create( const Reference< XComponentContext >& _rxContext )
326*b1cdbd2cSJim Jagielski     {
327*b1cdbd2cSJim Jagielski         return *( new ConsoleHandler( _rxContext ) );
328*b1cdbd2cSJim Jagielski     }
329*b1cdbd2cSJim Jagielski 
330*b1cdbd2cSJim Jagielski     //--------------------------------------------------------------------
createRegistryInfo_ConsoleHandler()331*b1cdbd2cSJim Jagielski     void createRegistryInfo_ConsoleHandler()
332*b1cdbd2cSJim Jagielski     {
333*b1cdbd2cSJim Jagielski         static OAutoRegistration< ConsoleHandler > aAutoRegistration;
334*b1cdbd2cSJim Jagielski     }
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski //........................................................................
337*b1cdbd2cSJim Jagielski } // namespace logging
338*b1cdbd2cSJim Jagielski //........................................................................
339