diff options
Diffstat (limited to 'ucb/source/cacher/cachedcontentresultset.hxx')
-rw-r--r-- | ucb/source/cacher/cachedcontentresultset.hxx | 521 |
1 files changed, 521 insertions, 0 deletions
diff --git a/ucb/source/cacher/cachedcontentresultset.hxx b/ucb/source/cacher/cachedcontentresultset.hxx new file mode 100644 index 000000000000..f2ab5dce2505 --- /dev/null +++ b/ucb/source/cacher/cachedcontentresultset.hxx @@ -0,0 +1,521 @@ +/************************************************************************* + * + * 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 _CACHED_CONTENT_RESULTSET_HXX +#define _CACHED_CONTENT_RESULTSET_HXX + +#include <contentresultsetwrapper.hxx> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/ucb/XFetchProvider.hpp> +#include <com/sun/star/ucb/XFetchProviderForContentAccess.hpp> +#include <com/sun/star/ucb/FetchResult.hpp> +#include <com/sun/star/ucb/XContentIdentifierMapping.hpp> +#include <com/sun/star/ucb/XCachedContentResultSetFactory.hpp> + +#define CACHED_CONTENT_RESULTSET_SERVICE_NAME "com.sun.star.ucb.CachedContentResultSet" +#define CACHED_CONTENT_RESULTSET_FACTORY_NAME "com.sun.star.ucb.CachedContentResultSetFactory" + +//========================================================================= + +namespace com { namespace sun { namespace star { namespace script { + class XTypeConverter; +} } } } + +class CCRS_PropertySetInfo; +class CachedContentResultSet + : public ContentResultSetWrapper + , public com::sun::star::lang::XTypeProvider + , public com::sun::star::lang::XServiceInfo +{ + //-------------------------------------------------------------------------- + // class CCRS_Cache + + class CCRS_Cache + { + private: + com::sun::star::ucb::FetchResult* m_pResult; + com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifierMapping > + m_xContentIdentifierMapping; + com::sun::star::uno::Sequence< sal_Bool >* m_pMappedReminder; + + private: + com::sun::star::uno::Any& SAL_CALL + getRowAny( sal_Int32 nRow ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + void SAL_CALL clear(); + + + void SAL_CALL remindMapped( sal_Int32 nRow ); + sal_Bool SAL_CALL isRowMapped( sal_Int32 nRow ); + void SAL_CALL clearMappedReminder(); + com::sun::star::uno::Sequence< sal_Bool >* SAL_CALL getMappedReminder(); + + public: + CCRS_Cache( const com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifierMapping > & xMapping ); + ~CCRS_Cache(); + + void SAL_CALL loadData( + const com::sun::star::ucb::FetchResult& rResult ); + + sal_Bool SAL_CALL + hasRow( sal_Int32 nRow ); + + sal_Bool SAL_CALL + hasCausedException( sal_Int32 nRow ); + + sal_Int32 SAL_CALL + getMaxRow(); + + sal_Bool SAL_CALL + hasKnownLast(); + + //--- + const com::sun::star::uno::Any& SAL_CALL + getAny( sal_Int32 nRow, sal_Int32 nColumnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + const rtl::OUString& SAL_CALL + getContentIdentifierString( sal_Int32 nRow ) + throw( com::sun::star::uno::RuntimeException ); + + const com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifier >& SAL_CALL + getContentIdentifier( sal_Int32 nRow ) + throw( com::sun::star::uno::RuntimeException ); + + const com::sun::star::uno::Reference< + com::sun::star::ucb::XContent >& SAL_CALL + getContent( sal_Int32 nRow ) + throw( com::sun::star::uno::RuntimeException ); + }; + //----------------------------------------------------------------- + //members + + com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > + m_xSMgr; + + //different Interfaces from Origin: + com::sun::star::uno::Reference< com::sun::star::ucb::XFetchProvider > + m_xFetchProvider; //XFetchProvider-interface from m_xOrigin + + com::sun::star::uno::Reference< com::sun::star::ucb::XFetchProviderForContentAccess > + m_xFetchProviderForContentAccess; //XFetchProviderForContentAccess-interface from m_xOrigin + + //my PropertySetInfo + com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > + m_xMyPropertySetInfo;//holds m_pMyPropSetInfo alive + CCRS_PropertySetInfo* m_pMyPropSetInfo; + + + // + com::sun::star::uno::Reference< com::sun::star::ucb::XContentIdentifierMapping > + m_xContentIdentifierMapping;// can be used for remote optimized ContentAccess + + //some Properties and helping variables + sal_Int32 m_nRow; + sal_Bool m_bAfterLast; // TRUE, if m_nRow is after final count; can be TRUE without knowing the exact final count + + sal_Int32 m_nLastAppliedPos; + sal_Bool m_bAfterLastApplied; + + sal_Int32 m_nKnownCount; // count we know from the Origin + sal_Bool m_bFinalCount; // TRUE if the Origin has reached final count and we got that count in m_nKnownCount + + sal_Int32 m_nFetchSize; + sal_Int32 m_nFetchDirection; + + sal_Bool m_bLastReadWasFromCache; + sal_Bool m_bLastCachedReadWasNull; + + //cache: + CCRS_Cache m_aCache; + CCRS_Cache m_aCacheContentIdentifierString; + CCRS_Cache m_aCacheContentIdentifier; + CCRS_Cache m_aCacheContent; + + +private: + //----------------------------------------------------------------- + //helping XPropertySet methods. + virtual void SAL_CALL impl_initPropertySetInfo(); + + + //----------------------------------------------------------------- + sal_Bool SAL_CALL + applyPositionToOrigin( sal_Int32 nRow ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + void SAL_CALL + impl_fetchData( sal_Int32 nRow, sal_Int32 nCount + , sal_Int32 nFetchDirection ) + throw( com::sun::star::uno::RuntimeException ); + + sal_Bool SAL_CALL + impl_isKnownValidPosition( sal_Int32 nRow ); + + sal_Bool SAL_CALL + impl_isKnownInvalidPosition( sal_Int32 nRow ); + + void SAL_CALL + impl_changeRowCount( sal_Int32 nOld, sal_Int32 nNew ); + + void SAL_CALL + impl_changeIsRowCountFinal( sal_Bool bOld, sal_Bool bNew ); + +public: + CachedContentResultSet( + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > & + xSMgr, + const com::sun::star::uno::Reference< + com::sun::star::sdbc::XResultSet > & xOrigin, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifierMapping > & + xContentIdentifierMapping ); + + virtual ~CachedContentResultSet(); + + //----------------------------------------------------------------- + // XInterface inherited + //----------------------------------------------------------------- + XINTERFACE_DECL() + //----------------------------------------------------------------- + // XTypeProvider + //----------------------------------------------------------------- + XTYPEPROVIDER_DECL() + //----------------------------------------------------------------- + // XServiceInfo + //----------------------------------------------------------------- + XSERVICEINFO_NOFACTORY_DECL() + + //----------------------------------------------------------------- + // XPropertySet inherited + //----------------------------------------------------------------- + + virtual void SAL_CALL + setPropertyValue( const rtl::OUString& aPropertyName, + const com::sun::star::uno::Any& aValue ) + throw( com::sun::star::beans::UnknownPropertyException, + com::sun::star::beans::PropertyVetoException, + com::sun::star::lang::IllegalArgumentException, + com::sun::star::lang::WrappedTargetException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Any SAL_CALL + getPropertyValue( const rtl::OUString& PropertyName ) + throw( com::sun::star::beans::UnknownPropertyException, + com::sun::star::lang::WrappedTargetException, + com::sun::star::uno::RuntimeException ); + + //----------------------------------------------------------------- + // own inherited + //----------------------------------------------------------------- + virtual void SAL_CALL + impl_disposing( const com::sun::star::lang::EventObject& Source ) + throw( com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL + impl_propertyChange( const com::sun::star::beans::PropertyChangeEvent& evt ) + throw( com::sun::star::uno::RuntimeException ); + + virtual void SAL_CALL + impl_vetoableChange( const com::sun::star::beans::PropertyChangeEvent& aEvent ) + throw( com::sun::star::beans::PropertyVetoException, + com::sun::star::uno::RuntimeException ); + + //----------------------------------------------------------------- + // XContentAccess inherited + //----------------------------------------------------------------- + virtual rtl::OUString SAL_CALL + queryContentIdentifierString() + throw( com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifier > SAL_CALL + queryContentIdentifier() + throw( com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::ucb::XContent > SAL_CALL + queryContent() + throw( com::sun::star::uno::RuntimeException ); + + //----------------------------------------------------------------- + // XResultSet inherited + //----------------------------------------------------------------- + virtual sal_Bool SAL_CALL + next() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + isBeforeFirst() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + isAfterLast() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + isFirst() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + isLast() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL + beforeFirst() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL + afterLast() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + first() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + last() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Int32 SAL_CALL + getRow() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + absolute( sal_Int32 row ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + relative( sal_Int32 rows ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + previous() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL + refreshRow() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + rowUpdated() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + rowInserted() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL + rowDeleted() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + virtual com::sun::star::uno::Reference< + com::sun::star::uno::XInterface > SAL_CALL + getStatement() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + //----------------------------------------------------------------- + // XRow inherited + //----------------------------------------------------------------- + virtual sal_Bool SAL_CALL + wasNull() + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual rtl::OUString SAL_CALL + getString( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual sal_Bool SAL_CALL + getBoolean( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual sal_Int8 SAL_CALL + getByte( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual sal_Int16 SAL_CALL + getShort( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual sal_Int32 SAL_CALL + getInt( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual sal_Int64 SAL_CALL + getLong( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual float SAL_CALL + getFloat( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual double SAL_CALL + getDouble( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL + getBytes( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::util::Date SAL_CALL + getDate( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::util::Time SAL_CALL + getTime( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::util::DateTime SAL_CALL + getTimestamp( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > SAL_CALL + getBinaryStream( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::io::XInputStream > SAL_CALL + getCharacterStream( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Any SAL_CALL + getObject( sal_Int32 columnIndex, + const com::sun::star::uno::Reference< + com::sun::star::container::XNameAccess >& typeMap ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::sdbc::XRef > SAL_CALL + getRef( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::sdbc::XBlob > SAL_CALL + getBlob( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::sdbc::XClob > SAL_CALL + getClob( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + virtual com::sun::star::uno::Reference< + com::sun::star::sdbc::XArray > SAL_CALL + getArray( sal_Int32 columnIndex ) + throw( com::sun::star::sdbc::SQLException, + com::sun::star::uno::RuntimeException ); + + //----------------------------------------------------------------- + // Type Converter support + //----------------------------------------------------------------- + +private: + sal_Bool m_bTriedToGetTypeConverter; + com::sun::star::uno::Reference< + com::sun::star::script::XTypeConverter > m_xTypeConverter; + + const com::sun::star::uno::Reference< + com::sun::star::script::XTypeConverter >& getTypeConverter(); +}; + +//========================================================================= + +class CachedContentResultSetFactory + : public cppu::OWeakObject + , public com::sun::star::lang::XTypeProvider + , public com::sun::star::lang::XServiceInfo + , public com::sun::star::ucb::XCachedContentResultSetFactory +{ +protected: + com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > m_xSMgr; + +public: + + CachedContentResultSetFactory( + const com::sun::star::uno::Reference< + com::sun::star::lang::XMultiServiceFactory > & rSMgr); + + virtual ~CachedContentResultSetFactory(); + + //----------------------------------------------------------------- + // XInterface + XINTERFACE_DECL() + + //----------------------------------------------------------------- + // XTypeProvider + XTYPEPROVIDER_DECL() + + //----------------------------------------------------------------- + // XServiceInfo + XSERVICEINFO_DECL() + + //----------------------------------------------------------------- + // XCachedContentResultSetFactory + + virtual com::sun::star::uno::Reference< + com::sun::star::sdbc::XResultSet > SAL_CALL + createCachedContentResultSet( + const com::sun::star::uno::Reference< + com::sun::star::sdbc::XResultSet > & xSource, + const com::sun::star::uno::Reference< + com::sun::star::ucb::XContentIdentifierMapping > & xMapping ) + throw( com::sun::star::uno::RuntimeException ); +}; + +#endif + |