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