diff options
Diffstat (limited to 'connectivity/inc/connectivity/CommonTools.hxx')
-rw-r--r-- | connectivity/inc/connectivity/CommonTools.hxx | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/connectivity/inc/connectivity/CommonTools.hxx b/connectivity/inc/connectivity/CommonTools.hxx new file mode 100644 index 000000000000..c3409678f274 --- /dev/null +++ b/connectivity/inc/connectivity/CommonTools.hxx @@ -0,0 +1,216 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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 _CONNECTIVITY_COMMONTOOLS_HXX_ +#define _CONNECTIVITY_COMMONTOOLS_HXX_ + +#include <rtl/ustring.hxx> +#include <com/sun/star/lang/DisposedException.hpp> +#include <com/sun/star/uno/Any.hxx> +#ifndef _VECTOR_ +#include <vector> +#endif +#include <cppuhelper/weakref.hxx> +#include <comphelper/stl_types.hxx> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <osl/interlck.h> +#include <jvmaccess/virtualmachine.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#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 <TRUE/> if the java class exists, otherwise <FALSE/>. + @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_ + |