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 _TREEVIEW_TVREAD_HXX_ 25 #define _TREEVIEW_TVREAD_HXX_ 26 27 #ifndef INCLUDED_STL_VECTOR 28 #include <vector> 29 #define INCLUDED_STL_VECTOR 30 #endif 31 #include <rtl/ref.hxx> 32 #include <rtl/ustring.hxx> 33 #include <ucbhelper/macros.hxx> 34 #include <com/sun/star/uno/Type.hxx> 35 #include <cppuhelper/weak.hxx> 36 #include <com/sun/star/uno/XInterface.hpp> 37 #include <com/sun/star/lang/XTypeProvider.hpp> 38 #include <com/sun/star/container/XNameAccess.hpp> 39 #include <com/sun/star/container/XHierarchicalNameAccess.hpp> 40 #include <com/sun/star/util/XChangesNotifier.hpp> 41 #include <com/sun/star/lang/XComponent.hpp> 42 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 43 #include <com/sun/star/deployment/XPackage.hpp> 44 #include "com/sun/star/ucb/XSimpleFileAccess.hpp" 45 46 namespace treeview { 47 48 49 class ConfigData 50 { 51 public: 52 enum { 53 PRODUCTNAME, PRODUCTVERSION, VENDORNAME, VENDORVERSION, 54 VENDORSHORT }; 55 ConfigData(); 56 int m_vAdd[5]; 57 rtl::OUString m_vReplacement[5]; 58 rtl::OUString prodName,prodVersion,vendName,vendVersion,vendShort; 59 60 std::vector< sal_uInt64 > vFileLen; 61 std::vector< rtl::OUString > vFileURL; 62 rtl::OUString locale,system; 63 rtl::OUString appendix; 64 65 void SAL_CALL replaceName( rtl::OUString& oustring ) const; 66 }; 67 68 69 class TVDom; 70 class TVChildTarget; 71 72 class TVBase 73 : public cppu::OWeakObject, 74 public com::sun::star::lang::XTypeProvider, 75 public com::sun::star::container::XNameAccess, 76 public com::sun::star::container::XHierarchicalNameAccess, 77 public com::sun::star::util::XChangesNotifier, 78 public com::sun::star::lang::XComponent 79 { 80 friend class TVChildTarget; 81 82 public: 83 ~TVBase()84 virtual ~TVBase() { } 85 86 // XInterface 87 virtual com::sun::star::uno::Any SAL_CALL 88 queryInterface( 89 const com::sun::star::uno::Type& aType ) 90 throw( com::sun::star::uno::RuntimeException); 91 92 virtual void SAL_CALL 93 acquire( 94 void ) 95 throw(); 96 97 virtual void SAL_CALL 98 release( 99 void ) 100 throw(); 101 102 103 // XTypeProvider 104 XTYPEPROVIDER_DECL()105 XTYPEPROVIDER_DECL() 106 107 108 // XNameAccess 109 110 virtual com::sun::star::uno::Type SAL_CALL 111 getElementType( ) 112 throw( com::sun::star::uno::RuntimeException ) 113 { 114 return getCppuVoidType(); 115 } 116 117 hasElements()118 virtual sal_Bool SAL_CALL hasElements() 119 throw( com::sun::star::uno::RuntimeException ) 120 { 121 return true; 122 } 123 124 // XChangesNotifier 125 126 virtual void SAL_CALL addChangesListener(const com::sun::star::uno::Reference<com::sun::star::util::XChangesListener> & aListener)127 addChangesListener( 128 const com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >& aListener ) 129 throw( com::sun::star::uno::RuntimeException ) 130 { 131 // read only 132 (void)aListener; 133 } 134 135 virtual void SAL_CALL removeChangesListener(const com::sun::star::uno::Reference<com::sun::star::util::XChangesListener> & aListener)136 removeChangesListener( 137 const com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >& aListener ) 138 throw( com::sun::star::uno::RuntimeException ) 139 { 140 // read only 141 (void)aListener; 142 } 143 144 145 // XComponent 146 dispose()147 virtual void SAL_CALL dispose( ) 148 throw( com::sun::star::uno::RuntimeException ) 149 { 150 } 151 addEventListener(const com::sun::star::uno::Reference<com::sun::star::lang::XEventListener> & xListener)152 virtual void SAL_CALL addEventListener( 153 const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& xListener ) 154 throw( com::sun::star::uno::RuntimeException ) 155 { 156 (void)xListener; 157 } 158 159 virtual void SAL_CALL removeEventListener(const com::sun::star::uno::Reference<com::sun::star::lang::XEventListener> & aListener)160 removeEventListener( 161 const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& aListener ) 162 throw( com::sun::star::uno::RuntimeException ) 163 { 164 (void)aListener; 165 } 166 167 168 // Abstract functions 169 // XNameAccess 170 171 virtual com::sun::star::uno::Any SAL_CALL 172 getByName( const rtl::OUString& aName ) 173 throw( com::sun::star::container::NoSuchElementException, 174 com::sun::star::lang::WrappedTargetException, 175 com::sun::star::uno::RuntimeException) = 0; 176 177 virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL 178 getElementNames( ) 179 throw( com::sun::star::uno::RuntimeException ) = 0; 180 181 virtual sal_Bool SAL_CALL 182 hasByName( const rtl::OUString& aName ) 183 throw( com::sun::star::uno::RuntimeException ) = 0; 184 185 186 // XHierarchicalNameAccess 187 188 virtual com::sun::star::uno::Any SAL_CALL 189 getByHierarchicalName( const rtl::OUString& aName ) 190 throw( com::sun::star::container::NoSuchElementException, 191 com::sun::star::uno::RuntimeException ) = 0; 192 193 virtual sal_Bool SAL_CALL 194 hasByHierarchicalName( const rtl::OUString& aName ) 195 throw( com::sun::star::uno::RuntimeException ) = 0; 196 197 }; // end class TVBase 198 199 200 201 202 203 class TVRead 204 : public TVBase 205 { 206 friend class TVChildTarget; 207 208 public: 209 TVRead( const ConfigData& configData,TVDom* tvDom = 0 ); 210 211 ~TVRead(); 212 213 // XNameAccess 214 215 virtual com::sun::star::uno::Any SAL_CALL 216 getByName( const rtl::OUString& aName ) 217 throw( com::sun::star::container::NoSuchElementException, 218 com::sun::star::lang::WrappedTargetException, 219 com::sun::star::uno::RuntimeException); 220 221 virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL 222 getElementNames( ) 223 throw( com::sun::star::uno::RuntimeException ); 224 225 virtual sal_Bool SAL_CALL 226 hasByName( const rtl::OUString& aName ) 227 throw( com::sun::star::uno::RuntimeException ); 228 229 230 // XHierarchicalNameAccess 231 232 virtual com::sun::star::uno::Any SAL_CALL 233 getByHierarchicalName( const rtl::OUString& aName ) 234 throw( com::sun::star::container::NoSuchElementException, 235 com::sun::star::uno::RuntimeException ); 236 237 virtual sal_Bool SAL_CALL 238 hasByHierarchicalName( const rtl::OUString& aName ) 239 throw( com::sun::star::uno::RuntimeException ); 240 241 242 private: 243 244 rtl::OUString Title; 245 rtl::OUString TargetURL; 246 rtl::Reference< TVChildTarget > Children; 247 248 }; // end class TVRead 249 250 251 252 253 254 255 class TVChildTarget 256 : public TVBase 257 { 258 public: 259 260 TVChildTarget( const ConfigData& configData,TVDom* tvDom ); 261 262 TVChildTarget( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& xMSF ); 263 264 ~TVChildTarget(); 265 266 virtual com::sun::star::uno::Any SAL_CALL 267 getByName( const rtl::OUString& aName ) 268 throw( com::sun::star::container::NoSuchElementException, 269 com::sun::star::lang::WrappedTargetException, 270 com::sun::star::uno::RuntimeException); 271 272 virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL 273 getElementNames( ) 274 throw( com::sun::star::uno::RuntimeException ); 275 276 virtual sal_Bool SAL_CALL 277 hasByName( const rtl::OUString& aName ) 278 throw( com::sun::star::uno::RuntimeException ); 279 280 281 // XHierarchicalNameAccess 282 283 virtual com::sun::star::uno::Any SAL_CALL 284 getByHierarchicalName( const rtl::OUString& aName ) 285 throw( com::sun::star::container::NoSuchElementException, 286 com::sun::star::uno::RuntimeException ); 287 288 virtual sal_Bool SAL_CALL 289 hasByHierarchicalName( const rtl::OUString& aName ) 290 throw( com::sun::star::uno::RuntimeException ); 291 292 293 private: 294 std::vector< rtl::Reference< TVRead > > Elements; 295 296 ConfigData init( 297 const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& xMSF ); 298 299 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > 300 getConfiguration( 301 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSgr ) const; 302 303 ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess > 304 getHierAccess( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& sProvider, 305 const char* file ) const; 306 307 ::rtl::OUString 308 getKey( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess >& xHierAccess, 309 const char* key ) const; 310 311 sal_Bool 312 getBooleanKey( 313 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess >& xHierAccess, 314 const char* key) const; 315 316 void subst( 317 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSgr, 318 rtl::OUString& instpath ) const; 319 320 }; // end class TVChildTarget 321 322 323 enum IteratorState 324 { 325 USER_EXTENSIONS, 326 SHARED_EXTENSIONS, 327 BUNDLED_EXTENSIONS, 328 END_REACHED 329 }; 330 331 class ExtensionIteratorBase 332 { 333 public: 334 ExtensionIteratorBase( const rtl::OUString& aLanguage ); 335 void init( void ); 336 337 private: 338 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetHelpPackageFromPackage 339 ( const com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage, 340 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 341 342 protected: 343 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextUserHelpPackage 344 ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 345 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextSharedHelpPackage 346 ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 347 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextBundledHelpPackage 348 ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 349 350 void implGetLanguageVectorFromPackage( ::std::vector< ::rtl::OUString > &rv, 351 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 352 353 osl::Mutex m_aMutex; 354 com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; 355 com::sun::star::uno::Reference< com::sun::star::ucb::XSimpleFileAccess > m_xSFA; 356 357 IteratorState m_eState; 358 rtl::OUString m_aLanguage; 359 360 com::sun::star::uno::Sequence< com::sun::star::uno::Reference 361 < com::sun::star::deployment::XPackage > > m_aUserPackagesSeq; 362 bool m_bUserPackagesLoaded; 363 364 com::sun::star::uno::Sequence< com::sun::star::uno::Reference 365 < com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq; 366 bool m_bSharedPackagesLoaded; 367 368 com::sun::star::uno::Sequence< com::sun::star::uno::Reference 369 < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq; 370 bool m_bBundledPackagesLoaded; 371 372 int m_iUserPackage; 373 int m_iSharedPackage; 374 int m_iBundledPackage; 375 376 }; // end class ExtensionIteratorBase 377 378 379 //=================================================================== 380 class TreeFileIterator : public ExtensionIteratorBase 381 { 382 public: TreeFileIterator(const rtl::OUString & aLanguage)383 TreeFileIterator( const rtl::OUString& aLanguage ) 384 : ExtensionIteratorBase( aLanguage ) 385 {} 386 387 rtl::OUString nextTreeFile( sal_Int32& rnFileSize ); 388 389 private: 390 rtl::OUString expandURL( const rtl::OUString& aURL ); 391 rtl::OUString implGetTreeFileFromPackage( sal_Int32& rnFileSize, 392 com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 393 394 }; // end class TreeFileIterator 395 396 397 } 398 399 400 #endif 401