diff options
Diffstat (limited to 'jvmfwk/source/fwkbase.cxx')
-rw-r--r-- | jvmfwk/source/fwkbase.cxx | 718 |
1 files changed, 718 insertions, 0 deletions
diff --git a/jvmfwk/source/fwkbase.cxx b/jvmfwk/source/fwkbase.cxx new file mode 100644 index 000000000000..88579765442a --- /dev/null +++ b/jvmfwk/source/fwkbase.cxx @@ -0,0 +1,718 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// 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; +} + +rtl::OUString getParamFirstUrl(const char * name) +{ + // Some parameters can consist of multiple URLs (separated by space + // characters, although trim() harmlessly also removes other white-space), + // of which only the first is used: + sal_Int32 i = 0; + return getParam(name).trim().getToken(0, ' ', i); +} + +}//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 getParamFirstUrl(UNO_JAVA_JFW_USER_DATA); +} + +rtl::OUString BootParams::getSharedData() +{ + return getParamFirstUrl(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()); +} + +void setJavaSelected() +{ + g_bJavaSet = true; +} + +bool wasJavaSelectedInSameProcess() +{ + //g_setJavaProcId not set means no Java selected + if (g_bJavaSet == true) + return true; + return false; +} + + +} |