1*ac9096f4SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*ac9096f4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ac9096f4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ac9096f4SAndrew Rist  * distributed with this work for additional information
6*ac9096f4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ac9096f4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ac9096f4SAndrew Rist  * "License"); you may not use this file except in compliance
9*ac9096f4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*ac9096f4SAndrew Rist  *
11*ac9096f4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*ac9096f4SAndrew Rist  *
13*ac9096f4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ac9096f4SAndrew Rist  * software distributed under the License is distributed on an
15*ac9096f4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ac9096f4SAndrew Rist  * KIND, either express or implied.  See the License for the
17*ac9096f4SAndrew Rist  * specific language governing permissions and limitations
18*ac9096f4SAndrew Rist  * under the License.
19*ac9096f4SAndrew Rist  *
20*ac9096f4SAndrew Rist  *************************************************************/
21*ac9096f4SAndrew Rist 
22*ac9096f4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_ucbhelper.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir /**************************************************************************
28cdf0e10cSrcweir 								TODO
29cdf0e10cSrcweir  **************************************************************************
30cdf0e10cSrcweir 
31cdf0e10cSrcweir  *************************************************************************/
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #ifndef __VECTOR__
34cdf0e10cSrcweir #include <vector>
35cdf0e10cSrcweir #endif
36cdf0e10cSrcweir #include <com/sun/star/beans/Property.hpp>
37cdf0e10cSrcweir #include <com/sun/star/beans/XPropertyAccess.hpp>
38cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
39cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
40cdf0e10cSrcweir #include <com/sun/star/script/XTypeConverter.hpp>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include "osl/diagnose.h"
43cdf0e10cSrcweir #include "osl/mutex.hxx"
44cdf0e10cSrcweir #include <ucbhelper/propertyvalueset.hxx>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir using namespace com::sun::star::beans;
47cdf0e10cSrcweir using namespace com::sun::star::container;
48cdf0e10cSrcweir using namespace com::sun::star::io;
49cdf0e10cSrcweir using namespace com::sun::star::lang;
50cdf0e10cSrcweir using namespace com::sun::star::script;
51cdf0e10cSrcweir using namespace com::sun::star::sdbc;
52cdf0e10cSrcweir using namespace com::sun::star::uno;
53cdf0e10cSrcweir using namespace com::sun::star::util;
54cdf0e10cSrcweir using namespace rtl;
55cdf0e10cSrcweir 
56cdf0e10cSrcweir namespace ucbhelper_impl
57cdf0e10cSrcweir {
58cdf0e10cSrcweir 
59cdf0e10cSrcweir //=========================================================================
60cdf0e10cSrcweir //
61cdf0e10cSrcweir // PropertyValue.
62cdf0e10cSrcweir //
63cdf0e10cSrcweir //=========================================================================
64cdf0e10cSrcweir 
65cdf0e10cSrcweir const sal_uInt32 NO_VALUE_SET 				= 0x00000000;
66cdf0e10cSrcweir const sal_uInt32 STRING_VALUE_SET 		 	= 0x00000001;
67cdf0e10cSrcweir const sal_uInt32 BOOLEAN_VALUE_SET 		 	= 0x00000002;
68cdf0e10cSrcweir const sal_uInt32 BYTE_VALUE_SET 			= 0x00000004;
69cdf0e10cSrcweir const sal_uInt32 SHORT_VALUE_SET 			= 0x00000008;
70cdf0e10cSrcweir const sal_uInt32 INT_VALUE_SET 			 	= 0x00000010;
71cdf0e10cSrcweir const sal_uInt32 LONG_VALUE_SET 			= 0x00000020;
72cdf0e10cSrcweir const sal_uInt32 FLOAT_VALUE_SET 			= 0x00000040;
73cdf0e10cSrcweir const sal_uInt32 DOUBLE_VALUE_SET 		 	= 0x00000080;
74cdf0e10cSrcweir const sal_uInt32 BYTES_VALUE_SET 			= 0x00000100;
75cdf0e10cSrcweir const sal_uInt32 DATE_VALUE_SET 			= 0x00000200;
76cdf0e10cSrcweir const sal_uInt32 TIME_VALUE_SET 			= 0x00000400;
77cdf0e10cSrcweir const sal_uInt32 TIMESTAMP_VALUE_SET 		= 0x00000800;
78cdf0e10cSrcweir const sal_uInt32 BINARYSTREAM_VALUE_SET 	= 0x00001000;
79cdf0e10cSrcweir const sal_uInt32 CHARACTERSTREAM_VALUE_SET 	= 0x00002000;
80cdf0e10cSrcweir const sal_uInt32 REF_VALUE_SET 			 	= 0x00004000;
81cdf0e10cSrcweir const sal_uInt32 BLOB_VALUE_SET 			= 0x00008000;
82cdf0e10cSrcweir const sal_uInt32 CLOB_VALUE_SET 			= 0x00010000;
83cdf0e10cSrcweir const sal_uInt32 ARRAY_VALUE_SET 			= 0x00020000;
84cdf0e10cSrcweir const sal_uInt32 OBJECT_VALUE_SET 		 	= 0x00040000;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir struct PropertyValue
87cdf0e10cSrcweir {
88cdf0e10cSrcweir     ::rtl::OUString
89cdf0e10cSrcweir                 sPropertyName;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 	sal_uInt32	nPropsSet;
92cdf0e10cSrcweir 	sal_uInt32  nOrigValue;
93cdf0e10cSrcweir 
94cdf0e10cSrcweir 	OUString	aString;	// getString
95cdf0e10cSrcweir 	sal_Bool 	bBoolean;	// getBoolean
96cdf0e10cSrcweir 	sal_Int8	nByte;		// getByte
97cdf0e10cSrcweir 	sal_Int16	nShort;		// getShort
98cdf0e10cSrcweir 	sal_Int32 	nInt;		// getInt
99cdf0e10cSrcweir 	sal_Int64 	nLong;		// getLong
100cdf0e10cSrcweir 	float		nFloat;		// getFloat
101cdf0e10cSrcweir 	double		nDouble;	// getDouble
102cdf0e10cSrcweir 
103cdf0e10cSrcweir 	Sequence< sal_Int8 > 		aBytes; 			// getBytes
104cdf0e10cSrcweir 	Date                		aDate;				// getDate
105cdf0e10cSrcweir 	Time                		aTime;				// getTime
106cdf0e10cSrcweir 	DateTime            		aTimestamp;			// getTimestamp
107cdf0e10cSrcweir 	Reference< XInputStream >	xBinaryStream;		// getBinaryStream
108cdf0e10cSrcweir 	Reference< XInputStream >	xCharacterStream;	// getCharacterStream
109cdf0e10cSrcweir 	Reference< XRef >			xRef;				// getRef
110cdf0e10cSrcweir 	Reference< XBlob >			xBlob;				// getBlob
111cdf0e10cSrcweir 	Reference< XClob >			xClob;				// getClob
112cdf0e10cSrcweir 	Reference< XArray >			xArray;				// getArray
113cdf0e10cSrcweir 	Any							aObject;			// getObject
114cdf0e10cSrcweir 
PropertyValueucbhelper_impl::PropertyValue115cdf0e10cSrcweir 	inline PropertyValue()
116cdf0e10cSrcweir         : nPropsSet( NO_VALUE_SET ), nOrigValue( NO_VALUE_SET ),
117cdf0e10cSrcweir           bBoolean(false),
118cdf0e10cSrcweir           nByte(0),
119cdf0e10cSrcweir           nShort(0),
120cdf0e10cSrcweir           nInt(0),
121cdf0e10cSrcweir           nLong(0),
122cdf0e10cSrcweir           nFloat(0.0),
123cdf0e10cSrcweir           nDouble(0.0)
124cdf0e10cSrcweir         {}
125cdf0e10cSrcweir };
126cdf0e10cSrcweir } // namespace ucbhelper_impl
127cdf0e10cSrcweir 
128cdf0e10cSrcweir using namespace ucbhelper_impl;
129cdf0e10cSrcweir 
130cdf0e10cSrcweir namespace ucbhelper
131cdf0e10cSrcweir {
132cdf0e10cSrcweir 
133cdf0e10cSrcweir //=========================================================================
134cdf0e10cSrcweir //
135cdf0e10cSrcweir // class PropertyValues.
136cdf0e10cSrcweir //
137cdf0e10cSrcweir //=========================================================================
138cdf0e10cSrcweir 
139cdf0e10cSrcweir typedef std::vector< ucbhelper_impl::PropertyValue > PropertyValuesVector;
140cdf0e10cSrcweir 
141cdf0e10cSrcweir class PropertyValues : public PropertyValuesVector {};
142cdf0e10cSrcweir 
143cdf0e10cSrcweir } // namespace ucbhelper
144cdf0e10cSrcweir 
145cdf0e10cSrcweir //=========================================================================
146cdf0e10cSrcweir //
147cdf0e10cSrcweir // Welcome to the macro hell...
148cdf0e10cSrcweir //
149cdf0e10cSrcweir //=========================================================================
150cdf0e10cSrcweir 
151cdf0e10cSrcweir #define GETVALUE_IMPL_TYPE( _type_, _type_name_, _member_name_, _cppu_type_ ) \
152cdf0e10cSrcweir 																			  \
153cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );                                       \
154cdf0e10cSrcweir 																			  \
155cdf0e10cSrcweir 	_type_ aValue = _type_();	/* default ctor	*/							  \
156cdf0e10cSrcweir 																			  \
157cdf0e10cSrcweir 	m_bWasNull = sal_True;                                					  \
158cdf0e10cSrcweir 																			  \
159cdf0e10cSrcweir 	if ( ( columnIndex < 1 )												  \
160cdf0e10cSrcweir 	     || ( columnIndex > sal_Int32( m_pValues->size() ) ) )         		  \
161cdf0e10cSrcweir 	{                                                                         \
162cdf0e10cSrcweir 		OSL_ENSURE( sal_False, "PropertyValueSet - index out of range!" );    \
163cdf0e10cSrcweir 	}                                                                         \
164cdf0e10cSrcweir 	else                                                                      \
165cdf0e10cSrcweir 	{                                                                         \
166cdf0e10cSrcweir 		ucbhelper_impl::PropertyValue& rValue                                 \
167cdf0e10cSrcweir             = (*m_pValues)[ columnIndex - 1 ];                                \
168cdf0e10cSrcweir 																			  \
169cdf0e10cSrcweir 		if ( rValue.nOrigValue != NO_VALUE_SET )							  \
170cdf0e10cSrcweir 		{                                                                     \
171cdf0e10cSrcweir 			if ( rValue.nPropsSet & _type_name_ )							  \
172cdf0e10cSrcweir 			{                                                                 \
173cdf0e10cSrcweir 				/* Values is present natively... */							  \
174cdf0e10cSrcweir 				aValue = rValue._member_name_;                                \
175cdf0e10cSrcweir 				m_bWasNull = sal_False;                   					  \
176cdf0e10cSrcweir 			}                                                                 \
177cdf0e10cSrcweir 			else                                                              \
178cdf0e10cSrcweir 			{                                                                 \
179cdf0e10cSrcweir 				if ( !(rValue.nPropsSet & OBJECT_VALUE_SET) )                 \
180cdf0e10cSrcweir 				{                                                             \
181cdf0e10cSrcweir 					/* Value is not (yet) available as Any. Create it. */     \
182cdf0e10cSrcweir 					getObject( columnIndex, Reference< XNameAccess >() );     \
183cdf0e10cSrcweir 				}                                                             \
184cdf0e10cSrcweir 																			  \
185cdf0e10cSrcweir 				if ( rValue.nPropsSet & OBJECT_VALUE_SET )                    \
186cdf0e10cSrcweir 				{															  \
187cdf0e10cSrcweir 					/* Value is available as Any. */                          \
188cdf0e10cSrcweir 																			  \
189cdf0e10cSrcweir 					if ( rValue.aObject.hasValue() )						  \
190cdf0e10cSrcweir 					{                                                         \
191cdf0e10cSrcweir 						/* Try to convert into native value. */               \
192cdf0e10cSrcweir 						if ( rValue.aObject >>= aValue )                      \
193cdf0e10cSrcweir 						{                                                     \
194cdf0e10cSrcweir 							rValue._member_name_ = aValue;					  \
195cdf0e10cSrcweir 							rValue.nPropsSet |= _type_name_;				  \
196cdf0e10cSrcweir 							m_bWasNull = sal_False;           				  \
197cdf0e10cSrcweir 						}                                                     \
198cdf0e10cSrcweir 						else                                                  \
199cdf0e10cSrcweir 						{                                                     \
200cdf0e10cSrcweir 							/* Last chance. Try type converter service... */  \
201cdf0e10cSrcweir 																			  \
202cdf0e10cSrcweir 							Reference< XTypeConverter > xConverter            \
203cdf0e10cSrcweir 													= getTypeConverter(); 	  \
204cdf0e10cSrcweir 							if ( xConverter.is() )                            \
205cdf0e10cSrcweir 							{                                                 \
206cdf0e10cSrcweir 								try                                           \
207cdf0e10cSrcweir 								{                                             \
208cdf0e10cSrcweir 									Any aConvAny = xConverter->convertTo(     \
209cdf0e10cSrcweir 													 		rValue.aObject,	  \
210cdf0e10cSrcweir 															_cppu_type_ );	  \
211cdf0e10cSrcweir 																			  \
212cdf0e10cSrcweir 									if ( aConvAny >>= aValue )                \
213cdf0e10cSrcweir 									{                           			  \
214cdf0e10cSrcweir 										rValue._member_name_ = aValue;		  \
215cdf0e10cSrcweir 										rValue.nPropsSet |= _type_name_;      \
216cdf0e10cSrcweir 										m_bWasNull = sal_False;   			  \
217cdf0e10cSrcweir 									}                                         \
218cdf0e10cSrcweir 								}                                             \
219cdf0e10cSrcweir 								catch ( IllegalArgumentException )            \
220cdf0e10cSrcweir 								{                                             \
221cdf0e10cSrcweir 								}                                             \
222cdf0e10cSrcweir 								catch ( CannotConvertException )              \
223cdf0e10cSrcweir 								{                                             \
224cdf0e10cSrcweir 								}                                             \
225cdf0e10cSrcweir 							}                                                 \
226cdf0e10cSrcweir 						}                                                     \
227cdf0e10cSrcweir 					}                                                         \
228cdf0e10cSrcweir 				}                                                             \
229cdf0e10cSrcweir 			}                                                                 \
230cdf0e10cSrcweir 		}																	  \
231cdf0e10cSrcweir 	}                                                                         \
232cdf0e10cSrcweir 	return aValue;
233cdf0e10cSrcweir 
234cdf0e10cSrcweir #define GETVALUE_IMPL( _type_, _type_name_, _member_name_ )					  \
235cdf0e10cSrcweir 	GETVALUE_IMPL_TYPE( _type_,												  \
236cdf0e10cSrcweir 						_type_name_,										  \
237cdf0e10cSrcweir 						_member_name_,                                        \
238cdf0e10cSrcweir 						getCppuType( static_cast< const _type_ * >( 0 ) ) )
239cdf0e10cSrcweir 
240cdf0e10cSrcweir #define SETVALUE_IMPL( _prop_name_, _type_name_, _member_name_, _value_ ) 	  \
241cdf0e10cSrcweir 																			  \
242cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );				                          \
243cdf0e10cSrcweir 																			  \
244cdf0e10cSrcweir 	ucbhelper_impl::PropertyValue aNewValue;                                  \
245cdf0e10cSrcweir 	aNewValue.sPropertyName = _prop_name_;                                    \
246cdf0e10cSrcweir 	aNewValue.nPropsSet  	= _type_name_;                                    \
247cdf0e10cSrcweir 	aNewValue.nOrigValue 	= _type_name_;                                    \
248cdf0e10cSrcweir 	aNewValue._member_name_ = _value_;                                        \
249cdf0e10cSrcweir 																			  \
250cdf0e10cSrcweir 	m_pValues->push_back( aNewValue );
251cdf0e10cSrcweir 
252cdf0e10cSrcweir namespace ucbhelper {
253cdf0e10cSrcweir 
254cdf0e10cSrcweir //=========================================================================
255cdf0e10cSrcweir //=========================================================================
256cdf0e10cSrcweir //
257cdf0e10cSrcweir // PropertyValueSet Implementation.
258cdf0e10cSrcweir //
259cdf0e10cSrcweir //=========================================================================
260cdf0e10cSrcweir //=========================================================================
261cdf0e10cSrcweir 
262cdf0e10cSrcweir #define PROPERTYVALUESET_INIT() 			\
263cdf0e10cSrcweir   m_xSMgr( rxSMgr ),						\
264cdf0e10cSrcweir   m_pValues( new PropertyValues ),			\
265cdf0e10cSrcweir   m_bWasNull( sal_False ),      			\
266cdf0e10cSrcweir   m_bTriedToGetTypeConverter( sal_False )
267cdf0e10cSrcweir 
268cdf0e10cSrcweir //=========================================================================
PropertyValueSet(const Reference<XMultiServiceFactory> & rxSMgr)269cdf0e10cSrcweir PropertyValueSet::PropertyValueSet(
270cdf0e10cSrcweir 					const Reference< XMultiServiceFactory >& rxSMgr )
271cdf0e10cSrcweir : PROPERTYVALUESET_INIT()
272cdf0e10cSrcweir {
273cdf0e10cSrcweir }
274cdf0e10cSrcweir 
275cdf0e10cSrcweir //=========================================================================
PropertyValueSet(const Reference<XMultiServiceFactory> & rxSMgr,const Sequence<com::sun::star::beans::PropertyValue> & rValues)276cdf0e10cSrcweir PropertyValueSet::PropertyValueSet(
277cdf0e10cSrcweir 			const Reference< XMultiServiceFactory >& rxSMgr,
278cdf0e10cSrcweir 			const Sequence< com::sun::star::beans::PropertyValue >& rValues )
279cdf0e10cSrcweir : PROPERTYVALUESET_INIT()
280cdf0e10cSrcweir {
281cdf0e10cSrcweir 	sal_Int32 nCount = rValues.getLength();
282cdf0e10cSrcweir 	if ( nCount )
283cdf0e10cSrcweir 	{
284cdf0e10cSrcweir 		const com::sun::star::beans::PropertyValue* pValues
285cdf0e10cSrcweir 			= rValues.getConstArray();
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 		for ( sal_Int32 n = 0; n < nCount; ++n )
288cdf0e10cSrcweir 		{
289cdf0e10cSrcweir 			const com::sun::star::beans::PropertyValue& rValue = pValues[ n ];
290cdf0e10cSrcweir 			appendObject( Property( rValue.Name,
291cdf0e10cSrcweir 					  				rValue.Handle,
292cdf0e10cSrcweir 					  				rValue.Value.getValueType(),
293cdf0e10cSrcweir 					  				0 ),
294cdf0e10cSrcweir 						  rValue.Value );
295cdf0e10cSrcweir 		}
296cdf0e10cSrcweir 	}
297cdf0e10cSrcweir }
298cdf0e10cSrcweir 
299cdf0e10cSrcweir //=========================================================================
300cdf0e10cSrcweir // virtual
~PropertyValueSet()301cdf0e10cSrcweir PropertyValueSet::~PropertyValueSet()
302cdf0e10cSrcweir {
303cdf0e10cSrcweir 	delete m_pValues;
304cdf0e10cSrcweir }
305cdf0e10cSrcweir 
306cdf0e10cSrcweir //=========================================================================
307cdf0e10cSrcweir //
308cdf0e10cSrcweir // XInterface methods.
309cdf0e10cSrcweir //
310cdf0e10cSrcweir //=========================================================================
311cdf0e10cSrcweir 
312cdf0e10cSrcweir XINTERFACE_IMPL_3( PropertyValueSet,
313cdf0e10cSrcweir 				   XTypeProvider,
314cdf0e10cSrcweir 				   XRow,
315cdf0e10cSrcweir 				   XColumnLocate );
316cdf0e10cSrcweir 
317cdf0e10cSrcweir //=========================================================================
318cdf0e10cSrcweir //
319cdf0e10cSrcweir // XTypeProvider methods.
320cdf0e10cSrcweir //
321cdf0e10cSrcweir //=========================================================================
322cdf0e10cSrcweir 
323cdf0e10cSrcweir XTYPEPROVIDER_IMPL_3( PropertyValueSet,
324cdf0e10cSrcweir 					  XTypeProvider,
325cdf0e10cSrcweir 				   	  XRow,
326cdf0e10cSrcweir 					  XColumnLocate );
327cdf0e10cSrcweir 
328cdf0e10cSrcweir //=========================================================================
329cdf0e10cSrcweir //
330cdf0e10cSrcweir // XRow methods.
331cdf0e10cSrcweir //
332cdf0e10cSrcweir //=========================================================================
333cdf0e10cSrcweir 
334cdf0e10cSrcweir // virtual
wasNull()335cdf0e10cSrcweir sal_Bool SAL_CALL PropertyValueSet::wasNull()
336cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir 	// This method can not be implemented correctly!!! Imagine different
339cdf0e10cSrcweir 	// threads doing a getXYZ - wasNull calling sequence on the same
340cdf0e10cSrcweir 	// implementation object...
341cdf0e10cSrcweir 	return m_bWasNull;
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir //=========================================================================
345cdf0e10cSrcweir // virtual
getString(sal_Int32 columnIndex)346cdf0e10cSrcweir OUString SAL_CALL PropertyValueSet::getString( sal_Int32 columnIndex )
347cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
348cdf0e10cSrcweir {
349cdf0e10cSrcweir 	GETVALUE_IMPL( OUString, STRING_VALUE_SET, aString );
350cdf0e10cSrcweir }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir //=========================================================================
353cdf0e10cSrcweir // virtual
getBoolean(sal_Int32 columnIndex)354cdf0e10cSrcweir sal_Bool SAL_CALL PropertyValueSet::getBoolean( sal_Int32 columnIndex )
355cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
356cdf0e10cSrcweir {
357cdf0e10cSrcweir 	GETVALUE_IMPL_TYPE(
358cdf0e10cSrcweir 			sal_Bool, BOOLEAN_VALUE_SET, bBoolean, getCppuBooleanType() );
359cdf0e10cSrcweir }
360cdf0e10cSrcweir 
361cdf0e10cSrcweir //=========================================================================
362cdf0e10cSrcweir // virtual
getByte(sal_Int32 columnIndex)363cdf0e10cSrcweir sal_Int8 SAL_CALL PropertyValueSet::getByte( sal_Int32 columnIndex )
364cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
365cdf0e10cSrcweir {
366cdf0e10cSrcweir 	GETVALUE_IMPL( sal_Int8, BYTE_VALUE_SET, nByte );
367cdf0e10cSrcweir }
368cdf0e10cSrcweir 
369cdf0e10cSrcweir //=========================================================================
370cdf0e10cSrcweir // virtual
getShort(sal_Int32 columnIndex)371cdf0e10cSrcweir sal_Int16 SAL_CALL PropertyValueSet::getShort( sal_Int32 columnIndex )
372cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
373cdf0e10cSrcweir {
374cdf0e10cSrcweir 	GETVALUE_IMPL( sal_Int16, SHORT_VALUE_SET, nShort );
375cdf0e10cSrcweir }
376cdf0e10cSrcweir 
377cdf0e10cSrcweir //=========================================================================
378cdf0e10cSrcweir // virtual
getInt(sal_Int32 columnIndex)379cdf0e10cSrcweir sal_Int32 SAL_CALL PropertyValueSet::getInt( sal_Int32 columnIndex )
380cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
381cdf0e10cSrcweir {
382cdf0e10cSrcweir 	GETVALUE_IMPL( sal_Int32, INT_VALUE_SET, nInt );
383cdf0e10cSrcweir }
384cdf0e10cSrcweir 
385cdf0e10cSrcweir //=========================================================================
386cdf0e10cSrcweir // virtual
getLong(sal_Int32 columnIndex)387cdf0e10cSrcweir sal_Int64 SAL_CALL PropertyValueSet::getLong( sal_Int32 columnIndex )
388cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
389cdf0e10cSrcweir {
390cdf0e10cSrcweir 	GETVALUE_IMPL( sal_Int64, LONG_VALUE_SET, nLong );
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
393cdf0e10cSrcweir //=========================================================================
394cdf0e10cSrcweir // virtual
getFloat(sal_Int32 columnIndex)395cdf0e10cSrcweir float SAL_CALL PropertyValueSet::getFloat( sal_Int32 columnIndex )
396cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
397cdf0e10cSrcweir {
398cdf0e10cSrcweir 	GETVALUE_IMPL( float, FLOAT_VALUE_SET, nFloat );
399cdf0e10cSrcweir }
400cdf0e10cSrcweir 
401cdf0e10cSrcweir //=========================================================================
402cdf0e10cSrcweir // virtual
getDouble(sal_Int32 columnIndex)403cdf0e10cSrcweir double SAL_CALL PropertyValueSet::getDouble( sal_Int32 columnIndex )
404cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
405cdf0e10cSrcweir {
406cdf0e10cSrcweir 	GETVALUE_IMPL( double, DOUBLE_VALUE_SET, nDouble );
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
409cdf0e10cSrcweir //=========================================================================
410cdf0e10cSrcweir // virtual
411cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL
getBytes(sal_Int32 columnIndex)412cdf0e10cSrcweir PropertyValueSet::getBytes( sal_Int32 columnIndex )
413cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
414cdf0e10cSrcweir {
415cdf0e10cSrcweir 	GETVALUE_IMPL( Sequence< sal_Int8 >, BYTES_VALUE_SET, aBytes );
416cdf0e10cSrcweir }
417cdf0e10cSrcweir 
418cdf0e10cSrcweir //=========================================================================
419cdf0e10cSrcweir // virtual
getDate(sal_Int32 columnIndex)420cdf0e10cSrcweir Date SAL_CALL PropertyValueSet::getDate( sal_Int32 columnIndex )
421cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
422cdf0e10cSrcweir {
423cdf0e10cSrcweir 	GETVALUE_IMPL( Date, DATE_VALUE_SET, aDate );
424cdf0e10cSrcweir }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir //=========================================================================
427cdf0e10cSrcweir // virtual
getTime(sal_Int32 columnIndex)428cdf0e10cSrcweir Time SAL_CALL PropertyValueSet::getTime( sal_Int32 columnIndex )
429cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
430cdf0e10cSrcweir {
431cdf0e10cSrcweir 	GETVALUE_IMPL( Time, TIME_VALUE_SET, aTime );
432cdf0e10cSrcweir }
433cdf0e10cSrcweir 
434cdf0e10cSrcweir //=========================================================================
435cdf0e10cSrcweir // virtual
getTimestamp(sal_Int32 columnIndex)436cdf0e10cSrcweir DateTime SAL_CALL PropertyValueSet::getTimestamp( sal_Int32 columnIndex )
437cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir 	GETVALUE_IMPL( DateTime, TIMESTAMP_VALUE_SET, aTimestamp );
440cdf0e10cSrcweir }
441cdf0e10cSrcweir 
442cdf0e10cSrcweir //=========================================================================
443cdf0e10cSrcweir // virtual
444cdf0e10cSrcweir Reference< XInputStream > SAL_CALL
getBinaryStream(sal_Int32 columnIndex)445cdf0e10cSrcweir PropertyValueSet::getBinaryStream( sal_Int32 columnIndex )
446cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
447cdf0e10cSrcweir {
448cdf0e10cSrcweir 	GETVALUE_IMPL(
449cdf0e10cSrcweir 		Reference< XInputStream >, BINARYSTREAM_VALUE_SET, xBinaryStream );
450cdf0e10cSrcweir }
451cdf0e10cSrcweir 
452cdf0e10cSrcweir //=========================================================================
453cdf0e10cSrcweir // virtual
454cdf0e10cSrcweir Reference< XInputStream > SAL_CALL
getCharacterStream(sal_Int32 columnIndex)455cdf0e10cSrcweir PropertyValueSet::getCharacterStream( sal_Int32 columnIndex )
456cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
457cdf0e10cSrcweir {
458cdf0e10cSrcweir 	GETVALUE_IMPL(
459cdf0e10cSrcweir 		Reference< XInputStream >, CHARACTERSTREAM_VALUE_SET, xCharacterStream );
460cdf0e10cSrcweir }
461cdf0e10cSrcweir 
462cdf0e10cSrcweir //=========================================================================
463cdf0e10cSrcweir // virtual
getObject(sal_Int32 columnIndex,const Reference<XNameAccess> &)464cdf0e10cSrcweir Any SAL_CALL PropertyValueSet::getObject(
465cdf0e10cSrcweir 									sal_Int32 columnIndex,
466cdf0e10cSrcweir 	   				 			 	const Reference< XNameAccess >& )
467cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
468cdf0e10cSrcweir {
469cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
470cdf0e10cSrcweir 
471cdf0e10cSrcweir 	Any aValue;
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 	m_bWasNull = sal_True;
474cdf0e10cSrcweir 
475cdf0e10cSrcweir 	if ( ( columnIndex < 1 )
476cdf0e10cSrcweir 	     || ( columnIndex > sal_Int32( m_pValues->size() ) ) )
477cdf0e10cSrcweir 	{
478cdf0e10cSrcweir 		OSL_ENSURE( sal_False, "PropertyValueSet - index out of range!" );
479cdf0e10cSrcweir 	}
480cdf0e10cSrcweir 	else
481cdf0e10cSrcweir 	{
482cdf0e10cSrcweir 		ucbhelper_impl::PropertyValue& rValue
483cdf0e10cSrcweir             = (*m_pValues)[ columnIndex - 1 ];
484cdf0e10cSrcweir 
485cdf0e10cSrcweir 		if ( rValue.nPropsSet & OBJECT_VALUE_SET )
486cdf0e10cSrcweir 		{
487cdf0e10cSrcweir 			// Values is present natively...
488cdf0e10cSrcweir 			aValue = rValue.aObject;
489cdf0e10cSrcweir 			m_bWasNull = sal_False;
490cdf0e10cSrcweir 		}
491cdf0e10cSrcweir 		else
492cdf0e10cSrcweir 		{
493cdf0e10cSrcweir 			// Make Any from original value.
494cdf0e10cSrcweir 
495cdf0e10cSrcweir 			switch ( rValue.nOrigValue )
496cdf0e10cSrcweir 			{
497cdf0e10cSrcweir 				case NO_VALUE_SET:
498cdf0e10cSrcweir 					break;
499cdf0e10cSrcweir 
500cdf0e10cSrcweir 				case STRING_VALUE_SET:
501cdf0e10cSrcweir 					aValue <<= rValue.aString;
502cdf0e10cSrcweir 					break;
503cdf0e10cSrcweir 
504cdf0e10cSrcweir 				case BOOLEAN_VALUE_SET:
505cdf0e10cSrcweir 					aValue <<= rValue.bBoolean;
506cdf0e10cSrcweir 					break;
507cdf0e10cSrcweir 
508cdf0e10cSrcweir 				case BYTE_VALUE_SET:
509cdf0e10cSrcweir 					aValue <<= rValue.nByte;
510cdf0e10cSrcweir 					break;
511cdf0e10cSrcweir 
512cdf0e10cSrcweir 				case SHORT_VALUE_SET:
513cdf0e10cSrcweir 					aValue <<= rValue.nShort;
514cdf0e10cSrcweir 					break;
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 				case INT_VALUE_SET:
517cdf0e10cSrcweir 					aValue <<= rValue.nInt;
518cdf0e10cSrcweir 					break;
519cdf0e10cSrcweir 
520cdf0e10cSrcweir 				case LONG_VALUE_SET:
521cdf0e10cSrcweir 					aValue <<= rValue.nLong;
522cdf0e10cSrcweir 					break;
523cdf0e10cSrcweir 
524cdf0e10cSrcweir 				case FLOAT_VALUE_SET:
525cdf0e10cSrcweir 					aValue <<= rValue.nFloat;
526cdf0e10cSrcweir 					break;
527cdf0e10cSrcweir 
528cdf0e10cSrcweir 				case DOUBLE_VALUE_SET:
529cdf0e10cSrcweir 					aValue <<= rValue.nDouble;
530cdf0e10cSrcweir 					break;
531cdf0e10cSrcweir 
532cdf0e10cSrcweir 				case BYTES_VALUE_SET:
533cdf0e10cSrcweir 					aValue <<= rValue.aBytes;
534cdf0e10cSrcweir 					break;
535cdf0e10cSrcweir 
536cdf0e10cSrcweir 				case DATE_VALUE_SET:
537cdf0e10cSrcweir 					aValue <<= rValue.aDate;
538cdf0e10cSrcweir 					break;
539cdf0e10cSrcweir 
540cdf0e10cSrcweir 				case TIME_VALUE_SET:
541cdf0e10cSrcweir 					aValue <<= rValue.aTime;
542cdf0e10cSrcweir 					break;
543cdf0e10cSrcweir 
544cdf0e10cSrcweir 				case TIMESTAMP_VALUE_SET:
545cdf0e10cSrcweir 					aValue <<= rValue.aTimestamp;
546cdf0e10cSrcweir 					break;
547cdf0e10cSrcweir 
548cdf0e10cSrcweir 				case BINARYSTREAM_VALUE_SET:
549cdf0e10cSrcweir 					aValue <<= rValue.xBinaryStream;
550cdf0e10cSrcweir 					break;
551cdf0e10cSrcweir 
552cdf0e10cSrcweir 				case CHARACTERSTREAM_VALUE_SET:
553cdf0e10cSrcweir 					aValue <<= rValue.xCharacterStream;
554cdf0e10cSrcweir 					break;
555cdf0e10cSrcweir 
556cdf0e10cSrcweir 				case REF_VALUE_SET:
557cdf0e10cSrcweir 					aValue <<= rValue.xRef;
558cdf0e10cSrcweir 					break;
559cdf0e10cSrcweir 
560cdf0e10cSrcweir 				case BLOB_VALUE_SET:
561cdf0e10cSrcweir 					aValue <<= rValue.xBlob;
562cdf0e10cSrcweir 					break;
563cdf0e10cSrcweir 
564cdf0e10cSrcweir 				case CLOB_VALUE_SET:
565cdf0e10cSrcweir 					aValue <<= rValue.xClob;
566cdf0e10cSrcweir 					break;
567cdf0e10cSrcweir 
568cdf0e10cSrcweir 				case ARRAY_VALUE_SET:
569cdf0e10cSrcweir 					aValue <<= rValue.xArray;
570cdf0e10cSrcweir 					break;
571cdf0e10cSrcweir 
572cdf0e10cSrcweir 				case OBJECT_VALUE_SET:
573cdf0e10cSrcweir 					// Fall-through is intended!
574cdf0e10cSrcweir 				default:
575cdf0e10cSrcweir 					OSL_ENSURE( sal_False,
576cdf0e10cSrcweir 								"PropertyValueSet::getObject - "
577cdf0e10cSrcweir 								"Wrong original type" );
578cdf0e10cSrcweir 					break;
579cdf0e10cSrcweir 			}
580cdf0e10cSrcweir 
581cdf0e10cSrcweir 			if ( aValue.hasValue() )
582cdf0e10cSrcweir 			{
583cdf0e10cSrcweir 				rValue.aObject = aValue;
584cdf0e10cSrcweir 				rValue.nPropsSet |= OBJECT_VALUE_SET;
585cdf0e10cSrcweir 				m_bWasNull = sal_False;
586cdf0e10cSrcweir 			}
587cdf0e10cSrcweir 		}
588cdf0e10cSrcweir  	}
589cdf0e10cSrcweir 
590cdf0e10cSrcweir 	return aValue;
591cdf0e10cSrcweir }
592cdf0e10cSrcweir 
593cdf0e10cSrcweir //=========================================================================
594cdf0e10cSrcweir // virtual
getRef(sal_Int32 columnIndex)595cdf0e10cSrcweir Reference< XRef > SAL_CALL PropertyValueSet::getRef( sal_Int32 columnIndex )
596cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
597cdf0e10cSrcweir {
598cdf0e10cSrcweir 	GETVALUE_IMPL( Reference< XRef >, REF_VALUE_SET, xRef );
599cdf0e10cSrcweir }
600cdf0e10cSrcweir 
601cdf0e10cSrcweir //=========================================================================
602cdf0e10cSrcweir // virtual
getBlob(sal_Int32 columnIndex)603cdf0e10cSrcweir Reference< XBlob > SAL_CALL PropertyValueSet::getBlob( sal_Int32 columnIndex )
604cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
605cdf0e10cSrcweir {
606cdf0e10cSrcweir 	GETVALUE_IMPL( Reference< XBlob >, BLOB_VALUE_SET, xBlob );
607cdf0e10cSrcweir }
608cdf0e10cSrcweir 
609cdf0e10cSrcweir //=========================================================================
610cdf0e10cSrcweir // virtual
getClob(sal_Int32 columnIndex)611cdf0e10cSrcweir Reference< XClob > SAL_CALL PropertyValueSet::getClob( sal_Int32 columnIndex )
612cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
613cdf0e10cSrcweir {
614cdf0e10cSrcweir 	GETVALUE_IMPL( Reference< XClob >, CLOB_VALUE_SET, xClob );
615cdf0e10cSrcweir }
616cdf0e10cSrcweir 
617cdf0e10cSrcweir //=========================================================================
618cdf0e10cSrcweir // virtual
getArray(sal_Int32 columnIndex)619cdf0e10cSrcweir Reference< XArray > SAL_CALL PropertyValueSet::getArray( sal_Int32 columnIndex )
620cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
621cdf0e10cSrcweir {
622cdf0e10cSrcweir 	GETVALUE_IMPL( Reference< XArray >, ARRAY_VALUE_SET, xArray );
623cdf0e10cSrcweir }
624cdf0e10cSrcweir 
625cdf0e10cSrcweir //=========================================================================
626cdf0e10cSrcweir //
627cdf0e10cSrcweir // XColumnLocate methods.
628cdf0e10cSrcweir //
629cdf0e10cSrcweir //=========================================================================
630cdf0e10cSrcweir 
631cdf0e10cSrcweir // virtual
findColumn(const OUString & columnName)632cdf0e10cSrcweir sal_Int32 SAL_CALL PropertyValueSet::findColumn( const OUString& columnName )
633cdf0e10cSrcweir 	throw( SQLException, RuntimeException )
634cdf0e10cSrcweir {
635cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 	if ( columnName.getLength() )
638cdf0e10cSrcweir 	{
639cdf0e10cSrcweir 		sal_Int32 nCount = m_pValues->size();
640cdf0e10cSrcweir 		for ( sal_Int32 n = 0; n < nCount; ++n )
641cdf0e10cSrcweir 		{
642cdf0e10cSrcweir 			if ( (*m_pValues)[ n ].sPropertyName.equals( columnName ) )
643cdf0e10cSrcweir 				return sal_Int32( n + 1 ); // Index is 1-based.
644cdf0e10cSrcweir 		}
645cdf0e10cSrcweir 	}
646cdf0e10cSrcweir 	return 0;
647cdf0e10cSrcweir }
648cdf0e10cSrcweir 
649cdf0e10cSrcweir //=========================================================================
650cdf0e10cSrcweir //
651cdf0e10cSrcweir // Non-interface methods.
652cdf0e10cSrcweir //
653cdf0e10cSrcweir //=========================================================================
654cdf0e10cSrcweir 
getTypeConverter()655cdf0e10cSrcweir const Reference< XTypeConverter >& PropertyValueSet::getTypeConverter()
656cdf0e10cSrcweir {
657cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
658cdf0e10cSrcweir 
659cdf0e10cSrcweir 	if ( !m_bTriedToGetTypeConverter && !m_xTypeConverter.is() )
660cdf0e10cSrcweir 	{
661cdf0e10cSrcweir 		m_bTriedToGetTypeConverter = sal_True;
662cdf0e10cSrcweir 		m_xTypeConverter = Reference< XTypeConverter >(
663cdf0e10cSrcweir 								m_xSMgr->createInstance(
664cdf0e10cSrcweir 									OUString::createFromAscii(
665cdf0e10cSrcweir 										"com.sun.star.script.Converter" ) ),
666cdf0e10cSrcweir 								UNO_QUERY );
667cdf0e10cSrcweir 
668cdf0e10cSrcweir 		OSL_ENSURE( m_xTypeConverter.is(),
669cdf0e10cSrcweir 					"PropertyValueSet::getTypeConverter() - "
670cdf0e10cSrcweir 					"Service 'com.sun.star.script.Converter' n/a!" );
671cdf0e10cSrcweir 	}
672cdf0e10cSrcweir 	return m_xTypeConverter;
673cdf0e10cSrcweir }
674cdf0e10cSrcweir 
675cdf0e10cSrcweir //=========================================================================
getLength() const676cdf0e10cSrcweir sal_Int32 PropertyValueSet::getLength() const
677cdf0e10cSrcweir {
678cdf0e10cSrcweir 	return m_pValues->size();
679cdf0e10cSrcweir }
680cdf0e10cSrcweir 
681cdf0e10cSrcweir //=========================================================================
appendString(const::rtl::OUString & rPropName,const OUString & rValue)682cdf0e10cSrcweir void PropertyValueSet::appendString( const ::rtl::OUString& rPropName,
683cdf0e10cSrcweir 									 const OUString& rValue )
684cdf0e10cSrcweir {
685cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, STRING_VALUE_SET, aString, rValue );
686cdf0e10cSrcweir }
687cdf0e10cSrcweir 
688cdf0e10cSrcweir //=========================================================================
appendBoolean(const::rtl::OUString & rPropName,sal_Bool bValue)689cdf0e10cSrcweir void PropertyValueSet::appendBoolean( const ::rtl::OUString& rPropName,
690cdf0e10cSrcweir 									  sal_Bool bValue )
691cdf0e10cSrcweir {
692cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, BOOLEAN_VALUE_SET, bBoolean, bValue );
693cdf0e10cSrcweir }
694cdf0e10cSrcweir 
695cdf0e10cSrcweir //=========================================================================
appendByte(const::rtl::OUString & rPropName,sal_Int8 nValue)696cdf0e10cSrcweir void PropertyValueSet::appendByte( const ::rtl::OUString& rPropName,
697cdf0e10cSrcweir 								   sal_Int8 nValue )
698cdf0e10cSrcweir {
699cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, BYTE_VALUE_SET, nByte, nValue );
700cdf0e10cSrcweir }
701cdf0e10cSrcweir 
702cdf0e10cSrcweir //=========================================================================
appendShort(const::rtl::OUString & rPropName,sal_Int16 nValue)703cdf0e10cSrcweir void PropertyValueSet::appendShort( const ::rtl::OUString& rPropName,
704cdf0e10cSrcweir 									sal_Int16 nValue )
705cdf0e10cSrcweir {
706cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, SHORT_VALUE_SET, nShort, nValue );
707cdf0e10cSrcweir }
708cdf0e10cSrcweir 
709cdf0e10cSrcweir //=========================================================================
appendInt(const::rtl::OUString & rPropName,sal_Int32 nValue)710cdf0e10cSrcweir void PropertyValueSet::appendInt( const ::rtl::OUString& rPropName,
711cdf0e10cSrcweir 								  sal_Int32 nValue )
712cdf0e10cSrcweir {
713cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, INT_VALUE_SET, nInt, nValue );
714cdf0e10cSrcweir }
715cdf0e10cSrcweir 
716cdf0e10cSrcweir //=========================================================================
appendLong(const::rtl::OUString & rPropName,sal_Int64 nValue)717cdf0e10cSrcweir void PropertyValueSet::appendLong( const ::rtl::OUString& rPropName,
718cdf0e10cSrcweir 								   sal_Int64 nValue )
719cdf0e10cSrcweir {
720cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, LONG_VALUE_SET, nLong, nValue );
721cdf0e10cSrcweir }
722cdf0e10cSrcweir 
723cdf0e10cSrcweir //=========================================================================
appendFloat(const::rtl::OUString & rPropName,float nValue)724cdf0e10cSrcweir void PropertyValueSet::appendFloat( const ::rtl::OUString& rPropName,
725cdf0e10cSrcweir 									float nValue )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, FLOAT_VALUE_SET, nFloat, nValue );
728cdf0e10cSrcweir }
729cdf0e10cSrcweir 
730cdf0e10cSrcweir //=========================================================================
appendDouble(const::rtl::OUString & rPropName,double nValue)731cdf0e10cSrcweir void PropertyValueSet::appendDouble( const ::rtl::OUString& rPropName,
732cdf0e10cSrcweir 									 double nValue )
733cdf0e10cSrcweir {
734cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, DOUBLE_VALUE_SET, nDouble, nValue );
735cdf0e10cSrcweir }
736cdf0e10cSrcweir 
737cdf0e10cSrcweir //=========================================================================
appendBytes(const::rtl::OUString & rPropName,const Sequence<sal_Int8> & rValue)738cdf0e10cSrcweir void PropertyValueSet::appendBytes( const ::rtl::OUString& rPropName,
739cdf0e10cSrcweir 									const Sequence< sal_Int8 >& rValue )
740cdf0e10cSrcweir {
741cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, BYTES_VALUE_SET, aBytes, rValue );
742cdf0e10cSrcweir }
743cdf0e10cSrcweir 
744cdf0e10cSrcweir //=========================================================================
appendDate(const::rtl::OUString & rPropName,const Date & rValue)745cdf0e10cSrcweir void PropertyValueSet::appendDate( const ::rtl::OUString& rPropName,
746cdf0e10cSrcweir 								   const Date& rValue )
747cdf0e10cSrcweir {
748cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, DATE_VALUE_SET, aDate, rValue );
749cdf0e10cSrcweir }
750cdf0e10cSrcweir 
751cdf0e10cSrcweir //=========================================================================
appendTime(const::rtl::OUString & rPropName,const Time & rValue)752cdf0e10cSrcweir void PropertyValueSet::appendTime( const ::rtl::OUString& rPropName,
753cdf0e10cSrcweir 								   const Time& rValue )
754cdf0e10cSrcweir {
755cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, TIME_VALUE_SET, aTime, rValue );
756cdf0e10cSrcweir }
757cdf0e10cSrcweir 
758cdf0e10cSrcweir //=========================================================================
appendTimestamp(const::rtl::OUString & rPropName,const DateTime & rValue)759cdf0e10cSrcweir void PropertyValueSet::appendTimestamp( const ::rtl::OUString& rPropName,
760cdf0e10cSrcweir 										const DateTime& rValue )
761cdf0e10cSrcweir {
762cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, TIMESTAMP_VALUE_SET, aTimestamp, rValue );
763cdf0e10cSrcweir }
764cdf0e10cSrcweir 
765cdf0e10cSrcweir //=========================================================================
appendBinaryStream(const::rtl::OUString & rPropName,const Reference<XInputStream> & rValue)766cdf0e10cSrcweir void PropertyValueSet::appendBinaryStream(
767cdf0e10cSrcweir 								const ::rtl::OUString& rPropName,
768cdf0e10cSrcweir 								const Reference< XInputStream >& rValue )
769cdf0e10cSrcweir {
770cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, BINARYSTREAM_VALUE_SET, xBinaryStream, rValue );
771cdf0e10cSrcweir }
772cdf0e10cSrcweir 
773cdf0e10cSrcweir //=========================================================================
appendCharacterStream(const::rtl::OUString & rPropName,const Reference<XInputStream> & rValue)774cdf0e10cSrcweir void PropertyValueSet::appendCharacterStream(
775cdf0e10cSrcweir 								const ::rtl::OUString& rPropName,
776cdf0e10cSrcweir 								const Reference< XInputStream >& rValue )
777cdf0e10cSrcweir {
778cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, CHARACTERSTREAM_VALUE_SET, xCharacterStream, rValue );
779cdf0e10cSrcweir }
780cdf0e10cSrcweir 
781cdf0e10cSrcweir //=========================================================================
appendObject(const::rtl::OUString & rPropName,const Any & rValue)782cdf0e10cSrcweir void PropertyValueSet::appendObject( const ::rtl::OUString& rPropName,
783cdf0e10cSrcweir 									 const Any& rValue )
784cdf0e10cSrcweir {
785cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, OBJECT_VALUE_SET, aObject, rValue );
786cdf0e10cSrcweir }
787cdf0e10cSrcweir 
788cdf0e10cSrcweir //=========================================================================
appendRef(const::rtl::OUString & rPropName,const Reference<XRef> & rValue)789cdf0e10cSrcweir void PropertyValueSet::appendRef( const ::rtl::OUString& rPropName,
790cdf0e10cSrcweir 								  const Reference< XRef >& rValue )
791cdf0e10cSrcweir {
792cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, REF_VALUE_SET, xRef, rValue );
793cdf0e10cSrcweir }
794cdf0e10cSrcweir 
795cdf0e10cSrcweir //=========================================================================
appendBlob(const::rtl::OUString & rPropName,const Reference<XBlob> & rValue)796cdf0e10cSrcweir void PropertyValueSet::appendBlob( const ::rtl::OUString& rPropName,
797cdf0e10cSrcweir 								   const Reference< XBlob >& rValue )
798cdf0e10cSrcweir {
799cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, BLOB_VALUE_SET, xBlob, rValue );
800cdf0e10cSrcweir }
801cdf0e10cSrcweir 
802cdf0e10cSrcweir //=========================================================================
appendClob(const::rtl::OUString & rPropName,const Reference<XClob> & rValue)803cdf0e10cSrcweir void PropertyValueSet::appendClob( const ::rtl::OUString& rPropName,
804cdf0e10cSrcweir 								   const Reference< XClob >& rValue )
805cdf0e10cSrcweir {
806cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, CLOB_VALUE_SET, xClob, rValue );
807cdf0e10cSrcweir }
808cdf0e10cSrcweir 
809cdf0e10cSrcweir //=========================================================================
appendArray(const::rtl::OUString & rPropName,const Reference<XArray> & rValue)810cdf0e10cSrcweir void PropertyValueSet::appendArray( const ::rtl::OUString& rPropName,
811cdf0e10cSrcweir 									const Reference< XArray >& rValue )
812cdf0e10cSrcweir {
813cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, ARRAY_VALUE_SET, xArray, rValue );
814cdf0e10cSrcweir }
815cdf0e10cSrcweir 
816cdf0e10cSrcweir //=========================================================================
appendVoid(const::rtl::OUString & rPropName)817cdf0e10cSrcweir void PropertyValueSet::appendVoid( const ::rtl::OUString& rPropName )
818cdf0e10cSrcweir {
819cdf0e10cSrcweir 	SETVALUE_IMPL( rPropName, NO_VALUE_SET, aObject, Any() );
820cdf0e10cSrcweir }
821cdf0e10cSrcweir 
822cdf0e10cSrcweir //=========================================================================
appendPropertySet(const Reference<XPropertySet> & rxSet)823cdf0e10cSrcweir void PropertyValueSet::appendPropertySet(
824cdf0e10cSrcweir 								const Reference< XPropertySet >& rxSet )
825cdf0e10cSrcweir {
826cdf0e10cSrcweir 	if ( rxSet.is() )
827cdf0e10cSrcweir 	{
828cdf0e10cSrcweir 		Reference< XPropertySetInfo > xInfo = rxSet->getPropertySetInfo();
829cdf0e10cSrcweir 		if ( xInfo.is() )
830cdf0e10cSrcweir 		{
831cdf0e10cSrcweir     		Sequence< Property > aProps 	 = xInfo->getProperties();
832cdf0e10cSrcweir 			const Property* 	 pProps 	 = aProps.getConstArray();
833cdf0e10cSrcweir 			sal_Int32 			 nPropsCount = aProps.getLength();
834cdf0e10cSrcweir 
835cdf0e10cSrcweir 			Reference< XPropertyAccess > xPropertyAccess( rxSet, UNO_QUERY );
836cdf0e10cSrcweir 			if ( xPropertyAccess.is() )
837cdf0e10cSrcweir 			{
838cdf0e10cSrcweir 				// Efficient: Get all prop values with one ( remote) call.
839cdf0e10cSrcweir 
840cdf0e10cSrcweir 	    		Sequence< ::com::sun::star::beans::PropertyValue > aPropValues
841cdf0e10cSrcweir 					= xPropertyAccess->getPropertyValues();
842cdf0e10cSrcweir 
843cdf0e10cSrcweir 				const ::com::sun::star::beans::PropertyValue* pPropValues
844cdf0e10cSrcweir 				  	= aPropValues.getConstArray();
845cdf0e10cSrcweir 
846cdf0e10cSrcweir 				sal_Int32 nValuesCount = aPropValues.getLength();
847cdf0e10cSrcweir 				for ( sal_Int32 n = 0; n < nValuesCount; ++n )
848cdf0e10cSrcweir 				{
849cdf0e10cSrcweir 					const ::com::sun::star::beans::PropertyValue& rPropValue
850cdf0e10cSrcweir 						= pPropValues[ n ];
851cdf0e10cSrcweir 
852cdf0e10cSrcweir 					// Find info for current property value.
853cdf0e10cSrcweir 					for ( sal_Int32 m = 0; m < nPropsCount; ++m )
854cdf0e10cSrcweir 					{
855cdf0e10cSrcweir 						const Property& rProp = pProps[ m ];
856cdf0e10cSrcweir 						if ( rProp.Name == rPropValue.Name )
857cdf0e10cSrcweir 						{
858cdf0e10cSrcweir 							// Found!
859cdf0e10cSrcweir 							appendObject( rProp, rPropValue.Value );
860cdf0e10cSrcweir 							break;
861cdf0e10cSrcweir 						}
862cdf0e10cSrcweir 					}
863cdf0e10cSrcweir 				}
864cdf0e10cSrcweir 			}
865cdf0e10cSrcweir 			else
866cdf0e10cSrcweir 			{
867cdf0e10cSrcweir 				// Get every single prop value with one ( remote) call.
868cdf0e10cSrcweir 
869cdf0e10cSrcweir 				for ( sal_Int32 n = 0; n < nPropsCount; ++n )
870cdf0e10cSrcweir 				{
871cdf0e10cSrcweir 					const Property& rProp = pProps[ n ];
872cdf0e10cSrcweir 
873cdf0e10cSrcweir 					try
874cdf0e10cSrcweir 					{
875cdf0e10cSrcweir 						Any aValue = rxSet->getPropertyValue( rProp.Name );
876cdf0e10cSrcweir 
877cdf0e10cSrcweir 						if ( aValue.hasValue() )
878cdf0e10cSrcweir 							appendObject( rProp, aValue );
879cdf0e10cSrcweir 					}
880cdf0e10cSrcweir 					catch ( UnknownPropertyException )
881cdf0e10cSrcweir 					{
882cdf0e10cSrcweir 					}
883cdf0e10cSrcweir 			   		catch ( WrappedTargetException )
884cdf0e10cSrcweir 					{
885cdf0e10cSrcweir 					}
886cdf0e10cSrcweir 				}
887cdf0e10cSrcweir 			}
888cdf0e10cSrcweir 		}
889cdf0e10cSrcweir 	}
890cdf0e10cSrcweir }
891cdf0e10cSrcweir 
892cdf0e10cSrcweir //=========================================================================
appendPropertySetValue(const Reference<XPropertySet> & rxSet,const Property & rProperty)893cdf0e10cSrcweir sal_Bool PropertyValueSet::appendPropertySetValue(
894cdf0e10cSrcweir 								const Reference< XPropertySet >& rxSet,
895cdf0e10cSrcweir 								const Property& rProperty )
896cdf0e10cSrcweir {
897cdf0e10cSrcweir 	if ( rxSet.is() )
898cdf0e10cSrcweir 	{
899cdf0e10cSrcweir 		try
900cdf0e10cSrcweir 		{
901cdf0e10cSrcweir 			Any aValue = rxSet->getPropertyValue( rProperty.Name );
902cdf0e10cSrcweir 			if ( aValue.hasValue() )
903cdf0e10cSrcweir 			{
904cdf0e10cSrcweir 				appendObject( rProperty, aValue );
905cdf0e10cSrcweir 				return sal_True;
906cdf0e10cSrcweir 			}
907cdf0e10cSrcweir 		}
908cdf0e10cSrcweir 		catch ( UnknownPropertyException )
909cdf0e10cSrcweir 		{
910cdf0e10cSrcweir 		}
911cdf0e10cSrcweir 		catch ( WrappedTargetException )
912cdf0e10cSrcweir 		{
913cdf0e10cSrcweir 		}
914cdf0e10cSrcweir 	}
915cdf0e10cSrcweir 
916cdf0e10cSrcweir 	// Error.
917cdf0e10cSrcweir 	return sal_False;
918cdf0e10cSrcweir }
919cdf0e10cSrcweir 
920cdf0e10cSrcweir } // namespace ucbhelper
921