LCOV - code coverage report
Current view: top level - jvmfwk/source - fwkbase.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 183 277 66.1 %
Date: 2012-08-25 Functions: 18 24 75.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 194 526 36.9 %

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

Generated by: LCOV version 1.10