xref: /trunk/main/ucbhelper/inc/ucbhelper/propertyvalueset.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef _UCBHELPER_PROPERTYVALUESET_HXX
25 #define _UCBHELPER_PROPERTYVALUESET_HXX
26 
27 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
28 #include <com/sun/star/lang/XTypeProvider.hpp>
29 #include <com/sun/star/sdbc/XColumnLocate.hpp>
30 #include <com/sun/star/sdbc/XRow.hpp>
31 #include <com/sun/star/beans/Property.hpp>
32 #include <cppuhelper/weak.hxx>
33 
34 #include "osl/mutex.hxx"
35 #include <ucbhelper/macros.hxx>
36 #include "ucbhelper/ucbhelperdllapi.h"
37 
38 namespace com { namespace sun { namespace star { namespace script {
39     class XTypeConverter;
40 } } } }
41 
42 namespace com { namespace sun { namespace star { namespace beans {
43     struct PropertyValue;
44     class XPropertySet;
45 } } } }
46 
47 namespace ucbhelper {
48 
49 class PropertyValues;
50 
51 //=========================================================================
52 
53 /**
54   * This class implements the interface XRow. After construction of a valueset
55   * the user can append properties ( incl. its values ) to the set. This class
56   * is useful when implementing the command "getPropertyValues", because the
57   * values to return can easyly appended to a valueset object. That object can
58   * directly be returned by the implementation of the command.
59   */
60 class UCBHELPER_DLLPUBLIC PropertyValueSet :
61                 public cppu::OWeakObject,
62                 public com::sun::star::lang::XTypeProvider,
63                 public com::sun::star::sdbc::XRow,
64                 public com::sun::star::sdbc::XColumnLocate
65 {
66     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >
67                                      m_xSMgr;
68     com::sun::star::uno::Reference< com::sun::star::script::XTypeConverter >
69                                      m_xTypeConverter;
70     osl::Mutex      m_aMutex;
71     PropertyValues* m_pValues;
72     sal_Bool        m_bWasNull;
73     sal_Bool        m_bTriedToGetTypeConverter;
74 
75 private:
76     UCBHELPER_DLLPRIVATE const com::sun::star::uno::Reference<
77             com::sun::star::script::XTypeConverter >&
78     getTypeConverter();
79 
80 public:
81     PropertyValueSet(
82             const com::sun::star::uno::Reference<
83                 com::sun::star::lang::XMultiServiceFactory >& rxSMgr );
84     PropertyValueSet(
85             const com::sun::star::uno::Reference<
86                 com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
87             const com::sun::star::uno::Sequence<
88                 com::sun::star::beans::PropertyValue >& rValues );
89     virtual ~PropertyValueSet();
90 
91     // XInterface
92     XINTERFACE_DECL()
93 
94     // XTypeProvider
95     XTYPEPROVIDER_DECL()
96 
97     // XRow
98     virtual sal_Bool SAL_CALL
99     wasNull();
100     virtual ::rtl::OUString SAL_CALL
101     getString( sal_Int32 columnIndex );
102     virtual sal_Bool SAL_CALL
103     getBoolean( sal_Int32 columnIndex );
104     virtual sal_Int8 SAL_CALL
105     getByte( sal_Int32 columnIndex );
106     virtual sal_Int16 SAL_CALL
107     getShort( sal_Int32 columnIndex );
108     virtual sal_Int32 SAL_CALL
109     getInt( sal_Int32 columnIndex );
110     virtual sal_Int64 SAL_CALL
111     getLong( sal_Int32 columnIndex );
112     virtual float SAL_CALL
113     getFloat( sal_Int32 columnIndex );
114     virtual double SAL_CALL
115     getDouble( sal_Int32 columnIndex );
116     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
117     getBytes( sal_Int32 columnIndex );
118     virtual ::com::sun::star::util::Date SAL_CALL
119     getDate( sal_Int32 columnIndex );
120     virtual ::com::sun::star::util::Time SAL_CALL
121     getTime( sal_Int32 columnIndex );
122     virtual ::com::sun::star::util::DateTime SAL_CALL
123     getTimestamp( sal_Int32 columnIndex );
124     virtual ::com::sun::star::uno::Reference<
125                 ::com::sun::star::io::XInputStream > SAL_CALL
126     getBinaryStream( sal_Int32 columnIndex );
127     virtual ::com::sun::star::uno::Reference<
128                 ::com::sun::star::io::XInputStream > SAL_CALL
129     getCharacterStream( sal_Int32 columnIndex );
130     virtual ::com::sun::star::uno::Any SAL_CALL
131     getObject( sal_Int32 columnIndex,
132                const ::com::sun::star::uno::Reference<
133                 ::com::sun::star::container::XNameAccess >& typeMap );
134     virtual ::com::sun::star::uno::Reference<
135                 ::com::sun::star::sdbc::XRef > SAL_CALL
136     getRef( sal_Int32 columnIndex );
137     virtual ::com::sun::star::uno::Reference<
138                 ::com::sun::star::sdbc::XBlob > SAL_CALL
139     getBlob( sal_Int32 columnIndex );
140     virtual ::com::sun::star::uno::Reference<
141                 ::com::sun::star::sdbc::XClob > SAL_CALL
142     getClob( sal_Int32 columnIndex );
143     virtual ::com::sun::star::uno::Reference<
144                 ::com::sun::star::sdbc::XArray > SAL_CALL
145     getArray( sal_Int32 columnIndex );
146 
147     // XColumnLocate
148     virtual sal_Int32 SAL_CALL
149     findColumn( const ::rtl::OUString& columnName );
150 
151     //////////////////////////////////////////////////////////////////////
152     // Non-interface methods
153     //////////////////////////////////////////////////////////////////////
154 
155     /**
156       * This method returns the number of elements of the value set.
157       *
158       * @return the number of elements of the value set.
159       */
160     sal_Int32 getLength() const;
161 
162     void appendString( const ::rtl::OUString& rPropName, const ::rtl::OUString& rValue );
appendString(const sal_Char * pAsciiPropName,const::rtl::OUString & rValue)163     void appendString( const sal_Char* pAsciiPropName, const ::rtl::OUString& rValue )
164     {
165         appendString( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
166     }
appendString(const::com::sun::star::beans::Property & rProp,const::rtl::OUString & rValue)167     void appendString( const ::com::sun::star::beans::Property& rProp, const ::rtl::OUString& rValue )
168     {
169         appendString( rProp.Name, rValue );
170     }
171 
172     void appendBoolean( const ::rtl::OUString& rPropName, sal_Bool bValue );
appendBoolean(const sal_Char * pAsciiPropName,sal_Bool bValue)173     void appendBoolean( const sal_Char* pAsciiPropName, sal_Bool bValue )
174     {
175         appendBoolean( ::rtl::OUString::createFromAscii( pAsciiPropName ), bValue );
176     }
appendBoolean(const::com::sun::star::beans::Property & rProp,sal_Bool bValue)177     void appendBoolean( const ::com::sun::star::beans::Property& rProp, sal_Bool bValue )
178     {
179         appendBoolean( rProp.Name, bValue );
180     }
181 
182     void appendByte( const ::rtl::OUString& rPropName, sal_Int8 nValue );
appendByte(const sal_Char * pAsciiPropName,sal_Int8 nValue)183     void appendByte( const sal_Char* pAsciiPropName, sal_Int8 nValue )
184     {
185         appendByte( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
186     }
appendByte(const::com::sun::star::beans::Property & rProp,sal_Int8 nValue)187     void appendByte( const ::com::sun::star::beans::Property& rProp, sal_Int8 nValue )
188     {
189         appendByte( rProp.Name, nValue );
190     }
191 
192     void appendShort( const ::rtl::OUString& rPropName, sal_Int16 nValue );
appendShort(const sal_Char * pAsciiPropName,sal_Int16 nValue)193     void appendShort( const sal_Char* pAsciiPropName, sal_Int16 nValue )
194     {
195         appendShort( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
196     }
appendShort(const::com::sun::star::beans::Property & rProp,sal_Int16 nValue)197     void appendShort( const ::com::sun::star::beans::Property& rProp, sal_Int16 nValue )
198     {
199         appendShort( rProp.Name, nValue );
200     }
201 
202     void appendInt( const ::rtl::OUString& rPropName, sal_Int32 nValue );
appendInt(const sal_Char * pAsciiPropName,sal_Int32 nValue)203     void appendInt( const sal_Char* pAsciiPropName, sal_Int32 nValue )
204     {
205         appendInt( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
206     }
appendInt(const::com::sun::star::beans::Property & rProp,sal_Int32 nValue)207     void appendInt( const ::com::sun::star::beans::Property& rProp, sal_Int32 nValue )
208     {
209         appendInt( rProp.Name, nValue );
210     }
211 
212     void appendLong( const ::rtl::OUString& rPropName, sal_Int64 nValue );
appendLong(const sal_Char * pAsciiPropName,sal_Int64 nValue)213     void appendLong( const sal_Char* pAsciiPropName, sal_Int64 nValue )
214     {
215         appendLong( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
216     }
appendLong(const::com::sun::star::beans::Property & rProp,sal_Int64 nValue)217     void appendLong( const ::com::sun::star::beans::Property& rProp, sal_Int64 nValue )
218     {
219         appendLong( rProp.Name, nValue );
220     }
221 
222     void appendFloat( const ::rtl::OUString& rPropName, float nValue );
appendFloat(const sal_Char * pAsciiPropName,float nValue)223     void appendFloat( const sal_Char* pAsciiPropName, float nValue )
224     {
225         appendFloat( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
226     }
appendFloat(const::com::sun::star::beans::Property & rProp,float nValue)227     void appendFloat( const ::com::sun::star::beans::Property& rProp, float nValue )
228     {
229         appendFloat( rProp.Name, nValue );
230     }
231 
232     void appendDouble( const ::rtl::OUString& rPropName, double nValue );
appendDouble(const sal_Char * pAsciiPropName,double nValue)233     void appendDouble( const sal_Char* pAsciiPropName, double nValue )
234     {
235         appendDouble( ::rtl::OUString::createFromAscii( pAsciiPropName ), nValue );
236     }
appendDouble(const::com::sun::star::beans::Property & rProp,double nValue)237     void appendDouble( const ::com::sun::star::beans::Property& rProp, double nValue )
238     {
239         appendDouble( rProp.Name, nValue );
240     }
241 
242     void appendBytes( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Sequence< sal_Int8 >& rValue );
appendBytes(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Sequence<sal_Int8> & rValue)243     void appendBytes( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Sequence< sal_Int8 >& rValue )
244     {
245         appendBytes( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
246     }
appendBytes(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Sequence<sal_Int8> & rValue)247     void appendBytes( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Sequence< sal_Int8 >& rValue )
248     {
249         appendBytes( rProp.Name, rValue );
250     }
251 
252     void appendDate( const ::rtl::OUString& rPropName, const ::com::sun::star::util::Date& rValue );
appendDate(const sal_Char * pAsciiPropName,const::com::sun::star::util::Date & rValue)253     void appendDate( const sal_Char* pAsciiPropName, const ::com::sun::star::util::Date& rValue )
254     {
255         appendDate( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
256     }
appendDate(const::com::sun::star::beans::Property & rProp,const::com::sun::star::util::Date & rValue)257     void appendDate( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::util::Date& rValue )
258     {
259         appendDate( rProp.Name, rValue );
260     }
261 
262     void appendTime( const ::rtl::OUString& rPropName, const ::com::sun::star::util::Time& rValue );
appendTime(const sal_Char * pAsciiPropName,const::com::sun::star::util::Time & rValue)263     void appendTime( const sal_Char* pAsciiPropName, const ::com::sun::star::util::Time& rValue )
264     {
265         appendTime( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
266     }
appendTime(const::com::sun::star::beans::Property & rProp,const::com::sun::star::util::Time & rValue)267     void appendTime( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::util::Time& rValue )
268     {
269         appendTime( rProp.Name, rValue );
270     }
271 
272     void appendTimestamp( const ::rtl::OUString& rPropName, const ::com::sun::star::util::DateTime& rValue );
appendTimestamp(const sal_Char * pAsciiPropName,const::com::sun::star::util::DateTime & rValue)273     void appendTimestamp( const sal_Char* pAsciiPropName, const ::com::sun::star::util::DateTime& rValue )
274     {
275         appendTimestamp( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
276     }
appendTimestamp(const::com::sun::star::beans::Property & rProp,const::com::sun::star::util::DateTime & rValue)277     void appendTimestamp( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::util::DateTime& rValue )
278     {
279         appendTimestamp( rProp.Name, rValue );
280     }
281 
282     void appendBinaryStream( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue );
appendBinaryStream(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & rValue)283     void appendBinaryStream( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue )
284     {
285         appendBinaryStream( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
286     }
appendBinaryStream(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & rValue)287     void appendBinaryStream( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue )
288     {
289         appendBinaryStream( rProp.Name, rValue );
290     }
291 
292     void appendCharacterStream( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue );
appendCharacterStream(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & rValue)293     void appendCharacterStream( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue )
294     {
295         appendCharacterStream( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
296     }
appendCharacterStream(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::io::XInputStream> & rValue)297     void appendCharacterStream( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rValue )
298     {
299         appendCharacterStream( rProp.Name, rValue );
300     }
301 
302     void appendObject( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Any& rValue );
appendObject(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Any & rValue)303     void appendObject( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Any& rValue )
304     {
305         appendObject( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
306     }
appendObject(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Any & rValue)307     void appendObject( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Any& rValue )
308     {
309         appendObject( rProp.Name, rValue );
310     }
311 
312     void appendRef( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& rValue );
appendRef(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XRef> & rValue)313     void appendRef( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& rValue )
314     {
315         appendRef( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
316     }
appendRef(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XRef> & rValue)317     void appendRef( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRef >& rValue )
318     {
319         appendRef( rProp.Name, rValue );
320     }
321 
322     void appendBlob( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& rValue );
appendBlob(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XBlob> & rValue)323     void appendBlob( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& rValue )
324     {
325         appendBlob( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
326     }
appendBlob(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XBlob> & rValue)327     void appendBlob( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XBlob >& rValue )
328     {
329         appendBlob( rProp.Name, rValue );
330     }
331 
332     void appendClob( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& rValue );
appendClob(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XClob> & rValue)333     void appendClob( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& rValue )
334     {
335         appendClob( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
336     }
appendClob(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XClob> & rValue)337     void appendClob( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XClob >& rValue )
338     {
339         appendClob( rProp.Name, rValue );
340     }
341 
342     void appendArray( const ::rtl::OUString& rPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& rValue );
appendArray(const sal_Char * pAsciiPropName,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XArray> & rValue)343     void appendArray( const sal_Char* pAsciiPropName, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& rValue )
344     {
345         appendArray( ::rtl::OUString::createFromAscii( pAsciiPropName ), rValue );
346     }
appendArray(const::com::sun::star::beans::Property & rProp,const::com::sun::star::uno::Reference<::com::sun::star::sdbc::XArray> & rValue)347     void appendArray( const ::com::sun::star::beans::Property& rProp, const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XArray >& rValue )
348     {
349         appendArray( rProp.Name, rValue );
350     }
351 
352     void appendVoid( const ::rtl::OUString& rPropName );
appendVoid(const sal_Char * pAsciiPropName)353     void appendVoid( const sal_Char* pAsciiPropName)
354     {
355         appendVoid( ::rtl::OUString::createFromAscii( pAsciiPropName ) );
356     }
appendVoid(const::com::sun::star::beans::Property & rProp)357     void appendVoid( const ::com::sun::star::beans::Property& rProp )
358     {
359         appendVoid( rProp.Name );
360     }
361 
362     /**
363       * This method tries to append all property values contained in a
364       * property set to the value set.
365       *
366       * @param  rSet is a property set containing the property values.
367       */
368     void appendPropertySet( const ::com::sun::star::uno::Reference<
369                                 ::com::sun::star::beans::XPropertySet >& rSet );
370 
371     /** This method tries to append a single property value contained in a
372       * property set to the value set.
373       *
374       * @param  rSet is a property set containing the property values.
375       * @param  rProperty is the property for that the value shall be obtained
376       *         from the given property set.
377       * @return False, if the property value cannot be obtained from the
378       *         given property pet. True, otherwise.
379       */
380     sal_Bool appendPropertySetValue(
381                         const ::com::sun::star::uno::Reference<
382                             ::com::sun::star::beans::XPropertySet >& rSet,
383                         const ::com::sun::star::beans::Property& rProperty );
384 };
385 
386 }
387 
388 #endif /* !_UCBHELPER_PROPERTYVALUESET_HXX */
389