| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _TREEVIEW_TVREAD_HXX_ |
| #define _TREEVIEW_TVREAD_HXX_ |
| |
| #ifndef INCLUDED_STL_VECTOR |
| #include <vector> |
| #define INCLUDED_STL_VECTOR |
| #endif |
| #include <rtl/ref.hxx> |
| #include <rtl/ustring.hxx> |
| #include <ucbhelper/macros.hxx> |
| #include <com/sun/star/uno/Type.hxx> |
| #include <cppuhelper/weak.hxx> |
| #include <com/sun/star/uno/XInterface.hpp> |
| #include <com/sun/star/lang/XTypeProvider.hpp> |
| #include <com/sun/star/container/XNameAccess.hpp> |
| #include <com/sun/star/container/XHierarchicalNameAccess.hpp> |
| #include <com/sun/star/util/XChangesNotifier.hpp> |
| #include <com/sun/star/lang/XComponent.hpp> |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <com/sun/star/deployment/XPackage.hpp> |
| #include "com/sun/star/ucb/XSimpleFileAccess.hpp" |
| |
| namespace treeview { |
| |
| |
| class ConfigData |
| { |
| public: |
| enum { |
| PRODUCTNAME, PRODUCTVERSION, VENDORNAME, VENDORVERSION, |
| VENDORSHORT }; |
| ConfigData(); |
| int m_vAdd[5]; |
| rtl::OUString m_vReplacement[5]; |
| rtl::OUString prodName,prodVersion,vendName,vendVersion,vendShort; |
| |
| std::vector< sal_uInt64 > vFileLen; |
| std::vector< rtl::OUString > vFileURL; |
| rtl::OUString locale,system; |
| rtl::OUString appendix; |
| |
| void SAL_CALL replaceName( rtl::OUString& oustring ) const; |
| }; |
| |
| |
| class TVDom; |
| class TVChildTarget; |
| |
| class TVBase |
| : public cppu::OWeakObject, |
| public com::sun::star::lang::XTypeProvider, |
| public com::sun::star::container::XNameAccess, |
| public com::sun::star::container::XHierarchicalNameAccess, |
| public com::sun::star::util::XChangesNotifier, |
| public com::sun::star::lang::XComponent |
| { |
| friend class TVChildTarget; |
| |
| public: |
| |
| virtual ~TVBase() { } |
| |
| // XInterface |
| virtual com::sun::star::uno::Any SAL_CALL |
| queryInterface( |
| const com::sun::star::uno::Type& aType ) |
| throw( com::sun::star::uno::RuntimeException); |
| |
| virtual void SAL_CALL |
| acquire( |
| void ) |
| throw(); |
| |
| virtual void SAL_CALL |
| release( |
| void ) |
| throw(); |
| |
| |
| // XTypeProvider |
| |
| XTYPEPROVIDER_DECL() |
| |
| |
| // XNameAccess |
| |
| virtual com::sun::star::uno::Type SAL_CALL |
| getElementType( ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| return getCppuVoidType(); |
| } |
| |
| |
| virtual sal_Bool SAL_CALL hasElements() |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| return true; |
| } |
| |
| // XChangesNotifier |
| |
| virtual void SAL_CALL |
| addChangesListener( |
| const com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >& aListener ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| // read only |
| (void)aListener; |
| } |
| |
| virtual void SAL_CALL |
| removeChangesListener( |
| const com::sun::star::uno::Reference< com::sun::star::util::XChangesListener >& aListener ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| // read only |
| (void)aListener; |
| } |
| |
| |
| // XComponent |
| |
| virtual void SAL_CALL dispose( ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| } |
| |
| virtual void SAL_CALL addEventListener( |
| const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& xListener ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| (void)xListener; |
| } |
| |
| virtual void SAL_CALL |
| removeEventListener( |
| const com::sun::star::uno::Reference< com::sun::star::lang::XEventListener >& aListener ) |
| throw( com::sun::star::uno::RuntimeException ) |
| { |
| (void)aListener; |
| } |
| |
| |
| // Abstract functions |
| // XNameAccess |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::lang::WrappedTargetException, |
| com::sun::star::uno::RuntimeException) = 0; |
| |
| virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL |
| getElementNames( ) |
| throw( com::sun::star::uno::RuntimeException ) = 0; |
| |
| virtual sal_Bool SAL_CALL |
| hasByName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ) = 0; |
| |
| |
| // XHierarchicalNameAccess |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::uno::RuntimeException ) = 0; |
| |
| virtual sal_Bool SAL_CALL |
| hasByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ) = 0; |
| |
| }; // end class TVBase |
| |
| |
| |
| |
| |
| class TVRead |
| : public TVBase |
| { |
| friend class TVChildTarget; |
| |
| public: |
| TVRead( const ConfigData& configData,TVDom* tvDom = 0 ); |
| |
| ~TVRead(); |
| |
| // XNameAccess |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::lang::WrappedTargetException, |
| com::sun::star::uno::RuntimeException); |
| |
| virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL |
| getElementNames( ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| virtual sal_Bool SAL_CALL |
| hasByName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| |
| // XHierarchicalNameAccess |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::uno::RuntimeException ); |
| |
| virtual sal_Bool SAL_CALL |
| hasByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| |
| private: |
| |
| rtl::OUString Title; |
| rtl::OUString TargetURL; |
| rtl::Reference< TVChildTarget > Children; |
| |
| }; // end class TVRead |
| |
| |
| |
| |
| |
| |
| class TVChildTarget |
| : public TVBase |
| { |
| public: |
| |
| TVChildTarget( const ConfigData& configData,TVDom* tvDom ); |
| |
| TVChildTarget( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& xMSF ); |
| |
| ~TVChildTarget(); |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::lang::WrappedTargetException, |
| com::sun::star::uno::RuntimeException); |
| |
| virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL |
| getElementNames( ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| virtual sal_Bool SAL_CALL |
| hasByName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| |
| // XHierarchicalNameAccess |
| |
| virtual com::sun::star::uno::Any SAL_CALL |
| getByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::container::NoSuchElementException, |
| com::sun::star::uno::RuntimeException ); |
| |
| virtual sal_Bool SAL_CALL |
| hasByHierarchicalName( const rtl::OUString& aName ) |
| throw( com::sun::star::uno::RuntimeException ); |
| |
| |
| private: |
| std::vector< rtl::Reference< TVRead > > Elements; |
| |
| ConfigData init( |
| const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& xMSF ); |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > |
| getConfiguration( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSgr ) const; |
| |
| ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess > |
| getHierAccess( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& sProvider, |
| const char* file ) const; |
| |
| ::rtl::OUString |
| getKey( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess >& xHierAccess, |
| const char* key ) const; |
| |
| sal_Bool |
| getBooleanKey( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::container::XHierarchicalNameAccess >& xHierAccess, |
| const char* key) const; |
| |
| void subst( |
| const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xMSgr, |
| rtl::OUString& instpath ) const; |
| |
| }; // end class TVChildTarget |
| |
| |
| enum IteratorState |
| { |
| USER_EXTENSIONS, |
| SHARED_EXTENSIONS, |
| BUNDLED_EXTENSIONS, |
| END_REACHED |
| }; |
| |
| class ExtensionIteratorBase |
| { |
| public: |
| ExtensionIteratorBase( const rtl::OUString& aLanguage ); |
| void init( void ); |
| |
| private: |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetHelpPackageFromPackage |
| ( const com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage, |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); |
| |
| protected: |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextUserHelpPackage |
| ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextSharedHelpPackage |
| ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextBundledHelpPackage |
| ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); |
| |
| void implGetLanguageVectorFromPackage( ::std::vector< ::rtl::OUString > &rv, |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); |
| |
| osl::Mutex m_aMutex; |
| com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; |
| com::sun::star::uno::Reference< com::sun::star::ucb::XSimpleFileAccess > m_xSFA; |
| |
| IteratorState m_eState; |
| rtl::OUString m_aLanguage; |
| |
| com::sun::star::uno::Sequence< com::sun::star::uno::Reference |
| < com::sun::star::deployment::XPackage > > m_aUserPackagesSeq; |
| bool m_bUserPackagesLoaded; |
| |
| com::sun::star::uno::Sequence< com::sun::star::uno::Reference |
| < com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq; |
| bool m_bSharedPackagesLoaded; |
| |
| com::sun::star::uno::Sequence< com::sun::star::uno::Reference |
| < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq; |
| bool m_bBundledPackagesLoaded; |
| |
| int m_iUserPackage; |
| int m_iSharedPackage; |
| int m_iBundledPackage; |
| |
| }; // end class ExtensionIteratorBase |
| |
| |
| //=================================================================== |
| class TreeFileIterator : public ExtensionIteratorBase |
| { |
| public: |
| TreeFileIterator( const rtl::OUString& aLanguage ) |
| : ExtensionIteratorBase( aLanguage ) |
| {} |
| |
| rtl::OUString nextTreeFile( sal_Int32& rnFileSize ); |
| |
| private: |
| rtl::OUString expandURL( const rtl::OUString& aURL ); |
| rtl::OUString implGetTreeFileFromPackage( sal_Int32& rnFileSize, |
| com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); |
| |
| }; // end class TreeFileIterator |
| |
| |
| } |
| |
| |
| #endif |