1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _CACHED_CONTENT_RESULTSET_STUB_HXX
29 #define _CACHED_CONTENT_RESULTSET_STUB_HXX
30 
31 #include <contentresultsetwrapper.hxx>
32 #include <com/sun/star/lang/XTypeProvider.hpp>
33 #include <com/sun/star/lang/XServiceInfo.hpp>
34 #include <com/sun/star/ucb/XFetchProvider.hpp>
35 #include <com/sun/star/ucb/XFetchProviderForContentAccess.hpp>
36 #include <com/sun/star/ucb/XCachedContentResultSetStubFactory.hpp>
37 
38 #define CACHED_CRS_STUB_SERVICE_NAME "com.sun.star.ucb.CachedContentResultSetStub"
39 #define CACHED_CRS_STUB_FACTORY_NAME "com.sun.star.ucb.CachedContentResultSetStubFactory"
40 
41 //=========================================================================
42 
43 class CachedContentResultSetStub
44 				: public ContentResultSetWrapper
45 				, public com::sun::star::lang::XTypeProvider
46 				, public com::sun::star::lang::XServiceInfo
47 				, public com::sun::star::ucb::XFetchProvider
48 				, public com::sun::star::ucb::XFetchProviderForContentAccess
49 {
50 private:
51 	sal_Int32		m_nColumnCount;
52 	sal_Bool		m_bColumnCountCached;
53 
54 	//members to propagate fetchsize and direction:
55 	sal_Bool		m_bNeedToPropagateFetchSize;
56 	sal_Bool		m_bFirstFetchSizePropagationDone;
57 	sal_Int32		m_nLastFetchSize;
58 	sal_Bool		m_bLastFetchDirection;
59 	const rtl::OUString		m_aPropertyNameForFetchSize;
60 	const rtl::OUString		m_aPropertyNameForFetchDirection;
61 
62 
63 	void SAL_CALL
64 	impl_getCurrentRowContent(
65 		com::sun::star::uno::Any& rRowContent,
66 		com::sun::star::uno::Reference<
67 			com::sun::star::sdbc::XRow > xRow )
68 		throw ( com::sun::star::sdbc::SQLException
69 			  , com::sun::star::uno::RuntimeException );
70 
71 	sal_Int32 SAL_CALL
72 	impl_getColumnCount();
73 
74 	void SAL_CALL
75 	impl_getCurrentContentIdentifierString(
76 			com::sun::star::uno::Any& rAny
77 			, com::sun::star::uno::Reference<
78 				com::sun::star::ucb::XContentAccess > xContentAccess )
79 			throw ( com::sun::star::uno::RuntimeException );
80 
81 	void SAL_CALL
82 	impl_getCurrentContentIdentifier(
83 			com::sun::star::uno::Any& rAny
84 			, com::sun::star::uno::Reference<
85 				com::sun::star::ucb::XContentAccess > xContentAccess )
86 			throw ( com::sun::star::uno::RuntimeException );
87 
88 	void SAL_CALL
89 	impl_getCurrentContent(
90 			com::sun::star::uno::Any& rAny
91 			, com::sun::star::uno::Reference<
92 				com::sun::star::ucb::XContentAccess > xContentAccess )
93 			throw ( com::sun::star::uno::RuntimeException );
94 
95 	void SAL_CALL
96 	impl_propagateFetchSizeAndDirection( sal_Int32 nFetchSize, sal_Bool bFetchDirection )
97 		throw ( com::sun::star::uno::RuntimeException );
98 
99 public:
100 	CachedContentResultSetStub( com::sun::star::uno::Reference<
101 						com::sun::star::sdbc::XResultSet > xOrigin );
102 
103 	virtual ~CachedContentResultSetStub();
104 
105 
106 	//-----------------------------------------------------------------
107 	// XInterface inherited
108 	//-----------------------------------------------------------------
109 	XINTERFACE_DECL()
110 	//-----------------------------------------------------------------
111 	// own inherited
112 	//-----------------------------------------------------------------
113 	virtual void SAL_CALL
114 	impl_propertyChange( const com::sun::star::beans::PropertyChangeEvent& evt )
115 		throw( com::sun::star::uno::RuntimeException );
116 
117 	virtual void SAL_CALL
118 	impl_vetoableChange( const com::sun::star::beans::PropertyChangeEvent& aEvent )
119 		throw( com::sun::star::beans::PropertyVetoException,
120 			   com::sun::star::uno::RuntimeException );
121 	//-----------------------------------------------------------------
122 	// XTypeProvider
123 	//-----------------------------------------------------------------
124 	XTYPEPROVIDER_DECL()
125 	//-----------------------------------------------------------------
126     // XServiceInfo
127 	//-----------------------------------------------------------------
128 	XSERVICEINFO_NOFACTORY_DECL()
129 
130 	//-----------------------------------------------------------------
131 	// XFetchProvider
132 	//-----------------------------------------------------------------
133 
134 	virtual com::sun::star::ucb::FetchResult SAL_CALL
135 	fetch( sal_Int32 nRowStartPosition
136 		, sal_Int32 nRowCount, sal_Bool bDirection )
137 		throw( com::sun::star::uno::RuntimeException );
138 
139 	//-----------------------------------------------------------------
140 	// XFetchProviderForContentAccess
141 	//-----------------------------------------------------------------
142 	virtual com::sun::star::ucb::FetchResult SAL_CALL
143 		 fetchContentIdentifierStrings( sal_Int32 nRowStartPosition
144 		, sal_Int32 nRowCount, sal_Bool bDirection )
145 		throw( com::sun::star::uno::RuntimeException );
146 
147 	virtual com::sun::star::ucb::FetchResult SAL_CALL
148 		 fetchContentIdentifiers( sal_Int32 nRowStartPosition
149 		, sal_Int32 nRowCount, sal_Bool bDirection )
150 		throw( com::sun::star::uno::RuntimeException );
151 
152 	virtual com::sun::star::ucb::FetchResult SAL_CALL
153 		 fetchContents( sal_Int32 nRowStartPosition
154 		, sal_Int32 nRowCount, sal_Bool bDirection )
155 		throw( com::sun::star::uno::RuntimeException );
156 };
157 
158 //=========================================================================
159 
160 class CachedContentResultSetStubFactory
161 				: public cppu::OWeakObject
162 				, public com::sun::star::lang::XTypeProvider
163 				, public com::sun::star::lang::XServiceInfo
164 				, public com::sun::star::ucb::XCachedContentResultSetStubFactory
165 {
166 protected:
167 	com::sun::star::uno::Reference<
168 		com::sun::star::lang::XMultiServiceFactory >	m_xSMgr;
169 
170 public:
171 
172 	CachedContentResultSetStubFactory(
173 		const com::sun::star::uno::Reference<
174 		com::sun::star::lang::XMultiServiceFactory > & rSMgr);
175 
176 	virtual ~CachedContentResultSetStubFactory();
177 
178 	//-----------------------------------------------------------------
179 	// XInterface
180 	XINTERFACE_DECL()
181 
182 	//-----------------------------------------------------------------
183 	// XTypeProvider
184 	XTYPEPROVIDER_DECL()
185 
186 	//-----------------------------------------------------------------
187     // XServiceInfo
188 	XSERVICEINFO_DECL()
189 
190 	//-----------------------------------------------------------------
191     // XCachedContentResultSetStubFactory
192 
193 	virtual com::sun::star::uno::Reference<
194 				com::sun::star::sdbc::XResultSet > SAL_CALL
195 	createCachedContentResultSetStub(
196 				const com::sun::star::uno::Reference<
197 					com::sun::star::sdbc::XResultSet > & xSource )
198 			throw( com::sun::star::uno::RuntimeException );
199 };
200 
201 #endif
202 
203