1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _URLPARAMETER_HXX_
25*b1cdbd2cSJim Jagielski #define _URLPARAMETER_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
28*b1cdbd2cSJim Jagielski #include <rtl/string.hxx>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/IllegalIdentifierException.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/XCommandEnvironment.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XActiveDataSink.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XOutputStream.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/Command.hpp>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski namespace chelp {
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski 	class Databases;
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski 	class DbtToStringConverter
43*b1cdbd2cSJim Jagielski 	{
44*b1cdbd2cSJim Jagielski 	public:
45*b1cdbd2cSJim Jagielski 
DbtToStringConverter(const sal_Char * ptr,sal_Int32 len)46*b1cdbd2cSJim Jagielski 		DbtToStringConverter( const sal_Char* ptr,sal_Int32 len )
47*b1cdbd2cSJim Jagielski 			: m_len( len ),
48*b1cdbd2cSJim Jagielski               m_ptr( ptr )
49*b1cdbd2cSJim Jagielski 		{
50*b1cdbd2cSJim Jagielski 		}
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski 
getHash()53*b1cdbd2cSJim Jagielski 		rtl::OUString getHash()
54*b1cdbd2cSJim Jagielski 		{
55*b1cdbd2cSJim Jagielski 			if( m_ptr )
56*b1cdbd2cSJim Jagielski 			{
57*b1cdbd2cSJim Jagielski 				sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0];
58*b1cdbd2cSJim Jagielski 				rtl::OUString Hash( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 );
59*b1cdbd2cSJim Jagielski 				sal_Int32 idx;
60*b1cdbd2cSJim Jagielski 				if( ( idx = Hash.indexOf( sal_Unicode( '#' ) ) ) != -1 )
61*b1cdbd2cSJim Jagielski 					return Hash.copy( 1+idx );
62*b1cdbd2cSJim Jagielski 			}
63*b1cdbd2cSJim Jagielski 			return rtl::OUString();
64*b1cdbd2cSJim Jagielski 		}
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 
getFile()67*b1cdbd2cSJim Jagielski 		rtl::OUString getFile()
68*b1cdbd2cSJim Jagielski 		{
69*b1cdbd2cSJim Jagielski 			if( ! m_ptr )
70*b1cdbd2cSJim Jagielski 				return rtl::OUString();
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski 			sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0];
73*b1cdbd2cSJim Jagielski 			rtl::OUString File( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 );
74*b1cdbd2cSJim Jagielski 			sal_Int32 idx;
75*b1cdbd2cSJim Jagielski 			if( ( idx = File.indexOf( sal_Unicode( '#' ) ) ) != -1 )
76*b1cdbd2cSJim Jagielski 				return File.copy( 0,idx );
77*b1cdbd2cSJim Jagielski 			else
78*b1cdbd2cSJim Jagielski 				return File;
79*b1cdbd2cSJim Jagielski 		}
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 
getDatabase()82*b1cdbd2cSJim Jagielski 		rtl::OUString getDatabase()
83*b1cdbd2cSJim Jagielski 		{
84*b1cdbd2cSJim Jagielski 			if( ! m_ptr )
85*b1cdbd2cSJim Jagielski 				return rtl::OUString();
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 			sal_Int32 sizeOfDatabase = ( int ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ];
88*b1cdbd2cSJim Jagielski 			return rtl::OUString( m_ptr + 2 + ( sal_Int32 ) m_ptr[0],sizeOfDatabase,RTL_TEXTENCODING_UTF8 );
89*b1cdbd2cSJim Jagielski 		}
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 
getTitle()92*b1cdbd2cSJim Jagielski 		rtl::OUString getTitle()
93*b1cdbd2cSJim Jagielski 		{
94*b1cdbd2cSJim Jagielski 			if( ! m_ptr ) // || getHash().getLength() )
95*b1cdbd2cSJim Jagielski 				return rtl::OUString();
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 			sal_Int32 sizeOfTitle =
98*b1cdbd2cSJim Jagielski 				( sal_Int32 ) m_ptr[  2 + m_ptr[0] +  ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ] ];
99*b1cdbd2cSJim Jagielski 			return rtl::OUString( m_ptr + 3 + m_ptr[0] +  ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ],
100*b1cdbd2cSJim Jagielski 								  sizeOfTitle,
101*b1cdbd2cSJim Jagielski 								  RTL_TEXTENCODING_UTF8 );
102*b1cdbd2cSJim Jagielski 		}
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 	private:
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 		sal_Int32 m_len;
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 		const sal_Char* m_ptr;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 	};
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 	class URLParameter
117*b1cdbd2cSJim Jagielski 	{
118*b1cdbd2cSJim Jagielski 	public:
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 		URLParameter( const rtl::OUString& aURL,
121*b1cdbd2cSJim Jagielski 					  Databases* pDatabases )
122*b1cdbd2cSJim Jagielski 			throw( com::sun::star::ucb::IllegalIdentifierException );
123*b1cdbd2cSJim Jagielski 
isPicture()124*b1cdbd2cSJim Jagielski 		bool isPicture() 		{ return m_aModule.compareToAscii("picture") == 0; }
isActive()125*b1cdbd2cSJim Jagielski 		bool isActive()         { return m_aActive.getLength() > 0 && m_aActive.compareToAscii( "true" ) == 0; }
isQuery()126*b1cdbd2cSJim Jagielski 		bool isQuery()          { return m_aId.compareToAscii("") == 0 && m_aQuery.compareToAscii("") != 0; }
isEntryForModule()127*b1cdbd2cSJim Jagielski 		bool isEntryForModule() { return m_aId.compareToAscii("start") == 0 || m_bStart; }
isFile()128*b1cdbd2cSJim Jagielski 		bool isFile()           { return m_aId.compareToAscii( "" ) != 0; }
isModule()129*b1cdbd2cSJim Jagielski 		bool isModule()         { return m_aId.compareToAscii("") == 0 && m_aModule.compareToAscii("") != 0; }
isRoot()130*b1cdbd2cSJim Jagielski 		bool isRoot()           { return m_aModule.compareToAscii("") == 0; }
131*b1cdbd2cSJim Jagielski 		bool isErrorDocument();
132*b1cdbd2cSJim Jagielski 
get_url()133*b1cdbd2cSJim Jagielski 		rtl::OUString get_url() { return m_aURL; }
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 		rtl::OUString get_id();
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 		rtl::OUString get_tag();
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 		//  Not called for an directory
140*b1cdbd2cSJim Jagielski 
get_path()141*b1cdbd2cSJim Jagielski 		rtl::OUString get_path()   { return get_the_path(); }
142*b1cdbd2cSJim Jagielski 
get_eid()143*b1cdbd2cSJim Jagielski 		rtl::OUString get_eid()    { return m_aEid; }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 		rtl::OUString get_title();
146*b1cdbd2cSJim Jagielski 
get_jar()147*b1cdbd2cSJim Jagielski 		rtl::OUString get_jar()      { return get_the_jar(); }
148*b1cdbd2cSJim Jagielski 
get_ExtensionRegistryPath()149*b1cdbd2cSJim Jagielski 		rtl::OUString get_ExtensionRegistryPath()    { return m_aExtensionRegistryPath; }
150*b1cdbd2cSJim Jagielski 
get_module()151*b1cdbd2cSJim Jagielski 		rtl::OUString get_module()   { return m_aModule; }
152*b1cdbd2cSJim Jagielski 
get_dbpar()153*b1cdbd2cSJim Jagielski         rtl::OUString get_dbpar()    {
154*b1cdbd2cSJim Jagielski             if( m_aDbPar.getLength() ) return m_aDbPar;
155*b1cdbd2cSJim Jagielski             else return m_aModule;
156*b1cdbd2cSJim Jagielski         }
157*b1cdbd2cSJim Jagielski 
get_prefix()158*b1cdbd2cSJim Jagielski 		rtl::OUString get_prefix()   { return m_aPrefix; }
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 		rtl::OUString get_language();
161*b1cdbd2cSJim Jagielski 
get_device()162*b1cdbd2cSJim Jagielski 		rtl::OUString get_device()   { return m_aDevice; }
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 		rtl::OUString get_program();
165*b1cdbd2cSJim Jagielski 
get_query()166*b1cdbd2cSJim Jagielski 		rtl::OUString get_query()    { return m_aQuery; }
167*b1cdbd2cSJim Jagielski 
get_scope()168*b1cdbd2cSJim Jagielski 		rtl::OUString get_scope()    { return m_aScope; }
169*b1cdbd2cSJim Jagielski 
get_system()170*b1cdbd2cSJim Jagielski 		rtl::OUString get_system()   { return m_aSystem; }
171*b1cdbd2cSJim Jagielski 
get_hitCount()172*b1cdbd2cSJim Jagielski 		sal_Int32     get_hitCount() { return m_nHitCount; }
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 		rtl::OString getByName( const char* par );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 		void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
177*b1cdbd2cSJim Jagielski 				   const com::sun::star::ucb::Command& aCommand,
178*b1cdbd2cSJim Jagielski 				   sal_Int32 CommandId,
179*b1cdbd2cSJim Jagielski 				   const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment,
180*b1cdbd2cSJim Jagielski 				   const com::sun::star::uno::Reference< com::sun::star::io::XActiveDataSink >& xDataSink );
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 		void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
183*b1cdbd2cSJim Jagielski 				   const com::sun::star::ucb::Command& aCommand,
184*b1cdbd2cSJim Jagielski 				   sal_Int32 CommandId,
185*b1cdbd2cSJim Jagielski 				   const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment,
186*b1cdbd2cSJim Jagielski 				   const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xDataSink );
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 	private:
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski 		Databases* m_pDatabases;
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 		bool m_bHelpDataFileRead;
193*b1cdbd2cSJim Jagielski 		bool m_bStart;
194*b1cdbd2cSJim Jagielski 		bool m_bUseDB;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aURL;
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aTag;
199*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aId;
200*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aPath;
201*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aModule;
202*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aTitle;
203*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aJar;
204*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aExtensionRegistryPath;
205*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aEid;
206*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aDbPar;
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aDefaultLanguage;
209*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aLanguage;
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aPrefix;
212*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aDevice;
213*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aProgram;
214*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aSystem;
215*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aActive;
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aQuery;
218*b1cdbd2cSJim Jagielski 		rtl::OUString  m_aScope;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 		rtl::OUString m_aExpr;
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 		sal_Int32      m_nHitCount;                // The default maximum hitcount
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 		// private methods
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 		void init( bool bDefaultLanguageIsInitialized );
228*b1cdbd2cSJim Jagielski 
229*b1cdbd2cSJim Jagielski 		rtl::OUString get_the_tag();
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski 		rtl::OUString get_the_path();
232*b1cdbd2cSJim Jagielski 
233*b1cdbd2cSJim Jagielski 		rtl::OUString get_the_title();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 		rtl::OUString get_the_jar();
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski 		void readHelpDataFile();
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 		void parse() throw( com::sun::star::ucb::IllegalIdentifierException );
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski 		bool scheme();
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 		bool module();
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 		bool name( bool modulePresent );
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 		bool query();
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	};   // end class URLParameter
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski }  // end namespace chelp
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski #endif
255