xref: /AOO41X/main/xmlhelp/source/cxxhelp/provider/databases.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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