diff options
author | Vladimir Glazunov <vg@openoffice.org> | 2010-02-05 11:53:09 +0100 |
---|---|---|
committer | Vladimir Glazunov <vg@openoffice.org> | 2010-02-05 11:53:09 +0100 |
commit | 283e1405fb40c796eb42cc2dd5022201174e3d72 (patch) | |
tree | 9246266f8c973ebf6696d219dd8e931b725c89b6 /comphelper | |
parent | 9770323d0411af30795bb32c96690ffadaac3d1f (diff) | |
parent | 509f78fb1dfb021c48510075680d2b3aa01681cc (diff) |
CWS-TOOLING: integrate CWS svxsplit
Diffstat (limited to 'comphelper')
-rw-r--r-- | comphelper/inc/comphelper/serviceinfohelper.hxx | 63 | ||||
-rw-r--r-- | comphelper/source/misc/makefile.mk | 1 | ||||
-rw-r--r-- | comphelper/source/misc/serviceinfohelper.cxx | 112 |
3 files changed, 176 insertions, 0 deletions
diff --git a/comphelper/inc/comphelper/serviceinfohelper.hxx b/comphelper/inc/comphelper/serviceinfohelper.hxx new file mode 100644 index 000000000000..87e450260b51 --- /dev/null +++ b/comphelper/inc/comphelper/serviceinfohelper.hxx @@ -0,0 +1,63 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: unoprov.hxx,v $ + * $Revision: 1.5 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef COMPHELPER_SERVICEINFOHELPER_HXX +#define COMPHELPER_SERVICEINFOHELPER_HXX + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include "comphelper/comphelperdllapi.h" + +namespace comphelper { + +/** this class provides a basic helper for classes suporting the XServiceInfo Interface. + * + * you can overload the <code>getSupprotedServiceNames</code> to implement a XServiceInfo. + * you can use the static helper methods to combine your services with that of parent + * or aggregatet classes. + */ +class COMPHELPER_DLLPUBLIC ServiceInfoHelper : public ::com::sun::star::lang::XServiceInfo +{ +public: + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // helper + static ::com::sun::star::uno::Sequence< ::rtl::OUString > concatSequences( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq1, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq2 ) throw(); + static void addToSequence( ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq, sal_uInt16 nServices, /* sal_Char* */... ) throw(); + static sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& SupportedServices ) throw(); +}; + +} + +#endif + diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk index 3d27599212b5..6d291d1078bc 100644 --- a/comphelper/source/misc/makefile.mk +++ b/comphelper/source/misc/makefile.mk @@ -84,6 +84,7 @@ SLOFILES= \ $(SLO)$/sequenceashashmap.obj \ $(SLO)$/sequence.obj \ $(SLO)$/servicedecl.obj \ + $(SLO)$/serviceinfohelper.obj \ $(SLO)$/sharedmutex.obj \ $(SLO)$/synchronousdispatch.obj \ $(SLO)$/storagehelper.obj \ diff --git a/comphelper/source/misc/serviceinfohelper.cxx b/comphelper/source/misc/serviceinfohelper.cxx new file mode 100644 index 000000000000..f2f9da278a06 --- /dev/null +++ b/comphelper/source/misc/serviceinfohelper.cxx @@ -0,0 +1,112 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: unoprov.cxx,v $ + * $Revision: 1.72.92.1 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_comphelper.hxx" + +#include "comphelper/serviceinfohelper.hxx" +#include <stdarg.h> + +// ##################################################################### + +namespace comphelper +{ + +/** returns an empty UString(). most times sufficient */ +::rtl::OUString SAL_CALL ServiceInfoHelper::getImplementationName() throw( ::com::sun::star::uno::RuntimeException ) +{ + return ::rtl::OUString(); +} + +/** the base implementation iterates over the service names from <code>getSupportedServiceNames</code> */ +sal_Bool SAL_CALL ServiceInfoHelper::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException) +{ + return supportsService( ServiceName, getSupportedServiceNames() ); +} + +sal_Bool SAL_CALL ServiceInfoHelper::supportsService( const ::rtl::OUString& ServiceName, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& SupportedServices ) throw() +{ + const ::rtl::OUString * pArray = SupportedServices.getConstArray(); + for( sal_Int32 i = 0; i < SupportedServices.getLength(); i++ ) + if( pArray[i] == ServiceName ) + return sal_True; + return sal_False; +} + +/** the base implementation has no supported services */ +::com::sun::star::uno::Sequence< ::rtl::OUString > ServiceInfoHelper::getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException ) +{ + ::com::sun::star::uno::Sequence< ::rtl::OUString> aSeq(0); + return aSeq; +} + +/** this method concatenates the given sequences and returns the result + */ +::com::sun::star::uno::Sequence< ::rtl::OUString > ServiceInfoHelper::concatSequences( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq1, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq2 ) throw() +{ + const sal_Int32 nLen1 = rSeq1.getLength(); + const sal_Int32 nLen2 = rSeq2.getLength(); + + ::com::sun::star::uno::Sequence< ::rtl::OUString > aSeq( nLen1 + nLen2 ); + + ::rtl::OUString* pStrings = aSeq.getArray(); + + sal_Int32 nIdx; + const ::rtl::OUString* pStringSrc = rSeq1.getConstArray(); + for( nIdx = 0; nIdx < nLen1; nIdx++ ) + *pStrings++ = *pStringSrc++; + + pStringSrc = rSeq2.getConstArray(); + for( nIdx = 0; nIdx < nLen2; nIdx++ ) + *pStrings++ = *pStringSrc++; + + return aSeq; +} + +/** this method adds a variable number of char pointer to a given Sequence + */ +void ServiceInfoHelper::addToSequence( ::com::sun::star::uno::Sequence< ::rtl::OUString >& rSeq, sal_uInt16 nServices, /* char * */ ... ) throw() +{ + sal_uInt32 nCount = rSeq.getLength(); + + rSeq.realloc( nCount + nServices ); + rtl::OUString* pStrings = rSeq.getArray(); + + va_list marker; + va_start( marker, nServices ); + for( sal_uInt16 i = 0 ; i < nServices; i++ ) + pStrings[nCount++] = rtl::OUString::createFromAscii(va_arg( marker, char*)); + va_end( marker ); +} + +} + + |