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_svx.hxx" 26 27 #include "propertyset.hxx" 28 29 using ::rtl::OUString; 30 using namespace ::com::sun::star::uno; 31 using namespace ::com::sun::star::beans; 32 using namespace ::com::sun::star::lang; 33 34 namespace comphelper { 35 36 // ----------------------------------------------------------------------------- 37 // FastPropertySetInfo 38 // ----------------------------------------------------------------------------- 39 40 FastPropertySetInfo::FastPropertySetInfo() 41 { 42 } 43 44 // ----------------------------------------------------------------------------- 45 46 FastPropertySetInfo::FastPropertySetInfo( const PropertyVector& rProps ) 47 { 48 addProperties( rProps ); 49 } 50 51 // ----------------------------------------------------------------------------- 52 53 FastPropertySetInfo::~FastPropertySetInfo() 54 { 55 } 56 57 // ----------------------------------------------------------------------------- 58 59 void FastPropertySetInfo::addProperty( const Property& rProperty ) 60 { 61 maProperties.push_back( rProperty ); 62 maMap[ rProperty.Name ] = maProperties.size() - 1; 63 } 64 65 // ----------------------------------------------------------------------------- 66 67 void FastPropertySetInfo::addProperties( const PropertyVector& rProps ) 68 { 69 sal_uInt32 nIndex = maProperties.size(); 70 sal_uInt32 nCount = rProps.size(); 71 maProperties.resize( nIndex + nCount ); 72 PropertyVector::const_iterator aIter( rProps.begin() ); 73 while( nCount-- ) 74 { 75 const Property& rProperty = (*aIter++); 76 maProperties[nIndex] = rProperty; 77 maMap[ rProperty.Name ] = nIndex++; 78 } 79 } 80 81 // ----------------------------------------------------------------------------- 82 83 const Property& FastPropertySetInfo::getProperty( const OUString& aName ) throw (UnknownPropertyException ) 84 { 85 PropertyMap::iterator aIter( maMap.find( aName ) ); 86 if( aIter == maMap.end() ) 87 throw UnknownPropertyException(); 88 return maProperties[(*aIter).second]; 89 } 90 91 // ----------------------------------------------------------------------------- 92 93 const Property* FastPropertySetInfo::hasProperty( const OUString& aName ) 94 { 95 PropertyMap::iterator aIter( maMap.find( aName ) ); 96 if( aIter == maMap.end() ) 97 return 0; 98 else 99 return &maProperties[(*aIter).second]; 100 } 101 102 // ----------------------------------------------------------------------------- 103 // XPropertySetInfo 104 // ----------------------------------------------------------------------------- 105 106 Sequence< Property > SAL_CALL FastPropertySetInfo::getProperties() throw (RuntimeException) 107 { 108 return Sequence< Property >( &maProperties[0], maProperties.size() ); 109 } 110 111 // ----------------------------------------------------------------------------- 112 113 Property SAL_CALL FastPropertySetInfo::getPropertyByName( const OUString& aName ) throw (UnknownPropertyException, RuntimeException) 114 { 115 return getProperty( aName ); 116 } 117 118 // ----------------------------------------------------------------------------- 119 120 sal_Bool SAL_CALL FastPropertySetInfo::hasPropertyByName( const OUString& aName ) throw (RuntimeException) 121 { 122 return hasProperty( aName ) != 0 ? sal_True : sal_False;; 123 } 124 125 // ----------------------------------------------------------------------------- 126 // FastPropertySet 127 // ----------------------------------------------------------------------------- 128 129 FastPropertySet::FastPropertySet( const rtl::Reference< FastPropertySetInfo >& xInfo ) 130 : mxInfo( xInfo ) 131 { 132 } 133 134 // ----------------------------------------------------------------------------- 135 136 FastPropertySet::~FastPropertySet() 137 { 138 } 139 140 // ----------------------------------------------------------------------------- 141 // XPropertySet 142 // ----------------------------------------------------------------------------- 143 144 Reference< XPropertySetInfo > SAL_CALL FastPropertySet::getPropertySetInfo( ) throw (RuntimeException) 145 { 146 return Reference< XPropertySetInfo >( mxInfo.get() ); 147 } 148 149 // ----------------------------------------------------------------------------- 150 151 void SAL_CALL FastPropertySet::setPropertyValue( const OUString& aPropertyName, const Any& aValue ) throw (UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) 152 { 153 setFastPropertyValue( mxInfo->getProperty( aPropertyName ).Handle, aValue ); 154 } 155 156 // ----------------------------------------------------------------------------- 157 158 Any SAL_CALL FastPropertySet::getPropertyValue( const OUString& aPropertyName ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) 159 { 160 return getFastPropertyValue( mxInfo->getProperty( aPropertyName ).Handle ); 161 } 162 163 // ----------------------------------------------------------------------------- 164 165 void SAL_CALL FastPropertySet::addPropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) 166 { 167 } 168 169 // ----------------------------------------------------------------------------- 170 171 void SAL_CALL FastPropertySet::removePropertyChangeListener( const OUString&, const Reference< XPropertyChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) 172 { 173 } 174 175 // ----------------------------------------------------------------------------- 176 177 void SAL_CALL FastPropertySet::addVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) 178 { 179 } 180 181 // ----------------------------------------------------------------------------- 182 183 void SAL_CALL FastPropertySet::removeVetoableChangeListener( const OUString&, const Reference< XVetoableChangeListener >& ) throw (UnknownPropertyException, WrappedTargetException, RuntimeException) 184 { 185 } 186 187 // ----------------------------------------------------------------------------- 188 // XMultiPropertySet 189 // ----------------------------------------------------------------------------- 190 191 void SAL_CALL FastPropertySet::setPropertyValues( const Sequence< OUString >& aPropertyNames, const Sequence< Any >& aValues ) throw (PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException) 192 { 193 const OUString* pPropertyNames = aPropertyNames.getConstArray(); 194 const Any* pValues = aValues.getConstArray(); 195 sal_Int32 nCount = aPropertyNames.getLength(); 196 if( nCount != aValues.getLength() ) 197 throw IllegalArgumentException(); 198 199 while( nCount-- ) 200 { 201 const Property* pProperty = mxInfo->hasProperty( *pPropertyNames++ ); 202 if( pProperty ) try 203 { 204 setFastPropertyValue( pProperty->Handle, *pValues ); 205 } 206 catch( UnknownPropertyException& ) 207 { 208 } 209 pValues++; 210 } 211 } 212 213 // ----------------------------------------------------------------------------- 214 215 Sequence< Any > SAL_CALL FastPropertySet::getPropertyValues( const Sequence< OUString >& aPropertyNames ) throw (RuntimeException) 216 { 217 sal_Int32 nCount = aPropertyNames.getLength(); 218 Sequence< Any > aValues( nCount ); 219 220 const OUString* pPropertyNames = aPropertyNames.getConstArray(); 221 Any* pValues = aValues.getArray(); 222 while( nCount-- ) 223 { 224 const Property* pProperty = mxInfo->hasProperty( *pPropertyNames++ ); 225 if( pProperty ) try 226 { 227 *pValues = getFastPropertyValue( pProperty->Handle ); 228 } 229 catch( UnknownPropertyException& ) 230 { 231 } 232 pValues++; 233 } 234 return aValues; 235 } 236 237 // ----------------------------------------------------------------------------- 238 239 void SAL_CALL FastPropertySet::addPropertiesChangeListener( const Sequence< OUString >&, const Reference< XPropertiesChangeListener >& ) throw (RuntimeException) 240 { 241 } 242 243 // ----------------------------------------------------------------------------- 244 245 void SAL_CALL FastPropertySet::removePropertiesChangeListener( const Reference< XPropertiesChangeListener >& ) throw (RuntimeException) 246 { 247 } 248 249 // ----------------------------------------------------------------------------- 250 251 void SAL_CALL FastPropertySet::firePropertiesChangeEvent( const Sequence< OUString >&, const Reference< XPropertiesChangeListener >& ) throw (RuntimeException) 252 { 253 } 254 255 } 256