1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_jvmfwk.hxx"
26*b1cdbd2cSJim Jagielski #include "elements.hxx"
27*b1cdbd2cSJim Jagielski #include "osl/mutex.hxx"
28*b1cdbd2cSJim Jagielski #include "osl/file.hxx"
29*b1cdbd2cSJim Jagielski #include "osl/time.h"
30*b1cdbd2cSJim Jagielski #include "fwkutil.hxx"
31*b1cdbd2cSJim Jagielski #include "fwkbase.hxx"
32*b1cdbd2cSJim Jagielski #include "framework.hxx"
33*b1cdbd2cSJim Jagielski #include "libxmlutil.hxx"
34*b1cdbd2cSJim Jagielski #include "osl/thread.hxx"
35*b1cdbd2cSJim Jagielski #include <algorithm>
36*b1cdbd2cSJim Jagielski #include "libxml/parser.h"
37*b1cdbd2cSJim Jagielski #include "libxml/xpath.h"
38*b1cdbd2cSJim Jagielski #include "libxml/xpathInternals.h"
39*b1cdbd2cSJim Jagielski #include "rtl/bootstrap.hxx"
40*b1cdbd2cSJim Jagielski #include "boost/optional.hpp"
41*b1cdbd2cSJim Jagielski #include <string.h>
42*b1cdbd2cSJim Jagielski // #define NS_JAVA_FRAMEWORK "http://openoffice.org/2004/java/framework/1.0"
43*b1cdbd2cSJim Jagielski // #define NS_SCHEMA_INSTANCE "http://www.w3.org/2001/XMLSchema-instance"
44*b1cdbd2cSJim Jagielski
45*b1cdbd2cSJim Jagielski
46*b1cdbd2cSJim Jagielski using namespace osl;
47*b1cdbd2cSJim Jagielski namespace jfw
48*b1cdbd2cSJim Jagielski {
49*b1cdbd2cSJim Jagielski
getElement(::rtl::OString const & docPath,xmlChar const * pathExpression,bool bThrowIfEmpty)50*b1cdbd2cSJim Jagielski rtl::OString getElement(::rtl::OString const & docPath,
51*b1cdbd2cSJim Jagielski xmlChar const * pathExpression, bool bThrowIfEmpty)
52*b1cdbd2cSJim Jagielski {
53*b1cdbd2cSJim Jagielski //Prepare the xml document and context
54*b1cdbd2cSJim Jagielski OSL_ASSERT(docPath.getLength() > 0);
55*b1cdbd2cSJim Jagielski jfw::CXmlDocPtr doc(xmlParseFile(docPath.getStr()));
56*b1cdbd2cSJim Jagielski if (doc == NULL)
57*b1cdbd2cSJim Jagielski throw FrameworkException(
58*b1cdbd2cSJim Jagielski JFW_E_ERROR,
59*b1cdbd2cSJim Jagielski rtl::OString("[Java framework] Error in function getElement "
60*b1cdbd2cSJim Jagielski "(elements.cxx)"));
61*b1cdbd2cSJim Jagielski
62*b1cdbd2cSJim Jagielski jfw::CXPathContextPtr context(xmlXPathNewContext(doc));
63*b1cdbd2cSJim Jagielski if (xmlXPathRegisterNs(context, (xmlChar*) "jf",
64*b1cdbd2cSJim Jagielski (xmlChar*) NS_JAVA_FRAMEWORK) == -1)
65*b1cdbd2cSJim Jagielski throw FrameworkException(
66*b1cdbd2cSJim Jagielski JFW_E_ERROR,
67*b1cdbd2cSJim Jagielski rtl::OString("[Java framework] Error in function getElement "
68*b1cdbd2cSJim Jagielski "(elements.cxx)"));
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski CXPathObjectPtr pathObj;
71*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression(pathExpression, context);
72*b1cdbd2cSJim Jagielski rtl::OString sValue;
73*b1cdbd2cSJim Jagielski if (xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski if (bThrowIfEmpty)
76*b1cdbd2cSJim Jagielski throw FrameworkException(
77*b1cdbd2cSJim Jagielski JFW_E_ERROR,
78*b1cdbd2cSJim Jagielski rtl::OString("[Java framework] Error in function getElement "
79*b1cdbd2cSJim Jagielski "(elements.cxx)"));
80*b1cdbd2cSJim Jagielski }
81*b1cdbd2cSJim Jagielski else
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski sValue = (sal_Char*) pathObj->nodesetval->nodeTab[0]->content;
84*b1cdbd2cSJim Jagielski }
85*b1cdbd2cSJim Jagielski return sValue;
86*b1cdbd2cSJim Jagielski }
87*b1cdbd2cSJim Jagielski
getElementUpdated()88*b1cdbd2cSJim Jagielski rtl::OString getElementUpdated()
89*b1cdbd2cSJim Jagielski {
90*b1cdbd2cSJim Jagielski return getElement(jfw::getVendorSettingsPath(),
91*b1cdbd2cSJim Jagielski (xmlChar*)"/jf:javaSelection/jf:updated/text()", true);
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski // Use only in INSTALL mode !!!
getElementModified()95*b1cdbd2cSJim Jagielski rtl::OString getElementModified()
96*b1cdbd2cSJim Jagielski {
97*b1cdbd2cSJim Jagielski //The modified element is only written in INSTALL mode.
98*b1cdbd2cSJim Jagielski //That is NodeJava::m_layer = INSTALL
99*b1cdbd2cSJim Jagielski return getElement(jfw::getInstallSettingsPath(),
100*b1cdbd2cSJim Jagielski (xmlChar*)"/jf:java/jf:modified/text()", false);
101*b1cdbd2cSJim Jagielski }
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski
createSettingsStructure(xmlDoc * document,bool * pbNeedsSave)104*b1cdbd2cSJim Jagielski void createSettingsStructure( xmlDoc* document, bool* pbNeedsSave)
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski rtl::OString sExcMsg("[Java framework] Error in function createSettingsStructure "
107*b1cdbd2cSJim Jagielski "(elements.cxx).");
108*b1cdbd2cSJim Jagielski xmlNode * root = xmlDocGetRootElement(document);
109*b1cdbd2cSJim Jagielski if (root == NULL)
110*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
111*b1cdbd2cSJim Jagielski bool bFound = false;
112*b1cdbd2cSJim Jagielski xmlNode * cur = root->children;
113*b1cdbd2cSJim Jagielski while (cur != NULL)
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski if (xmlStrcmp(cur->name, (xmlChar*) "enabled") == 0)
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski bFound = true;
118*b1cdbd2cSJim Jagielski break;
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski cur = cur->next;
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski if (bFound)
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski *pbNeedsSave = false;
125*b1cdbd2cSJim Jagielski return;
126*b1cdbd2cSJim Jagielski }
127*b1cdbd2cSJim Jagielski //We will modify this document
128*b1cdbd2cSJim Jagielski *pbNeedsSave = true;
129*b1cdbd2cSJim Jagielski // Now we create the child elements ------------------
130*b1cdbd2cSJim Jagielski //Get xsi:nil namespace
131*b1cdbd2cSJim Jagielski xmlNs* nsXsi = xmlSearchNsByHref(
132*b1cdbd2cSJim Jagielski document, root,(xmlChar*) NS_SCHEMA_INSTANCE);
133*b1cdbd2cSJim Jagielski
134*b1cdbd2cSJim Jagielski //<enabled xsi:nil="true"
135*b1cdbd2cSJim Jagielski xmlNode * nodeEn = xmlNewTextChild(
136*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "enabled", (xmlChar*) "");
137*b1cdbd2cSJim Jagielski if (nodeEn == NULL)
138*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
139*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeEn,nsXsi,(xmlChar*) "nil",(xmlChar*) "true");
140*b1cdbd2cSJim Jagielski //add a new line
141*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
142*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski //<userClassPath xsi:nil="true">
145*b1cdbd2cSJim Jagielski xmlNode * nodeUs = xmlNewTextChild(
146*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "userClassPath", (xmlChar*) "");
147*b1cdbd2cSJim Jagielski if (nodeUs == NULL)
148*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
149*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeUs,nsXsi,(xmlChar*) "nil",(xmlChar*) "true");
150*b1cdbd2cSJim Jagielski //add a new line
151*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
152*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
153*b1cdbd2cSJim Jagielski
154*b1cdbd2cSJim Jagielski //<vmParameters xsi:nil="true">
155*b1cdbd2cSJim Jagielski xmlNode * nodeVm = xmlNewTextChild(
156*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "vmParameters", (xmlChar*) "");
157*b1cdbd2cSJim Jagielski if (nodeVm == NULL)
158*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
159*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeVm,nsXsi,(xmlChar*) "nil",(xmlChar*) "true");
160*b1cdbd2cSJim Jagielski //add a new line
161*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
162*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski //<jreLocations xsi:nil="true">
165*b1cdbd2cSJim Jagielski xmlNode * nodeJre = xmlNewTextChild(
166*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "jreLocations", (xmlChar*) "");
167*b1cdbd2cSJim Jagielski if (nodeJre == NULL)
168*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
169*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeJre,nsXsi,(xmlChar*) "nil",(xmlChar*) "true");
170*b1cdbd2cSJim Jagielski //add a new line
171*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
172*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski //<javaInfo xsi:nil="true" autoSelect="true">
175*b1cdbd2cSJim Jagielski xmlNode * nodeJava = xmlNewTextChild(
176*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "javaInfo", (xmlChar*) "");
177*b1cdbd2cSJim Jagielski if (nodeJava == NULL)
178*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
179*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeJava,nsXsi,(xmlChar*) "nil",(xmlChar*) "true");
180*b1cdbd2cSJim Jagielski // xmlSetProp(nodeJava,(xmlChar*) "autoSelect",(xmlChar*) "true");
181*b1cdbd2cSJim Jagielski //add a new line
182*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
183*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
184*b1cdbd2cSJim Jagielski }
185*b1cdbd2cSJim Jagielski
186*b1cdbd2cSJim Jagielski
187*b1cdbd2cSJim Jagielski //====================================================================
VersionInfo()188*b1cdbd2cSJim Jagielski VersionInfo::VersionInfo(): arVersions(NULL)
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski }
191*b1cdbd2cSJim Jagielski
~VersionInfo()192*b1cdbd2cSJim Jagielski VersionInfo::~VersionInfo()
193*b1cdbd2cSJim Jagielski {
194*b1cdbd2cSJim Jagielski delete [] arVersions;
195*b1cdbd2cSJim Jagielski }
196*b1cdbd2cSJim Jagielski
addExcludeVersion(const rtl::OUString & sVersion)197*b1cdbd2cSJim Jagielski void VersionInfo::addExcludeVersion(const rtl::OUString& sVersion)
198*b1cdbd2cSJim Jagielski {
199*b1cdbd2cSJim Jagielski vecExcludeVersions.push_back(sVersion);
200*b1cdbd2cSJim Jagielski }
201*b1cdbd2cSJim Jagielski
getExcludeVersions()202*b1cdbd2cSJim Jagielski rtl_uString** VersionInfo::getExcludeVersions()
203*b1cdbd2cSJim Jagielski {
204*b1cdbd2cSJim Jagielski osl::MutexGuard guard(FwkMutex::get());
205*b1cdbd2cSJim Jagielski if (arVersions != NULL)
206*b1cdbd2cSJim Jagielski return arVersions;
207*b1cdbd2cSJim Jagielski
208*b1cdbd2cSJim Jagielski arVersions = new rtl_uString*[vecExcludeVersions.size()];
209*b1cdbd2cSJim Jagielski int j=0;
210*b1cdbd2cSJim Jagielski typedef std::vector<rtl::OUString>::const_iterator it;
211*b1cdbd2cSJim Jagielski for (it i = vecExcludeVersions.begin(); i != vecExcludeVersions.end();
212*b1cdbd2cSJim Jagielski i++, j++)
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski arVersions[j] = vecExcludeVersions[j].pData;
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski return arVersions;
217*b1cdbd2cSJim Jagielski }
218*b1cdbd2cSJim Jagielski
getExcludeVersionSize()219*b1cdbd2cSJim Jagielski sal_Int32 VersionInfo::getExcludeVersionSize()
220*b1cdbd2cSJim Jagielski {
221*b1cdbd2cSJim Jagielski return vecExcludeVersions.size();
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski //==================================================================
224*b1cdbd2cSJim Jagielski
NodeJava(Layer layer)225*b1cdbd2cSJim Jagielski NodeJava::NodeJava(Layer layer):
226*b1cdbd2cSJim Jagielski m_layer(layer)
227*b1cdbd2cSJim Jagielski {
228*b1cdbd2cSJim Jagielski //This class reads and write to files which should only be done in
229*b1cdbd2cSJim Jagielski //application mode
230*b1cdbd2cSJim Jagielski if (getMode() == JFW_MODE_DIRECT)
231*b1cdbd2cSJim Jagielski throw FrameworkException(
232*b1cdbd2cSJim Jagielski JFW_E_DIRECT_MODE,
233*b1cdbd2cSJim Jagielski "[Java framework] Trying to access settings files in direct mode.");
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski if (USER_OR_INSTALL == m_layer)
236*b1cdbd2cSJim Jagielski {
237*b1cdbd2cSJim Jagielski if (BootParams::getInstallData().getLength() > 0)
238*b1cdbd2cSJim Jagielski m_layer = INSTALL;
239*b1cdbd2cSJim Jagielski else
240*b1cdbd2cSJim Jagielski m_layer = USER;
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski else
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski m_layer = layer;
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski }
247*b1cdbd2cSJim Jagielski
248*b1cdbd2cSJim Jagielski
load()249*b1cdbd2cSJim Jagielski void NodeJava::load()
250*b1cdbd2cSJim Jagielski {
251*b1cdbd2cSJim Jagielski const rtl::OString sExcMsg("[Java framework] Error in function NodeJava::load"
252*b1cdbd2cSJim Jagielski "(elements.cxx).");
253*b1cdbd2cSJim Jagielski if (SHARED == m_layer)
254*b1cdbd2cSJim Jagielski {
255*b1cdbd2cSJim Jagielski //we do not support yet to write into the shared installation
256*b1cdbd2cSJim Jagielski
257*b1cdbd2cSJim Jagielski //check if shared settings exist at all.
258*b1cdbd2cSJim Jagielski jfw::FileStatus s = checkFileURL(BootParams::getSharedData());
259*b1cdbd2cSJim Jagielski if (s == FILE_INVALID)
260*b1cdbd2cSJim Jagielski throw FrameworkException(
261*b1cdbd2cSJim Jagielski JFW_E_ERROR,
262*b1cdbd2cSJim Jagielski "[Java framework] Invalid file for shared Java settings.");
263*b1cdbd2cSJim Jagielski else if (s == FILE_DOES_NOT_EXIST)
264*b1cdbd2cSJim Jagielski //Writing shared data is not supported yet.
265*b1cdbd2cSJim Jagielski return;
266*b1cdbd2cSJim Jagielski }
267*b1cdbd2cSJim Jagielski else if (USER == m_layer || INSTALL == m_layer)
268*b1cdbd2cSJim Jagielski {
269*b1cdbd2cSJim Jagielski prepareSettingsDocument();
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski else
272*b1cdbd2cSJim Jagielski {
273*b1cdbd2cSJim Jagielski OSL_ASSERT("[Java framework] Unknown enum used.");
274*b1cdbd2cSJim Jagielski }
275*b1cdbd2cSJim Jagielski
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski //Read the user elements
278*b1cdbd2cSJim Jagielski rtl::OString sSettingsPath = getSettingsPath();
279*b1cdbd2cSJim Jagielski //There must not be a share settings file
280*b1cdbd2cSJim Jagielski CXmlDocPtr docUser(xmlParseFile(sSettingsPath.getStr()));
281*b1cdbd2cSJim Jagielski if (docUser == NULL)
282*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
283*b1cdbd2cSJim Jagielski
284*b1cdbd2cSJim Jagielski xmlNode * cur = xmlDocGetRootElement(docUser);
285*b1cdbd2cSJim Jagielski if (cur == NULL || cur->children == NULL)
286*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
287*b1cdbd2cSJim Jagielski
288*b1cdbd2cSJim Jagielski CXmlCharPtr sNil;
289*b1cdbd2cSJim Jagielski cur = cur->children;
290*b1cdbd2cSJim Jagielski while (cur != NULL)
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski if (xmlStrcmp(cur->name, (xmlChar*) "enabled") == 0)
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski //only overwrite share settings if xsi:nil="false"
295*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
296*b1cdbd2cSJim Jagielski cur, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
297*b1cdbd2cSJim Jagielski if (sNil == NULL)
298*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);;
299*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski CXmlCharPtr sEnabled( xmlNodeListGetString(
302*b1cdbd2cSJim Jagielski docUser, cur->children, 1));
303*b1cdbd2cSJim Jagielski if (xmlStrcmp(sEnabled, (xmlChar*) "true") == 0)
304*b1cdbd2cSJim Jagielski m_enabled = boost::optional<sal_Bool>(sal_True);
305*b1cdbd2cSJim Jagielski else if (xmlStrcmp(sEnabled, (xmlChar*) "false") == 0)
306*b1cdbd2cSJim Jagielski m_enabled = boost::optional<sal_Bool>(sal_False);
307*b1cdbd2cSJim Jagielski }
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "userClassPath") == 0)
310*b1cdbd2cSJim Jagielski {
311*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
312*b1cdbd2cSJim Jagielski cur, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
313*b1cdbd2cSJim Jagielski if (sNil == NULL)
314*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
315*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski CXmlCharPtr sUser(xmlNodeListGetString(
318*b1cdbd2cSJim Jagielski docUser, cur->children, 1));
319*b1cdbd2cSJim Jagielski m_userClassPath = boost::optional<rtl::OUString>(rtl::OUString(sUser));
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski }
322*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "javaInfo") == 0)
323*b1cdbd2cSJim Jagielski {
324*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
325*b1cdbd2cSJim Jagielski cur, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
326*b1cdbd2cSJim Jagielski if (sNil == NULL)
327*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
328*b1cdbd2cSJim Jagielski
329*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
330*b1cdbd2cSJim Jagielski {
331*b1cdbd2cSJim Jagielski if (! m_javaInfo)
332*b1cdbd2cSJim Jagielski m_javaInfo = boost::optional<CNodeJavaInfo>(CNodeJavaInfo());
333*b1cdbd2cSJim Jagielski m_javaInfo->loadFromNode(docUser, cur);
334*b1cdbd2cSJim Jagielski }
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "vmParameters") == 0)
337*b1cdbd2cSJim Jagielski {
338*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
339*b1cdbd2cSJim Jagielski cur, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
340*b1cdbd2cSJim Jagielski if (sNil == NULL)
341*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
342*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski if ( ! m_vmParameters)
345*b1cdbd2cSJim Jagielski m_vmParameters = boost::optional<std::vector<rtl::OUString> >(
346*b1cdbd2cSJim Jagielski std::vector<rtl::OUString> ());
347*b1cdbd2cSJim Jagielski
348*b1cdbd2cSJim Jagielski xmlNode * pOpt = cur->children;
349*b1cdbd2cSJim Jagielski while (pOpt != NULL)
350*b1cdbd2cSJim Jagielski {
351*b1cdbd2cSJim Jagielski if (xmlStrcmp(pOpt->name, (xmlChar*) "param") == 0)
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski CXmlCharPtr sOpt;
354*b1cdbd2cSJim Jagielski sOpt = xmlNodeListGetString(
355*b1cdbd2cSJim Jagielski docUser, pOpt->children, 1);
356*b1cdbd2cSJim Jagielski m_vmParameters->push_back(sOpt);
357*b1cdbd2cSJim Jagielski }
358*b1cdbd2cSJim Jagielski pOpt = pOpt->next;
359*b1cdbd2cSJim Jagielski }
360*b1cdbd2cSJim Jagielski }
361*b1cdbd2cSJim Jagielski }
362*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "jreLocations") == 0)
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
365*b1cdbd2cSJim Jagielski cur, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
366*b1cdbd2cSJim Jagielski if (sNil == NULL)
367*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
368*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski if (! m_JRELocations)
371*b1cdbd2cSJim Jagielski m_JRELocations = boost::optional<std::vector<rtl::OUString> >(
372*b1cdbd2cSJim Jagielski std::vector<rtl::OUString>());
373*b1cdbd2cSJim Jagielski
374*b1cdbd2cSJim Jagielski xmlNode * pLoc = cur->children;
375*b1cdbd2cSJim Jagielski while (pLoc != NULL)
376*b1cdbd2cSJim Jagielski {
377*b1cdbd2cSJim Jagielski if (xmlStrcmp(pLoc->name, (xmlChar*) "location") == 0)
378*b1cdbd2cSJim Jagielski {
379*b1cdbd2cSJim Jagielski CXmlCharPtr sLoc;
380*b1cdbd2cSJim Jagielski sLoc = xmlNodeListGetString(
381*b1cdbd2cSJim Jagielski docUser, pLoc->children, 1);
382*b1cdbd2cSJim Jagielski m_JRELocations->push_back(sLoc);
383*b1cdbd2cSJim Jagielski }
384*b1cdbd2cSJim Jagielski pLoc = pLoc->next;
385*b1cdbd2cSJim Jagielski }
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski }
388*b1cdbd2cSJim Jagielski cur = cur->next;
389*b1cdbd2cSJim Jagielski }
390*b1cdbd2cSJim Jagielski }
391*b1cdbd2cSJim Jagielski
getSettingsPath() const392*b1cdbd2cSJim Jagielski ::rtl::OString NodeJava::getSettingsPath() const
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski ::rtl::OString ret;
395*b1cdbd2cSJim Jagielski switch (m_layer)
396*b1cdbd2cSJim Jagielski {
397*b1cdbd2cSJim Jagielski case USER: ret = getUserSettingsPath(); break;
398*b1cdbd2cSJim Jagielski case INSTALL: ret = getInstallSettingsPath(); break;
399*b1cdbd2cSJim Jagielski case SHARED: ret = getSharedSettingsPath(); break;
400*b1cdbd2cSJim Jagielski default:
401*b1cdbd2cSJim Jagielski OSL_ASSERT("[Java framework] NodeJava::getSettingsPath()");
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski return ret;
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski
getSettingsURL() const406*b1cdbd2cSJim Jagielski ::rtl::OUString NodeJava::getSettingsURL() const
407*b1cdbd2cSJim Jagielski {
408*b1cdbd2cSJim Jagielski ::rtl::OUString ret;
409*b1cdbd2cSJim Jagielski switch (m_layer)
410*b1cdbd2cSJim Jagielski {
411*b1cdbd2cSJim Jagielski case USER: ret = BootParams::getUserData(); break;
412*b1cdbd2cSJim Jagielski case INSTALL: ret = BootParams::getInstallData(); break;
413*b1cdbd2cSJim Jagielski case SHARED: ret = BootParams::getSharedData(); break;
414*b1cdbd2cSJim Jagielski default:
415*b1cdbd2cSJim Jagielski OSL_ASSERT("[Java framework] NodeJava::getSettingsURL()");
416*b1cdbd2cSJim Jagielski }
417*b1cdbd2cSJim Jagielski return ret;
418*b1cdbd2cSJim Jagielski }
419*b1cdbd2cSJim Jagielski
prepareSettingsDocument() const420*b1cdbd2cSJim Jagielski void NodeJava::prepareSettingsDocument() const
421*b1cdbd2cSJim Jagielski {
422*b1cdbd2cSJim Jagielski rtl::OString sExcMsg(
423*b1cdbd2cSJim Jagielski "[Java framework] Error in function prepareSettingsDocument"
424*b1cdbd2cSJim Jagielski " (elements.cxx).");
425*b1cdbd2cSJim Jagielski createSettingsDocument();
426*b1cdbd2cSJim Jagielski rtl::OString sSettings = getSettingsPath();
427*b1cdbd2cSJim Jagielski CXmlDocPtr doc(xmlParseFile(sSettings.getStr()));
428*b1cdbd2cSJim Jagielski if (!doc)
429*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
430*b1cdbd2cSJim Jagielski
431*b1cdbd2cSJim Jagielski bool bNeedsSave = false;
432*b1cdbd2cSJim Jagielski createSettingsStructure(doc, & bNeedsSave);
433*b1cdbd2cSJim Jagielski if (bNeedsSave)
434*b1cdbd2cSJim Jagielski {
435*b1cdbd2cSJim Jagielski if (xmlSaveFormatFileEnc(
436*b1cdbd2cSJim Jagielski sSettings.getStr(), doc,"UTF-8", 1) == -1)
437*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
438*b1cdbd2cSJim Jagielski }
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski
write() const441*b1cdbd2cSJim Jagielski void NodeJava::write() const
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski rtl::OString sExcMsg("[Java framework] Error in function NodeJava::writeSettings "
444*b1cdbd2cSJim Jagielski "(elements.cxx).");
445*b1cdbd2cSJim Jagielski CXmlDocPtr docUser;
446*b1cdbd2cSJim Jagielski CXPathContextPtr contextUser;
447*b1cdbd2cSJim Jagielski CXPathObjectPtr pathObj;
448*b1cdbd2cSJim Jagielski
449*b1cdbd2cSJim Jagielski prepareSettingsDocument();
450*b1cdbd2cSJim Jagielski
451*b1cdbd2cSJim Jagielski //Read the user elements
452*b1cdbd2cSJim Jagielski rtl::OString sSettingsPath = getSettingsPath();
453*b1cdbd2cSJim Jagielski docUser = xmlParseFile(sSettingsPath.getStr());
454*b1cdbd2cSJim Jagielski if (docUser == NULL)
455*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
456*b1cdbd2cSJim Jagielski contextUser = xmlXPathNewContext(docUser);
457*b1cdbd2cSJim Jagielski if (xmlXPathRegisterNs(contextUser, (xmlChar*) "jf",
458*b1cdbd2cSJim Jagielski (xmlChar*) NS_JAVA_FRAMEWORK) == -1)
459*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
460*b1cdbd2cSJim Jagielski
461*b1cdbd2cSJim Jagielski xmlNode * root = xmlDocGetRootElement(docUser);
462*b1cdbd2cSJim Jagielski //Get xsi:nil namespace
463*b1cdbd2cSJim Jagielski xmlNs* nsXsi = xmlSearchNsByHref(docUser,
464*b1cdbd2cSJim Jagielski root,
465*b1cdbd2cSJim Jagielski (xmlChar*) NS_SCHEMA_INSTANCE);
466*b1cdbd2cSJim Jagielski
467*b1cdbd2cSJim Jagielski //set the <enabled> element
468*b1cdbd2cSJim Jagielski //The element must exist
469*b1cdbd2cSJim Jagielski if (m_enabled)
470*b1cdbd2cSJim Jagielski {
471*b1cdbd2cSJim Jagielski rtl::OString sExpression= rtl::OString(
472*b1cdbd2cSJim Jagielski "/jf:java/jf:enabled");
473*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression((xmlChar*) sExpression.getStr(),
474*b1cdbd2cSJim Jagielski contextUser);
475*b1cdbd2cSJim Jagielski if ( ! pathObj || xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
476*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
477*b1cdbd2cSJim Jagielski
478*b1cdbd2cSJim Jagielski xmlNode * nodeEnabled = pathObj->nodesetval->nodeTab[0];
479*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeEnabled,
480*b1cdbd2cSJim Jagielski nsXsi,
481*b1cdbd2cSJim Jagielski (xmlChar*) "nil",
482*b1cdbd2cSJim Jagielski (xmlChar*) "false");
483*b1cdbd2cSJim Jagielski
484*b1cdbd2cSJim Jagielski if (m_enabled == boost::optional<sal_Bool>(sal_True))
485*b1cdbd2cSJim Jagielski xmlNodeSetContent(nodeEnabled,(xmlChar*) "true");
486*b1cdbd2cSJim Jagielski else
487*b1cdbd2cSJim Jagielski xmlNodeSetContent(nodeEnabled,(xmlChar*) "false");
488*b1cdbd2cSJim Jagielski }
489*b1cdbd2cSJim Jagielski
490*b1cdbd2cSJim Jagielski //set the <userClassPath> element
491*b1cdbd2cSJim Jagielski //The element must exist
492*b1cdbd2cSJim Jagielski if (m_userClassPath)
493*b1cdbd2cSJim Jagielski {
494*b1cdbd2cSJim Jagielski rtl::OString sExpression= rtl::OString(
495*b1cdbd2cSJim Jagielski "/jf:java/jf:userClassPath");
496*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression((xmlChar*) sExpression.getStr(),
497*b1cdbd2cSJim Jagielski contextUser);
498*b1cdbd2cSJim Jagielski if ( ! pathObj || xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
499*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
500*b1cdbd2cSJim Jagielski
501*b1cdbd2cSJim Jagielski xmlNode * nodeEnabled = pathObj->nodesetval->nodeTab[0];
502*b1cdbd2cSJim Jagielski xmlSetNsProp(nodeEnabled, nsXsi, (xmlChar*) "nil",(xmlChar*) "false");
503*b1cdbd2cSJim Jagielski xmlNodeSetContent(nodeEnabled,(xmlChar*) CXmlCharPtr(*m_userClassPath));
504*b1cdbd2cSJim Jagielski }
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski //set <javaInfo> element
507*b1cdbd2cSJim Jagielski if (m_javaInfo)
508*b1cdbd2cSJim Jagielski {
509*b1cdbd2cSJim Jagielski rtl::OString sExpression= rtl::OString(
510*b1cdbd2cSJim Jagielski "/jf:java/jf:javaInfo");
511*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression((xmlChar*) sExpression.getStr(),
512*b1cdbd2cSJim Jagielski contextUser);
513*b1cdbd2cSJim Jagielski if ( ! pathObj || xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
514*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
515*b1cdbd2cSJim Jagielski m_javaInfo->writeToNode(
516*b1cdbd2cSJim Jagielski docUser, pathObj->nodesetval->nodeTab[0]);
517*b1cdbd2cSJim Jagielski }
518*b1cdbd2cSJim Jagielski
519*b1cdbd2cSJim Jagielski //set <vmParameters> element
520*b1cdbd2cSJim Jagielski if (m_vmParameters)
521*b1cdbd2cSJim Jagielski {
522*b1cdbd2cSJim Jagielski rtl::OString sExpression= rtl::OString(
523*b1cdbd2cSJim Jagielski "/jf:java/jf:vmParameters");
524*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression((xmlChar*) sExpression.getStr(),
525*b1cdbd2cSJim Jagielski contextUser);
526*b1cdbd2cSJim Jagielski if ( ! pathObj || xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
527*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
528*b1cdbd2cSJim Jagielski xmlNode* vmParameters = pathObj->nodesetval->nodeTab[0];
529*b1cdbd2cSJim Jagielski //set xsi:nil = false;
530*b1cdbd2cSJim Jagielski xmlSetNsProp(vmParameters, nsXsi,(xmlChar*) "nil",
531*b1cdbd2cSJim Jagielski (xmlChar*) "false");
532*b1cdbd2cSJim Jagielski
533*b1cdbd2cSJim Jagielski //remove option elements
534*b1cdbd2cSJim Jagielski xmlNode* cur = vmParameters->children;
535*b1cdbd2cSJim Jagielski while (cur != NULL)
536*b1cdbd2cSJim Jagielski {
537*b1cdbd2cSJim Jagielski xmlNode* lastNode = cur;
538*b1cdbd2cSJim Jagielski cur = cur->next;
539*b1cdbd2cSJim Jagielski xmlUnlinkNode(lastNode);
540*b1cdbd2cSJim Jagielski xmlFreeNode(lastNode);
541*b1cdbd2cSJim Jagielski }
542*b1cdbd2cSJim Jagielski //add a new line after <vmParameters>
543*b1cdbd2cSJim Jagielski if (m_vmParameters->size() > 0)
544*b1cdbd2cSJim Jagielski {
545*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
546*b1cdbd2cSJim Jagielski xmlAddChild(vmParameters, nodeCrLf);
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski
549*b1cdbd2cSJim Jagielski typedef std::vector<rtl::OUString>::const_iterator cit;
550*b1cdbd2cSJim Jagielski for (cit i = m_vmParameters->begin(); i != m_vmParameters->end(); i++)
551*b1cdbd2cSJim Jagielski {
552*b1cdbd2cSJim Jagielski xmlNewTextChild(vmParameters, NULL, (xmlChar*) "param",
553*b1cdbd2cSJim Jagielski CXmlCharPtr(*i));
554*b1cdbd2cSJim Jagielski //add a new line
555*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
556*b1cdbd2cSJim Jagielski xmlAddChild(vmParameters, nodeCrLf);
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski
560*b1cdbd2cSJim Jagielski //set <jreLocations> element
561*b1cdbd2cSJim Jagielski if (m_JRELocations)
562*b1cdbd2cSJim Jagielski {
563*b1cdbd2cSJim Jagielski rtl::OString sExpression= rtl::OString(
564*b1cdbd2cSJim Jagielski "/jf:java/jf:jreLocations");
565*b1cdbd2cSJim Jagielski pathObj = xmlXPathEvalExpression((xmlChar*) sExpression.getStr(),
566*b1cdbd2cSJim Jagielski contextUser);
567*b1cdbd2cSJim Jagielski if ( ! pathObj || xmlXPathNodeSetIsEmpty(pathObj->nodesetval))
568*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
569*b1cdbd2cSJim Jagielski xmlNode* jreLocationsNode = pathObj->nodesetval->nodeTab[0];
570*b1cdbd2cSJim Jagielski //set xsi:nil = false;
571*b1cdbd2cSJim Jagielski xmlSetNsProp(jreLocationsNode, nsXsi,(xmlChar*) "nil",
572*b1cdbd2cSJim Jagielski (xmlChar*) "false");
573*b1cdbd2cSJim Jagielski
574*b1cdbd2cSJim Jagielski //remove option elements
575*b1cdbd2cSJim Jagielski xmlNode* cur = jreLocationsNode->children;
576*b1cdbd2cSJim Jagielski while (cur != NULL)
577*b1cdbd2cSJim Jagielski {
578*b1cdbd2cSJim Jagielski xmlNode* lastNode = cur;
579*b1cdbd2cSJim Jagielski cur = cur->next;
580*b1cdbd2cSJim Jagielski xmlUnlinkNode(lastNode);
581*b1cdbd2cSJim Jagielski xmlFreeNode(lastNode);
582*b1cdbd2cSJim Jagielski }
583*b1cdbd2cSJim Jagielski //add a new line after <vmParameters>
584*b1cdbd2cSJim Jagielski if (m_JRELocations->size() > 0)
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
587*b1cdbd2cSJim Jagielski xmlAddChild(jreLocationsNode, nodeCrLf);
588*b1cdbd2cSJim Jagielski }
589*b1cdbd2cSJim Jagielski
590*b1cdbd2cSJim Jagielski typedef std::vector<rtl::OUString>::const_iterator cit;
591*b1cdbd2cSJim Jagielski for (cit i = m_JRELocations->begin(); i != m_JRELocations->end(); i++)
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski xmlNewTextChild(jreLocationsNode, NULL, (xmlChar*) "location",
594*b1cdbd2cSJim Jagielski CXmlCharPtr(*i));
595*b1cdbd2cSJim Jagielski //add a new line
596*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
597*b1cdbd2cSJim Jagielski xmlAddChild(jreLocationsNode, nodeCrLf);
598*b1cdbd2cSJim Jagielski }
599*b1cdbd2cSJim Jagielski }
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski if (INSTALL == m_layer)
602*b1cdbd2cSJim Jagielski {
603*b1cdbd2cSJim Jagielski //now write the current system time
604*b1cdbd2cSJim Jagielski ::TimeValue curTime = {0,0};
605*b1cdbd2cSJim Jagielski if (::osl_getSystemTime(& curTime))
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski rtl::OUString sSeconds =
608*b1cdbd2cSJim Jagielski rtl::OUString::valueOf((sal_Int64) curTime.Seconds);
609*b1cdbd2cSJim Jagielski xmlNewTextChild(
610*b1cdbd2cSJim Jagielski root,NULL, (xmlChar*) "modified", CXmlCharPtr(sSeconds));
611*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
612*b1cdbd2cSJim Jagielski xmlAddChild(root, nodeCrLf);
613*b1cdbd2cSJim Jagielski }
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski if (xmlSaveFormatFile(sSettingsPath.getStr(), docUser, 1) == -1)
616*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski
setEnabled(sal_Bool bEnabled)619*b1cdbd2cSJim Jagielski void NodeJava::setEnabled(sal_Bool bEnabled)
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski m_enabled = boost::optional<sal_Bool>(bEnabled);
622*b1cdbd2cSJim Jagielski }
623*b1cdbd2cSJim Jagielski
624*b1cdbd2cSJim Jagielski
setUserClassPath(const rtl::OUString & sClassPath)625*b1cdbd2cSJim Jagielski void NodeJava::setUserClassPath(const rtl::OUString & sClassPath)
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski m_userClassPath = boost::optional<rtl::OUString>(sClassPath);
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski
setJavaInfo(const JavaInfo * pInfo,bool bAutoSelect)630*b1cdbd2cSJim Jagielski void NodeJava::setJavaInfo(const JavaInfo * pInfo, bool bAutoSelect)
631*b1cdbd2cSJim Jagielski {
632*b1cdbd2cSJim Jagielski if (!m_javaInfo)
633*b1cdbd2cSJim Jagielski m_javaInfo = boost::optional<CNodeJavaInfo>(CNodeJavaInfo());
634*b1cdbd2cSJim Jagielski m_javaInfo->bAutoSelect = bAutoSelect;
635*b1cdbd2cSJim Jagielski m_javaInfo->bNil = false;
636*b1cdbd2cSJim Jagielski
637*b1cdbd2cSJim Jagielski if (pInfo != NULL)
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski m_javaInfo->m_bEmptyNode = false;
640*b1cdbd2cSJim Jagielski m_javaInfo->sVendor = pInfo->sVendor;
641*b1cdbd2cSJim Jagielski m_javaInfo->sLocation = pInfo->sLocation;
642*b1cdbd2cSJim Jagielski m_javaInfo->sVersion = pInfo->sVersion;
643*b1cdbd2cSJim Jagielski m_javaInfo->nFeatures = pInfo->nFeatures;
644*b1cdbd2cSJim Jagielski m_javaInfo->nRequirements = pInfo->nRequirements;
645*b1cdbd2cSJim Jagielski m_javaInfo->arVendorData = pInfo->arVendorData;
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski else
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski m_javaInfo->m_bEmptyNode = true;
650*b1cdbd2cSJim Jagielski rtl::OUString sEmpty;
651*b1cdbd2cSJim Jagielski m_javaInfo->sVendor = sEmpty;
652*b1cdbd2cSJim Jagielski m_javaInfo->sLocation = sEmpty;
653*b1cdbd2cSJim Jagielski m_javaInfo->sVersion = sEmpty;
654*b1cdbd2cSJim Jagielski m_javaInfo->nFeatures = 0;
655*b1cdbd2cSJim Jagielski m_javaInfo->nRequirements = 0;
656*b1cdbd2cSJim Jagielski m_javaInfo->arVendorData = rtl::ByteSequence();
657*b1cdbd2cSJim Jagielski }
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski
setVmParameters(rtl_uString ** arOptions,sal_Int32 size)660*b1cdbd2cSJim Jagielski void NodeJava::setVmParameters(rtl_uString * * arOptions, sal_Int32 size)
661*b1cdbd2cSJim Jagielski {
662*b1cdbd2cSJim Jagielski OSL_ASSERT( !(arOptions == 0 && size != 0));
663*b1cdbd2cSJim Jagielski if ( ! m_vmParameters)
664*b1cdbd2cSJim Jagielski m_vmParameters = boost::optional<std::vector<rtl::OUString> >(
665*b1cdbd2cSJim Jagielski std::vector<rtl::OUString>());
666*b1cdbd2cSJim Jagielski m_vmParameters->clear();
667*b1cdbd2cSJim Jagielski if (arOptions != NULL)
668*b1cdbd2cSJim Jagielski {
669*b1cdbd2cSJim Jagielski for (int i = 0; i < size; i++)
670*b1cdbd2cSJim Jagielski {
671*b1cdbd2cSJim Jagielski const rtl::OUString sOption(static_cast<rtl_uString*>(arOptions[i]));
672*b1cdbd2cSJim Jagielski m_vmParameters->push_back(sOption);
673*b1cdbd2cSJim Jagielski }
674*b1cdbd2cSJim Jagielski }
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski
setJRELocations(rtl_uString ** arLocations,sal_Int32 size)677*b1cdbd2cSJim Jagielski void NodeJava::setJRELocations(rtl_uString * * arLocations, sal_Int32 size)
678*b1cdbd2cSJim Jagielski {
679*b1cdbd2cSJim Jagielski OSL_ASSERT( !(arLocations == 0 && size != 0));
680*b1cdbd2cSJim Jagielski if (! m_JRELocations)
681*b1cdbd2cSJim Jagielski m_JRELocations = boost::optional<std::vector<rtl::OUString> > (
682*b1cdbd2cSJim Jagielski std::vector<rtl::OUString>());
683*b1cdbd2cSJim Jagielski m_JRELocations->clear();
684*b1cdbd2cSJim Jagielski if (arLocations != NULL)
685*b1cdbd2cSJim Jagielski {
686*b1cdbd2cSJim Jagielski for (int i = 0; i < size; i++)
687*b1cdbd2cSJim Jagielski {
688*b1cdbd2cSJim Jagielski const rtl::OUString & sLocation = static_cast<rtl_uString*>(arLocations[i]);
689*b1cdbd2cSJim Jagielski
690*b1cdbd2cSJim Jagielski //only add the path if not already present
691*b1cdbd2cSJim Jagielski std::vector<rtl::OUString>::const_iterator it =
692*b1cdbd2cSJim Jagielski std::find(m_JRELocations->begin(), m_JRELocations->end(),
693*b1cdbd2cSJim Jagielski sLocation);
694*b1cdbd2cSJim Jagielski if (it == m_JRELocations->end())
695*b1cdbd2cSJim Jagielski m_JRELocations->push_back(sLocation);
696*b1cdbd2cSJim Jagielski }
697*b1cdbd2cSJim Jagielski }
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski
addJRELocation(rtl_uString * sLocation)700*b1cdbd2cSJim Jagielski void NodeJava::addJRELocation(rtl_uString * sLocation)
701*b1cdbd2cSJim Jagielski {
702*b1cdbd2cSJim Jagielski OSL_ASSERT( sLocation);
703*b1cdbd2cSJim Jagielski if (!m_JRELocations)
704*b1cdbd2cSJim Jagielski m_JRELocations = boost::optional<std::vector<rtl::OUString> >(
705*b1cdbd2cSJim Jagielski std::vector<rtl::OUString> ());
706*b1cdbd2cSJim Jagielski //only add the path if not already present
707*b1cdbd2cSJim Jagielski std::vector<rtl::OUString>::const_iterator it =
708*b1cdbd2cSJim Jagielski std::find(m_JRELocations->begin(), m_JRELocations->end(),
709*b1cdbd2cSJim Jagielski rtl::OUString(sLocation));
710*b1cdbd2cSJim Jagielski if (it == m_JRELocations->end())
711*b1cdbd2cSJim Jagielski m_JRELocations->push_back(rtl::OUString(sLocation));
712*b1cdbd2cSJim Jagielski }
713*b1cdbd2cSJim Jagielski
getEnabled() const714*b1cdbd2cSJim Jagielski const boost::optional<sal_Bool> & NodeJava::getEnabled() const
715*b1cdbd2cSJim Jagielski {
716*b1cdbd2cSJim Jagielski return m_enabled;
717*b1cdbd2cSJim Jagielski }
718*b1cdbd2cSJim Jagielski
719*b1cdbd2cSJim Jagielski const boost::optional<std::vector<rtl::OUString> >&
getJRELocations() const720*b1cdbd2cSJim Jagielski NodeJava::getJRELocations() const
721*b1cdbd2cSJim Jagielski {
722*b1cdbd2cSJim Jagielski return m_JRELocations;
723*b1cdbd2cSJim Jagielski }
724*b1cdbd2cSJim Jagielski
getUserClassPath() const725*b1cdbd2cSJim Jagielski const boost::optional<rtl::OUString> & NodeJava::getUserClassPath() const
726*b1cdbd2cSJim Jagielski {
727*b1cdbd2cSJim Jagielski return m_userClassPath;
728*b1cdbd2cSJim Jagielski }
729*b1cdbd2cSJim Jagielski
getVmParameters() const730*b1cdbd2cSJim Jagielski const boost::optional<std::vector<rtl::OUString> > & NodeJava::getVmParameters() const
731*b1cdbd2cSJim Jagielski {
732*b1cdbd2cSJim Jagielski return m_vmParameters;
733*b1cdbd2cSJim Jagielski }
734*b1cdbd2cSJim Jagielski
getJavaInfo() const735*b1cdbd2cSJim Jagielski const boost::optional<CNodeJavaInfo> & NodeJava::getJavaInfo() const
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski return m_javaInfo;
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski
checkSettingsFileStatus() const740*b1cdbd2cSJim Jagielski jfw::FileStatus NodeJava::checkSettingsFileStatus() const
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski jfw::FileStatus ret = FILE_DOES_NOT_EXIST;
743*b1cdbd2cSJim Jagielski
744*b1cdbd2cSJim Jagielski const rtl::OUString sURL = getSettingsURL();
745*b1cdbd2cSJim Jagielski //check the file time
746*b1cdbd2cSJim Jagielski ::osl::DirectoryItem item;
747*b1cdbd2cSJim Jagielski File::RC rc = ::osl::DirectoryItem::get(sURL, item);
748*b1cdbd2cSJim Jagielski if (File::E_None == rc)
749*b1cdbd2cSJim Jagielski {
750*b1cdbd2cSJim Jagielski ::osl::FileStatus stat(
751*b1cdbd2cSJim Jagielski FileStatusMask_Validate
752*b1cdbd2cSJim Jagielski | FileStatusMask_CreationTime
753*b1cdbd2cSJim Jagielski | FileStatusMask_ModifyTime);
754*b1cdbd2cSJim Jagielski File::RC rc_stat = item.getFileStatus(stat);
755*b1cdbd2cSJim Jagielski if (File::E_None == rc_stat)
756*b1cdbd2cSJim Jagielski {
757*b1cdbd2cSJim Jagielski // This
758*b1cdbd2cSJim Jagielski //function may be called multiple times when a java is started.
759*b1cdbd2cSJim Jagielski //If the expiretime is too small then we may loop because everytime
760*b1cdbd2cSJim Jagielski //the file is deleted and we need to search for a java again.
761*b1cdbd2cSJim Jagielski if (INSTALL == m_layer)
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski //file exists. Check if it is too old
764*b1cdbd2cSJim Jagielski //Do not use the creation time. On Windows 2003 server I noticed
765*b1cdbd2cSJim Jagielski //that after removing the file and shortly later creating it again
766*b1cdbd2cSJim Jagielski //did not change the creation time. That is the newly created file
767*b1cdbd2cSJim Jagielski //had the creation time of the former file.
768*b1cdbd2cSJim Jagielski // ::TimeValue modTime = stat.getModifyTime();
769*b1cdbd2cSJim Jagielski ::TimeValue curTime = {0,0};
770*b1cdbd2cSJim Jagielski ret = FILE_OK;
771*b1cdbd2cSJim Jagielski if (sal_True == ::osl_getSystemTime(& curTime))
772*b1cdbd2cSJim Jagielski {
773*b1cdbd2cSJim Jagielski //get the modified time recorded in the <modified> element
774*b1cdbd2cSJim Jagielski sal_uInt32 modified = getModifiedTime();
775*b1cdbd2cSJim Jagielski OSL_ASSERT(modified <= curTime.Seconds);
776*b1cdbd2cSJim Jagielski //Only if modified has a valued then NodeJava::write was called,
777*b1cdbd2cSJim Jagielski //then the xml structure was filled with data.
778*b1cdbd2cSJim Jagielski
779*b1cdbd2cSJim Jagielski if ( modified && curTime.Seconds - modified >
780*b1cdbd2cSJim Jagielski BootParams::getInstallDataExpiration())
781*b1cdbd2cSJim Jagielski {
782*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL >=2
783*b1cdbd2cSJim Jagielski fprintf(stderr, "[Java framework] Settings file is %d seconds old. \n",
784*b1cdbd2cSJim Jagielski (int)( curTime.Seconds - modified));
785*b1cdbd2cSJim Jagielski rtl::OString s = rtl::OUStringToOString(sURL, osl_getThreadTextEncoding());
786*b1cdbd2cSJim Jagielski fprintf(stderr, "[Java framework] Settings file is exspired. Deleting settings file at \n%s\n", s.getStr());
787*b1cdbd2cSJim Jagielski #endif
788*b1cdbd2cSJim Jagielski //delete file
789*b1cdbd2cSJim Jagielski File f(sURL);
790*b1cdbd2cSJim Jagielski if (File::E_None == f.open(OpenFlag_Write | OpenFlag_Read)
791*b1cdbd2cSJim Jagielski && File::E_None == f.setPos(0, 0)
792*b1cdbd2cSJim Jagielski && File::E_None == f.setSize(0))
793*b1cdbd2cSJim Jagielski ret = FILE_DOES_NOT_EXIST;
794*b1cdbd2cSJim Jagielski else
795*b1cdbd2cSJim Jagielski ret = FILE_INVALID;
796*b1cdbd2cSJim Jagielski }
797*b1cdbd2cSJim Jagielski else
798*b1cdbd2cSJim Jagielski {
799*b1cdbd2cSJim Jagielski ret = FILE_OK;
800*b1cdbd2cSJim Jagielski }
801*b1cdbd2cSJim Jagielski }
802*b1cdbd2cSJim Jagielski else // osl_getSystemTime
803*b1cdbd2cSJim Jagielski {
804*b1cdbd2cSJim Jagielski ret = FILE_INVALID;
805*b1cdbd2cSJim Jagielski }
806*b1cdbd2cSJim Jagielski }
807*b1cdbd2cSJim Jagielski else // INSTALL == m_layer
808*b1cdbd2cSJim Jagielski {
809*b1cdbd2cSJim Jagielski ret = FILE_OK;
810*b1cdbd2cSJim Jagielski }
811*b1cdbd2cSJim Jagielski }
812*b1cdbd2cSJim Jagielski else if (File::E_NOENT == rc_stat)
813*b1cdbd2cSJim Jagielski {
814*b1cdbd2cSJim Jagielski ret = FILE_DOES_NOT_EXIST;
815*b1cdbd2cSJim Jagielski }
816*b1cdbd2cSJim Jagielski else
817*b1cdbd2cSJim Jagielski {
818*b1cdbd2cSJim Jagielski ret = FILE_INVALID;
819*b1cdbd2cSJim Jagielski }
820*b1cdbd2cSJim Jagielski }
821*b1cdbd2cSJim Jagielski else if(File::E_NOENT == rc)
822*b1cdbd2cSJim Jagielski {
823*b1cdbd2cSJim Jagielski ret = FILE_DOES_NOT_EXIST;
824*b1cdbd2cSJim Jagielski }
825*b1cdbd2cSJim Jagielski else
826*b1cdbd2cSJim Jagielski {
827*b1cdbd2cSJim Jagielski ret = FILE_INVALID;
828*b1cdbd2cSJim Jagielski }
829*b1cdbd2cSJim Jagielski return ret;
830*b1cdbd2cSJim Jagielski }
831*b1cdbd2cSJim Jagielski
createSettingsDocument() const832*b1cdbd2cSJim Jagielski void NodeJava::createSettingsDocument() const
833*b1cdbd2cSJim Jagielski {
834*b1cdbd2cSJim Jagielski const rtl::OUString sURL = getSettingsURL();
835*b1cdbd2cSJim Jagielski //make sure there is a user directory
836*b1cdbd2cSJim Jagielski rtl::OString sExcMsg("[Java framework] Error in function createSettingsDocument "
837*b1cdbd2cSJim Jagielski "(elements.cxx).");
838*b1cdbd2cSJim Jagielski // check if javasettings.xml already exist
839*b1cdbd2cSJim Jagielski if (FILE_OK == checkSettingsFileStatus())
840*b1cdbd2cSJim Jagielski return;
841*b1cdbd2cSJim Jagielski
842*b1cdbd2cSJim Jagielski //make sure that the directories are created in case they do not exist
843*b1cdbd2cSJim Jagielski FileBase::RC rcFile = Directory::createPath(getDirFromFile(sURL));
844*b1cdbd2cSJim Jagielski if (rcFile != FileBase::E_EXIST && rcFile != FileBase::E_None)
845*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
846*b1cdbd2cSJim Jagielski
847*b1cdbd2cSJim Jagielski //javasettings.xml does not exist yet
848*b1cdbd2cSJim Jagielski CXmlDocPtr doc(xmlNewDoc((xmlChar *)"1.0"));
849*b1cdbd2cSJim Jagielski if (! doc)
850*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
851*b1cdbd2cSJim Jagielski //Create a comment
852*b1cdbd2cSJim Jagielski xmlNewDocComment(
853*b1cdbd2cSJim Jagielski doc, (xmlChar *) "This is a generated file. Do not alter this file!");
854*b1cdbd2cSJim Jagielski
855*b1cdbd2cSJim Jagielski //Create the root element and name spaces
856*b1cdbd2cSJim Jagielski xmlNodePtr root = xmlNewDocNode(
857*b1cdbd2cSJim Jagielski doc, NULL, (xmlChar *) "java", (xmlChar *) "\n");
858*b1cdbd2cSJim Jagielski
859*b1cdbd2cSJim Jagielski if (root == NULL)
860*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
861*b1cdbd2cSJim Jagielski
862*b1cdbd2cSJim Jagielski if (xmlNewNs(root, (xmlChar *) NS_JAVA_FRAMEWORK,NULL) == NULL)
863*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
864*b1cdbd2cSJim Jagielski if (xmlNewNs(root,(xmlChar*) NS_SCHEMA_INSTANCE,(xmlChar*)"xsi") == NULL)
865*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
866*b1cdbd2cSJim Jagielski xmlDocSetRootElement(doc, root);
867*b1cdbd2cSJim Jagielski
868*b1cdbd2cSJim Jagielski //Create a comment
869*b1cdbd2cSJim Jagielski xmlNodePtr com = xmlNewComment(
870*b1cdbd2cSJim Jagielski (xmlChar *) "This is a generated file. Do not alter this file!");
871*b1cdbd2cSJim Jagielski if (com == NULL)
872*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
873*b1cdbd2cSJim Jagielski
874*b1cdbd2cSJim Jagielski if (xmlAddPrevSibling(root, com) == NULL)
875*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
876*b1cdbd2cSJim Jagielski
877*b1cdbd2cSJim Jagielski const rtl::OString path = getSettingsPath();
878*b1cdbd2cSJim Jagielski if (xmlSaveFormatFileEnc(path.getStr(), doc,"UTF-8", 1) == -1)
879*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
880*b1cdbd2cSJim Jagielski }
881*b1cdbd2cSJim Jagielski
882*b1cdbd2cSJim Jagielski //=====================================================================
CNodeJavaInfo()883*b1cdbd2cSJim Jagielski CNodeJavaInfo::CNodeJavaInfo() :
884*b1cdbd2cSJim Jagielski m_bEmptyNode(false), bNil(true), bAutoSelect(true),
885*b1cdbd2cSJim Jagielski nFeatures(0), nRequirements(0)
886*b1cdbd2cSJim Jagielski {
887*b1cdbd2cSJim Jagielski }
888*b1cdbd2cSJim Jagielski
~CNodeJavaInfo()889*b1cdbd2cSJim Jagielski CNodeJavaInfo::~CNodeJavaInfo()
890*b1cdbd2cSJim Jagielski {
891*b1cdbd2cSJim Jagielski }
892*b1cdbd2cSJim Jagielski
loadFromNode(xmlDoc * pDoc,xmlNode * pJavaInfo)893*b1cdbd2cSJim Jagielski void CNodeJavaInfo::loadFromNode(xmlDoc * pDoc, xmlNode * pJavaInfo)
894*b1cdbd2cSJim Jagielski {
895*b1cdbd2cSJim Jagielski rtl::OString sExcMsg("[Java framework] Error in function NodeJavaInfo::loadFromNode "
896*b1cdbd2cSJim Jagielski "(elements.cxx).");
897*b1cdbd2cSJim Jagielski
898*b1cdbd2cSJim Jagielski OSL_ASSERT(pJavaInfo && pDoc);
899*b1cdbd2cSJim Jagielski if (pJavaInfo->children == NULL)
900*b1cdbd2cSJim Jagielski return;
901*b1cdbd2cSJim Jagielski //Get the xsi:nil attribute;
902*b1cdbd2cSJim Jagielski CXmlCharPtr sNil;
903*b1cdbd2cSJim Jagielski sNil = xmlGetNsProp(
904*b1cdbd2cSJim Jagielski pJavaInfo, (xmlChar*) "nil", (xmlChar*) NS_SCHEMA_INSTANCE);
905*b1cdbd2cSJim Jagielski if ( ! sNil)
906*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
907*b1cdbd2cSJim Jagielski
908*b1cdbd2cSJim Jagielski if (xmlStrcmp(sNil, (xmlChar*) "true") == 0)
909*b1cdbd2cSJim Jagielski bNil = true;
910*b1cdbd2cSJim Jagielski else if (xmlStrcmp(sNil, (xmlChar*) "false") == 0)
911*b1cdbd2cSJim Jagielski bNil = false;
912*b1cdbd2cSJim Jagielski else
913*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
914*b1cdbd2cSJim Jagielski if (bNil == true)
915*b1cdbd2cSJim Jagielski return;
916*b1cdbd2cSJim Jagielski
917*b1cdbd2cSJim Jagielski //Get javaInfo@manuallySelected attribute
918*b1cdbd2cSJim Jagielski CXmlCharPtr sAutoSelect;
919*b1cdbd2cSJim Jagielski sAutoSelect = xmlGetProp(
920*b1cdbd2cSJim Jagielski pJavaInfo, (xmlChar*) "autoSelect");
921*b1cdbd2cSJim Jagielski if ( ! sAutoSelect)
922*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
923*b1cdbd2cSJim Jagielski
924*b1cdbd2cSJim Jagielski if (xmlStrcmp(sAutoSelect, (xmlChar*) "true") == 0)
925*b1cdbd2cSJim Jagielski bAutoSelect = true;
926*b1cdbd2cSJim Jagielski else if (xmlStrcmp(sAutoSelect, (xmlChar*) "false") == 0)
927*b1cdbd2cSJim Jagielski bAutoSelect = false;
928*b1cdbd2cSJim Jagielski else
929*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
930*b1cdbd2cSJim Jagielski
931*b1cdbd2cSJim Jagielski xmlNode * cur = pJavaInfo->children;
932*b1cdbd2cSJim Jagielski
933*b1cdbd2cSJim Jagielski while (cur != NULL)
934*b1cdbd2cSJim Jagielski {
935*b1cdbd2cSJim Jagielski if (xmlStrcmp(cur->name, (xmlChar*) "vendor") == 0)
936*b1cdbd2cSJim Jagielski {
937*b1cdbd2cSJim Jagielski CXmlCharPtr xmlVendor;
938*b1cdbd2cSJim Jagielski xmlVendor = xmlNodeListGetString(
939*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
940*b1cdbd2cSJim Jagielski if (! xmlVendor)
941*b1cdbd2cSJim Jagielski return;
942*b1cdbd2cSJim Jagielski sVendor = xmlVendor;
943*b1cdbd2cSJim Jagielski }
944*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "location") == 0)
945*b1cdbd2cSJim Jagielski {
946*b1cdbd2cSJim Jagielski CXmlCharPtr xmlLocation;
947*b1cdbd2cSJim Jagielski xmlLocation = xmlNodeListGetString(
948*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
949*b1cdbd2cSJim Jagielski sLocation = xmlLocation;
950*b1cdbd2cSJim Jagielski }
951*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "version") == 0)
952*b1cdbd2cSJim Jagielski {
953*b1cdbd2cSJim Jagielski CXmlCharPtr xmlVersion;
954*b1cdbd2cSJim Jagielski xmlVersion = xmlNodeListGetString(
955*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
956*b1cdbd2cSJim Jagielski sVersion = xmlVersion;
957*b1cdbd2cSJim Jagielski }
958*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "features")== 0)
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski CXmlCharPtr xmlFeatures;
961*b1cdbd2cSJim Jagielski xmlFeatures = xmlNodeListGetString(
962*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
963*b1cdbd2cSJim Jagielski rtl::OUString sFeatures = xmlFeatures;
964*b1cdbd2cSJim Jagielski nFeatures = sFeatures.toInt64(16);
965*b1cdbd2cSJim Jagielski }
966*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "requirements") == 0)
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski CXmlCharPtr xmlRequire;
969*b1cdbd2cSJim Jagielski xmlRequire = xmlNodeListGetString(
970*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
971*b1cdbd2cSJim Jagielski rtl::OUString sRequire = xmlRequire;
972*b1cdbd2cSJim Jagielski nRequirements = sRequire.toInt64(16);
973*b1cdbd2cSJim Jagielski #ifdef MACOSX
974*b1cdbd2cSJim Jagielski //javaldx is not used anymore in the mac build. In case the Java
975*b1cdbd2cSJim Jagielski //corresponding to the saved settings does not exist anymore the
976*b1cdbd2cSJim Jagielski //javavm services will look for an existing Java after creation of
977*b1cdbd2cSJim Jagielski //the JVM failed. See stoc/source/javavm/javavm.cxx. Only if
978*b1cdbd2cSJim Jagielski //nRequirements does not have the flag JFW_REQUIRE_NEEDRESTART the
979*b1cdbd2cSJim Jagielski //jvm of the new selected JRE will be started. Old settings (before
980*b1cdbd2cSJim Jagielski //OOo 3.3) still contain the flag which can be safely ignored.
981*b1cdbd2cSJim Jagielski nRequirements &= ~JFW_REQUIRE_NEEDRESTART;
982*b1cdbd2cSJim Jagielski #endif
983*b1cdbd2cSJim Jagielski }
984*b1cdbd2cSJim Jagielski else if (xmlStrcmp(cur->name, (xmlChar*) "vendorData") == 0)
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski CXmlCharPtr xmlData;
987*b1cdbd2cSJim Jagielski xmlData = xmlNodeListGetString(
988*b1cdbd2cSJim Jagielski pDoc, cur->children, 1);
989*b1cdbd2cSJim Jagielski xmlChar* _data = (xmlChar*) xmlData;
990*b1cdbd2cSJim Jagielski if (_data)
991*b1cdbd2cSJim Jagielski {
992*b1cdbd2cSJim Jagielski rtl::ByteSequence seq((sal_Int8*) _data, strlen((char*)_data));
993*b1cdbd2cSJim Jagielski arVendorData = decodeBase16(seq);
994*b1cdbd2cSJim Jagielski }
995*b1cdbd2cSJim Jagielski }
996*b1cdbd2cSJim Jagielski cur = cur->next;
997*b1cdbd2cSJim Jagielski }
998*b1cdbd2cSJim Jagielski
999*b1cdbd2cSJim Jagielski if (sVendor.getLength() == 0)
1000*b1cdbd2cSJim Jagielski m_bEmptyNode = true;
1001*b1cdbd2cSJim Jagielski //Get the javainfo attributes
1002*b1cdbd2cSJim Jagielski CXmlCharPtr sVendorUpdate;
1003*b1cdbd2cSJim Jagielski sVendorUpdate = xmlGetProp(pJavaInfo,
1004*b1cdbd2cSJim Jagielski (xmlChar*) "vendorUpdate");
1005*b1cdbd2cSJim Jagielski if ( ! sVendorUpdate)
1006*b1cdbd2cSJim Jagielski throw FrameworkException(JFW_E_ERROR, sExcMsg);
1007*b1cdbd2cSJim Jagielski sAttrVendorUpdate = sVendorUpdate;
1008*b1cdbd2cSJim Jagielski }
1009*b1cdbd2cSJim Jagielski
1010*b1cdbd2cSJim Jagielski
writeToNode(xmlDoc * pDoc,xmlNode * pJavaInfoNode) const1011*b1cdbd2cSJim Jagielski void CNodeJavaInfo::writeToNode(xmlDoc* pDoc,
1012*b1cdbd2cSJim Jagielski xmlNode* pJavaInfoNode) const
1013*b1cdbd2cSJim Jagielski
1014*b1cdbd2cSJim Jagielski {
1015*b1cdbd2cSJim Jagielski OSL_ASSERT(pJavaInfoNode && pDoc);
1016*b1cdbd2cSJim Jagielski rtl::OString sExcMsg("[Java framework] Error in function NodeJavaInfo::writeToNode "
1017*b1cdbd2cSJim Jagielski "(elements.cxx).");
1018*b1cdbd2cSJim Jagielski
1019*b1cdbd2cSJim Jagielski //write the attribute vendorSettings
1020*b1cdbd2cSJim Jagielski
1021*b1cdbd2cSJim Jagielski //javaInfo@vendorUpdate
1022*b1cdbd2cSJim Jagielski //creates the attribute if necessary
1023*b1cdbd2cSJim Jagielski rtl::OString sUpdated = getElementUpdated();
1024*b1cdbd2cSJim Jagielski
1025*b1cdbd2cSJim Jagielski xmlSetProp(pJavaInfoNode, (xmlChar*)"vendorUpdate",
1026*b1cdbd2cSJim Jagielski (xmlChar*) sUpdated.getStr());
1027*b1cdbd2cSJim Jagielski
1028*b1cdbd2cSJim Jagielski //javaInfo@autoSelect
1029*b1cdbd2cSJim Jagielski xmlSetProp(pJavaInfoNode, (xmlChar*)"autoSelect",
1030*b1cdbd2cSJim Jagielski (xmlChar*) (bAutoSelect == true ? "true" : "false"));
1031*b1cdbd2cSJim Jagielski
1032*b1cdbd2cSJim Jagielski //Set xsi:nil in javaInfo element to false
1033*b1cdbd2cSJim Jagielski //the xmlNs pointer must not be destroyed
1034*b1cdbd2cSJim Jagielski xmlNs* nsXsi = xmlSearchNsByHref((xmlDoc*) pDoc,
1035*b1cdbd2cSJim Jagielski pJavaInfoNode,
1036*b1cdbd2cSJim Jagielski (xmlChar*) NS_SCHEMA_INSTANCE);
1037*b1cdbd2cSJim Jagielski
1038*b1cdbd2cSJim Jagielski xmlSetNsProp(pJavaInfoNode,
1039*b1cdbd2cSJim Jagielski nsXsi,
1040*b1cdbd2cSJim Jagielski (xmlChar*) "nil",
1041*b1cdbd2cSJim Jagielski (xmlChar*) "false");
1042*b1cdbd2cSJim Jagielski
1043*b1cdbd2cSJim Jagielski //Delete the children of JavaInfo
1044*b1cdbd2cSJim Jagielski xmlNode* cur = pJavaInfoNode->children;
1045*b1cdbd2cSJim Jagielski while (cur != NULL)
1046*b1cdbd2cSJim Jagielski {
1047*b1cdbd2cSJim Jagielski xmlNode* lastNode = cur;
1048*b1cdbd2cSJim Jagielski cur = cur->next;
1049*b1cdbd2cSJim Jagielski xmlUnlinkNode(lastNode);
1050*b1cdbd2cSJim Jagielski xmlFreeNode(lastNode);
1051*b1cdbd2cSJim Jagielski }
1052*b1cdbd2cSJim Jagielski
1053*b1cdbd2cSJim Jagielski //If the JavaInfo was set with an empty value,
1054*b1cdbd2cSJim Jagielski //then we are done.
1055*b1cdbd2cSJim Jagielski if (m_bEmptyNode)
1056*b1cdbd2cSJim Jagielski return;
1057*b1cdbd2cSJim Jagielski
1058*b1cdbd2cSJim Jagielski //add a new line after <javaInfo>
1059*b1cdbd2cSJim Jagielski xmlNode * nodeCrLf = xmlNewText((xmlChar*) "\n");
1060*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1061*b1cdbd2cSJim Jagielski
1062*b1cdbd2cSJim Jagielski //Create the vendor element
1063*b1cdbd2cSJim Jagielski xmlNewTextChild(pJavaInfoNode, NULL, (xmlChar*) "vendor",
1064*b1cdbd2cSJim Jagielski CXmlCharPtr(sVendor));
1065*b1cdbd2cSJim Jagielski //add a new line for better readability
1066*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1067*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1068*b1cdbd2cSJim Jagielski
1069*b1cdbd2cSJim Jagielski //Create the location element
1070*b1cdbd2cSJim Jagielski xmlNewTextChild(pJavaInfoNode, NULL, (xmlChar*) "location",
1071*b1cdbd2cSJim Jagielski CXmlCharPtr(sLocation));
1072*b1cdbd2cSJim Jagielski //add a new line for better readability
1073*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1074*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1075*b1cdbd2cSJim Jagielski
1076*b1cdbd2cSJim Jagielski //Create the version element
1077*b1cdbd2cSJim Jagielski xmlNewTextChild(pJavaInfoNode, NULL, (xmlChar*) "version",
1078*b1cdbd2cSJim Jagielski CXmlCharPtr(sVersion));
1079*b1cdbd2cSJim Jagielski //add a new line for better readability
1080*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1081*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1082*b1cdbd2cSJim Jagielski
1083*b1cdbd2cSJim Jagielski //Create the features element
1084*b1cdbd2cSJim Jagielski rtl::OUString sFeatures = rtl::OUString::valueOf(
1085*b1cdbd2cSJim Jagielski (sal_Int64)nFeatures, 16);
1086*b1cdbd2cSJim Jagielski xmlNewTextChild(pJavaInfoNode, NULL, (xmlChar*) "features",
1087*b1cdbd2cSJim Jagielski CXmlCharPtr(sFeatures));
1088*b1cdbd2cSJim Jagielski //add a new line for better readability
1089*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1090*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1091*b1cdbd2cSJim Jagielski
1092*b1cdbd2cSJim Jagielski
1093*b1cdbd2cSJim Jagielski //Create the requirements element
1094*b1cdbd2cSJim Jagielski rtl::OUString sRequirements = rtl::OUString::valueOf(
1095*b1cdbd2cSJim Jagielski (sal_Int64) nRequirements, 16);
1096*b1cdbd2cSJim Jagielski xmlNewTextChild(pJavaInfoNode, NULL, (xmlChar*) "requirements",
1097*b1cdbd2cSJim Jagielski CXmlCharPtr(sRequirements));
1098*b1cdbd2cSJim Jagielski //add a new line for better readability
1099*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1100*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1101*b1cdbd2cSJim Jagielski
1102*b1cdbd2cSJim Jagielski
1103*b1cdbd2cSJim Jagielski //Create the features element
1104*b1cdbd2cSJim Jagielski rtl::ByteSequence data = encodeBase16(arVendorData);
1105*b1cdbd2cSJim Jagielski xmlNode* dataNode = xmlNewChild(pJavaInfoNode, NULL,
1106*b1cdbd2cSJim Jagielski (xmlChar*) "vendorData",
1107*b1cdbd2cSJim Jagielski (xmlChar*) "");
1108*b1cdbd2cSJim Jagielski xmlNodeSetContentLen(dataNode,
1109*b1cdbd2cSJim Jagielski (xmlChar*) data.getArray(), data.getLength());
1110*b1cdbd2cSJim Jagielski //add a new line for better readability
1111*b1cdbd2cSJim Jagielski nodeCrLf = xmlNewText((xmlChar*) "\n");
1112*b1cdbd2cSJim Jagielski xmlAddChild(pJavaInfoNode, nodeCrLf);
1113*b1cdbd2cSJim Jagielski }
1114*b1cdbd2cSJim Jagielski
makeJavaInfo() const1115*b1cdbd2cSJim Jagielski JavaInfo * CNodeJavaInfo::makeJavaInfo() const
1116*b1cdbd2cSJim Jagielski {
1117*b1cdbd2cSJim Jagielski if (bNil == true || m_bEmptyNode == true)
1118*b1cdbd2cSJim Jagielski return NULL;
1119*b1cdbd2cSJim Jagielski JavaInfo * pInfo = (JavaInfo*) rtl_allocateMemory(sizeof(JavaInfo));
1120*b1cdbd2cSJim Jagielski if (pInfo == NULL)
1121*b1cdbd2cSJim Jagielski return NULL;
1122*b1cdbd2cSJim Jagielski memset(pInfo, 0, sizeof(JavaInfo));
1123*b1cdbd2cSJim Jagielski pInfo->sVendor = sVendor.pData;
1124*b1cdbd2cSJim Jagielski rtl_uString_acquire(pInfo->sVendor);
1125*b1cdbd2cSJim Jagielski pInfo->sLocation = sLocation.pData;
1126*b1cdbd2cSJim Jagielski rtl_uString_acquire(pInfo->sLocation);
1127*b1cdbd2cSJim Jagielski pInfo->sVersion = sVersion.pData;
1128*b1cdbd2cSJim Jagielski rtl_uString_acquire(pInfo->sVersion);
1129*b1cdbd2cSJim Jagielski pInfo->nFeatures = nFeatures;
1130*b1cdbd2cSJim Jagielski pInfo->nRequirements = nRequirements;
1131*b1cdbd2cSJim Jagielski pInfo->arVendorData = arVendorData.getHandle();
1132*b1cdbd2cSJim Jagielski rtl_byte_sequence_acquire(pInfo->arVendorData);
1133*b1cdbd2cSJim Jagielski return pInfo;
1134*b1cdbd2cSJim Jagielski }
1135*b1cdbd2cSJim Jagielski
getModifiedTime() const1136*b1cdbd2cSJim Jagielski sal_uInt32 NodeJava::getModifiedTime() const
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski sal_uInt32 ret = 0;
1139*b1cdbd2cSJim Jagielski if (m_layer != INSTALL)
1140*b1cdbd2cSJim Jagielski {
1141*b1cdbd2cSJim Jagielski OSL_ASSERT(0);
1142*b1cdbd2cSJim Jagielski return ret;
1143*b1cdbd2cSJim Jagielski }
1144*b1cdbd2cSJim Jagielski rtl::OString modTimeSeconds = getElementModified();
1145*b1cdbd2cSJim Jagielski return (sal_uInt32) modTimeSeconds.toInt64();
1146*b1cdbd2cSJim Jagielski }
1147*b1cdbd2cSJim Jagielski
1148*b1cdbd2cSJim Jagielski //================================================================================
MergedSettings()1149*b1cdbd2cSJim Jagielski MergedSettings::MergedSettings():
1150*b1cdbd2cSJim Jagielski m_bEnabled(sal_False),
1151*b1cdbd2cSJim Jagielski m_sClassPath(),
1152*b1cdbd2cSJim Jagielski m_vmParams(),
1153*b1cdbd2cSJim Jagielski m_JRELocations(),
1154*b1cdbd2cSJim Jagielski m_javaInfo()
1155*b1cdbd2cSJim Jagielski {
1156*b1cdbd2cSJim Jagielski NodeJava settings(NodeJava::USER_OR_INSTALL);
1157*b1cdbd2cSJim Jagielski settings.load();
1158*b1cdbd2cSJim Jagielski
1159*b1cdbd2cSJim Jagielski //Check if UNO_JAVA_JFW_INSTALL_DATA is set. If so, then we need not use user and
1160*b1cdbd2cSJim Jagielski //shared data.
1161*b1cdbd2cSJim Jagielski const ::rtl::OUString sInstall = BootParams::getInstallData();
1162*b1cdbd2cSJim Jagielski
1163*b1cdbd2cSJim Jagielski if (sInstall.getLength() == 0)
1164*b1cdbd2cSJim Jagielski {
1165*b1cdbd2cSJim Jagielski NodeJava sharedSettings(NodeJava::SHARED);
1166*b1cdbd2cSJim Jagielski sharedSettings.load();
1167*b1cdbd2cSJim Jagielski merge(sharedSettings, settings);
1168*b1cdbd2cSJim Jagielski }
1169*b1cdbd2cSJim Jagielski else
1170*b1cdbd2cSJim Jagielski {
1171*b1cdbd2cSJim Jagielski merge(NodeJava(), settings);
1172*b1cdbd2cSJim Jagielski }
1173*b1cdbd2cSJim Jagielski }
1174*b1cdbd2cSJim Jagielski
~MergedSettings()1175*b1cdbd2cSJim Jagielski MergedSettings::~MergedSettings()
1176*b1cdbd2cSJim Jagielski {
1177*b1cdbd2cSJim Jagielski }
1178*b1cdbd2cSJim Jagielski
merge(const NodeJava & share,const NodeJava & user)1179*b1cdbd2cSJim Jagielski void MergedSettings::merge(const NodeJava & share, const NodeJava & user)
1180*b1cdbd2cSJim Jagielski {
1181*b1cdbd2cSJim Jagielski if (user.getEnabled())
1182*b1cdbd2cSJim Jagielski m_bEnabled = * user.getEnabled();
1183*b1cdbd2cSJim Jagielski else if (share.getEnabled())
1184*b1cdbd2cSJim Jagielski m_bEnabled = * share.getEnabled();
1185*b1cdbd2cSJim Jagielski else
1186*b1cdbd2cSJim Jagielski m_bEnabled = sal_True;
1187*b1cdbd2cSJim Jagielski
1188*b1cdbd2cSJim Jagielski if (user.getUserClassPath())
1189*b1cdbd2cSJim Jagielski m_sClassPath = * user.getUserClassPath();
1190*b1cdbd2cSJim Jagielski else if (share.getUserClassPath())
1191*b1cdbd2cSJim Jagielski m_sClassPath = * share.getUserClassPath();
1192*b1cdbd2cSJim Jagielski
1193*b1cdbd2cSJim Jagielski if (user.getJavaInfo())
1194*b1cdbd2cSJim Jagielski m_javaInfo = * user.getJavaInfo();
1195*b1cdbd2cSJim Jagielski else if (share.getJavaInfo())
1196*b1cdbd2cSJim Jagielski m_javaInfo = * share.getJavaInfo();
1197*b1cdbd2cSJim Jagielski
1198*b1cdbd2cSJim Jagielski if (user.getVmParameters())
1199*b1cdbd2cSJim Jagielski m_vmParams = * user.getVmParameters();
1200*b1cdbd2cSJim Jagielski else if (share.getVmParameters())
1201*b1cdbd2cSJim Jagielski m_vmParams = * share.getVmParameters();
1202*b1cdbd2cSJim Jagielski
1203*b1cdbd2cSJim Jagielski if (user.getJRELocations())
1204*b1cdbd2cSJim Jagielski m_JRELocations = * user.getJRELocations();
1205*b1cdbd2cSJim Jagielski else if (share.getJRELocations())
1206*b1cdbd2cSJim Jagielski m_JRELocations = * share.getJRELocations();
1207*b1cdbd2cSJim Jagielski }
1208*b1cdbd2cSJim Jagielski
getEnabled() const1209*b1cdbd2cSJim Jagielski sal_Bool MergedSettings::getEnabled() const
1210*b1cdbd2cSJim Jagielski {
1211*b1cdbd2cSJim Jagielski return m_bEnabled;
1212*b1cdbd2cSJim Jagielski }
getUserClassPath() const1213*b1cdbd2cSJim Jagielski const rtl::OUString& MergedSettings::getUserClassPath() const
1214*b1cdbd2cSJim Jagielski {
1215*b1cdbd2cSJim Jagielski return m_sClassPath;
1216*b1cdbd2cSJim Jagielski }
1217*b1cdbd2cSJim Jagielski
getVmParametersUtf8() const1218*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OString> MergedSettings::getVmParametersUtf8() const
1219*b1cdbd2cSJim Jagielski {
1220*b1cdbd2cSJim Jagielski ::std::vector< ::rtl::OString> ret;
1221*b1cdbd2cSJim Jagielski typedef ::std::vector< ::rtl::OUString>::const_iterator cit;
1222*b1cdbd2cSJim Jagielski for (cit i = m_vmParams.begin(); i < m_vmParams.end(); i++)
1223*b1cdbd2cSJim Jagielski {
1224*b1cdbd2cSJim Jagielski ret.push_back( ::rtl::OUStringToOString(*i, RTL_TEXTENCODING_UTF8));
1225*b1cdbd2cSJim Jagielski }
1226*b1cdbd2cSJim Jagielski return ret;
1227*b1cdbd2cSJim Jagielski }
1228*b1cdbd2cSJim Jagielski
getJavaInfoAttrVendorUpdate() const1229*b1cdbd2cSJim Jagielski const ::rtl::OString & MergedSettings::getJavaInfoAttrVendorUpdate() const
1230*b1cdbd2cSJim Jagielski {
1231*b1cdbd2cSJim Jagielski return m_javaInfo.sAttrVendorUpdate;
1232*b1cdbd2cSJim Jagielski }
1233*b1cdbd2cSJim Jagielski
1234*b1cdbd2cSJim Jagielski
createJavaInfo() const1235*b1cdbd2cSJim Jagielski JavaInfo * MergedSettings::createJavaInfo() const
1236*b1cdbd2cSJim Jagielski {
1237*b1cdbd2cSJim Jagielski return m_javaInfo.makeJavaInfo();
1238*b1cdbd2cSJim Jagielski }
1239*b1cdbd2cSJim Jagielski #ifdef WNT
getJavaInfoAttrAutoSelect() const1240*b1cdbd2cSJim Jagielski bool MergedSettings::getJavaInfoAttrAutoSelect() const
1241*b1cdbd2cSJim Jagielski {
1242*b1cdbd2cSJim Jagielski return m_javaInfo.bAutoSelect;
1243*b1cdbd2cSJim Jagielski }
1244*b1cdbd2cSJim Jagielski #endif
getVmParametersArray(rtl_uString *** parParams,sal_Int32 * size) const1245*b1cdbd2cSJim Jagielski void MergedSettings::getVmParametersArray(
1246*b1cdbd2cSJim Jagielski rtl_uString *** parParams, sal_Int32 * size) const
1247*b1cdbd2cSJim Jagielski {
1248*b1cdbd2cSJim Jagielski osl::MutexGuard guard(FwkMutex::get());
1249*b1cdbd2cSJim Jagielski OSL_ASSERT(parParams != NULL && size != NULL);
1250*b1cdbd2cSJim Jagielski
1251*b1cdbd2cSJim Jagielski *parParams = (rtl_uString **)
1252*b1cdbd2cSJim Jagielski rtl_allocateMemory(sizeof(rtl_uString*) * m_vmParams.size());
1253*b1cdbd2cSJim Jagielski if (*parParams == NULL)
1254*b1cdbd2cSJim Jagielski return;
1255*b1cdbd2cSJim Jagielski
1256*b1cdbd2cSJim Jagielski int j=0;
1257*b1cdbd2cSJim Jagielski typedef std::vector<rtl::OUString>::const_iterator it;
1258*b1cdbd2cSJim Jagielski for (it i = m_vmParams.begin(); i != m_vmParams.end();
1259*b1cdbd2cSJim Jagielski i++, j++)
1260*b1cdbd2cSJim Jagielski {
1261*b1cdbd2cSJim Jagielski (*parParams)[j] = i->pData;
1262*b1cdbd2cSJim Jagielski rtl_uString_acquire(i->pData);
1263*b1cdbd2cSJim Jagielski }
1264*b1cdbd2cSJim Jagielski *size = m_vmParams.size();
1265*b1cdbd2cSJim Jagielski }
1266*b1cdbd2cSJim Jagielski
getJRELocations(rtl_uString *** parLocations,sal_Int32 * size) const1267*b1cdbd2cSJim Jagielski void MergedSettings::getJRELocations(
1268*b1cdbd2cSJim Jagielski rtl_uString *** parLocations, sal_Int32 * size) const
1269*b1cdbd2cSJim Jagielski {
1270*b1cdbd2cSJim Jagielski osl::MutexGuard guard(FwkMutex::get());
1271*b1cdbd2cSJim Jagielski OSL_ASSERT(parLocations != NULL && size != NULL);
1272*b1cdbd2cSJim Jagielski
1273*b1cdbd2cSJim Jagielski *parLocations = (rtl_uString **)
1274*b1cdbd2cSJim Jagielski rtl_allocateMemory(sizeof(rtl_uString*) * m_JRELocations.size());
1275*b1cdbd2cSJim Jagielski if (*parLocations == NULL)
1276*b1cdbd2cSJim Jagielski return;
1277*b1cdbd2cSJim Jagielski
1278*b1cdbd2cSJim Jagielski int j=0;
1279*b1cdbd2cSJim Jagielski typedef std::vector<rtl::OUString>::const_iterator it;
1280*b1cdbd2cSJim Jagielski for (it i = m_JRELocations.begin(); i != m_JRELocations.end();
1281*b1cdbd2cSJim Jagielski i++, j++)
1282*b1cdbd2cSJim Jagielski {
1283*b1cdbd2cSJim Jagielski (*parLocations)[j] = i->pData;
1284*b1cdbd2cSJim Jagielski rtl_uString_acquire(i->pData);
1285*b1cdbd2cSJim Jagielski }
1286*b1cdbd2cSJim Jagielski *size = m_JRELocations.size();
1287*b1cdbd2cSJim Jagielski }
getJRELocations() const1288*b1cdbd2cSJim Jagielski const std::vector<rtl::OUString> & MergedSettings::getJRELocations() const
1289*b1cdbd2cSJim Jagielski {
1290*b1cdbd2cSJim Jagielski return m_JRELocations;
1291*b1cdbd2cSJim Jagielski }
1292*b1cdbd2cSJim Jagielski }
1293