1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef _DATABASES_HXX_ 29*cdf0e10cSrcweir #define _DATABASES_HXX_ 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #ifndef INCLUDED_STL_SET 32*cdf0e10cSrcweir #include <set> 33*cdf0e10cSrcweir #define INCLUDED_STL_SET 34*cdf0e10cSrcweir #endif 35*cdf0e10cSrcweir #ifndef INCLUDED_STL_VECTOR 36*cdf0e10cSrcweir #include <vector> 37*cdf0e10cSrcweir #define INCLUDED_STL_VECTOR 38*cdf0e10cSrcweir #endif 39*cdf0e10cSrcweir #include <hash_map> 40*cdf0e10cSrcweir #include <hash_set> 41*cdf0e10cSrcweir #include <osl/mutex.hxx> 42*cdf0e10cSrcweir #include <rtl/ustring.hxx> 43*cdf0e10cSrcweir #include <rtl/string.hxx> 44*cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx> 45*cdf0e10cSrcweir #include <com/sun/star/ucb/XContent.hpp> 46*cdf0e10cSrcweir #include <com/sun/star/container/XHierarchicalNameAccess.hpp> 47*cdf0e10cSrcweir #include <com/sun/star/io/XInputStream.hpp> 48*cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp> 49*cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp> 50*cdf0e10cSrcweir #include <com/sun/star/i18n/XCollator.hpp> 51*cdf0e10cSrcweir #include <com/sun/star/deployment/XPackage.hpp> 52*cdf0e10cSrcweir #include "com/sun/star/ucb/XSimpleFileAccess.hpp" 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir // Forward declaration 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir namespace berkeleydbproxy { 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir class Db; 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir namespace chelp { 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir class Databases; 68*cdf0e10cSrcweir class URLParameter; 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir class StaticModuleInformation 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir private: 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir rtl::OUString m_aStartId; 75*cdf0e10cSrcweir rtl::OUString m_aProgramSwitch; 76*cdf0e10cSrcweir rtl::OUString m_aTitle; 77*cdf0e10cSrcweir rtl::OUString m_aHeading; 78*cdf0e10cSrcweir rtl::OUString m_aFulltext; 79*cdf0e10cSrcweir int m_nOrder; 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir public: 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir StaticModuleInformation( rtl::OUString aTitle, 85*cdf0e10cSrcweir rtl::OUString aStartId, 86*cdf0e10cSrcweir rtl::OUString aProgramSwitch, 87*cdf0e10cSrcweir rtl::OUString aHeading, 88*cdf0e10cSrcweir rtl::OUString aFulltext, 89*cdf0e10cSrcweir rtl::OUString aOrder ) 90*cdf0e10cSrcweir : m_aStartId( aStartId ), 91*cdf0e10cSrcweir m_aProgramSwitch( aProgramSwitch ), 92*cdf0e10cSrcweir m_aTitle( aTitle ), 93*cdf0e10cSrcweir m_aHeading( aHeading ), 94*cdf0e10cSrcweir m_aFulltext( aFulltext ), 95*cdf0e10cSrcweir m_nOrder( aOrder.toInt32() ) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir ~StaticModuleInformation() { } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir rtl::OUString get_title() { return m_aTitle; } 102*cdf0e10cSrcweir rtl::OUString get_id() { return m_aStartId; } 103*cdf0e10cSrcweir rtl::OUString get_program() { return m_aProgramSwitch; } 104*cdf0e10cSrcweir rtl::OUString get_heading() { return m_aHeading; } 105*cdf0e10cSrcweir rtl::OUString get_fulltext() { return m_aFulltext; } 106*cdf0e10cSrcweir int get_order() { return m_nOrder; } 107*cdf0e10cSrcweir }; // end class StaticModuleInformation 108*cdf0e10cSrcweir 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir class KeywordInfo 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir public: 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir class KeywordElement 116*cdf0e10cSrcweir { 117*cdf0e10cSrcweir friend struct KeywordElementComparator; 118*cdf0e10cSrcweir friend class KeywordInfo; 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir public: 121*cdf0e10cSrcweir 122*cdf0e10cSrcweir KeywordElement( Databases* pDatabases, 123*cdf0e10cSrcweir berkeleydbproxy::Db* pDb, 124*cdf0e10cSrcweir rtl::OUString& key, 125*cdf0e10cSrcweir rtl::OUString& ids ); 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir private: 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir rtl::OUString key; 130*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > listId; 131*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > listAnchor; 132*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > listTitle; 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir void init( Databases *pDatabases,berkeleydbproxy::Db* pDb,const rtl::OUString& ids ); 135*cdf0e10cSrcweir }; 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir KeywordInfo( const std::vector< KeywordElement >& aVector ); 139*cdf0e10cSrcweir 140*cdf0e10cSrcweir ~KeywordInfo() { }; 141*cdf0e10cSrcweir 142*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString >& 143*cdf0e10cSrcweir getKeywordList() { return listKey; } 144*cdf0e10cSrcweir 145*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< rtl::OUString > >& 146*cdf0e10cSrcweir getIdList() { return listId; } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< rtl::OUString > >& 149*cdf0e10cSrcweir getAnchorList() { return listAnchor; } 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< rtl::OUString > >& 152*cdf0e10cSrcweir getTitleList() { return listTitle; } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir private: 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > listKey; 157*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< rtl::OUString > > listId,listAnchor,listTitle; 158*cdf0e10cSrcweir }; // end class KeywordInfo 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir 161*cdf0e10cSrcweir 162*cdf0e10cSrcweir class Databases 163*cdf0e10cSrcweir { 164*cdf0e10cSrcweir public: 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir struct eq 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir bool operator()( const rtl::OUString& rKey1, const rtl::OUString& rKey2 ) const 169*cdf0e10cSrcweir { 170*cdf0e10cSrcweir return rKey1.compareTo( rKey2 ) == 0; 171*cdf0e10cSrcweir } 172*cdf0e10cSrcweir }; 173*cdf0e10cSrcweir 174*cdf0e10cSrcweir struct ha 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir size_t operator()( const rtl::OUString& rName ) const 177*cdf0e10cSrcweir { 178*cdf0e10cSrcweir return rName.hashCode(); 179*cdf0e10cSrcweir } 180*cdf0e10cSrcweir }; 181*cdf0e10cSrcweir 182*cdf0e10cSrcweir 183*cdf0e10cSrcweir /** 184*cdf0e10cSrcweir * Input is the installdirectory in system dependent notation 185*cdf0e10cSrcweir */ 186*cdf0e10cSrcweir 187*cdf0e10cSrcweir Databases( sal_Bool showBasic, 188*cdf0e10cSrcweir const rtl::OUString& instPath, 189*cdf0e10cSrcweir const com::sun::star::uno::Sequence< rtl::OUString >& imagesZipPaths, 190*cdf0e10cSrcweir const rtl::OUString& productName, 191*cdf0e10cSrcweir const rtl::OUString& productVersion, 192*cdf0e10cSrcweir const rtl::OUString& styleSheet, 193*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext ); 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir ~Databases(); 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir rtl::OString getImagesZipFileURL(); 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir rtl::OUString getInstallPathAsSystemPath(); 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir rtl::OUString getInstallPathAsURL(); 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir const std::vector< rtl::OUString >& getModuleList( const rtl::OUString& Language ); 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir StaticModuleInformation* getStaticInformationForModule( const rtl::OUString& Module, 206*cdf0e10cSrcweir const rtl::OUString& Language ); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir bool checkModuleMatchForExtension( const rtl::OUString& Database, const rtl::OUString& doclist ); 209*cdf0e10cSrcweir KeywordInfo* getKeyword( const rtl::OUString& Module, 210*cdf0e10cSrcweir const rtl::OUString& Language ); 211*cdf0e10cSrcweir 212*cdf0e10cSrcweir berkeleydbproxy::Db* getBerkeley( const rtl::OUString& Module, 213*cdf0e10cSrcweir const rtl::OUString& Language, bool helpText = false, 214*cdf0e10cSrcweir const rtl::OUString* pExtensionPath = NULL ); 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir 217*cdf0e10cSrcweir /** 218*cdf0e10cSrcweir * The following method returns the Collator for the given language-country combination 219*cdf0e10cSrcweir */ 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::i18n::XCollator > 222*cdf0e10cSrcweir getCollator( const rtl::OUString& Language, 223*cdf0e10cSrcweir const rtl::OUString& System ); // System not used by current implementation 224*cdf0e10cSrcweir // // of XCollator 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir /** 227*cdf0e10cSrcweir * Returns a copy of the popupfile 228*cdf0e10cSrcweir */ 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir void popupDocument( URLParameter* urlPar,char **buffer,int *byteCount ); 231*cdf0e10cSrcweir 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir /** 234*cdf0e10cSrcweir * Returns the cascading stlye sheet used to format the HTML-output. 235*cdf0e10cSrcweir * First try is language directory, second try is main installation directory. 236*cdf0e10cSrcweir */ 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir void cascadingStylesheet( const rtl::OUString& Language, 239*cdf0e10cSrcweir char** buffer, 240*cdf0e10cSrcweir int* byteCount ); 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir /** 244*cdf0e10cSrcweir * Changes the the stylesheet for further reads. 245*cdf0e10cSrcweir */ 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir void changeCSS(const rtl::OUString& newStyleSheet); 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir /** 251*cdf0e10cSrcweir * Returns the active help text for the given module, language and id. 252*cdf0e10cSrcweir */ 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir void setActiveText( const rtl::OUString& Module, 255*cdf0e10cSrcweir const rtl::OUString& Language, 256*cdf0e10cSrcweir const rtl::OUString& Id, 257*cdf0e10cSrcweir char** buffer, 258*cdf0e10cSrcweir int* byteCount ); 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir /** 261*cdf0e10cSrcweir * Has the purpose of forcing the the jarfile to stay open 262*cdf0e10cSrcweir */ 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > 265*cdf0e10cSrcweir jarFile( const rtl::OUString& jar, 266*cdf0e10cSrcweir const rtl::OUString& Language ); 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > 269*cdf0e10cSrcweir findJarFileForPath( const rtl::OUString& jar, const rtl::OUString& Language, 270*cdf0e10cSrcweir const rtl::OUString& path, rtl::OUString* o_pExtensionPath = NULL, 271*cdf0e10cSrcweir rtl::OUString* o_pExtensionRegistryPath = NULL ); 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir /** 274*cdf0e10cSrcweir * Maps a given language-locale combination to language. 275*cdf0e10cSrcweir */ 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir rtl::OUString processLang( const rtl::OUString& Language ); 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir /** 281*cdf0e10cSrcweir * Maps a given language-locale combination to locale. 282*cdf0e10cSrcweir * The returned string maybe empty 283*cdf0e10cSrcweir */ 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir rtl::OUString country( const rtl::OUString& Language ); 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir void replaceName( rtl::OUString& oustring ) const; 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir rtl::OUString getProductName() const { return m_vReplacement[0]; } 291*cdf0e10cSrcweir rtl::OUString getProductVersion() const { return m_vReplacement[1]; } 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir rtl::OUString expandURL( const rtl::OUString& aURL ); 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir static rtl::OUString expandURL( const rtl::OUString& aURL, 296*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext ); 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir private: 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir osl::Mutex m_aMutex; 301*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; 302*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::lang::XMultiComponentFactory > m_xSMgr; 303*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::ucb::XSimpleFileAccess > m_xSFA; 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir sal_Bool m_bShowBasic; 306*cdf0e10cSrcweir int m_nErrorDocLength; 307*cdf0e10cSrcweir char* m_pErrorDoc; 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir int m_nCustomCSSDocLength; 310*cdf0e10cSrcweir char* m_pCustomCSSDoc; 311*cdf0e10cSrcweir rtl::OUString m_aCSS; 312*cdf0e10cSrcweir 313*cdf0e10cSrcweir #define PRODUCTNAME 0 314*cdf0e10cSrcweir #define PRODUCTVERSION 1 315*cdf0e10cSrcweir #define VENDORNAME 2 316*cdf0e10cSrcweir #define VENDORVERSION 3 317*cdf0e10cSrcweir #define VENDORSHORT 4 318*cdf0e10cSrcweir #define NEWPRODUCTNAME 5 319*cdf0e10cSrcweir #define NEWPRODUCTVERSION 6 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir int m_vAdd[7]; 322*cdf0e10cSrcweir rtl::OUString m_vReplacement[7]; 323*cdf0e10cSrcweir rtl::OUString newProdName,newProdVersion, 324*cdf0e10cSrcweir prodName,prodVersion,vendName,vendVersion,vendShort; 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir rtl::OUString m_aInstallDirectory; // Installation directory 327*cdf0e10cSrcweir com::sun::star::uno::Sequence< rtl::OUString > m_aImagesZipPaths; 328*cdf0e10cSrcweir rtl::OString m_aImagesZipFileURL; 329*cdf0e10cSrcweir sal_Int16 m_nSymbolsStyle; 330*cdf0e10cSrcweir rtl::OUString m_aInstallDirectoryWithoutEncoding; // a work around for a Sablot bug. 331*cdf0e10cSrcweir rtl::OUString m_aInstallDirectoryAsSystemPath; // Installation directory 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir std::vector< rtl::OUString > m_avModules; 334*cdf0e10cSrcweir 335*cdf0e10cSrcweir typedef std::hash_map< rtl::OUString,berkeleydbproxy::Db*,ha,eq > DatabasesTable; 336*cdf0e10cSrcweir DatabasesTable m_aDatabases; // Language and module dependent databases 337*cdf0e10cSrcweir 338*cdf0e10cSrcweir typedef std::hash_map< rtl::OUString,rtl::OUString,ha,eq > LangSetTable; 339*cdf0e10cSrcweir LangSetTable m_aLangSet; // Mapping to of lang-country to lang 340*cdf0e10cSrcweir 341*cdf0e10cSrcweir typedef std::hash_map< rtl::OUString,StaticModuleInformation*,ha,eq > ModInfoTable; 342*cdf0e10cSrcweir ModInfoTable m_aModInfo; // Module information 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir typedef std::hash_map< rtl::OUString,KeywordInfo*,ha,eq > KeywordInfoTable; 345*cdf0e10cSrcweir KeywordInfoTable m_aKeywordInfo; // Module information 346*cdf0e10cSrcweir 347*cdf0e10cSrcweir typedef 348*cdf0e10cSrcweir std::hash_map< 349*cdf0e10cSrcweir rtl::OUString, 350*cdf0e10cSrcweir ::com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess >, 351*cdf0e10cSrcweir ha, 352*cdf0e10cSrcweir eq > ZipFileTable; 353*cdf0e10cSrcweir ZipFileTable m_aZipFileTable; // No closing of an once opened jarfile 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir typedef 356*cdf0e10cSrcweir std::hash_map< 357*cdf0e10cSrcweir rtl::OUString, 358*cdf0e10cSrcweir ::com::sun::star::uno::Reference< com::sun::star::i18n::XCollator >, 359*cdf0e10cSrcweir ha, 360*cdf0e10cSrcweir eq > CollatorTable; 361*cdf0e10cSrcweir CollatorTable m_aCollatorTable; 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir 364*cdf0e10cSrcweir struct ostring_eq 365*cdf0e10cSrcweir { 366*cdf0e10cSrcweir bool operator()( const rtl::OString& rKey1, const rtl::OString& rKey2 ) const 367*cdf0e10cSrcweir { 368*cdf0e10cSrcweir return rKey1.compareTo( rKey2 ) == 0; 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir }; 371*cdf0e10cSrcweir 372*cdf0e10cSrcweir struct ostring_ha 373*cdf0e10cSrcweir { 374*cdf0e10cSrcweir size_t operator()( const rtl::OString& rName ) const 375*cdf0e10cSrcweir { 376*cdf0e10cSrcweir return rName.hashCode(); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir }; 379*cdf0e10cSrcweir 380*cdf0e10cSrcweir typedef 381*cdf0e10cSrcweir std::hash_set< 382*cdf0e10cSrcweir rtl::OString, 383*cdf0e10cSrcweir ostring_ha, 384*cdf0e10cSrcweir ostring_eq > EmptyActiveTextSet; 385*cdf0e10cSrcweir EmptyActiveTextSet m_aEmptyActiveTextSet; 386*cdf0e10cSrcweir 387*cdf0e10cSrcweir 388*cdf0e10cSrcweir // methods 389*cdf0e10cSrcweir 390*cdf0e10cSrcweir void setInstallPath( const rtl::OUString& aInstallDirectory ); 391*cdf0e10cSrcweir 392*cdf0e10cSrcweir }; // end class Databases 393*cdf0e10cSrcweir 394*cdf0e10cSrcweir 395*cdf0e10cSrcweir //=================================================================== 396*cdf0e10cSrcweir enum IteratorState 397*cdf0e10cSrcweir { 398*cdf0e10cSrcweir INITIAL_MODULE, 399*cdf0e10cSrcweir //SHARED_MODULE, // Later, avoids redundancies in help compiling 400*cdf0e10cSrcweir USER_EXTENSIONS, 401*cdf0e10cSrcweir SHARED_EXTENSIONS, 402*cdf0e10cSrcweir BUNDLED_EXTENSIONS, 403*cdf0e10cSrcweir END_REACHED 404*cdf0e10cSrcweir }; 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir // Hashtable to cache extension help status 407*cdf0e10cSrcweir typedef std::hash_map 408*cdf0e10cSrcweir < 409*cdf0e10cSrcweir ::rtl::OUString, 410*cdf0e10cSrcweir bool, 411*cdf0e10cSrcweir Databases::ha, 412*cdf0e10cSrcweir Databases::eq 413*cdf0e10cSrcweir > 414*cdf0e10cSrcweir ExtensionHelpExistanceMap; 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir 417*cdf0e10cSrcweir class ExtensionIteratorBase 418*cdf0e10cSrcweir { 419*cdf0e10cSrcweir static ExtensionHelpExistanceMap aHelpExistanceMap; 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir public: 422*cdf0e10cSrcweir ExtensionIteratorBase( com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext, 423*cdf0e10cSrcweir Databases& rDatabases, const rtl::OUString& aInitialModule, const rtl::OUString& aLanguage ); 424*cdf0e10cSrcweir ExtensionIteratorBase( Databases& rDatabases, const rtl::OUString& aInitialModule, 425*cdf0e10cSrcweir const rtl::OUString& aLanguage ); 426*cdf0e10cSrcweir void init( void ); 427*cdf0e10cSrcweir 428*cdf0e10cSrcweir private: 429*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetHelpPackageFromPackage 430*cdf0e10cSrcweir ( const com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage, 431*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir protected: 434*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextUserHelpPackage 435*cdf0e10cSrcweir ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 436*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextSharedHelpPackage 437*cdf0e10cSrcweir ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 438*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > implGetNextBundledHelpPackage 439*cdf0e10cSrcweir ( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle ); 440*cdf0e10cSrcweir rtl::OUString implGetFileFromPackage( const rtl::OUString& rFileExtension, 441*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 442*cdf0e10cSrcweir void implGetLanguageVectorFromPackage( ::std::vector< ::rtl::OUString > &rv, 443*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > m_xContext; 446*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::ucb::XSimpleFileAccess > m_xSFA; 447*cdf0e10cSrcweir Databases& m_rDatabases; 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir IteratorState m_eState; 450*cdf0e10cSrcweir rtl::OUString m_aExtensionPath; 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir rtl::OUString m_aInitialModule; 453*cdf0e10cSrcweir rtl::OUString m_aLanguage; 454*cdf0e10cSrcweir 455*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Reference 456*cdf0e10cSrcweir < com::sun::star::deployment::XPackage > > m_aUserPackagesSeq; 457*cdf0e10cSrcweir bool m_bUserPackagesLoaded; 458*cdf0e10cSrcweir 459*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Reference 460*cdf0e10cSrcweir < com::sun::star::deployment::XPackage > > m_aSharedPackagesSeq; 461*cdf0e10cSrcweir bool m_bSharedPackagesLoaded; 462*cdf0e10cSrcweir 463*cdf0e10cSrcweir com::sun::star::uno::Sequence< com::sun::star::uno::Reference 464*cdf0e10cSrcweir < com::sun::star::deployment::XPackage > > m_aBundledPackagesSeq; 465*cdf0e10cSrcweir bool m_bBundledPackagesLoaded; 466*cdf0e10cSrcweir 467*cdf0e10cSrcweir int m_iUserPackage; 468*cdf0e10cSrcweir int m_iSharedPackage; 469*cdf0e10cSrcweir int m_iBundledPackage; 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir }; // end class ExtensionIteratorBase 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir 474*cdf0e10cSrcweir //=================================================================== 475*cdf0e10cSrcweir class DataBaseIterator : public ExtensionIteratorBase 476*cdf0e10cSrcweir { 477*cdf0e10cSrcweir public: 478*cdf0e10cSrcweir DataBaseIterator( com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext, 479*cdf0e10cSrcweir Databases& rDatabases, const rtl::OUString& aInitialModule, const rtl::OUString& aLanguage, bool bHelpText ) 480*cdf0e10cSrcweir : ExtensionIteratorBase( xContext, rDatabases, aInitialModule, aLanguage ) 481*cdf0e10cSrcweir , m_bHelpText( bHelpText ) 482*cdf0e10cSrcweir {} 483*cdf0e10cSrcweir DataBaseIterator( Databases& rDatabases, const rtl::OUString& aInitialModule, 484*cdf0e10cSrcweir const rtl::OUString& aLanguage, bool bHelpText ) 485*cdf0e10cSrcweir : ExtensionIteratorBase( rDatabases, aInitialModule, aLanguage ) 486*cdf0e10cSrcweir , m_bHelpText( bHelpText ) 487*cdf0e10cSrcweir {} 488*cdf0e10cSrcweir 489*cdf0e10cSrcweir berkeleydbproxy::Db* nextDb( rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL ); 490*cdf0e10cSrcweir 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir private: 493*cdf0e10cSrcweir berkeleydbproxy::Db* implGetDbFromPackage( 494*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage, 495*cdf0e10cSrcweir rtl::OUString* o_pExtensionPath, rtl::OUString* o_pExtensionRegistryPath ); 496*cdf0e10cSrcweir 497*cdf0e10cSrcweir bool m_bHelpText; 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir }; // end class DataBaseIterator 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir //=================================================================== 502*cdf0e10cSrcweir class KeyDataBaseFileIterator : public ExtensionIteratorBase 503*cdf0e10cSrcweir { 504*cdf0e10cSrcweir public: 505*cdf0e10cSrcweir KeyDataBaseFileIterator( com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext, 506*cdf0e10cSrcweir Databases& rDatabases, const rtl::OUString& aInitialModule, const rtl::OUString& aLanguage ) 507*cdf0e10cSrcweir : ExtensionIteratorBase( xContext, rDatabases, aInitialModule, aLanguage ) 508*cdf0e10cSrcweir {} 509*cdf0e10cSrcweir //Returns a file URL 510*cdf0e10cSrcweir rtl::OUString nextDbFile( bool& o_rbExtension ); 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir private: 513*cdf0e10cSrcweir rtl::OUString implGetDbFileFromPackage( 514*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir }; // end class KeyDataBaseFileIterator 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir //=================================================================== 519*cdf0e10cSrcweir class JarFileIterator : public ExtensionIteratorBase 520*cdf0e10cSrcweir { 521*cdf0e10cSrcweir public: 522*cdf0e10cSrcweir JarFileIterator( com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > xContext, 523*cdf0e10cSrcweir Databases& rDatabases, const rtl::OUString& aInitialModule, const rtl::OUString& aLanguage ) 524*cdf0e10cSrcweir : ExtensionIteratorBase( xContext, rDatabases, aInitialModule, aLanguage ) 525*cdf0e10cSrcweir {} 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > 528*cdf0e10cSrcweir nextJarFile( com::sun::star::uno::Reference< com::sun::star::deployment::XPackage >& o_xParentPackageBundle, 529*cdf0e10cSrcweir rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL ); 530*cdf0e10cSrcweir 531*cdf0e10cSrcweir private: 532*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > 533*cdf0e10cSrcweir implGetJarFromPackage(com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage, 534*cdf0e10cSrcweir rtl::OUString* o_pExtensionPath = NULL, rtl::OUString* o_pExtensionRegistryPath = NULL ); 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir }; // end class JarFileIterator 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir //=================================================================== 539*cdf0e10cSrcweir class IndexFolderIterator : public ExtensionIteratorBase 540*cdf0e10cSrcweir { 541*cdf0e10cSrcweir public: 542*cdf0e10cSrcweir IndexFolderIterator( Databases& rDatabases, const rtl::OUString& aInitialModule, const rtl::OUString& aLanguage ) 543*cdf0e10cSrcweir : ExtensionIteratorBase( rDatabases, aInitialModule, aLanguage ) 544*cdf0e10cSrcweir {} 545*cdf0e10cSrcweir 546*cdf0e10cSrcweir rtl::OUString nextIndexFolder( bool& o_rbExtension, bool& o_rbTemporary ); 547*cdf0e10cSrcweir void deleteTempIndexFolder( const rtl::OUString& aIndexFolder ); 548*cdf0e10cSrcweir 549*cdf0e10cSrcweir private: 550*cdf0e10cSrcweir rtl::OUString implGetIndexFolderFromPackage( bool& o_rbTemporary, 551*cdf0e10cSrcweir com::sun::star::uno::Reference< com::sun::star::deployment::XPackage > xPackage ); 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir }; // end class KeyDataBaseFileIterator 554*cdf0e10cSrcweir 555*cdf0e10cSrcweir //=================================================================== 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir } // end namespace chelp 558*cdf0e10cSrcweir 559*cdf0e10cSrcweir 560*cdf0e10cSrcweir #endif 561