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