LCOV - code coverage report
Current view: top level - usr/local/src/libreoffice/jvmfwk/source - fwkbase.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 184 296 62.2 %
Date: 2013-07-09 Functions: 16 24 66.7 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10