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 _UCBSTORE_HXX 25 #define _UCBSTORE_HXX 26 27 #include <com/sun/star/lang/XTypeProvider.hpp> 28 #include <com/sun/star/lang/XServiceInfo.hpp> 29 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 30 #include <com/sun/star/container/XNamed.hpp> 31 #include <com/sun/star/container/XNameAccess.hpp> 32 #include <com/sun/star/ucb/XPropertySetRegistryFactory.hpp> 33 #include <com/sun/star/ucb/XPropertySetRegistry.hpp> 34 #include <com/sun/star/ucb/XPersistentPropertySet.hpp> 35 #include <com/sun/star/beans/XPropertyContainer.hpp> 36 #include <com/sun/star/beans/XPropertySetInfoChangeNotifier.hpp> 37 #include <com/sun/star/beans/XPropertyAccess.hpp> 38 #include <com/sun/star/lang/XComponent.hpp> 39 #include <com/sun/star/lang/XInitialization.hpp> 40 #include <cppuhelper/weak.hxx> 41 #include <ucbhelper/macros.hxx> 42 43 //========================================================================= 44 45 #define STORE_SERVICE_NAME "com.sun.star.ucb.Store" 46 #define PROPSET_REG_SERVICE_NAME "com.sun.star.ucb.PropertySetRegistry" 47 #define PERS_PROPSET_SERVICE_NAME "com.sun.star.ucb.PersistentPropertySet" 48 49 //========================================================================= 50 51 struct UcbStore_Impl; 52 53 class UcbStore : 54 public cppu::OWeakObject, 55 public com::sun::star::lang::XTypeProvider, 56 public com::sun::star::lang::XServiceInfo, 57 public com::sun::star::ucb::XPropertySetRegistryFactory, 58 public com::sun::star::lang::XInitialization 59 { 60 com::sun::star::uno::Reference< 61 com::sun::star::lang::XMultiServiceFactory > m_xSMgr; 62 UcbStore_Impl* m_pImpl; 63 64 public: 65 UcbStore( 66 const com::sun::star::uno::Reference< 67 com::sun::star::lang::XMultiServiceFactory >& rXSMgr ); 68 virtual ~UcbStore(); 69 70 // XInterface 71 XINTERFACE_DECL() 72 73 // XTypeProvider 74 XTYPEPROVIDER_DECL() 75 76 // XServiceInfo 77 XSERVICEINFO_DECL() 78 79 // XPropertySetRegistryFactory 80 virtual com::sun::star::uno::Reference< 81 com::sun::star::ucb::XPropertySetRegistry > SAL_CALL 82 createPropertySetRegistry( const rtl::OUString& URL ) 83 throw( com::sun::star::uno::RuntimeException ); 84 85 // XInitialization 86 virtual void SAL_CALL 87 initialize( const ::com::sun::star::uno::Sequence< 88 ::com::sun::star::uno::Any >& aArguments ) 89 throw( ::com::sun::star::uno::Exception, 90 ::com::sun::star::uno::RuntimeException ); 91 92 const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& 93 getInitArgs() const; 94 }; 95 96 //========================================================================= 97 98 struct PropertySetRegistry_Impl; 99 class PersistentPropertySet; 100 101 class PropertySetRegistry : 102 public cppu::OWeakObject, 103 public com::sun::star::lang::XTypeProvider, 104 public com::sun::star::lang::XServiceInfo, 105 public com::sun::star::ucb::XPropertySetRegistry, 106 public com::sun::star::container::XNameAccess 107 { 108 friend class PersistentPropertySet; 109 110 com::sun::star::uno::Reference< 111 com::sun::star::lang::XMultiServiceFactory > m_xSMgr; 112 PropertySetRegistry_Impl* m_pImpl; 113 114 private: 115 com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > 116 getConfigProvider(); 117 118 void add ( PersistentPropertySet* pSet ); 119 void remove( PersistentPropertySet* pSet ); 120 121 void renamePropertySet( const rtl::OUString& rOldKey, 122 const rtl::OUString& rNewKey ); 123 124 public: 125 PropertySetRegistry( 126 const com::sun::star::uno::Reference< 127 com::sun::star::lang::XMultiServiceFactory >& rXSMgr, 128 const ::com::sun::star::uno::Sequence< 129 ::com::sun::star::uno::Any >& rInitArgs); 130 virtual ~PropertySetRegistry(); 131 132 // XInterface 133 XINTERFACE_DECL() 134 135 // XTypeProvider 136 XTYPEPROVIDER_DECL() 137 138 // XServiceInfo 139 XSERVICEINFO_NOFACTORY_DECL() 140 141 // XPropertySetRegistry 142 virtual com::sun::star::uno::Reference< 143 com::sun::star::ucb::XPersistentPropertySet > SAL_CALL 144 openPropertySet( const rtl::OUString& key, sal_Bool create ) 145 throw( com::sun::star::uno::RuntimeException ); 146 virtual void SAL_CALL 147 removePropertySet( const rtl::OUString& key ) 148 throw( com::sun::star::uno::RuntimeException ); 149 150 // XElementAccess ( XNameAccess is derived from it ) 151 virtual com::sun::star::uno::Type SAL_CALL 152 getElementType() 153 throw( com::sun::star::uno::RuntimeException ); 154 virtual sal_Bool SAL_CALL 155 hasElements() 156 throw( com::sun::star::uno::RuntimeException ); 157 158 // XNameAccess 159 virtual com::sun::star::uno::Any SAL_CALL 160 getByName( const rtl::OUString& aName ) 161 throw( com::sun::star::container::NoSuchElementException, 162 com::sun::star::lang::WrappedTargetException, 163 com::sun::star::uno::RuntimeException ); 164 virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL 165 getElementNames() 166 throw( com::sun::star::uno::RuntimeException ); 167 virtual sal_Bool SAL_CALL 168 hasByName( const rtl::OUString& aName ) 169 throw( com::sun::star::uno::RuntimeException ); 170 171 // Non-interface methods 172 com::sun::star::uno::Reference< com::sun::star::uno::XInterface > 173 getRootConfigReadAccess(); 174 com::sun::star::uno::Reference< com::sun::star::uno::XInterface > 175 getConfigWriteAccess( const rtl::OUString& rPath ); 176 }; 177 178 //========================================================================= 179 180 struct PersistentPropertySet_Impl; 181 182 class PersistentPropertySet : 183 public cppu::OWeakObject, 184 public com::sun::star::lang::XTypeProvider, 185 public com::sun::star::lang::XServiceInfo, 186 public com::sun::star::lang::XComponent, 187 public com::sun::star::ucb::XPersistentPropertySet, 188 public com::sun::star::container::XNamed, 189 public com::sun::star::beans::XPropertyContainer, 190 public com::sun::star::beans::XPropertySetInfoChangeNotifier, 191 public com::sun::star::beans::XPropertyAccess 192 { 193 com::sun::star::uno::Reference< 194 com::sun::star::lang::XMultiServiceFactory > m_xSMgr; 195 PersistentPropertySet_Impl* m_pImpl; 196 197 private: 198 void notifyPropertyChangeEvent( 199 const com::sun::star::beans::PropertyChangeEvent& rEvent ) const; 200 void notifyPropertySetInfoChange( 201 const com::sun::star::beans::PropertySetInfoChangeEvent& evt ) const; 202 203 public: 204 PersistentPropertySet( 205 const com::sun::star::uno::Reference< 206 com::sun::star::lang::XMultiServiceFactory >& rXSMgr, 207 PropertySetRegistry& rCreator, 208 const rtl::OUString& rKey ); 209 virtual ~PersistentPropertySet(); 210 211 // XInterface 212 XINTERFACE_DECL() 213 214 // XTypeProvider 215 XTYPEPROVIDER_DECL() 216 217 // XServiceInfo 218 XSERVICEINFO_NOFACTORY_DECL() 219 220 // XComponent 221 virtual void SAL_CALL 222 dispose() 223 throw( com::sun::star::uno::RuntimeException ); 224 virtual void SAL_CALL 225 addEventListener( const com::sun::star::uno::Reference< 226 com::sun::star::lang::XEventListener >& Listener ) 227 throw( com::sun::star::uno::RuntimeException ); 228 virtual void SAL_CALL 229 removeEventListener( const com::sun::star::uno::Reference< 230 com::sun::star::lang::XEventListener >& Listener ) 231 throw( com::sun::star::uno::RuntimeException ); 232 233 // XPropertySet 234 virtual com::sun::star::uno::Reference< 235 com::sun::star::beans::XPropertySetInfo > SAL_CALL 236 getPropertySetInfo() 237 throw( com::sun::star::uno::RuntimeException ); 238 virtual void SAL_CALL 239 setPropertyValue( const rtl::OUString& aPropertyName, 240 const com::sun::star::uno::Any& aValue ) 241 throw( com::sun::star::beans::UnknownPropertyException, 242 com::sun::star::beans::PropertyVetoException, 243 com::sun::star::lang::IllegalArgumentException, 244 com::sun::star::lang::WrappedTargetException, 245 com::sun::star::uno::RuntimeException ); 246 virtual com::sun::star::uno::Any SAL_CALL 247 getPropertyValue( const rtl::OUString& PropertyName ) 248 throw( com::sun::star::beans::UnknownPropertyException, 249 com::sun::star::lang::WrappedTargetException, 250 com::sun::star::uno::RuntimeException ); 251 virtual void SAL_CALL 252 addPropertyChangeListener( const rtl::OUString& aPropertyName, 253 const com::sun::star::uno::Reference< 254 com::sun::star::beans::XPropertyChangeListener >& xListener ) 255 throw( com::sun::star::beans::UnknownPropertyException, 256 com::sun::star::lang::WrappedTargetException, 257 com::sun::star::uno::RuntimeException ); 258 virtual void SAL_CALL 259 removePropertyChangeListener( const rtl::OUString& aPropertyName, 260 const com::sun::star::uno::Reference< 261 com::sun::star::beans::XPropertyChangeListener >& aListener ) 262 throw( com::sun::star::beans::UnknownPropertyException, 263 com::sun::star::lang::WrappedTargetException, 264 com::sun::star::uno::RuntimeException ); 265 virtual void SAL_CALL 266 addVetoableChangeListener( const rtl::OUString& PropertyName, 267 const com::sun::star::uno::Reference< 268 com::sun::star::beans::XVetoableChangeListener >& aListener ) 269 throw( com::sun::star::beans::UnknownPropertyException, 270 com::sun::star::lang::WrappedTargetException, 271 com::sun::star::uno::RuntimeException ); 272 virtual void SAL_CALL 273 removeVetoableChangeListener( const rtl::OUString& PropertyName, 274 const com::sun::star::uno::Reference< 275 com::sun::star::beans::XVetoableChangeListener >& aListener ) 276 throw( com::sun::star::beans::UnknownPropertyException, 277 com::sun::star::lang::WrappedTargetException, 278 com::sun::star::uno::RuntimeException ); 279 280 // XPersistentPropertySet 281 virtual com::sun::star::uno::Reference< 282 com::sun::star::ucb::XPropertySetRegistry > SAL_CALL 283 getRegistry() 284 throw( com::sun::star::uno::RuntimeException ); 285 virtual rtl::OUString SAL_CALL 286 getKey() 287 throw( com::sun::star::uno::RuntimeException ); 288 289 // XNamed 290 virtual rtl::OUString SAL_CALL 291 getName() 292 throw( ::com::sun::star::uno::RuntimeException ); 293 virtual void SAL_CALL 294 setName( const ::rtl::OUString& aName ) 295 throw( ::com::sun::star::uno::RuntimeException ); 296 297 // XPropertyContainer 298 virtual void SAL_CALL 299 addProperty( const rtl::OUString& Name, 300 sal_Int16 Attributes, 301 const com::sun::star::uno::Any& DefaultValue ) 302 throw( com::sun::star::beans::PropertyExistException, 303 com::sun::star::beans::IllegalTypeException, 304 com::sun::star::lang::IllegalArgumentException, 305 com::sun::star::uno::RuntimeException ); 306 virtual void SAL_CALL 307 removeProperty( const rtl::OUString& Name ) 308 throw( com::sun::star::beans::UnknownPropertyException, 309 com::sun::star::beans::NotRemoveableException, 310 com::sun::star::uno::RuntimeException ); 311 312 // XPropertySetInfoChangeNotifier 313 virtual void SAL_CALL 314 addPropertySetInfoChangeListener( const com::sun::star::uno::Reference< 315 com::sun::star::beans::XPropertySetInfoChangeListener >& Listener ) 316 throw( com::sun::star::uno::RuntimeException ); 317 virtual void SAL_CALL 318 removePropertySetInfoChangeListener( const com::sun::star::uno::Reference< 319 com::sun::star::beans::XPropertySetInfoChangeListener >& Listener ) 320 throw( com::sun::star::uno::RuntimeException ); 321 322 // XPropertyAccess 323 virtual com::sun::star::uno::Sequence< 324 com::sun::star::beans::PropertyValue > SAL_CALL 325 getPropertyValues() 326 throw( com::sun::star::uno::RuntimeException ); 327 virtual void SAL_CALL 328 setPropertyValues( const com::sun::star::uno::Sequence< 329 com::sun::star::beans::PropertyValue >& aProps ) 330 throw( com::sun::star::beans::UnknownPropertyException, 331 com::sun::star::beans::PropertyVetoException, 332 com::sun::star::lang::IllegalArgumentException, 333 com::sun::star::lang::WrappedTargetException, 334 com::sun::star::uno::RuntimeException ); 335 336 // Non-interface methods. 337 PropertySetRegistry& getPropertySetRegistry(); 338 const rtl::OUString& getFullKey(); 339 }; 340 341 #endif /* !_UCBSTORE_HXX */ 342