/************************************************************************* * * 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: CommonTools.hxx,v $ * $Revision: 1.19 $ * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef _CONNECTIVITY_COMMONTOOLS_HXX_ #define _CONNECTIVITY_COMMONTOOLS_HXX_ #include #include #include #ifndef _VECTOR_ #include #endif #include #include #include #include #include #include #include #include "connectivity/dbtoolsdllapi.hxx" namespace com { namespace sun { namespace star { namespace util { struct Date; struct DateTime; struct Time; } }}} namespace connectivity { //------------------------------------------------------------------------------ OOO_DLLPUBLIC_DBTOOLS sal_Bool match(const sal_Unicode* pWild, const sal_Unicode* pStr, const sal_Unicode cEscape); //------------------------------------------------------------------------------ OOO_DLLPUBLIC_DBTOOLS rtl::OUString toString(const ::com::sun::star::uno::Any& rValue); OOO_DLLPUBLIC_DBTOOLS rtl::OUString toDateString(const ::com::sun::star::util::Date& rDate); OOO_DLLPUBLIC_DBTOOLS rtl::OUString toTimeString(const ::com::sun::star::util::Time& rTime); OOO_DLLPUBLIC_DBTOOLS rtl::OUString toDateTimeString(const ::com::sun::star::util::DateTime& rDateTime); // typedefs typedef std::vector< ::com::sun::star::uno::WeakReferenceHelper > OWeakRefArray; typedef ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier> OSQLTable; DECLARE_STL_MAP(::rtl::OUString,OSQLTable,comphelper::UStringMixLess, OSQLTables); // ------------------------------------------------------------------------- // class ORefVector allows reference counting on a std::vector // ------------------------------------------------------------------------- template< class VectorVal > class ORefVector { std::vector< VectorVal > m_vector; oslInterlockedCount m_refCount; // ORefVector(const ORefVector&); // ORefVector& operator=(const ORefVector&); protected: virtual ~ORefVector(){} public: typedef std::vector< VectorVal > Vector; ORefVector() : m_refCount(0) {} ORefVector(size_t _st) : m_vector(_st) , m_refCount(0) {} ORefVector(const ORefVector& _rRH) : m_vector(_rRH.m_vector),m_refCount(0) { } ORefVector& operator=(const ORefVector& _rRH) { if ( &_rRH != this ) { m_vector = _rRH.m_vector; } return *this; } std::vector< VectorVal > & get() { return m_vector; } std::vector< VectorVal > const & get() const { return m_vector; } inline static void * SAL_CALL operator new( size_t nSize ) SAL_THROW( () ) { return ::rtl_allocateMemory( nSize ); } inline static void SAL_CALL operator delete( void * pMem ) SAL_THROW( () ) { ::rtl_freeMemory( pMem ); } inline static void * SAL_CALL operator new( size_t, void * pMem ) SAL_THROW( () ) { return pMem; } inline static void SAL_CALL operator delete( void *, void * ) SAL_THROW( () ) {} void acquire() { osl_incrementInterlockedCount( &m_refCount ); } void release() { if (! osl_decrementInterlockedCount( &m_refCount )) delete this; } }; // ------------------------------------------------------------------------- // class ORowVector incudes refcounting and initialze himself // with at least one element. This first element is reserved for // the bookmark // ------------------------------------------------------------------------- template< class VectorVal > class ORowVector : public ORefVector< VectorVal > { public: ORowVector() : ORefVector< VectorVal >(1){} ORowVector(size_t _st) : ORefVector< VectorVal >(_st+1) {} }; typedef ORefVector< ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> > OSQLColumns; // ======================================================================================= // search from __first to __last the column with the name _rVal // when no such column exist __last is returned OOO_DLLPUBLIC_DBTOOLS OSQLColumns::Vector::const_iterator find( OSQLColumns::Vector::const_iterator __first, OSQLColumns::Vector::const_iterator __last, const ::rtl::OUString& _rVal, const ::comphelper::UStringMixEqual& _rCase); // ======================================================================================= // search from __first to __last the column with the realname _rVal // when no such column exist __last is returned OOO_DLLPUBLIC_DBTOOLS OSQLColumns::Vector::const_iterator findRealName( OSQLColumns::Vector::const_iterator __first, OSQLColumns::Vector::const_iterator __last, const ::rtl::OUString& _rVal, const ::comphelper::UStringMixEqual& _rCase); // ======================================================================================= // the first two find methods are much faster than the one below // ======================================================================================= // search from __first to __last the column with the property _rProp equals the value _rVal // when no such column exist __last is returned OOO_DLLPUBLIC_DBTOOLS OSQLColumns::Vector::const_iterator find( OSQLColumns::Vector::const_iterator __first, OSQLColumns::Vector::const_iterator __last, const ::rtl::OUString& _rProp, const ::rtl::OUString& _rVal, const ::comphelper::UStringMixEqual& _rCase); OOO_DLLPUBLIC_DBTOOLS void checkDisposed(sal_Bool _bThrow) throw ( ::com::sun::star::lang::DisposedException ); /** creates a java virtual machine @param _rxFactory The ORB. @return The JavaVM. */ OOO_DLLPUBLIC_DBTOOLS ::rtl::Reference< jvmaccess::VirtualMachine > getJavaVM(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory); /** return if the java class exists, otherwise . @param _pJVM The JavaVM. @param _sClassName The class name to look for. */ OOO_DLLPUBLIC_DBTOOLS sal_Bool existsJavaClassByName( const ::rtl::Reference< jvmaccess::VirtualMachine >& _pJVM,const ::rtl::OUString& _sClassName ); } //================================================================================== #define DECLARE_SERVICE_INFO() \ 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) \ #define IMPLEMENT_SERVICE_INFO(classname, implasciiname, serviceasciiname) \ ::rtl::OUString SAL_CALL classname::getImplementationName( ) throw (::com::sun::star::uno::RuntimeException) \ { \ return ::rtl::OUString::createFromAscii(implasciiname); \ } \ ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL classname::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException) \ { \ ::com::sun::star::uno::Sequence< ::rtl::OUString > aSupported(1); \ aSupported[0] = ::rtl::OUString::createFromAscii(serviceasciiname); \ return aSupported; \ } \ sal_Bool SAL_CALL classname::supportsService( const ::rtl::OUString& _rServiceName ) throw(::com::sun::star::uno::RuntimeException) \ { \ Sequence< ::rtl::OUString > aSupported(getSupportedServiceNames()); \ const ::rtl::OUString* pSupported = aSupported.getConstArray(); \ const ::rtl::OUString* pEnd = pSupported + aSupported.getLength(); \ for (;pSupported != pEnd && !pSupported->equals(_rServiceName); ++pSupported) \ ; \ \ return pSupported != pEnd; \ } \ //================================================================================== #endif // _CONNECTIVITY_COMMONTOOLS_HXX_