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

Generated by: LCOV version 1.10