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 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_framework.hxx" 26 27 //________________________________ 28 // my own includes 29 #include <jobs/joburl.hxx> 30 #include <threadhelp/readguard.hxx> 31 #include <threadhelp/writeguard.hxx> 32 #include <general.h> 33 34 //________________________________ 35 // interface includes 36 37 //________________________________ 38 // includes of other projects 39 #include <rtl/ustrbuf.hxx> 40 #include <vcl/svapp.hxx> 41 42 //________________________________ 43 // namespace 44 45 namespace framework{ 46 47 //________________________________ 48 // non exported const 49 50 //________________________________ 51 // non exported definitions 52 53 //________________________________ 54 // declarations 55 56 //________________________________ 57 /** 58 @short special ctor 59 @descr It initialize this new instance with a (hopyfully) valid job URL. 60 This URL will be parsed. After that we set our members right, 61 so other interface methods of this class can be used to get 62 all items of this URL. Of course it will be possible to know, 63 if this URL was valid too. 64 65 @param sURL 66 the job URL for parsing 67 */ 68 JobURL::JobURL( /*IN*/ const ::rtl::OUString& sURL ) 69 : ThreadHelpBase( &Application::GetSolarMutex() ) 70 { 71 #ifdef ENABLE_COMPONENT_SELF_CHECK 72 JobURL::impldbg_checkIt(); 73 #endif 74 75 m_eRequest = E_UNKNOWN; 76 77 // syntax: vnd.sun.star.job:{[event=<name>],[alias=<name>],[service=<name>]} 78 79 // check for "vnd.sun.star.job:" 80 if (sURL.matchIgnoreAsciiCaseAsciiL(JOBURL_PROTOCOL_STR,JOBURL_PROTOCOL_LEN,0)) 81 { 82 sal_Int32 t = JOBURL_PROTOCOL_LEN; 83 do 84 { 85 // separate all token of "{[event=<name>],[alias=<name>],[service=<name>]}" 86 ::rtl::OUString sToken = sURL.getToken(0, JOBURL_PART_SEPERATOR, t); 87 ::rtl::OUString sPartValue ; 88 ::rtl::OUString sPartArguments; 89 90 // check for "event=" 91 if ( 92 (JobURL::implst_split(sToken,JOBURL_EVENT_STR,JOBURL_EVENT_LEN,sPartValue,sPartArguments)) && 93 (sPartValue.getLength()>0 ) 94 ) 95 { 96 // set the part value 97 m_sEvent = sPartValue ; 98 m_sEventArgs = sPartArguments; 99 m_eRequest |= E_EVENT ; 100 } 101 else 102 // check for "alias=" 103 if ( 104 (JobURL::implst_split(sToken,JOBURL_ALIAS_STR,JOBURL_ALIAS_LEN,sPartValue,sPartArguments)) && 105 (sPartValue.getLength()>0 ) 106 ) 107 { 108 // set the part value 109 m_sAlias = sPartValue ; 110 m_sAliasArgs = sPartArguments; 111 m_eRequest |= E_ALIAS ; 112 } 113 else 114 // check for "service=" 115 if ( 116 (JobURL::implst_split(sToken,JOBURL_SERVICE_STR,JOBURL_SERVICE_LEN,sPartValue,sPartArguments)) && 117 (sPartValue.getLength()>0 ) 118 ) 119 { 120 // set the part value 121 m_sService = sPartValue ; 122 m_sServiceArgs = sPartArguments; 123 m_eRequest |= E_SERVICE ; 124 } 125 } 126 while(t!=-1); 127 } 128 } 129 130 //________________________________ 131 /** 132 @short knows, if this job URL object hold a valid URL inside 133 134 @return <TRUE/> if it represent a valid job URL. 135 */ 136 sal_Bool JobURL::isValid() const 137 { 138 /* SAFE { */ 139 ReadGuard aReadLock(m_aLock); 140 return (m_eRequest!=E_UNKNOWN); 141 } 142 143 //________________________________ 144 /** 145 @short get the event item of this job URL 146 @descr Because the three possible parts of such URL (event, alias, service) 147 can't be combined, this method can(!) return a valid value - but it's 148 not a must. Thats why the return value must be used too, to detect a missing 149 event value. 150 151 @param sEvent 152 returns the possible existing event value 153 e.g. "vnd.sun.star.job:event=myEvent" returns "myEvent" 154 155 @return <TRUE/> if an event part of the job URL exist and the out parameter 156 sEvent was filled. 157 158 @attention The out parameter will be reseted every time. Don't use it if method returns <FALSE/>! 159 */ 160 sal_Bool JobURL::getEvent( /*OUT*/ ::rtl::OUString& sEvent ) const 161 { 162 /* SAFE { */ 163 ReadGuard aReadLock(m_aLock); 164 165 sEvent = ::rtl::OUString(); 166 sal_Bool bSet = ((m_eRequest & E_EVENT) == E_EVENT); 167 if (bSet) 168 sEvent = m_sEvent; 169 170 aReadLock.unlock(); 171 /* } SAFE */ 172 173 return bSet; 174 } 175 176 //________________________________ 177 /** 178 @short get the alias item of this job URL 179 @descr Because the three possible parts of such URL (event, alias, service) 180 can't be combined, this method can(!) return a valid value - but it's 181 not a must. Thats why the return value must be used too, to detect a missing 182 alias value. 183 184 @param sAlias 185 returns the possible existing alias value 186 e.g. "vnd.sun.star.job:alias=myAlias" returns "myAlias" 187 188 @return <TRUE/> if an alias part of the job URL exist and the out parameter 189 sAlias was filled. 190 191 @attention The out parameter will be reseted every time. Don't use it if method returns <FALSE/>! 192 */ 193 sal_Bool JobURL::getAlias( /*OUT*/ ::rtl::OUString& sAlias ) const 194 { 195 /* SAFE { */ 196 ReadGuard aReadLock(m_aLock); 197 198 sAlias = ::rtl::OUString(); 199 sal_Bool bSet = ((m_eRequest & E_ALIAS) == E_ALIAS); 200 if (bSet) 201 sAlias = m_sAlias; 202 203 aReadLock.unlock(); 204 /* } SAFE */ 205 206 return bSet; 207 } 208 209 //________________________________ 210 /** 211 @short get the service item of this job URL 212 @descr Because the three possible parts of such URL (event, service, service) 213 can't be combined, this method can(!) return a valid value - but it's 214 not a must. Thats why the return value must be used too, to detect a missing 215 service value. 216 217 @param sAlias 218 returns the possible existing service value 219 e.g. "vnd.sun.star.job:service=com.sun.star.Service" returns "com.sun.star.Service" 220 221 @return <TRUE/> if an service part of the job URL exist and the out parameter 222 sService was filled. 223 224 @attention The out parameter will be reseted every time. Don't use it if method returns <FALSE/>! 225 */ 226 sal_Bool JobURL::getService( /*OUT*/ ::rtl::OUString& sService ) const 227 { 228 /* SAFE { */ 229 ReadGuard aReadLock(m_aLock); 230 231 sService = ::rtl::OUString(); 232 sal_Bool bSet = ((m_eRequest & E_SERVICE) == E_SERVICE); 233 if (bSet) 234 sService = m_sService; 235 236 aReadLock.unlock(); 237 /* } SAFE */ 238 239 return bSet; 240 } 241 242 //________________________________ 243 /** 244 @short searches for a special identifier in the given string and split it 245 @descr If the given identifier could be found at the beginning of the given string, 246 this method split it into different parts and return it. 247 Following schema is used: <partidentifier>=<partvalue>[?<partarguments>] 248 249 @param sPart 250 the string, which should be analyzed 251 252 @param pPartIdentifier 253 the part identifier value, which must be found at the beginning of the 254 parameter <var>sPart</var> 255 256 @param nPartLength 257 the length of the ascii value <var>pPartIdentifier</var> 258 259 @param rPartValue 260 returns the part value if <var>sPart</var> was splitted successfully 261 262 @param rPartArguments 263 returns the part arguments if <var>sPart</var> was splitted successfully 264 265 @return <TRUE/> if the identifier could be found and the string was splitted. 266 <FALSE/> otherwhise. 267 */ 268 sal_Bool JobURL::implst_split( /*IN*/ const ::rtl::OUString& sPart , 269 /*IN*/ const sal_Char* pPartIdentifier , 270 /*IN*/ sal_Int32 nPartLength , 271 /*OUT*/ ::rtl::OUString& rPartValue , 272 /*OUT*/ ::rtl::OUString& rPartArguments ) 273 { 274 // first search for the given identifier 275 sal_Bool bPartFound = (sPart.matchIgnoreAsciiCaseAsciiL(pPartIdentifier,nPartLength,0)); 276 277 // If it exist - we can split the part and return sal_True. 278 // Otherwhise we do nothing and return sal_False. 279 if (bPartFound) 280 { 281 // But may the part has optional arguments - separated by a "?". 282 // Do so - we set the return value with the whole part string. 283 // Arguments will be set to an empty string as default. 284 // If we detect the right sign - we split the arguments and overwrite the default. 285 ::rtl::OUString sValueAndArguments = sPart.copy(nPartLength); 286 ::rtl::OUString sValue = sValueAndArguments ; 287 ::rtl::OUString sArguments; 288 289 sal_Int32 nArgStart = sValueAndArguments.indexOf('?',0); 290 if (nArgStart!=-1) 291 { 292 sValue = sValueAndArguments.copy(0,nArgStart); 293 ++nArgStart; // ignore '?'! 294 sArguments = sValueAndArguments.copy(nArgStart); 295 } 296 297 rPartValue = sValue ; 298 rPartArguments = sArguments; 299 } 300 301 return bPartFound; 302 } 303 304 //________________________________ 305 /** 306 @short special debug method 307 @descr It's the entry point method to start a self component check for this class. 308 It's used for internal purposes only and never a part of a legal product. 309 Use it for testing and debug only! 310 */ 311 #ifdef ENABLE_COMPONENT_SELF_CHECK 312 313 #define LOGFILE_JOBURL "joburl.log" 314 315 void JobURL::impldbg_checkIt() 316 { 317 // check simple URL's 318 JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent" , E_EVENT , "onMyEvent", "" , "" , NULL, NULL, NULL); 319 JobURL::impldbg_checkURL("vnd.sun.star.job:alias=myAlias" , E_ALIAS , "" , "myAlias", "" , NULL, NULL, NULL); 320 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service", E_SERVICE, "" , "" , "css.Service", NULL, NULL, NULL); 321 JobURL::impldbg_checkURL("vnd.sun.star.job:service=;" , E_UNKNOWN, "" , "" , "" , NULL, NULL, NULL); 322 323 // check combinations 324 // Note: No additional spaces or tabs are allowed after a seperator occurred. 325 // Tab and spaces before a seperator will be used as value! 326 JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent;alias=myAlias;service=css.Service" , E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" , NULL, NULL, NULL); 327 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service;alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service" , NULL, NULL, NULL); 328 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service ;alias=myAlias" , E_ALIAS | E_SERVICE , "" , "myAlias", "css.Service ", NULL, NULL, NULL); 329 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.Service; alias=myAlias" , E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL); 330 JobURL::impldbg_checkURL("vnd.sun.star.job : event=onMyEvent" , E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL); 331 JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent;event=onMyEvent;service=css.Service", E_UNKNOWN , "" , "" , "" , NULL, NULL, NULL); 332 333 // check upper/lower case 334 // fix parts of the URL are case insensitive (e.g. "vnd.SUN.star.job:eVEnt=") 335 // values are case sensitive (e.g. "myAlias" ) 336 JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEvent;aliAs=myAlias;serVice=css.Service", E_EVENT | E_ALIAS | E_SERVICE , "onMyEvent", "myAlias", "css.Service" , NULL, NULL, NULL); 337 JobURL::impldbg_checkURL("vnd.SUN.star.job:eVEnt=onMyEVENT;aliAs=myALIAS;serVice=css.SERVICE", E_EVENT | E_ALIAS | E_SERVICE , "onMyEVENT", "myALIAS", "css.SERVICE" , NULL, NULL, NULL); 338 339 // check stupid URLs 340 JobURL::impldbg_checkURL("vnd.sun.star.jobs:service=css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL); 341 JobURL::impldbg_checkURL("vnd.sun.star.job service=css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL); 342 JobURL::impldbg_checkURL("vnd.sun.star.job:service;css.Service" , E_UNKNOWN, "", "", "", NULL, NULL, NULL); 343 JobURL::impldbg_checkURL("vnd.sun.star.job:service;" , E_UNKNOWN, "", "", "", NULL, NULL, NULL); 344 JobURL::impldbg_checkURL("vnd.sun.star.job:;alias;service;event=" , E_UNKNOWN, "", "", "", NULL, NULL, NULL); 345 JobURL::impldbg_checkURL("vnd.sun.star.job:alias=a;service=s;event=", E_UNKNOWN, "", "", "", NULL, NULL, NULL); 346 347 // check argument handling 348 JobURL::impldbg_checkURL("vnd.sun.star.job:event=onMyEvent?eventArg1,eventArg2=3,eventArg4," , E_EVENT , "onMyEvent", "" , "" , "eventArg1,eventArg2=3,eventArg4,", NULL , NULL ); 349 JobURL::impldbg_checkURL("vnd.sun.star.job:alias=myAlias?aliasArg1,aliasarg2" , E_EVENT , "" , "myAlias", "" , NULL , "aliasArg1,aliasarg2", NULL ); 350 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.myService?serviceArg1" , E_EVENT , "" , "" , "css.myService", NULL , NULL , "serviceArg1" ); 351 JobURL::impldbg_checkURL("vnd.sun.star.job:service=css.myService?serviceArg1;alias=myAlias?aliasArg=564", E_EVENT | E_ALIAS, "" , "myAlias", "css.myService", NULL , "aliasArg=564" , "serviceArg1" ); 352 } 353 354 //________________________________ 355 /** 356 @short helper debug method 357 @descr It uses the given parameter to create a new instance of a JobURL. 358 They results will be compared with the exepected ones. 359 The a log will be written, which contains some detailed informations 360 for this sub test. 361 362 @param pURL 363 the job URL, which should be checked 364 365 @param eExpectedPart 366 the expected result 367 368 @param pExpectedEvent 369 the expected event value 370 371 @param pExpectedAlias 372 the expected alias value 373 374 @param pExpectedService 375 the expected service value 376 377 @param pExpectedEventArgs 378 the expected event arguments 379 380 @param pExpectedAliasArgs 381 the expected alias arguments 382 383 @param pExpectedServiceArgs 384 the expected service arguments 385 */ 386 void JobURL::impldbg_checkURL( /*IN*/ const sal_Char* pURL , 387 /*IN*/ sal_uInt32 eExpectedPart , 388 /*IN*/ const sal_Char* pExpectedEvent , 389 /*IN*/ const sal_Char* pExpectedAlias , 390 /*IN*/ const sal_Char* pExpectedService , 391 /*IN*/ const sal_Char* pExpectedEventArgs , 392 /*IN*/ const sal_Char* pExpectedAliasArgs , 393 /*IN*/ const sal_Char* pExpectedServiceArgs ) 394 { 395 ::rtl::OUString sEvent ; 396 ::rtl::OUString sAlias ; 397 ::rtl::OUString sService ; 398 ::rtl::OUString sEventArgs ; 399 ::rtl::OUString sAliasArgs ; 400 ::rtl::OUString sServiceArgs; 401 ::rtl::OUString sURL (::rtl::OUString::createFromAscii(pURL)); 402 sal_Bool bOK = sal_True; 403 404 JobURL aURL(sURL); 405 406 // check if URL is invalid 407 if (eExpectedPart==E_UNKNOWN) 408 bOK = !aURL.isValid(); 409 410 // check if URL has the expected event part 411 if ( 412 (bOK ) && 413 ((eExpectedPart & E_EVENT) == E_EVENT) 414 ) 415 { 416 bOK = ( 417 (aURL.isValid() ) && 418 (aURL.getEvent(sEvent) ) && 419 (sEvent.getLength()>0 ) && 420 (sEvent.compareToAscii(pExpectedEvent)==0) 421 ); 422 423 if (bOK && pExpectedEventArgs!=NULL) 424 { 425 bOK = ( 426 (aURL.getEventArgs(sEventArgs) ) && 427 (sEventArgs.compareToAscii(pExpectedEventArgs)==0) 428 ); 429 }; 430 } 431 432 // check if URL has no event part 433 if ( 434 (bOK ) && 435 ((eExpectedPart & E_EVENT) != E_EVENT) 436 ) 437 { 438 bOK = ( 439 (!aURL.getEvent(sEvent) ) && 440 (sEvent.getLength()==0 ) && 441 (!aURL.getEventArgs(sEventArgs)) && 442 (sEventArgs.getLength()==0 ) 443 ); 444 } 445 446 // check if URL has the expected alias part 447 if ( 448 (bOK ) && 449 ((eExpectedPart & E_ALIAS) == E_ALIAS) 450 ) 451 { 452 bOK = ( 453 (aURL.isValid() ) && 454 (aURL.getAlias(sAlias) ) && 455 (sAlias.getLength()>0 ) && 456 (sAlias.compareToAscii(pExpectedAlias)==0) 457 ); 458 459 if (bOK && pExpectedAliasArgs!=NULL) 460 { 461 bOK = ( 462 (aURL.getAliasArgs(sAliasArgs) ) && 463 (sAliasArgs.compareToAscii(pExpectedAliasArgs)==0) 464 ); 465 }; 466 } 467 468 // check if URL has the no alias part 469 if ( 470 (bOK ) && 471 ((eExpectedPart & E_ALIAS) != E_ALIAS) 472 ) 473 { 474 bOK = ( 475 (!aURL.getAlias(sAlias) ) && 476 (sAlias.getLength()==0 ) && 477 (!aURL.getAliasArgs(sAliasArgs)) && 478 (sAliasArgs.getLength()==0 ) 479 ); 480 } 481 482 // check if URL has the expected service part 483 if ( 484 (bOK ) && 485 ((eExpectedPart & E_SERVICE) == E_SERVICE) 486 ) 487 { 488 bOK = ( 489 (aURL.isValid() ) && 490 (aURL.getService(sService) ) && 491 (sService.getLength()>0 ) && 492 (sService.compareToAscii(pExpectedService)==0) 493 ); 494 495 if (bOK && pExpectedServiceArgs!=NULL) 496 { 497 bOK = ( 498 (aURL.getServiceArgs(sServiceArgs) ) && 499 (sServiceArgs.compareToAscii(pExpectedServiceArgs)==0) 500 ); 501 }; 502 } 503 504 // check if URL has the no service part 505 if ( 506 (bOK ) && 507 ((eExpectedPart & E_SERVICE) != E_SERVICE) 508 ) 509 { 510 bOK = ( 511 (!aURL.getService(sService) ) && 512 (sService.getLength()==0 ) && 513 (!aURL.getServiceArgs(sServiceArgs)) && 514 (sServiceArgs.getLength()==0 ) 515 ); 516 } 517 518 ::rtl::OUStringBuffer sMsg(256); 519 520 sMsg.appendAscii("\"" ); 521 sMsg.append (sURL ); 522 sMsg.appendAscii("\" "); 523 524 if (bOK) 525 { 526 sMsg.appendAscii("... OK\n"); 527 } 528 else 529 { 530 sMsg.appendAscii("... failed\n"); 531 sMsg.appendAscii("expected was: "); 532 if (eExpectedPart==E_UNKNOWN) 533 sMsg.appendAscii("E_UNKNOWN"); 534 if ((eExpectedPart & E_EVENT) == E_EVENT) 535 { 536 sMsg.appendAscii("| E_EVENT e=\""); 537 sMsg.appendAscii(pExpectedEvent ); 538 sMsg.appendAscii("\"" ); 539 } 540 if ((eExpectedPart & E_ALIAS) == E_ALIAS) 541 { 542 sMsg.appendAscii("| E_ALIAS a=\""); 543 sMsg.appendAscii(pExpectedAlias ); 544 sMsg.appendAscii("\"" ); 545 } 546 if ((eExpectedPart & E_SERVICE) == E_SERVICE) 547 { 548 sMsg.appendAscii("| E_SERVICE s=\""); 549 sMsg.appendAscii(pExpectedService ); 550 sMsg.appendAscii("\"" ); 551 } 552 sMsg.appendAscii("\tbut it was : " ); 553 sMsg.append (aURL.impldbg_toString()); 554 sMsg.appendAscii("\n" ); 555 } 556 557 WRITE_LOGFILE(LOGFILE_JOBURL, U2B(sMsg.makeStringAndClear())) 558 } 559 560 //________________________________ 561 /** 562 @short helper debug method 563 @descr It returns a representation of the internal object state 564 as string notation. 565 566 @returns The formatted string representation. 567 */ 568 ::rtl::OUString JobURL::impldbg_toString() const 569 { 570 /* SAFE { */ 571 ReadGuard aReadLock(m_aLock); 572 573 ::rtl::OUStringBuffer sBuffer(256); 574 575 if (m_eRequest==E_UNKNOWN) 576 sBuffer.appendAscii("E_UNKNOWN"); 577 if ((m_eRequest & E_EVENT) == E_EVENT) 578 sBuffer.appendAscii("| E_EVENT"); 579 if ((m_eRequest & E_ALIAS) == E_ALIAS) 580 sBuffer.appendAscii("| E_ALIAS"); 581 if ((m_eRequest & E_SERVICE) == E_SERVICE) 582 sBuffer.appendAscii("| E_SERVICE"); 583 sBuffer.appendAscii("{ e=\"" ); 584 sBuffer.append (m_sEvent ); 585 sBuffer.appendAscii("\" - a=\""); 586 sBuffer.append (m_sAlias ); 587 sBuffer.appendAscii("\" - s=\""); 588 sBuffer.append (m_sService ); 589 sBuffer.appendAscii("\" }" ); 590 591 aReadLock.unlock(); 592 /* } SAFE */ 593 594 return sBuffer.makeStringAndClear(); 595 } 596 597 //________________________________ 598 599 sal_Bool JobURL::getServiceArgs( /*OUT*/ ::rtl::OUString& sServiceArgs ) const 600 { 601 /* SAFE { */ 602 ReadGuard aReadLock(m_aLock); 603 604 sServiceArgs = ::rtl::OUString(); 605 sal_Bool bSet = ((m_eRequest & E_SERVICE) == E_SERVICE); 606 if (bSet) 607 sServiceArgs = m_sServiceArgs; 608 609 aReadLock.unlock(); 610 /* } SAFE */ 611 612 return bSet; 613 } 614 615 //________________________________ 616 617 sal_Bool JobURL::getEventArgs( /*OUT*/ ::rtl::OUString& sEventArgs ) const 618 { 619 /* SAFE { */ 620 ReadGuard aReadLock(m_aLock); 621 622 sEventArgs = ::rtl::OUString(); 623 sal_Bool bSet = ((m_eRequest & E_EVENT) == E_EVENT); 624 if (bSet) 625 sEventArgs = m_sEventArgs; 626 627 aReadLock.unlock(); 628 /* } SAFE */ 629 630 return bSet; 631 } 632 633 //________________________________ 634 635 sal_Bool JobURL::getAliasArgs( /*OUT*/ ::rtl::OUString& sAliasArgs ) const 636 { 637 /* SAFE { */ 638 ReadGuard aReadLock(m_aLock); 639 640 sAliasArgs = ::rtl::OUString(); 641 sal_Bool bSet = ((m_eRequest & E_ALIAS) == E_ALIAS); 642 if (bSet) 643 sAliasArgs = m_sAliasArgs; 644 645 aReadLock.unlock(); 646 /* } SAFE */ 647 648 return bSet; 649 } 650 651 #endif // ENABLE_COMPONENT_SELF_CHECK 652 653 } // namespace framework 654