xref: /trunk/main/xmlhelp/source/cxxhelp/provider/urlparameter.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _URLPARAMETER_HXX_
29 #define _URLPARAMETER_HXX_
30 
31 #include <rtl/ustring.hxx>
32 #include <rtl/string.hxx>
33 #include <com/sun/star/ucb/IllegalIdentifierException.hpp>
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 #include <com/sun/star/ucb/XCommandEnvironment.hpp>
36 #include <com/sun/star/io/XActiveDataSink.hpp>
37 #include <com/sun/star/io/XOutputStream.hpp>
38 #include <com/sun/star/ucb/Command.hpp>
39 
40 namespace chelp {
41 
42 
43     class Databases;
44 
45 
46     class DbtToStringConverter
47     {
48     public:
49 
50         DbtToStringConverter( const sal_Char* ptr,sal_Int32 len )
51             : m_len( len ),
52               m_ptr( ptr )
53         {
54         }
55 
56 
57         rtl::OUString getHash()
58         {
59             if( m_ptr )
60             {
61                 sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0];
62                 rtl::OUString Hash( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 );
63                 sal_Int32 idx;
64                 if( ( idx = Hash.indexOf( sal_Unicode( '#' ) ) ) != -1 )
65                     return Hash.copy( 1+idx );
66             }
67             return rtl::OUString();
68         }
69 
70 
71         rtl::OUString getFile()
72         {
73             if( ! m_ptr )
74                 return rtl::OUString();
75 
76             sal_Int32 sizeOfFile = ( sal_Int32 ) m_ptr[0];
77             rtl::OUString File( m_ptr+1,sizeOfFile,RTL_TEXTENCODING_UTF8 );
78             sal_Int32 idx;
79             if( ( idx = File.indexOf( sal_Unicode( '#' ) ) ) != -1 )
80                 return File.copy( 0,idx );
81             else
82                 return File;
83         }
84 
85 
86         rtl::OUString getDatabase()
87         {
88             if( ! m_ptr )
89                 return rtl::OUString();
90 
91             sal_Int32 sizeOfDatabase = ( int ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ];
92             return rtl::OUString( m_ptr + 2 + ( sal_Int32 ) m_ptr[0],sizeOfDatabase,RTL_TEXTENCODING_UTF8 );
93         }
94 
95 
96         rtl::OUString getTitle()
97         {
98             if( ! m_ptr ) // || getHash().getLength() )
99                 return rtl::OUString();
100 
101             sal_Int32 sizeOfTitle =
102                 ( sal_Int32 ) m_ptr[  2 + m_ptr[0] +  ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ] ];
103             return rtl::OUString( m_ptr + 3 + m_ptr[0] +  ( sal_Int32 ) m_ptr[ 1+ ( sal_Int32 ) m_ptr[0] ],
104                                   sizeOfTitle,
105                                   RTL_TEXTENCODING_UTF8 );
106         }
107 
108 
109     private:
110 
111         sal_Int32 m_len;
112 
113         const sal_Char* m_ptr;
114 
115     };
116 
117 
118 
119 
120     class URLParameter
121     {
122     public:
123 
124         URLParameter( const rtl::OUString& aURL,
125                       Databases* pDatabases )
126             throw( com::sun::star::ucb::IllegalIdentifierException );
127 
128         bool isPicture()        { return m_aModule.compareToAscii("picture") == 0; }
129         bool isActive()         { return m_aActive.getLength() > 0 && m_aActive.compareToAscii( "true" ) == 0; }
130         bool isQuery()          { return m_aId.compareToAscii("") == 0 && m_aQuery.compareToAscii("") != 0; }
131         bool isEntryForModule() { return m_aId.compareToAscii("start") == 0 || m_bStart; }
132         bool isFile()           { return m_aId.compareToAscii( "" ) != 0; }
133         bool isModule()         { return m_aId.compareToAscii("") == 0 && m_aModule.compareToAscii("") != 0; }
134         bool isRoot()           { return m_aModule.compareToAscii("") == 0; }
135         bool isErrorDocument();
136 
137         rtl::OUString get_url() { return m_aURL; }
138 
139         rtl::OUString get_id();
140 
141         rtl::OUString get_tag();
142 
143         //  Not called for an directory
144 
145         rtl::OUString get_path()   { return get_the_path(); }
146 
147         rtl::OUString get_eid()    { return m_aEid; }
148 
149         rtl::OUString get_title();
150 
151         rtl::OUString get_jar()      { return get_the_jar(); }      // BerkeleyDb
152 
153         rtl::OUString get_ExtensionRegistryPath()    { return m_aExtensionRegistryPath; }
154 
155         rtl::OUString get_module()   { return m_aModule; }
156 
157         rtl::OUString get_dbpar()    {
158             if( m_aDbPar.getLength() ) return m_aDbPar;
159             else return m_aModule;
160         }
161 
162         rtl::OUString get_prefix()   { return m_aPrefix; }
163 
164         rtl::OUString get_language();
165 
166         rtl::OUString get_device()   { return m_aDevice; }
167 
168         rtl::OUString get_program();
169 
170         rtl::OUString get_query()    { return m_aQuery; }
171 
172         rtl::OUString get_scope()    { return m_aScope; }
173 
174         rtl::OUString get_system()   { return m_aSystem; }
175 
176         sal_Int32     get_hitCount() { return m_nHitCount; }
177 
178         rtl::OString getByName( const char* par );
179 
180         void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
181                    const com::sun::star::ucb::Command& aCommand,
182                    sal_Int32 CommandId,
183                    const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment,
184                    const com::sun::star::uno::Reference< com::sun::star::io::XActiveDataSink >& xDataSink );
185 
186         void open( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
187                    const com::sun::star::ucb::Command& aCommand,
188                    sal_Int32 CommandId,
189                    const com::sun::star::uno::Reference< com::sun::star::ucb::XCommandEnvironment >& Environment,
190                    const com::sun::star::uno::Reference< com::sun::star::io::XOutputStream >& xDataSink );
191 
192     private:
193 
194         Databases* m_pDatabases;
195 
196         bool m_bBerkeleyRead;
197         bool m_bStart;
198         bool m_bUseDB;
199 
200         rtl::OUString  m_aURL;
201 
202         rtl::OUString  m_aTag;
203         rtl::OUString  m_aId;
204         rtl::OUString  m_aPath;
205         rtl::OUString  m_aModule;
206         rtl::OUString  m_aTitle;
207         rtl::OUString  m_aJar;
208         rtl::OUString  m_aExtensionRegistryPath;
209         rtl::OUString  m_aEid;
210         rtl::OUString  m_aDbPar;
211 
212         rtl::OUString  m_aDefaultLanguage;
213         rtl::OUString  m_aLanguage;
214 
215         rtl::OUString  m_aPrefix;
216         rtl::OUString  m_aDevice;
217         rtl::OUString  m_aProgram;
218         rtl::OUString  m_aSystem;
219         rtl::OUString  m_aActive;
220 
221         rtl::OUString  m_aQuery;
222         rtl::OUString  m_aScope;
223 
224         rtl::OUString m_aExpr;
225 
226         sal_Int32      m_nHitCount;                // The default maximum hitcount
227 
228 
229         // private methods
230 
231         void init( bool bDefaultLanguageIsInitialized );
232 
233         rtl::OUString get_the_tag();
234 
235         rtl::OUString get_the_path();
236 
237         rtl::OUString get_the_title();
238 
239         rtl::OUString get_the_jar();
240 
241         void readBerkeley();
242 
243         void parse() throw( com::sun::star::ucb::IllegalIdentifierException );
244 
245         bool scheme();
246 
247         bool module();
248 
249         bool name( bool modulePresent );
250 
251         bool query();
252 
253     };   // end class URLParameter
254 
255 
256 }  // end namespace chelp
257 
258 #endif
259