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_jvmfwk.hxx" 26 #include "rtl/ustring.hxx" 27 #include "rtl/ustrbuf.hxx" 28 #include "rtl/uri.hxx" 29 #include "osl/thread.hxx" 30 #include "osl/process.h" 31 #include "libxml/xpathInternals.h" 32 #include "osl/file.hxx" 33 #include "osl/module.hxx" 34 #include "framework.hxx" 35 #include "fwkutil.hxx" 36 #include "elements.hxx" 37 #include "fwkbase.hxx" 38 39 using namespace osl; 40 using namespace rtl; 41 #define JAVASETTINGS "javasettings" 42 #define JAVASETTINGS_XML "javasettings.xml" 43 #define VENDORSETTINGS "javavendors.xml" 44 45 #define UNO_JAVA_JFW_PARAMETER "UNO_JAVA_JFW_PARAMETER_" 46 #define UNO_JAVA_JFW_JREHOME "UNO_JAVA_JFW_JREHOME" 47 #define UNO_JAVA_JFW_ENV_JREHOME "UNO_JAVA_JFW_ENV_JREHOME" 48 #define UNO_JAVA_JFW_CLASSPATH "UNO_JAVA_JFW_CLASSPATH" 49 #define UNO_JAVA_JFW_ENV_CLASSPATH "UNO_JAVA_JFW_ENV_CLASSPATH" 50 #define UNO_JAVA_JFW_CLASSPATH_URLS "UNO_JAVA_JFW_CLASSPATH_URLS" 51 #define UNO_JAVA_JFW_PARAMETERS "UNO_JAVA_JFW_PARAMETERS" 52 #define UNO_JAVA_JFW_VENDOR_SETTINGS "UNO_JAVA_JFW_VENDOR_SETTINGS" 53 #define UNO_JAVA_JFW_USER_DATA "UNO_JAVA_JFW_USER_DATA" 54 #define UNO_JAVA_JFW_SHARED_DATA "UNO_JAVA_JFW_SHARED_DATA" 55 #define UNO_JAVA_JFW_INSTALL_DATA "UNO_JAVA_JFW_INSTALL_DATA" 56 #define UNO_JAVA_JFW_INSTALL_EXPIRE "UNO_JAVA_JFW_INSTALL_EXPIRE" 57 #define DEFAULT_INSTALL_EXPIRATION 3600 58 59 namespace jfw 60 { 61 bool g_bJavaSet = false; 62 63 namespace { 64 65 rtl::OString getVendorSettingsPath(rtl::OUString const & sURL) 66 { 67 if (sURL.getLength() == 0) 68 return rtl::OString(); 69 rtl::OUString sSystemPathSettings; 70 if (osl_getSystemPathFromFileURL(sURL.pData, 71 & sSystemPathSettings.pData) != osl_File_E_None) 72 throw FrameworkException( 73 JFW_E_ERROR, 74 rtl::OString("[Java framework] Error in function " 75 "getVendorSettingsPath (fwkutil.cxx) ")); 76 rtl::OString osSystemPathSettings = 77 rtl::OUStringToOString(sSystemPathSettings,osl_getThreadTextEncoding()); 78 return osSystemPathSettings; 79 } 80 81 rtl::OUString getParam(const char * name) 82 { 83 rtl::OUString retVal; 84 if (Bootstrap::get()->getFrom(rtl::OUString::createFromAscii(name), retVal)) 85 { 86 #if OSL_DEBUG_LEVEL >=2 87 rtl::OString sValue = rtl::OUStringToOString(retVal, osl_getThreadTextEncoding()); 88 fprintf(stderr,"[Java framework] Using bootstrap parameter %s = %s.\n", 89 name, sValue.getStr()); 90 #endif 91 } 92 return retVal; 93 } 94 95 rtl::OUString getParamFirstUrl(const char * name) 96 { 97 // Some parameters can consist of multiple URLs (separated by space 98 // characters, although trim() harmlessly also removes other white-space), 99 // of which only the first is used: 100 sal_Int32 i = 0; 101 return getParam(name).trim().getToken(0, ' ', i); 102 } 103 104 }//blind namespace 105 106 107 VendorSettings::VendorSettings(): 108 m_xmlDocVendorSettingsFileUrl(BootParams::getVendorSettings()) 109 { 110 OString sMsgExc("[Java framework] Error in constructor " 111 "VendorSettings::VendorSettings() (fwkbase.cxx)"); 112 //Prepare the xml document and context 113 OString sSettingsPath = getVendorSettingsPath(m_xmlDocVendorSettingsFileUrl); 114 if (sSettingsPath.getLength() == 0) 115 { 116 OString sMsg("[Java framework] A vendor settings file was not specified." 117 "Check the bootstrap parameter " UNO_JAVA_JFW_VENDOR_SETTINGS "."); 118 OSL_ENSURE(0, sMsg.getStr()); 119 throw FrameworkException(JFW_E_CONFIGURATION, sMsg); 120 } 121 if (sSettingsPath.getLength() > 0) 122 { 123 m_xmlDocVendorSettings = xmlParseFile(sSettingsPath.getStr()); 124 if (m_xmlDocVendorSettings == NULL) 125 throw FrameworkException( 126 JFW_E_ERROR, 127 OString("[Java framework] Error while parsing file: ") 128 + sSettingsPath + OString(".")); 129 130 m_xmlPathContextVendorSettings = xmlXPathNewContext(m_xmlDocVendorSettings); 131 int res = xmlXPathRegisterNs( 132 m_xmlPathContextVendorSettings, (xmlChar*) "jf", 133 (xmlChar*) NS_JAVA_FRAMEWORK); 134 if (res == -1) 135 throw FrameworkException(JFW_E_ERROR, sMsgExc); 136 } 137 } 138 139 std::vector<PluginLibrary> VendorSettings::getPluginData() 140 { 141 OString sExcMsg("[Java framework] Error in function VendorSettings::getVendorPluginURLs " 142 "(fwkbase.cxx)."); 143 std::vector<PluginLibrary> vecPlugins; 144 CXPathObjectPtr result(xmlXPathEvalExpression( 145 (xmlChar*)"/jf:javaSelection/jf:plugins/jf:library", 146 m_xmlPathContextVendorSettings)); 147 if (xmlXPathNodeSetIsEmpty(result->nodesetval)) 148 throw FrameworkException(JFW_E_ERROR, sExcMsg); 149 150 //get the values of the library elements + vendor attribute 151 xmlNode* cur = result->nodesetval->nodeTab[0]; 152 153 while (cur != NULL) 154 { 155 //between library elements are also text elements 156 if (cur->type == XML_ELEMENT_NODE) 157 { 158 CXmlCharPtr sAttrVendor(xmlGetProp(cur, (xmlChar*) "vendor")); 159 CXmlCharPtr sTextLibrary( 160 xmlNodeListGetString(m_xmlDocVendorSettings, 161 cur->xmlChildrenNode, 1)); 162 PluginLibrary plugin; 163 OString osVendor((sal_Char*)(xmlChar*) sAttrVendor); 164 plugin.sVendor = OStringToOUString(osVendor, RTL_TEXTENCODING_UTF8); 165 166 //create the file URL to the library 167 OUString sUrl = findPlugin( 168 m_xmlDocVendorSettingsFileUrl, sTextLibrary); 169 if (sUrl.getLength() == 0) 170 { 171 OString sPlugin = OUStringToOString( 172 sTextLibrary, osl_getThreadTextEncoding()); 173 throw FrameworkException( 174 JFW_E_CONFIGURATION, 175 "[Java framework] The file: " + sPlugin + " does not exist."); 176 } 177 plugin.sPath = sUrl; 178 179 vecPlugins.push_back(plugin); 180 } 181 cur = cur->next; 182 } 183 return vecPlugins; 184 } 185 186 VersionInfo VendorSettings::getVersionInformation(const rtl::OUString & sVendor) 187 { 188 OSL_ASSERT(sVendor.getLength() > 0); 189 VersionInfo aVersionInfo; 190 OString osVendor = OUStringToOString(sVendor, RTL_TEXTENCODING_UTF8); 191 //Get minVersion 192 OString sExpresion = OString( 193 "/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") + 194 osVendor + OString("\"]/jf:minVersion"); 195 196 CXPathObjectPtr xPathObjectMin; 197 xPathObjectMin = 198 xmlXPathEvalExpression((xmlChar*) sExpresion.getStr(), 199 m_xmlPathContextVendorSettings); 200 if (xmlXPathNodeSetIsEmpty(xPathObjectMin->nodesetval)) 201 { 202 aVersionInfo.sMinVersion = OUString(); 203 } 204 else 205 { 206 CXmlCharPtr sVersion; 207 sVersion = xmlNodeListGetString( 208 m_xmlDocVendorSettings, 209 xPathObjectMin->nodesetval->nodeTab[0]->xmlChildrenNode, 1); 210 OString osVersion((sal_Char*)(xmlChar*) sVersion); 211 aVersionInfo.sMinVersion = OStringToOUString( 212 osVersion, RTL_TEXTENCODING_UTF8); 213 } 214 215 //Get maxVersion 216 sExpresion = OString("/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") + 217 osVendor + OString("\"]/jf:maxVersion"); 218 CXPathObjectPtr xPathObjectMax; 219 xPathObjectMax = xmlXPathEvalExpression( 220 (xmlChar*) sExpresion.getStr(), 221 m_xmlPathContextVendorSettings); 222 if (xmlXPathNodeSetIsEmpty(xPathObjectMax->nodesetval)) 223 { 224 aVersionInfo.sMaxVersion = OUString(); 225 } 226 else 227 { 228 CXmlCharPtr sVersion; 229 sVersion = xmlNodeListGetString( 230 m_xmlDocVendorSettings, 231 xPathObjectMax->nodesetval->nodeTab[0]->xmlChildrenNode, 1); 232 OString osVersion((sal_Char*) (xmlChar*) sVersion); 233 aVersionInfo.sMaxVersion = OStringToOUString( 234 osVersion, RTL_TEXTENCODING_UTF8); 235 } 236 237 //Get excludeVersions 238 sExpresion = OString("/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") + 239 osVendor + OString("\"]/jf:excludeVersions/jf:version"); 240 CXPathObjectPtr xPathObjectVersions; 241 xPathObjectVersions = 242 xmlXPathEvalExpression((xmlChar*) sExpresion.getStr(), 243 m_xmlPathContextVendorSettings); 244 if (!xmlXPathNodeSetIsEmpty(xPathObjectVersions->nodesetval)) 245 { 246 xmlNode* cur = xPathObjectVersions->nodesetval->nodeTab[0]; 247 while (cur != NULL) 248 { 249 if (cur->type == XML_ELEMENT_NODE ) 250 { 251 if (xmlStrcmp(cur->name, (xmlChar*) "version") == 0) 252 { 253 CXmlCharPtr sVersion; 254 sVersion = xmlNodeListGetString( 255 m_xmlDocVendorSettings, cur->xmlChildrenNode, 1); 256 OString osVersion((sal_Char*)(xmlChar*) sVersion); 257 OUString usVersion = OStringToOUString( 258 osVersion, RTL_TEXTENCODING_UTF8); 259 aVersionInfo.addExcludeVersion(usVersion); 260 } 261 } 262 cur = cur->next; 263 } 264 } 265 return aVersionInfo; 266 } 267 268 std::vector<OUString> VendorSettings::getSupportedVendors() 269 { 270 std::vector<rtl::OUString> vecVendors; 271 //get the nodeset for the library elements 272 jfw::CXPathObjectPtr result; 273 result = xmlXPathEvalExpression( 274 (xmlChar*)"/jf:javaSelection/jf:plugins/jf:library", 275 m_xmlPathContextVendorSettings); 276 if (xmlXPathNodeSetIsEmpty(result->nodesetval)) 277 throw FrameworkException( 278 JFW_E_ERROR, 279 rtl::OString("[Java framework] Error in function getSupportedVendors (fwkutil.cxx).")); 280 281 //get the values of the library elements + vendor attribute 282 xmlNode* cur = result->nodesetval->nodeTab[0]; 283 while (cur != NULL) 284 { 285 //between library elements are also text elements 286 if (cur->type == XML_ELEMENT_NODE) 287 { 288 jfw::CXmlCharPtr sAttrVendor(xmlGetProp(cur, (xmlChar*) "vendor")); 289 vecVendors.push_back(sAttrVendor); 290 } 291 cur = cur->next; 292 } 293 return vecVendors; 294 } 295 296 OUString VendorSettings::getPluginLibrary(const OUString& sVendor) 297 { 298 OSL_ASSERT(sVendor.getLength() > 0); 299 300 OString sExcMsg("[Java framework] Error in function getPluginLibrary (fwkutil.cxx)."); 301 OString sVendorsPath = getVendorSettingsPath(m_xmlDocVendorSettingsFileUrl); 302 OUStringBuffer usBuffer(256); 303 usBuffer.appendAscii("/jf:javaSelection/jf:plugins/jf:library[@vendor=\""); 304 usBuffer.append(sVendor); 305 usBuffer.appendAscii("\"]/text()"); 306 OUString ouExpr = usBuffer.makeStringAndClear(); 307 OString sExpression = 308 OUStringToOString(ouExpr, osl_getThreadTextEncoding()); 309 CXPathObjectPtr pathObjVendor; 310 pathObjVendor = xmlXPathEvalExpression( 311 (xmlChar*) sExpression.getStr(), m_xmlPathContextVendorSettings); 312 if (xmlXPathNodeSetIsEmpty(pathObjVendor->nodesetval)) 313 throw FrameworkException(JFW_E_ERROR, sExcMsg); 314 315 CXmlCharPtr xmlCharPlugin; 316 xmlCharPlugin = 317 xmlNodeListGetString( 318 m_xmlDocVendorSettings,pathObjVendor->nodesetval->nodeTab[0], 1); 319 320 //make an absolute file url from the relativ plugin URL 321 OUString sUrl = findPlugin(m_xmlDocVendorSettingsFileUrl, xmlCharPlugin); 322 if (sUrl.getLength() == 0) 323 { 324 OString sPlugin = OUStringToOString( 325 xmlCharPlugin, osl_getThreadTextEncoding()); 326 throw FrameworkException( 327 JFW_E_CONFIGURATION, 328 "[Java framework] The file: " + sPlugin + " does not exist."); 329 } 330 return sUrl; 331 } 332 333 ::std::vector<OString> BootParams::getVMParameters() 334 { 335 ::std::vector<OString> vecParams; 336 337 for (sal_Int32 i = 1; ; i++) 338 { 339 OUString sName = 340 OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_PARAMETER)) + 341 OUString::valueOf(i); 342 OUString sValue; 343 if (Bootstrap::get()->getFrom(sName, sValue) == sal_True) 344 { 345 OString sParam = 346 OUStringToOString(sValue, osl_getThreadTextEncoding()); 347 vecParams.push_back(sParam); 348 #if OSL_DEBUG_LEVEL >=2 349 rtl::OString sParamName = rtl::OUStringToOString(sName, osl_getThreadTextEncoding()); 350 fprintf(stderr,"[Java framework] Using bootstrap parameter %s" 351 " = %s.\n", sParamName.getStr(), sParam.getStr()); 352 #endif 353 } 354 else 355 break; 356 } 357 return vecParams; 358 } 359 360 rtl::OUString BootParams::getUserData() 361 { 362 return getParamFirstUrl(UNO_JAVA_JFW_USER_DATA); 363 } 364 365 rtl::OUString BootParams::getSharedData() 366 { 367 return getParamFirstUrl(UNO_JAVA_JFW_SHARED_DATA); 368 } 369 370 rtl::OUString BootParams::getInstallData() 371 { 372 return getParam(UNO_JAVA_JFW_INSTALL_DATA); 373 } 374 375 376 rtl::OString BootParams::getClasspath() 377 { 378 rtl::OString sClassPath; 379 rtl::OUString sCP; 380 char szSep[] = {SAL_PATHSEPARATOR,0}; 381 if (Bootstrap::get()->getFrom( 382 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH)), 383 sCP) == sal_True) 384 { 385 sClassPath = rtl::OUStringToOString( 386 sCP, osl_getThreadTextEncoding()); 387 #if OSL_DEBUG_LEVEL >=2 388 fprintf(stderr,"[Java framework] Using bootstrap parameter " 389 UNO_JAVA_JFW_CLASSPATH " = \"%s\".\n", sClassPath.getStr()); 390 #endif 391 } 392 393 rtl::OUString sEnvCP; 394 if (Bootstrap::get()->getFrom( 395 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_CLASSPATH)), 396 sEnvCP) == sal_True) 397 { 398 char * pCp = getenv("CLASSPATH"); 399 if (pCp) 400 { 401 if (sClassPath.getLength()) { 402 sClassPath += rtl::OString(szSep); 403 } 404 sClassPath += rtl::OString(pCp); 405 } 406 #if OSL_DEBUG_LEVEL >=2 407 fprintf(stderr,"[Java framework] Using bootstrap parameter " 408 UNO_JAVA_JFW_ENV_CLASSPATH " and class path is:\n %s.\n", pCp ? pCp : ""); 409 #endif 410 } 411 412 return sClassPath; 413 } 414 415 rtl::OUString BootParams::getVendorSettings() 416 { 417 rtl::OUString sVendor; 418 rtl::OUString sName( 419 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_VENDOR_SETTINGS)); 420 if (Bootstrap::get()->getFrom(sName ,sVendor) == sal_True) 421 { 422 //check the value of the bootstrap variable 423 jfw::FileStatus s = checkFileURL(sVendor); 424 if (s != FILE_OK) 425 { 426 //This bootstrap parameter can contain a relative URL 427 rtl::OUString sAbsoluteUrl; 428 rtl::OUString sBaseDir = getLibraryLocation(); 429 if (File::getAbsoluteFileURL(sBaseDir, sVendor, sAbsoluteUrl) 430 != File::E_None) 431 throw FrameworkException( 432 JFW_E_CONFIGURATION, 433 rtl::OString("[Java framework] Invalid value for bootstrap variable: " 434 UNO_JAVA_JFW_VENDOR_SETTINGS)); 435 sVendor = sAbsoluteUrl; 436 s = checkFileURL(sVendor); 437 if (s == jfw::FILE_INVALID || s == jfw::FILE_DOES_NOT_EXIST) 438 { 439 throw FrameworkException( 440 JFW_E_CONFIGURATION, 441 rtl::OString("[Java framework] Invalid value for bootstrap variable: " 442 UNO_JAVA_JFW_VENDOR_SETTINGS)); 443 } 444 } 445 #if OSL_DEBUG_LEVEL >=2 446 rtl::OString sValue = rtl::OUStringToOString(sVendor, osl_getThreadTextEncoding()); 447 fprintf(stderr,"[Java framework] Using bootstrap parameter " 448 UNO_JAVA_JFW_VENDOR_SETTINGS" = %s.\n", sValue.getStr()); 449 #endif 450 } 451 return sVendor; 452 } 453 454 rtl::OUString BootParams::getJREHome() 455 { 456 rtl::OUString sJRE; 457 rtl::OUString sEnvJRE; 458 sal_Bool bJRE = Bootstrap::get()->getFrom( 459 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_JREHOME)) ,sJRE); 460 sal_Bool bEnvJRE = Bootstrap::get()->getFrom( 461 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_JREHOME)) ,sEnvJRE); 462 463 if (bJRE == sal_True && bEnvJRE == sal_True) 464 { 465 throw FrameworkException( 466 JFW_E_CONFIGURATION, 467 rtl::OString("[Java framework] Both bootstrap parameter " 468 UNO_JAVA_JFW_JREHOME" and " 469 UNO_JAVA_JFW_ENV_JREHOME" are set. However only one of them can be set." 470 "Check bootstrap parameters: environment variables, command line " 471 "arguments, rc/ini files for executable and java framework library.")); 472 } 473 else if (bEnvJRE == sal_True) 474 { 475 const char * pJRE = getenv("JAVA_HOME"); 476 if (pJRE == NULL) 477 { 478 throw FrameworkException( 479 JFW_E_CONFIGURATION, 480 rtl::OString("[Java framework] Both bootstrap parameter " 481 UNO_JAVA_JFW_ENV_JREHOME" is set, but the environment variable " 482 "JAVA_HOME is not set.")); 483 } 484 rtl::OString osJRE(pJRE); 485 rtl::OUString usJRE = rtl::OStringToOUString(osJRE, osl_getThreadTextEncoding()); 486 if (File::getFileURLFromSystemPath(usJRE, sJRE) != File::E_None) 487 throw FrameworkException( 488 JFW_E_ERROR, 489 rtl::OString("[Java framework] Error in function BootParams::getJREHome() " 490 "(fwkbase.cxx).")); 491 #if OSL_DEBUG_LEVEL >=2 492 fprintf(stderr,"[Java framework] Using bootstrap parameter " 493 UNO_JAVA_JFW_ENV_JREHOME" with JAVA_HOME = %s.\n", pJRE); 494 #endif 495 } 496 else if (getMode() == JFW_MODE_DIRECT 497 && bEnvJRE == sal_False 498 && bJRE == sal_False) 499 { 500 throw FrameworkException( 501 JFW_E_CONFIGURATION, 502 rtl::OString("[Java framework] The bootstrap parameter " 503 UNO_JAVA_JFW_ENV_JREHOME" or " UNO_JAVA_JFW_JREHOME 504 " must be set in direct mode.")); 505 } 506 507 #if OSL_DEBUG_LEVEL >=2 508 if (bJRE == sal_True) 509 { 510 rtl::OString sValue = rtl::OUStringToOString(sJRE, osl_getThreadTextEncoding()); 511 fprintf(stderr,"[Java framework] Using bootstrap parameter " 512 UNO_JAVA_JFW_JREHOME" = %s.\n", sValue.getStr()); 513 } 514 #endif 515 return sJRE; 516 } 517 518 rtl::OUString BootParams::getClasspathUrls() 519 { 520 rtl::OUString sParams; 521 Bootstrap::get()->getFrom( 522 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH_URLS)), 523 sParams); 524 #if OSL_DEBUG_LEVEL >=2 525 rtl::OString sValue = rtl::OUStringToOString(sParams, osl_getThreadTextEncoding()); 526 fprintf(stderr,"[Java framework] Using bootstrap parameter " 527 UNO_JAVA_JFW_CLASSPATH_URLS " = \"%s\".\n", sValue.getStr()); 528 #endif 529 return sParams; 530 } 531 532 ::sal_uInt32 BootParams::getInstallDataExpiration() 533 { 534 rtl::OUString sValue; 535 Bootstrap::get()->getFrom( 536 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_INSTALL_EXPIRE)), 537 sValue); 538 539 #if OSL_DEBUG_LEVEL >=2 540 rtl::OString osValue = rtl::OUStringToOString(sValue, osl_getThreadTextEncoding()); 541 fprintf(stderr,"[Java framework] Using bootstrap parameter " 542 UNO_JAVA_JFW_INSTALL_EXPIRE " = %s.\n", osValue.getStr()); 543 #endif 544 545 sal_Int64 nVal = sValue.toInt64(); 546 if (0 == nVal) 547 { 548 #if OSL_DEBUG_LEVEL >=2 549 fprintf(stderr,"[Java framework] Using default value for " 550 "UNO_JAVA_JFW_INSTALL_EXPIRE: %d \n", DEFAULT_INSTALL_EXPIRATION); 551 #endif 552 return DEFAULT_INSTALL_EXPIRATION; 553 } 554 else 555 { 556 return static_cast<sal_uInt32>(nVal); 557 } 558 } 559 560 JFW_MODE getMode() 561 { 562 static bool g_bMode = false; 563 static JFW_MODE g_mode = JFW_MODE_APPLICATION; 564 565 if (g_bMode == false) 566 { 567 //check if either of the "direct mode" bootstrap variables is set 568 bool bDirectMode = true; 569 rtl::OUString sValue; 570 const rtl::Bootstrap * aBoot = Bootstrap::get(); 571 rtl::OUString sJREHome( 572 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_JREHOME)); 573 if (aBoot->getFrom(sJREHome, sValue) == sal_False) 574 { 575 rtl::OUString sEnvJRE( 576 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_JREHOME)); 577 if (aBoot->getFrom(sEnvJRE, sValue) == sal_False) 578 { 579 rtl::OUString sClasspath( 580 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH)); 581 if (aBoot->getFrom(sClasspath, sValue) == sal_False) 582 { 583 rtl::OUString sEnvClasspath( 584 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_CLASSPATH)); 585 if (aBoot->getFrom(sEnvClasspath, sValue) == sal_False) 586 { 587 rtl::OUString sParams = rtl::OUString( 588 RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_PARAMETER)) + 589 rtl::OUString::valueOf((sal_Int32)1); 590 if (aBoot->getFrom(sParams, sValue) == sal_False) 591 { 592 bDirectMode = false; 593 } 594 } 595 } 596 } 597 } 598 599 if (bDirectMode) 600 g_mode = JFW_MODE_DIRECT; 601 else 602 g_mode = JFW_MODE_APPLICATION; 603 g_bMode = true; 604 } 605 606 return g_mode; 607 } 608 609 rtl::OUString getApplicationClassPath() 610 { 611 OSL_ASSERT(getMode() == JFW_MODE_APPLICATION); 612 rtl::OUString retVal; 613 rtl::OUString sParams = BootParams::getClasspathUrls(); 614 if (sParams.getLength() == 0) 615 return retVal; 616 617 rtl::OUStringBuffer buf; 618 sal_Int32 index = 0; 619 char szClassPathSep[] = {SAL_PATHSEPARATOR,0}; 620 do 621 { 622 ::rtl::OUString token( sParams.getToken( 0, ' ', index ).trim() ); 623 if (token.getLength()) 624 { 625 ::rtl::OUString systemPathElement; 626 oslFileError rc = osl_getSystemPathFromFileURL( 627 token.pData, &systemPathElement.pData ); 628 OSL_ASSERT( rc == osl_File_E_None ); 629 if (rc == osl_File_E_None && systemPathElement.getLength() > 0) 630 { 631 if (buf.getLength() > 0) 632 buf.appendAscii( RTL_CONSTASCII_STRINGPARAM( 633 szClassPathSep) ); 634 buf.append( systemPathElement ); 635 } 636 } 637 } 638 while (index >= 0); 639 return buf.makeStringAndClear(); 640 } 641 642 rtl::OString makeClassPathOption(OUString const & sUserClassPath) 643 { 644 //Compose the class path 645 rtl::OString sPaths; 646 rtl::OUStringBuffer sBufCP(4096); 647 char szSep[] = {SAL_PATHSEPARATOR,0}; 648 649 // append all user selected jars to the class path 650 if (sUserClassPath.getLength() > 0) 651 sBufCP.append(sUserClassPath); 652 653 //append all jar libraries and components to the class path 654 OUString sAppCP = getApplicationClassPath(); 655 if (sAppCP.getLength()) 656 { 657 if (sUserClassPath.getLength()) 658 sBufCP.appendAscii(szSep); 659 sBufCP.append(sAppCP); 660 } 661 662 sPaths = rtl::OUStringToOString( 663 sBufCP.makeStringAndClear(), osl_getThreadTextEncoding()); 664 665 rtl::OString sOptionClassPath("-Djava.class.path="); 666 sOptionClassPath += sPaths; 667 return sOptionClassPath; 668 } 669 670 rtl::OString getUserSettingsPath() 671 { 672 return getSettingsPath(BootParams::getUserData()); 673 } 674 675 rtl::OString getSharedSettingsPath() 676 { 677 return getSettingsPath(BootParams::getSharedData()); 678 } 679 680 rtl::OString getInstallSettingsPath() 681 { 682 return getSettingsPath(BootParams::getInstallData()); 683 } 684 685 rtl::OString getSettingsPath( const rtl::OUString & sURL) 686 { 687 if (sURL.getLength() == 0) 688 return rtl::OString(); 689 rtl::OUString sPath; 690 if (osl_getSystemPathFromFileURL(sURL.pData, 691 & sPath.pData) != osl_File_E_None) 692 throw FrameworkException( 693 JFW_E_ERROR, rtl::OString( 694 "[Java framework] Error in function ::getSettingsPath (fwkbase.cxx).")); 695 return rtl::OUStringToOString(sPath,osl_getThreadTextEncoding()); 696 } 697 698 rtl::OString getVendorSettingsPath() 699 { 700 return getVendorSettingsPath(BootParams::getVendorSettings()); 701 } 702 703 void setJavaSelected() 704 { 705 g_bJavaSet = true; 706 } 707 708 bool wasJavaSelectedInSameProcess() 709 { 710 //g_setJavaProcId not set means no Java selected 711 if (g_bJavaSet == true) 712 return true; 713 return false; 714 } 715 716 717 } 718