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