142c5b01e3
2007/06/07 07:52:58 jl 1.9.24.2: #i76390# support of new bootstrap variable UNO_JAVA_JFW_INSTALL_DATA and UNO_JAVA_JFW_INSTALL_EXPIRE 2007/06/04 08:05:45 jl 1.9.24.1: #i76390 do not create user installation when installing java extensions during setup
731 lines
25 KiB
C++
731 lines
25 KiB
C++
/*************************************************************************
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: fwkbase.cxx,v $
|
|
*
|
|
* $Revision: 1.10 $
|
|
*
|
|
* last change: $Author: obo $ $Date: 2007-06-13 07:57:54 $
|
|
*
|
|
* The Contents of this file are made available subject to
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
*
|
|
*
|
|
* GNU Lesser General Public License Version 2.1
|
|
* =============================================
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
* MA 02111-1307 USA
|
|
*
|
|
************************************************************************/
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
#include "precompiled_jvmfwk.hxx"
|
|
#include "rtl/ustring.hxx"
|
|
#include "rtl/ustrbuf.hxx"
|
|
#include "rtl/uri.hxx"
|
|
#include "osl/thread.hxx"
|
|
#include "osl/process.h"
|
|
#include "libxml/xpathInternals.h"
|
|
#include "osl/file.hxx"
|
|
#include "osl/module.hxx"
|
|
#include "framework.hxx"
|
|
#include "fwkutil.hxx"
|
|
#include "elements.hxx"
|
|
#include "fwkbase.hxx"
|
|
|
|
using namespace osl;
|
|
using namespace rtl;
|
|
#define JAVASETTINGS "javasettings"
|
|
#define JAVASETTINGS_XML "javasettings.xml"
|
|
#define VENDORSETTINGS "javavendors.xml"
|
|
|
|
#define UNO_JAVA_JFW_PARAMETER "UNO_JAVA_JFW_PARAMETER_"
|
|
#define UNO_JAVA_JFW_JREHOME "UNO_JAVA_JFW_JREHOME"
|
|
#define UNO_JAVA_JFW_ENV_JREHOME "UNO_JAVA_JFW_ENV_JREHOME"
|
|
#define UNO_JAVA_JFW_CLASSPATH "UNO_JAVA_JFW_CLASSPATH"
|
|
#define UNO_JAVA_JFW_ENV_CLASSPATH "UNO_JAVA_JFW_ENV_CLASSPATH"
|
|
#define UNO_JAVA_JFW_CLASSPATH_URLS "UNO_JAVA_JFW_CLASSPATH_URLS"
|
|
#define UNO_JAVA_JFW_PARAMETERS "UNO_JAVA_JFW_PARAMETERS"
|
|
#define UNO_JAVA_JFW_VENDOR_SETTINGS "UNO_JAVA_JFW_VENDOR_SETTINGS"
|
|
#define UNO_JAVA_JFW_USER_DATA "UNO_JAVA_JFW_USER_DATA"
|
|
#define UNO_JAVA_JFW_SHARED_DATA "UNO_JAVA_JFW_SHARED_DATA"
|
|
#define UNO_JAVA_JFW_INSTALL_DATA "UNO_JAVA_JFW_INSTALL_DATA"
|
|
#define UNO_JAVA_JFW_INSTALL_EXPIRE "UNO_JAVA_JFW_INSTALL_EXPIRE"
|
|
#define DEFAULT_INSTALL_EXPIRATION 3600
|
|
|
|
namespace jfw
|
|
{
|
|
bool g_bJavaSet = false;
|
|
|
|
namespace {
|
|
|
|
rtl::OString getVendorSettingsPath(rtl::OUString const & sURL)
|
|
{
|
|
if (sURL.getLength() == 0)
|
|
return rtl::OString();
|
|
rtl::OUString sSystemPathSettings;
|
|
if (osl_getSystemPathFromFileURL(sURL.pData,
|
|
& sSystemPathSettings.pData) != osl_File_E_None)
|
|
throw FrameworkException(
|
|
JFW_E_ERROR,
|
|
rtl::OString("[Java framework] Error in function "
|
|
"getVendorSettingsPath (fwkutil.cxx) "));
|
|
rtl::OString osSystemPathSettings =
|
|
rtl::OUStringToOString(sSystemPathSettings,osl_getThreadTextEncoding());
|
|
return osSystemPathSettings;
|
|
}
|
|
|
|
rtl::OUString getParam(const char * name)
|
|
{
|
|
rtl::OUString retVal;
|
|
if (Bootstrap::get()->getFrom(rtl::OUString::createFromAscii(name), retVal))
|
|
{
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
rtl::OString sValue = rtl::OUStringToOString(retVal, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter %s = %s.\n",
|
|
name, sValue.getStr());
|
|
#endif
|
|
}
|
|
return retVal;
|
|
}
|
|
|
|
}//blind namespace
|
|
|
|
|
|
VendorSettings::VendorSettings():
|
|
m_xmlDocVendorSettingsFileUrl(BootParams::getVendorSettings())
|
|
{
|
|
OString sMsgExc("[Java framework] Error in constructor "
|
|
"VendorSettings::VendorSettings() (fwkbase.cxx)");
|
|
//Prepare the xml document and context
|
|
OString sSettingsPath = getVendorSettingsPath(m_xmlDocVendorSettingsFileUrl);
|
|
if (sSettingsPath.getLength() == 0)
|
|
{
|
|
OString sMsg("[Java framework] A vendor settings file was not specified."
|
|
"Check the bootstrap parameter " UNO_JAVA_JFW_VENDOR_SETTINGS ".");
|
|
OSL_ENSURE(0, sMsg.getStr());
|
|
throw FrameworkException(JFW_E_CONFIGURATION, sMsg);
|
|
}
|
|
if (sSettingsPath.getLength() > 0)
|
|
{
|
|
m_xmlDocVendorSettings = xmlParseFile(sSettingsPath.getStr());
|
|
if (m_xmlDocVendorSettings == NULL)
|
|
throw FrameworkException(
|
|
JFW_E_ERROR,
|
|
OString("[Java framework] Error while parsing file: ")
|
|
+ sSettingsPath + OString("."));
|
|
|
|
m_xmlPathContextVendorSettings = xmlXPathNewContext(m_xmlDocVendorSettings);
|
|
int res = xmlXPathRegisterNs(
|
|
m_xmlPathContextVendorSettings, (xmlChar*) "jf",
|
|
(xmlChar*) NS_JAVA_FRAMEWORK);
|
|
if (res == -1)
|
|
throw FrameworkException(JFW_E_ERROR, sMsgExc);
|
|
}
|
|
}
|
|
|
|
std::vector<PluginLibrary> VendorSettings::getPluginData()
|
|
{
|
|
OString sExcMsg("[Java framework] Error in function VendorSettings::getVendorPluginURLs "
|
|
"(fwkbase.cxx).");
|
|
std::vector<PluginLibrary> vecPlugins;
|
|
CXPathObjectPtr result(xmlXPathEvalExpression(
|
|
(xmlChar*)"/jf:javaSelection/jf:plugins/jf:library",
|
|
m_xmlPathContextVendorSettings));
|
|
if (xmlXPathNodeSetIsEmpty(result->nodesetval))
|
|
throw FrameworkException(JFW_E_ERROR, sExcMsg);
|
|
|
|
//get the values of the library elements + vendor attribute
|
|
xmlNode* cur = result->nodesetval->nodeTab[0];
|
|
|
|
while (cur != NULL)
|
|
{
|
|
//between library elements are also text elements
|
|
if (cur->type == XML_ELEMENT_NODE)
|
|
{
|
|
CXmlCharPtr sAttrVendor(xmlGetProp(cur, (xmlChar*) "vendor"));
|
|
CXmlCharPtr sTextLibrary(
|
|
xmlNodeListGetString(m_xmlDocVendorSettings,
|
|
cur->xmlChildrenNode, 1));
|
|
PluginLibrary plugin;
|
|
OString osVendor((sal_Char*)(xmlChar*) sAttrVendor);
|
|
plugin.sVendor = OStringToOUString(osVendor, RTL_TEXTENCODING_UTF8);
|
|
|
|
//create the file URL to the library
|
|
OUString sUrl = findPlugin(
|
|
m_xmlDocVendorSettingsFileUrl, sTextLibrary);
|
|
if (sUrl.getLength() == 0)
|
|
{
|
|
OString sPlugin = OUStringToOString(
|
|
sTextLibrary, osl_getThreadTextEncoding());
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
"[Java framework] The file: " + sPlugin + " does not exist.");
|
|
}
|
|
plugin.sPath = sUrl;
|
|
|
|
vecPlugins.push_back(plugin);
|
|
}
|
|
cur = cur->next;
|
|
}
|
|
return vecPlugins;
|
|
}
|
|
|
|
VersionInfo VendorSettings::getVersionInformation(const rtl::OUString & sVendor)
|
|
{
|
|
OSL_ASSERT(sVendor.getLength() > 0);
|
|
VersionInfo aVersionInfo;
|
|
OString osVendor = OUStringToOString(sVendor, RTL_TEXTENCODING_UTF8);
|
|
//Get minVersion
|
|
OString sExpresion = OString(
|
|
"/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") +
|
|
osVendor + OString("\"]/jf:minVersion");
|
|
|
|
CXPathObjectPtr xPathObjectMin;
|
|
xPathObjectMin =
|
|
xmlXPathEvalExpression((xmlChar*) sExpresion.getStr(),
|
|
m_xmlPathContextVendorSettings);
|
|
if (xmlXPathNodeSetIsEmpty(xPathObjectMin->nodesetval))
|
|
{
|
|
aVersionInfo.sMinVersion = OUString();
|
|
}
|
|
else
|
|
{
|
|
CXmlCharPtr sVersion;
|
|
sVersion = xmlNodeListGetString(
|
|
m_xmlDocVendorSettings,
|
|
xPathObjectMin->nodesetval->nodeTab[0]->xmlChildrenNode, 1);
|
|
OString osVersion((sal_Char*)(xmlChar*) sVersion);
|
|
aVersionInfo.sMinVersion = OStringToOUString(
|
|
osVersion, RTL_TEXTENCODING_UTF8);
|
|
}
|
|
|
|
//Get maxVersion
|
|
sExpresion = OString("/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") +
|
|
osVendor + OString("\"]/jf:maxVersion");
|
|
CXPathObjectPtr xPathObjectMax;
|
|
xPathObjectMax = xmlXPathEvalExpression(
|
|
(xmlChar*) sExpresion.getStr(),
|
|
m_xmlPathContextVendorSettings);
|
|
if (xmlXPathNodeSetIsEmpty(xPathObjectMax->nodesetval))
|
|
{
|
|
aVersionInfo.sMaxVersion = OUString();
|
|
}
|
|
else
|
|
{
|
|
CXmlCharPtr sVersion;
|
|
sVersion = xmlNodeListGetString(
|
|
m_xmlDocVendorSettings,
|
|
xPathObjectMax->nodesetval->nodeTab[0]->xmlChildrenNode, 1);
|
|
OString osVersion((sal_Char*) (xmlChar*) sVersion);
|
|
aVersionInfo.sMaxVersion = OStringToOUString(
|
|
osVersion, RTL_TEXTENCODING_UTF8);
|
|
}
|
|
|
|
//Get excludeVersions
|
|
sExpresion = OString("/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"") +
|
|
osVendor + OString("\"]/jf:excludeVersions/jf:version");
|
|
CXPathObjectPtr xPathObjectVersions;
|
|
xPathObjectVersions =
|
|
xmlXPathEvalExpression((xmlChar*) sExpresion.getStr(),
|
|
m_xmlPathContextVendorSettings);
|
|
if (!xmlXPathNodeSetIsEmpty(xPathObjectVersions->nodesetval))
|
|
{
|
|
xmlNode* cur = xPathObjectVersions->nodesetval->nodeTab[0];
|
|
while (cur != NULL)
|
|
{
|
|
if (cur->type == XML_ELEMENT_NODE )
|
|
{
|
|
if (xmlStrcmp(cur->name, (xmlChar*) "version") == 0)
|
|
{
|
|
CXmlCharPtr sVersion;
|
|
sVersion = xmlNodeListGetString(
|
|
m_xmlDocVendorSettings, cur->xmlChildrenNode, 1);
|
|
OString osVersion((sal_Char*)(xmlChar*) sVersion);
|
|
OUString usVersion = OStringToOUString(
|
|
osVersion, RTL_TEXTENCODING_UTF8);
|
|
aVersionInfo.addExcludeVersion(usVersion);
|
|
}
|
|
}
|
|
cur = cur->next;
|
|
}
|
|
}
|
|
return aVersionInfo;
|
|
}
|
|
|
|
std::vector<OUString> VendorSettings::getSupportedVendors()
|
|
{
|
|
std::vector<rtl::OUString> vecVendors;
|
|
//get the nodeset for the library elements
|
|
jfw::CXPathObjectPtr result;
|
|
result = xmlXPathEvalExpression(
|
|
(xmlChar*)"/jf:javaSelection/jf:plugins/jf:library",
|
|
m_xmlPathContextVendorSettings);
|
|
if (xmlXPathNodeSetIsEmpty(result->nodesetval))
|
|
throw FrameworkException(
|
|
JFW_E_ERROR,
|
|
rtl::OString("[Java framework] Error in function getSupportedVendors (fwkutil.cxx)."));
|
|
|
|
//get the values of the library elements + vendor attribute
|
|
xmlNode* cur = result->nodesetval->nodeTab[0];
|
|
while (cur != NULL)
|
|
{
|
|
//between library elements are also text elements
|
|
if (cur->type == XML_ELEMENT_NODE)
|
|
{
|
|
jfw::CXmlCharPtr sAttrVendor(xmlGetProp(cur, (xmlChar*) "vendor"));
|
|
vecVendors.push_back(sAttrVendor);
|
|
}
|
|
cur = cur->next;
|
|
}
|
|
return vecVendors;
|
|
}
|
|
|
|
OUString VendorSettings::getPluginLibrary(const OUString& sVendor)
|
|
{
|
|
OSL_ASSERT(sVendor.getLength() > 0);
|
|
|
|
OString sExcMsg("[Java framework] Error in function getPluginLibrary (fwkutil.cxx).");
|
|
OString sVendorsPath = getVendorSettingsPath(m_xmlDocVendorSettingsFileUrl);
|
|
OUStringBuffer usBuffer(256);
|
|
usBuffer.appendAscii("/jf:javaSelection/jf:plugins/jf:library[@vendor=\"");
|
|
usBuffer.append(sVendor);
|
|
usBuffer.appendAscii("\"]/text()");
|
|
OUString ouExpr = usBuffer.makeStringAndClear();
|
|
OString sExpression =
|
|
OUStringToOString(ouExpr, osl_getThreadTextEncoding());
|
|
CXPathObjectPtr pathObjVendor;
|
|
pathObjVendor = xmlXPathEvalExpression(
|
|
(xmlChar*) sExpression.getStr(), m_xmlPathContextVendorSettings);
|
|
if (xmlXPathNodeSetIsEmpty(pathObjVendor->nodesetval))
|
|
throw FrameworkException(JFW_E_ERROR, sExcMsg);
|
|
|
|
CXmlCharPtr xmlCharPlugin;
|
|
xmlCharPlugin =
|
|
xmlNodeListGetString(
|
|
m_xmlDocVendorSettings,pathObjVendor->nodesetval->nodeTab[0], 1);
|
|
|
|
//make an absolute file url from the relativ plugin URL
|
|
OUString sUrl = findPlugin(m_xmlDocVendorSettingsFileUrl, xmlCharPlugin);
|
|
if (sUrl.getLength() == 0)
|
|
{
|
|
OString sPlugin = OUStringToOString(
|
|
xmlCharPlugin, osl_getThreadTextEncoding());
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
"[Java framework] The file: " + sPlugin + " does not exist.");
|
|
}
|
|
return sUrl;
|
|
}
|
|
|
|
::std::vector<OString> BootParams::getVMParameters()
|
|
{
|
|
::std::vector<OString> vecParams;
|
|
|
|
for (sal_Int32 i = 1; ; i++)
|
|
{
|
|
OUString sName =
|
|
OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_PARAMETER)) +
|
|
OUString::valueOf(i);
|
|
OUString sValue;
|
|
if (Bootstrap::get()->getFrom(sName, sValue) == sal_True)
|
|
{
|
|
OString sParam =
|
|
OUStringToOString(sValue, osl_getThreadTextEncoding());
|
|
vecParams.push_back(sParam);
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
rtl::OString sParamName = rtl::OUStringToOString(sName, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter %s"
|
|
" = %s.\n", sParamName.getStr(), sParam.getStr());
|
|
#endif
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
return vecParams;
|
|
}
|
|
|
|
rtl::OUString BootParams::getUserData()
|
|
{
|
|
return getParam(UNO_JAVA_JFW_USER_DATA);
|
|
}
|
|
|
|
rtl::OUString BootParams::getSharedData()
|
|
{
|
|
return getParam(UNO_JAVA_JFW_SHARED_DATA);
|
|
}
|
|
|
|
rtl::OUString BootParams::getInstallData()
|
|
{
|
|
return getParam(UNO_JAVA_JFW_INSTALL_DATA);
|
|
}
|
|
|
|
|
|
rtl::OString BootParams::getClasspath()
|
|
{
|
|
rtl::OString sClassPath;
|
|
rtl::OUString sCP;
|
|
char szSep[] = {SAL_PATHSEPARATOR,0};
|
|
if (Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH)),
|
|
sCP) == sal_True)
|
|
{
|
|
sClassPath = rtl::OUStringToOString(
|
|
sCP, osl_getThreadTextEncoding());
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_CLASSPATH " = %s.\n", sClassPath.getStr());
|
|
#endif
|
|
}
|
|
|
|
rtl::OUString sEnvCP;
|
|
if (Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_CLASSPATH)),
|
|
sEnvCP) == sal_True)
|
|
{
|
|
char * pCp = getenv("CLASSPATH");
|
|
if (pCp)
|
|
{
|
|
sClassPath += rtl::OString(szSep) + rtl::OString(pCp);
|
|
}
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_ENV_CLASSPATH " and class path is:\n %s.\n", pCp ? pCp : "");
|
|
#endif
|
|
}
|
|
|
|
return sClassPath;
|
|
}
|
|
|
|
rtl::OUString BootParams::getVendorSettings()
|
|
{
|
|
rtl::OUString sVendor;
|
|
rtl::OUString sName(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_VENDOR_SETTINGS));
|
|
if (Bootstrap::get()->getFrom(sName ,sVendor) == sal_True)
|
|
{
|
|
//check the value of the bootstrap variable
|
|
jfw::FileStatus s = checkFileURL(sVendor);
|
|
if (s != FILE_OK)
|
|
{
|
|
//This bootstrap parameter can contain a relative URL
|
|
rtl::OUString sAbsoluteUrl;
|
|
rtl::OUString sBaseDir = getLibraryLocation();
|
|
if (File::getAbsoluteFileURL(sBaseDir, sVendor, sAbsoluteUrl)
|
|
!= File::E_None)
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
rtl::OString("[Java framework] Invalid value for bootstrap variable: "
|
|
UNO_JAVA_JFW_VENDOR_SETTINGS));
|
|
sVendor = sAbsoluteUrl;
|
|
s = checkFileURL(sVendor);
|
|
if (s == jfw::FILE_INVALID || s == jfw::FILE_DOES_NOT_EXIST)
|
|
{
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
rtl::OString("[Java framework] Invalid value for bootstrap variable: "
|
|
UNO_JAVA_JFW_VENDOR_SETTINGS));
|
|
}
|
|
}
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
rtl::OString sValue = rtl::OUStringToOString(sVendor, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_VENDOR_SETTINGS" = %s.\n", sValue.getStr());
|
|
#endif
|
|
}
|
|
return sVendor;
|
|
}
|
|
|
|
rtl::OUString BootParams::getJREHome()
|
|
{
|
|
rtl::OUString sJRE;
|
|
rtl::OUString sEnvJRE;
|
|
sal_Bool bJRE = Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_JREHOME)) ,sJRE);
|
|
sal_Bool bEnvJRE = Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_JREHOME)) ,sEnvJRE);
|
|
|
|
if (bJRE == sal_True && bEnvJRE == sal_True)
|
|
{
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
rtl::OString("[Java framework] Both bootstrap parameter "
|
|
UNO_JAVA_JFW_JREHOME" and "
|
|
UNO_JAVA_JFW_ENV_JREHOME" are set. However only one of them can be set."
|
|
"Check bootstrap parameters: environment variables, command line "
|
|
"arguments, rc/ini files for executable and java framework library."));
|
|
}
|
|
else if (bEnvJRE == sal_True)
|
|
{
|
|
const char * pJRE = getenv("JAVA_HOME");
|
|
if (pJRE == NULL)
|
|
{
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
rtl::OString("[Java framework] Both bootstrap parameter "
|
|
UNO_JAVA_JFW_ENV_JREHOME" is set, but the environment variable "
|
|
"JAVA_HOME is not set."));
|
|
}
|
|
rtl::OString osJRE(pJRE);
|
|
rtl::OUString usJRE = rtl::OStringToOUString(osJRE, osl_getThreadTextEncoding());
|
|
if (File::getFileURLFromSystemPath(usJRE, sJRE) != File::E_None)
|
|
throw FrameworkException(
|
|
JFW_E_ERROR,
|
|
rtl::OString("[Java framework] Error in function BootParams::getJREHome() "
|
|
"(fwkbase.cxx)."));
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_ENV_JREHOME" with JAVA_HOME = %s.\n", pJRE);
|
|
#endif
|
|
}
|
|
else if (getMode() == JFW_MODE_DIRECT
|
|
&& bEnvJRE == sal_False
|
|
&& bJRE == sal_False)
|
|
{
|
|
throw FrameworkException(
|
|
JFW_E_CONFIGURATION,
|
|
rtl::OString("[Java framework] The bootstrap parameter "
|
|
UNO_JAVA_JFW_ENV_JREHOME" or " UNO_JAVA_JFW_JREHOME
|
|
" must be set in direct mode."));
|
|
}
|
|
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
if (bJRE == sal_True)
|
|
{
|
|
rtl::OString sValue = rtl::OUStringToOString(sJRE, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_JREHOME" = %s.\n", sValue.getStr());
|
|
}
|
|
#endif
|
|
return sJRE;
|
|
}
|
|
|
|
rtl::OUString BootParams::getClasspathUrls()
|
|
{
|
|
rtl::OUString sParams;
|
|
Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH_URLS)),
|
|
sParams);
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
rtl::OString sValue = rtl::OUStringToOString(sParams, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_CLASSPATH_URLS " = %s.\n", sValue.getStr());
|
|
#endif
|
|
return sParams;
|
|
}
|
|
|
|
::sal_uInt32 BootParams::getInstallDataExpiration()
|
|
{
|
|
rtl::OUString sValue;
|
|
Bootstrap::get()->getFrom(
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_INSTALL_EXPIRE)),
|
|
sValue);
|
|
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
rtl::OString osValue = rtl::OUStringToOString(sValue, osl_getThreadTextEncoding());
|
|
fprintf(stderr,"[Java framework] Using bootstrap parameter "
|
|
UNO_JAVA_JFW_INSTALL_EXPIRE " = %s.\n", osValue.getStr());
|
|
#endif
|
|
|
|
sal_Int64 nVal = sValue.toInt64();
|
|
if (0 == nVal)
|
|
{
|
|
#if OSL_DEBUG_LEVEL >=2
|
|
fprintf(stderr,"[Java framework] Using default value for "
|
|
"UNO_JAVA_JFW_INSTALL_EXPIRE: %d \n", DEFAULT_INSTALL_EXPIRATION);
|
|
#endif
|
|
return DEFAULT_INSTALL_EXPIRATION;
|
|
}
|
|
else
|
|
{
|
|
return static_cast<sal_uInt32>(nVal);
|
|
}
|
|
}
|
|
|
|
JFW_MODE getMode()
|
|
{
|
|
static bool g_bMode = false;
|
|
static JFW_MODE g_mode = JFW_MODE_APPLICATION;
|
|
|
|
if (g_bMode == false)
|
|
{
|
|
//check if either of the "direct mode" bootstrap variables is set
|
|
bool bDirectMode = true;
|
|
rtl::OUString sValue;
|
|
const rtl::Bootstrap * aBoot = Bootstrap::get();
|
|
rtl::OUString sJREHome(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_JREHOME));
|
|
if (aBoot->getFrom(sJREHome, sValue) == sal_False)
|
|
{
|
|
rtl::OUString sEnvJRE(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_JREHOME));
|
|
if (aBoot->getFrom(sEnvJRE, sValue) == sal_False)
|
|
{
|
|
rtl::OUString sClasspath(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_CLASSPATH));
|
|
if (aBoot->getFrom(sClasspath, sValue) == sal_False)
|
|
{
|
|
rtl::OUString sEnvClasspath(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_ENV_CLASSPATH));
|
|
if (aBoot->getFrom(sEnvClasspath, sValue) == sal_False)
|
|
{
|
|
rtl::OUString sParams = rtl::OUString(
|
|
RTL_CONSTASCII_USTRINGPARAM(UNO_JAVA_JFW_PARAMETER)) +
|
|
rtl::OUString::valueOf((sal_Int32)1);
|
|
if (aBoot->getFrom(sParams, sValue) == sal_False)
|
|
{
|
|
bDirectMode = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bDirectMode)
|
|
g_mode = JFW_MODE_DIRECT;
|
|
else
|
|
g_mode = JFW_MODE_APPLICATION;
|
|
g_bMode = true;
|
|
}
|
|
|
|
return g_mode;
|
|
}
|
|
|
|
rtl::OUString getApplicationClassPath()
|
|
{
|
|
OSL_ASSERT(getMode() == JFW_MODE_APPLICATION);
|
|
rtl::OUString retVal;
|
|
rtl::OUString sParams = BootParams::getClasspathUrls();
|
|
if (sParams.getLength() == 0)
|
|
return retVal;
|
|
|
|
rtl::OUStringBuffer buf;
|
|
sal_Int32 index = 0;
|
|
char szClassPathSep[] = {SAL_PATHSEPARATOR,0};
|
|
do
|
|
{
|
|
::rtl::OUString token( sParams.getToken( 0, ' ', index ).trim() );
|
|
if (token.getLength())
|
|
{
|
|
::rtl::OUString systemPathElement;
|
|
oslFileError rc = osl_getSystemPathFromFileURL(
|
|
token.pData, &systemPathElement.pData );
|
|
OSL_ASSERT( rc == osl_File_E_None );
|
|
if (rc == osl_File_E_None && systemPathElement.getLength() > 0)
|
|
{
|
|
if (buf.getLength() > 0)
|
|
buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
|
|
szClassPathSep) );
|
|
buf.append( systemPathElement );
|
|
}
|
|
}
|
|
}
|
|
while (index >= 0);
|
|
return buf.makeStringAndClear();
|
|
}
|
|
|
|
rtl::OString makeClassPathOption(OUString const & sUserClassPath)
|
|
{
|
|
//Compose the class path
|
|
rtl::OString sPaths;
|
|
rtl::OUStringBuffer sBufCP(4096);
|
|
char szSep[] = {SAL_PATHSEPARATOR,0};
|
|
|
|
// append all user selected jars to the class path
|
|
if (sUserClassPath.getLength() > 0)
|
|
sBufCP.append(sUserClassPath);
|
|
|
|
//append all jar libraries and components to the class path
|
|
OUString sAppCP = getApplicationClassPath();
|
|
if (sAppCP.getLength())
|
|
{
|
|
if (sUserClassPath.getLength())
|
|
sBufCP.appendAscii(szSep);
|
|
sBufCP.append(sAppCP);
|
|
}
|
|
|
|
sPaths = rtl::OUStringToOString(
|
|
sBufCP.makeStringAndClear(), osl_getThreadTextEncoding());
|
|
|
|
rtl::OString sOptionClassPath("-Djava.class.path=");
|
|
sOptionClassPath += sPaths;
|
|
return sOptionClassPath;
|
|
}
|
|
|
|
rtl::OString getUserSettingsPath()
|
|
{
|
|
return getSettingsPath(BootParams::getUserData());
|
|
}
|
|
|
|
rtl::OString getSharedSettingsPath()
|
|
{
|
|
return getSettingsPath(BootParams::getSharedData());
|
|
}
|
|
|
|
rtl::OString getInstallSettingsPath()
|
|
{
|
|
return getSettingsPath(BootParams::getInstallData());
|
|
}
|
|
|
|
rtl::OString getSettingsPath( const rtl::OUString & sURL)
|
|
{
|
|
if (sURL.getLength() == 0)
|
|
return rtl::OString();
|
|
rtl::OUString sPath;
|
|
if (osl_getSystemPathFromFileURL(sURL.pData,
|
|
& sPath.pData) != osl_File_E_None)
|
|
throw FrameworkException(
|
|
JFW_E_ERROR, rtl::OString(
|
|
"[Java framework] Error in function ::getSettingsPath (fwkbase.cxx)."));
|
|
return rtl::OUStringToOString(sPath,osl_getThreadTextEncoding());
|
|
}
|
|
|
|
rtl::OString getVendorSettingsPath()
|
|
{
|
|
return getVendorSettingsPath(BootParams::getVendorSettings());
|
|
}
|
|
|
|
rtl::OUString getApplicationBase()
|
|
{
|
|
rtl::OString sExcMsg("[Java framework] Error in function getApplicationBase (fwkutil.cxx)");
|
|
|
|
rtl_uString* sExe = NULL;
|
|
if (osl_getExecutableFile( & sExe) != osl_Process_E_None)
|
|
throw FrameworkException(JFW_E_ERROR, sExcMsg);
|
|
|
|
rtl::OUString ouExe(sExe, SAL_NO_ACQUIRE);
|
|
rtl::OUString sBase = getDirFromFile(ouExe);
|
|
|
|
OSL_ASSERT(sBase.getLength());
|
|
return sBase;
|
|
}
|
|
void setJavaSelected()
|
|
{
|
|
g_bJavaSet = true;
|
|
}
|
|
|
|
bool wasJavaSelectedInSameProcess()
|
|
{
|
|
//g_setJavaProcId not set means no Java selected
|
|
if (g_bJavaSet == true)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
|
|
}
|