1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_ucb.hxx"
26 
27 #include <cacheddynamicresultset.hxx>
28 #include <com/sun/star/sdbc/XResultSet.hpp>
29 #include <cachedcontentresultset.hxx>
30 #include <osl/diagnose.h>
31 
32 using namespace com::sun::star::lang;
33 using namespace com::sun::star::sdbc;
34 using namespace com::sun::star::ucb;
35 using namespace com::sun::star::uno;
36 using namespace rtl;
37 
38 CachedDynamicResultSet::CachedDynamicResultSet(
39 		Reference< XDynamicResultSet > xOrigin
40 		, const Reference< XContentIdentifierMapping > & xContentMapping
41 		, const Reference< XMultiServiceFactory > & xSMgr )
42 		: DynamicResultSetWrapper( xOrigin, xSMgr )
43 		, m_xContentIdentifierMapping( xContentMapping )
44 {
45 	impl_init();
46 }
47 
48 CachedDynamicResultSet::~CachedDynamicResultSet()
49 {
50 	impl_deinit();
51 }
52 
53 //virtual
54 void SAL_CALL CachedDynamicResultSet
55 	::impl_InitResultSetOne( const Reference< XResultSet >& xResultSet )
56 {
57 	DynamicResultSetWrapper::impl_InitResultSetOne( xResultSet );
58 	OSL_ENSURE( m_xSourceResultOne.is(), "need source resultset" );
59 
60 	Reference< XResultSet > xCache(
61         new CachedContentResultSet( m_xSMgr, m_xSourceResultOne, m_xContentIdentifierMapping ) );
62 
63 	osl::Guard< osl::Mutex > aGuard( m_aMutex );
64 	m_xMyResultOne = xCache;
65 }
66 
67 //virtual
68 void SAL_CALL CachedDynamicResultSet
69 	::impl_InitResultSetTwo( const Reference< XResultSet >& xResultSet )
70 {
71 	DynamicResultSetWrapper::impl_InitResultSetTwo( xResultSet );
72 	OSL_ENSURE( m_xSourceResultTwo.is(), "need source resultset" );
73 
74 	Reference< XResultSet > xCache(
75         new CachedContentResultSet( m_xSMgr, m_xSourceResultTwo, m_xContentIdentifierMapping ) );
76 
77 	osl::Guard< osl::Mutex > aGuard( m_aMutex );
78 	m_xMyResultTwo = xCache;
79 }
80 
81 //--------------------------------------------------------------------------
82 // XInterface methods.
83 //--------------------------------------------------------------------------
84 XINTERFACE_COMMON_IMPL( CachedDynamicResultSet )
85 
86 Any SAL_CALL CachedDynamicResultSet
87 	::queryInterface( const Type&  rType )
88 	throw ( RuntimeException )
89 {
90 	//list all interfaces inclusive baseclasses of interfaces
91 
92 	Any aRet = DynamicResultSetWrapper::queryInterface( rType );
93 	if( aRet.hasValue() )
94 		return aRet;
95 
96 	aRet = cppu::queryInterface( rType,
97 				static_cast< XTypeProvider* >( this )
98 				, static_cast< XServiceInfo* >( this )
99 				);
100 	return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
101 }
102 
103 //--------------------------------------------------------------------------
104 // XTypeProvider methods.
105 //--------------------------------------------------------------------------
106 //list all interfaces exclusive baseclasses
107 XTYPEPROVIDER_IMPL_4( CachedDynamicResultSet
108 					, XTypeProvider
109 					, XServiceInfo
110 					, XDynamicResultSet
111 					, XSourceInitialization
112 					);
113 
114 //--------------------------------------------------------------------------
115 // XServiceInfo methods.
116 //--------------------------------------------------------------------------
117 
118 XSERVICEINFO_NOFACTORY_IMPL_1( CachedDynamicResultSet,
119 				 		   OUString::createFromAscii(
120 							"com.sun.star.comp.ucb.CachedDynamicResultSet" ),
121 				 		   OUString::createFromAscii(
122 							CACHED_DRS_SERVICE_NAME ) );
123 
124 //--------------------------------------------------------------------------
125 // own methds. ( inherited )
126 //--------------------------------------------------------------------------
127 //virtual
128 void SAL_CALL CachedDynamicResultSet
129 	::impl_disposing( const EventObject& Source )
130 	throw( RuntimeException )
131 {
132 	DynamicResultSetWrapper::impl_disposing( Source );
133 	m_xContentIdentifierMapping.clear();
134 }
135 
136 //--------------------------------------------------------------------------
137 //--------------------------------------------------------------------------
138 // class CachedDynamicResultSetFactory
139 //--------------------------------------------------------------------------
140 //--------------------------------------------------------------------------
141 
142 CachedDynamicResultSetFactory::CachedDynamicResultSetFactory(
143 		const Reference< XMultiServiceFactory > & rSMgr )
144 {
145 	m_xSMgr = rSMgr;
146 }
147 
148 CachedDynamicResultSetFactory::~CachedDynamicResultSetFactory()
149 {
150 }
151 
152 //--------------------------------------------------------------------------
153 // CachedDynamicResultSetFactory XInterface methods.
154 //--------------------------------------------------------------------------
155 
156 XINTERFACE_IMPL_3( CachedDynamicResultSetFactory,
157 				   XTypeProvider,
158 				   XServiceInfo,
159 				   XCachedDynamicResultSetFactory );
160 
161 //--------------------------------------------------------------------------
162 // CachedDynamicResultSetFactory XTypeProvider methods.
163 //--------------------------------------------------------------------------
164 
165 XTYPEPROVIDER_IMPL_3( CachedDynamicResultSetFactory,
166 					  XTypeProvider,
167 				   	  XServiceInfo,
168 					  XCachedDynamicResultSetFactory );
169 
170 //--------------------------------------------------------------------------
171 // CachedDynamicResultSetFactory XServiceInfo methods.
172 //--------------------------------------------------------------------------
173 
174 XSERVICEINFO_IMPL_1( CachedDynamicResultSetFactory,
175 	 		   		 OUString::createFromAscii(
176 					 	"com.sun.star.comp.ucb.CachedDynamicResultSetFactory" ),
177 	 		   		 OUString::createFromAscii(
178 					 	CACHED_DRS_FACTORY_NAME ) );
179 
180 //--------------------------------------------------------------------------
181 // Service factory implementation.
182 //--------------------------------------------------------------------------
183 
184 ONE_INSTANCE_SERVICE_FACTORY_IMPL( CachedDynamicResultSetFactory );
185 
186 //--------------------------------------------------------------------------
187 // CachedDynamicResultSetFactory XCachedDynamicResultSetFactory methods.
188 //--------------------------------------------------------------------------
189 
190 //virtual
191 Reference< XDynamicResultSet > SAL_CALL CachedDynamicResultSetFactory
192 	::createCachedDynamicResultSet(
193 		  const Reference< XDynamicResultSet > & SourceStub
194 		, const Reference< XContentIdentifierMapping > & ContentIdentifierMapping )
195 		throw( RuntimeException )
196 {
197 	Reference< XDynamicResultSet > xRet;
198 	xRet = new CachedDynamicResultSet( SourceStub, ContentIdentifierMapping, m_xSMgr );
199 	return xRet;
200 }
201 
202 
203