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