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