| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the 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); |
| inline sal_Bool match( const rtl::OUString& rWild, const sal_Unicode* pStr, sal_Unicode cEscape) |
| { return match( rWild.getStr(), pStr, cEscape); } |
| inline sal_Bool match( const rtl::OUString& rWild, const rtl::OUString& rStr, sal_Unicode cEscape) |
| { return match( rWild, rStr.getStr(), 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_ |
| |