| /************************************************************** |
| * |
| * 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 _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 |
| |