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