xref: /aoo4110/main/jvmfwk/source/elements.hxx (revision b1cdbd2c)
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 #if !defined INCLUDED_JVMFWK_ELEMENTS_HXX
24*b1cdbd2cSJim Jagielski #define INCLUDED_JVMFWK_ELEMENTS_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <vector>
27*b1cdbd2cSJim Jagielski #include "jvmfwk/framework.h"
28*b1cdbd2cSJim Jagielski #include "fwkutil.hxx"
29*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx"
30*b1cdbd2cSJim Jagielski #include "rtl/byteseq.hxx"
31*b1cdbd2cSJim Jagielski #include "libxml/parser.h"
32*b1cdbd2cSJim Jagielski #include "boost/optional.hpp"
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #define NS_JAVA_FRAMEWORK "http://openoffice.org/2004/java/framework/1.0"
35*b1cdbd2cSJim Jagielski #define NS_SCHEMA_INSTANCE "http://www.w3.org/2001/XMLSchema-instance"
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski namespace jfw
38*b1cdbd2cSJim Jagielski {
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski /** gets the value of the updated element from the javavendors.xml.
41*b1cdbd2cSJim Jagielski  */
42*b1cdbd2cSJim Jagielski rtl::OString getElementUpdated();
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski /** create the child elements within the root structure for each platform.
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski     @param bNeedsSave
47*b1cdbd2cSJim Jagielski     [out]If true then the respective structure of elements was added and the
48*b1cdbd2cSJim Jagielski     document needs to be saved.
49*b1cdbd2cSJim Jagielski  */
50*b1cdbd2cSJim Jagielski void createSettingsStructure(
51*b1cdbd2cSJim Jagielski     xmlDoc * document, bool * bNeedsSave);
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski /** represents the settings saved in the /java/javaInfo element.
55*b1cdbd2cSJim Jagielski     It is used within class NodeJava which determines the settings
56*b1cdbd2cSJim Jagielski     file.
57*b1cdbd2cSJim Jagielski */
58*b1cdbd2cSJim Jagielski class CNodeJavaInfo
59*b1cdbd2cSJim Jagielski {
60*b1cdbd2cSJim Jagielski public:
61*b1cdbd2cSJim Jagielski     CNodeJavaInfo();
62*b1cdbd2cSJim Jagielski     ~CNodeJavaInfo();
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski     /** if true, then javaInfo is empty. When writeToNode is called
65*b1cdbd2cSJim Jagielski         then all child elements are deleted.
66*b1cdbd2cSJim Jagielski      */
67*b1cdbd2cSJim Jagielski     bool m_bEmptyNode;
68*b1cdbd2cSJim Jagielski     /** Contains the value of the <updated> element of
69*b1cdbd2cSJim Jagielski         the javavendors.xml after loadFromNode was called.
70*b1cdbd2cSJim Jagielski         It is not used, when the javaInfo node is written.
71*b1cdbd2cSJim Jagielski         see writeToNode
72*b1cdbd2cSJim Jagielski      */
73*b1cdbd2cSJim Jagielski     ::rtl::OString sAttrVendorUpdate;
74*b1cdbd2cSJim Jagielski     /** contains the nil value of the /java/javaInfo@xsi:nil attribute.
75*b1cdbd2cSJim Jagielski         Default is true;
76*b1cdbd2cSJim Jagielski      */
77*b1cdbd2cSJim Jagielski     bool bNil;
78*b1cdbd2cSJim Jagielski     /** contains the value of the /java/javaInfo@autoSelect attribute.
79*b1cdbd2cSJim Jagielski         Default is true. If it is false then the user has modified the JRE
80*b1cdbd2cSJim Jagielski         selection by actively choosing a JRE from the options dialog. That is,
81*b1cdbd2cSJim Jagielski         the function jfw_setSelectedJRE was called. Contrary, the function
82*b1cdbd2cSJim Jagielski         jfw_findAndSelectJRE sets the attribute to true.
83*b1cdbd2cSJim Jagielski      */
84*b1cdbd2cSJim Jagielski     bool bAutoSelect;
85*b1cdbd2cSJim Jagielski     ::rtl::OUString sVendor;
86*b1cdbd2cSJim Jagielski     ::rtl::OUString sLocation;
87*b1cdbd2cSJim Jagielski     ::rtl::OUString sVersion;
88*b1cdbd2cSJim Jagielski     sal_uInt64 nFeatures;
89*b1cdbd2cSJim Jagielski     sal_uInt64 nRequirements;
90*b1cdbd2cSJim Jagielski     ::rtl::ByteSequence arVendorData;
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski     /** reads the node /java/javaInfo.
93*b1cdbd2cSJim Jagielski         If javaInfo@xsi:nil = true then member bNil is set to true
94*b1cdbd2cSJim Jagielski         an no further elements are read.
95*b1cdbd2cSJim Jagielski      */
96*b1cdbd2cSJim Jagielski     void loadFromNode(xmlDoc * pDoc,xmlNode * pJavaInfo);
97*b1cdbd2cSJim Jagielski     /** The attribut nil will be set to false. The function gets the value
98*b1cdbd2cSJim Jagielski         javaSettings/updated from the javavendors.xml and writes it to
99*b1cdbd2cSJim Jagielski         javaInfo@vendorUpdate in javasettings.xml
100*b1cdbd2cSJim Jagielski      */
101*b1cdbd2cSJim Jagielski     void writeToNode(xmlDoc * pDoc, xmlNode * pJavaInfo) const;
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski     /** returns NULL if javaInfo is nil.
104*b1cdbd2cSJim Jagielski      */
105*b1cdbd2cSJim Jagielski     JavaInfo * makeJavaInfo() const;
106*b1cdbd2cSJim Jagielski };
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski /** this class represents the java settings  based on a particular
109*b1cdbd2cSJim Jagielski     settings file.
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     Which settings file is used is determined by the value passed into the
112*b1cdbd2cSJim Jagielski     constructo and the values of the bootstrap parameters UNO_JAVA_JFW_USER_DATA,
113*b1cdbd2cSJim Jagielski     UNO_JAVA_JFW_SHARED_DATA,_JAVA_JFW_INSTALL_DATA.
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski     If the value is USER_OR_INSTALL then it depends of the bootstrap parameter
116*b1cdbd2cSJim Jagielski     UNO_JAVA_JFW_INSTALL_DATA. If it has as value then it is used. Otherwise the
117*b1cdbd2cSJim Jagielski     value from UNO_JAVA_JFW_USER_DATA is used.
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski     The method load reads the data from the settings file.
120*b1cdbd2cSJim Jagielski     The method write stores the data into the settings file.
121*b1cdbd2cSJim Jagielski  */
122*b1cdbd2cSJim Jagielski class NodeJava
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski public:
125*b1cdbd2cSJim Jagielski     enum Layer { USER_OR_INSTALL, USER, SHARED, INSTALL };
126*b1cdbd2cSJim Jagielski private:
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     /** creates settings file and fills it with default values.
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski         When this function is called then it creates the
131*b1cdbd2cSJim Jagielski         settings file at the possition determined by the bootstrap parameters
132*b1cdbd2cSJim Jagielski         (UNO_JAVA_JFW_USER_DATA, UNO_JAVA_JFW_SHARED_DATA,
133*b1cdbd2cSJim Jagielski         UNO_JAVA_JFW_INSTALL_DATA) and m_layer, unless the file already exists
134*b1cdbd2cSJim Jagielski         (see createSettingsDocument).
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski         @return
137*b1cdbd2cSJim Jagielski         JFW_E_CONFIG_READWRITE
138*b1cdbd2cSJim Jagielski     */
139*b1cdbd2cSJim Jagielski     void prepareSettingsDocument() const;
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski     /** helper function for prepareSettingsDocument.
142*b1cdbd2cSJim Jagielski     */
143*b1cdbd2cSJim Jagielski     void createSettingsDocument() const;
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski     /** returns the system path to the data file which is to be used. The value
146*b1cdbd2cSJim Jagielski         depends on
147*b1cdbd2cSJim Jagielski         the the member m_layer and the bootstrap paramters UNO_JAVA_JFW_USER_DATA,
148*b1cdbd2cSJim Jagielski         UNO_JAVA_JFW_SHARED_DATA and UNO_JAVA_JFW_INSTALL_DATA which this may be.
149*b1cdbd2cSJim Jagielski     */
150*b1cdbd2cSJim Jagielski     ::rtl::OString getSettingsPath() const;
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski     /** returns the file URL to the data file which is to be used. See getSettingsPath.
153*b1cdbd2cSJim Jagielski     */
154*b1cdbd2cSJim Jagielski     ::rtl::OUString getSettingsURL() const;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     /** Verifies if the respective settings file exist. In case UNO_JAVA_JFW_INSTALL_DATA
157*b1cdbd2cSJim Jagielski         is used, the age is checked. If the file is too old then we assume that it does not
158*b1cdbd2cSJim Jagielski         exist and wipe its contents. Then still FILE_DOES_NOT_EXIST is returned.
159*b1cdbd2cSJim Jagielski      */
160*b1cdbd2cSJim Jagielski     jfw::FileStatus checkSettingsFileStatus() const;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski     /** Determines the layer for which the instance the loads and writes the
163*b1cdbd2cSJim Jagielski         data.
164*b1cdbd2cSJim Jagielski     */
165*b1cdbd2cSJim Jagielski     Layer m_layer;
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski     /** User configurable option.  /java/enabled
168*b1cdbd2cSJim Jagielski         If /java/enabled@xsi:nil == true then the value will be uninitialized
169*b1cdbd2cSJim Jagielski         after a call to load().
170*b1cdbd2cSJim Jagielski     */
171*b1cdbd2cSJim Jagielski     boost::optional<sal_Bool> m_enabled;
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski     /** User configurable option. /java/userClassPath
174*b1cdbd2cSJim Jagielski         If /java/userClassPath@xsi:nil == true then the value is uninitialized
175*b1cdbd2cSJim Jagielski         after a call to load().
176*b1cdbd2cSJim Jagielski     */
177*b1cdbd2cSJim Jagielski     boost::optional< ::rtl::OUString> m_userClassPath;
178*b1cdbd2cSJim Jagielski     /** User configurable option.  /java/javaInfo
179*b1cdbd2cSJim Jagielski         If /java/javaInfo@xsi:nil == true then the value is uninitialized
180*b1cdbd2cSJim Jagielski         after a call to load.
181*b1cdbd2cSJim Jagielski      */
182*b1cdbd2cSJim Jagielski     boost::optional<CNodeJavaInfo> m_javaInfo;
183*b1cdbd2cSJim Jagielski     /** User configurable option. /java/vmParameters
184*b1cdbd2cSJim Jagielski         If /java/vmParameters@xsi:nil == true then the value is uninitialized
185*b1cdbd2cSJim Jagielski         after a call to load.
186*b1cdbd2cSJim Jagielski     */
187*b1cdbd2cSJim Jagielski     boost::optional< ::std::vector< ::rtl::OUString> > m_vmParameters;
188*b1cdbd2cSJim Jagielski     /** User configurable option. /java/jreLocations
189*b1cdbd2cSJim Jagielski         If /java/jreLocaltions@xsi:nil == true then the value is uninitialized
190*b1cdbd2cSJim Jagielski         after a call to load.
191*b1cdbd2cSJim Jagielski     */
192*b1cdbd2cSJim Jagielski     boost::optional< ::std::vector< ::rtl::OUString> > m_JRELocations;
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski     /** Only in INSTALL mode. Then NodeJava.write writes a <modified> element
195*b1cdbd2cSJim Jagielski         which contains the seconds value of the TimeValue (osl/time.h), obtained
196*b1cdbd2cSJim Jagielski         with osl_getSystemTime.
197*b1cdbd2cSJim Jagielski         It returns 0 if the value cannot be obtained.
198*b1cdbd2cSJim Jagielski         This is used to fix the problem that the modified time of the settings
199*b1cdbd2cSJim Jagielski         file is incorrect because it resides on an NFS volume where the NFS
200*b1cdbd2cSJim Jagielski         server and NFS client do not have the same system time. For example if
201*b1cdbd2cSJim Jagielski         the server time is ahead of the client time then checkSettingsFileStatus
202*b1cdbd2cSJim Jagielski         deleted the settings. So even if javaldx determined a Java
203*b1cdbd2cSJim Jagielski         (jfw_findAndSelectJRE) then jfw_startVM returned a JFW_E_NO_SELECT. Then
204*b1cdbd2cSJim Jagielski         it looked again for a java by calling jfw_findAndSelectJRE, which
205*b1cdbd2cSJim Jagielski         returned a JFW_E_NONE. But the following jfw_startVM returned again
206*b1cdbd2cSJim Jagielski         JFW_E_NO_SELECT. So it looped. (see issue i114509)
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski         NFS server and NFS client should have the same time. It is common
209*b1cdbd2cSJim Jagielski         practise to enforce this in networks. We actually should not work
210*b1cdbd2cSJim Jagielski         around a malconfigured network. We must however, make sure that we do
211*b1cdbd2cSJim Jagielski         not loop. Maybe a better approach is, that:
212*b1cdbd2cSJim Jagielski         - assume that mtime and system time are reliable
213*b1cdbd2cSJim Jagielski         - checkSettingsFile uses system time and mtime of the settings file,
214*b1cdbd2cSJim Jagielski         instset of using getModifiedTime.
215*b1cdbd2cSJim Jagielski         - allow a small error margin
216*b1cdbd2cSJim Jagielski         - jfw_startVM must return a JFW_E_EXPIRED_SETTINGS
217*b1cdbd2cSJim Jagielski         - XJavaVM::startVM should prevent the loop by processing the new return+        value
218*b1cdbd2cSJim Jagielski 
219*b1cdbd2cSJim Jagielski     */
220*b1cdbd2cSJim Jagielski     sal_uInt32 getModifiedTime() const;
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski public:
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski     NodeJava(Layer theLayer = USER_OR_INSTALL);
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski     /** sets m_enabled.
227*b1cdbd2cSJim Jagielski         /java/enabled@xsi:nil will be set to false when write is called.
228*b1cdbd2cSJim Jagielski      */
229*b1cdbd2cSJim Jagielski     void setEnabled(sal_Bool bEnabled);
230*b1cdbd2cSJim Jagielski 
231*b1cdbd2cSJim Jagielski     /** sets m_sUserClassPath. See setEnabled.
232*b1cdbd2cSJim Jagielski      */
233*b1cdbd2cSJim Jagielski     void setUserClassPath(const ::rtl::OUString & sClassPath);
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski     /** sets m_aInfo. See setEnabled.
236*b1cdbd2cSJim Jagielski         @param bAutoSelect
237*b1cdbd2cSJim Jagielski         true- called by jfw_setSelectedJRE
238*b1cdbd2cSJim Jagielski         false called by jfw_findAndSelectJRE
239*b1cdbd2cSJim Jagielski      */
240*b1cdbd2cSJim Jagielski     void setJavaInfo(const JavaInfo * pInfo, bool bAutoSelect);
241*b1cdbd2cSJim Jagielski 
242*b1cdbd2cSJim Jagielski     /** sets the /java/vmParameters/param elements.
243*b1cdbd2cSJim Jagielski         When this method all previous values are removed and replaced
244*b1cdbd2cSJim Jagielski         by those in arParameters.
245*b1cdbd2cSJim Jagielski         /java/vmParameters@xsi:nil will be set to true when write() is
246*b1cdbd2cSJim Jagielski         called.
247*b1cdbd2cSJim Jagielski      */
248*b1cdbd2cSJim Jagielski     void setVmParameters(rtl_uString  * * arParameters, sal_Int32 size);
249*b1cdbd2cSJim Jagielski 
250*b1cdbd2cSJim Jagielski     /** sets the /java/jreLocations/location elements.
251*b1cdbd2cSJim Jagielski         When this method is called then all previous values are removed
252*b1cdbd2cSJim Jagielski         and replaced by those in arParamters.
253*b1cdbd2cSJim Jagielski         /java/jreLocations@xsi:nil will be set to true write() is called.
254*b1cdbd2cSJim Jagielski      */
255*b1cdbd2cSJim Jagielski     void setJRELocations(rtl_uString  * * arParameters, sal_Int32 size);
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     /** adds a location to the already existing locations.
258*b1cdbd2cSJim Jagielski         Note: call load() before, then add the location and then call write().
259*b1cdbd2cSJim Jagielski     */
260*b1cdbd2cSJim Jagielski     void addJRELocation(rtl_uString * sLocation);
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski     /** writes the data to user settings.
263*b1cdbd2cSJim Jagielski      */
264*b1cdbd2cSJim Jagielski     void write() const;
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski     /** load the values of the settings file.
267*b1cdbd2cSJim Jagielski      */
268*b1cdbd2cSJim Jagielski     void load();
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski     /** returns the value of the element /java/enabled
271*b1cdbd2cSJim Jagielski      */
272*b1cdbd2cSJim Jagielski     const boost::optional<sal_Bool> & getEnabled() const;
273*b1cdbd2cSJim Jagielski     /** returns the value of the element /java/userClassPath.
274*b1cdbd2cSJim Jagielski      */
275*b1cdbd2cSJim Jagielski     const boost::optional< ::rtl::OUString> & getUserClassPath() const;
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski     /** returns the value of the element /java/javaInfo.
278*b1cdbd2cSJim Jagielski      */
279*b1cdbd2cSJim Jagielski     const boost::optional<CNodeJavaInfo> & getJavaInfo() const;
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski     /** returns the parameters from the element /java/vmParameters/param.
282*b1cdbd2cSJim Jagielski      */
283*b1cdbd2cSJim Jagielski     const boost::optional< ::std::vector< ::rtl::OUString> > & getVmParameters() const;
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski     /** returns the parameters from the element /java/jreLocations/location.
286*b1cdbd2cSJim Jagielski      */
287*b1cdbd2cSJim Jagielski     const boost::optional< ::std::vector< ::rtl::OUString> > & getJRELocations() const;
288*b1cdbd2cSJim Jagielski };
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski /** merges the settings for shared, user and installation during construction.
291*b1cdbd2cSJim Jagielski     The class uses a simple merge mechanism for the javasettings.xml files in share and
292*b1cdbd2cSJim Jagielski     user. The following elements completly overwrite the corresponding elements
293*b1cdbd2cSJim Jagielski     from share:
294*b1cdbd2cSJim Jagielski     /java/enabled
295*b1cdbd2cSJim Jagielski     /java/userClassPath
296*b1cdbd2cSJim Jagielski     /java/vmParameters
297*b1cdbd2cSJim Jagielski     /java/jreLocations
298*b1cdbd2cSJim Jagielski     /java/javaInfo
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski     In case of an installation, the shared and user settings are completely
301*b1cdbd2cSJim Jagielski     disregarded.
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski     The locations of the different settings files is obtained through the
304*b1cdbd2cSJim Jagielski     bootstrap variables:
305*b1cdbd2cSJim Jagielski     UNO_JAVA_JFW_USER_DATA
306*b1cdbd2cSJim Jagielski     UNO_JAVA_JFW_SHARED_DATA
307*b1cdbd2cSJim Jagielski     UNO_JAVA_JFW_INSTALL_DATA
308*b1cdbd2cSJim Jagielski 
309*b1cdbd2cSJim Jagielski     The class also determines useful default values for settings which have not been made.
310*b1cdbd2cSJim Jagielski */
311*b1cdbd2cSJim Jagielski class MergedSettings
312*b1cdbd2cSJim Jagielski {
313*b1cdbd2cSJim Jagielski private:
314*b1cdbd2cSJim Jagielski     const MergedSettings& operator = (MergedSettings&);
315*b1cdbd2cSJim Jagielski     MergedSettings(MergedSettings&);
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski     void merge(const NodeJava & share, const NodeJava & user);
318*b1cdbd2cSJim Jagielski 
319*b1cdbd2cSJim Jagielski     sal_Bool m_bEnabled;
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     ::rtl::OUString m_sClassPath;
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString> m_vmParams;
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString> m_JRELocations;
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski     CNodeJavaInfo m_javaInfo;
328*b1cdbd2cSJim Jagielski 
329*b1cdbd2cSJim Jagielski public:
330*b1cdbd2cSJim Jagielski     MergedSettings();
331*b1cdbd2cSJim Jagielski     virtual ~MergedSettings();
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski     /** the default is true.
334*b1cdbd2cSJim Jagielski      */
335*b1cdbd2cSJim Jagielski     sal_Bool getEnabled() const;
336*b1cdbd2cSJim Jagielski 
337*b1cdbd2cSJim Jagielski     const ::rtl::OUString & getUserClassPath() const;
338*b1cdbd2cSJim Jagielski 
339*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OString> getVmParametersUtf8() const;
340*b1cdbd2cSJim Jagielski     /** returns a JavaInfo structure representing the node
341*b1cdbd2cSJim Jagielski         /java/javaInfo. Every time a new JavaInfo structure is created
342*b1cdbd2cSJim Jagielski         which needs to be freed by the caller.
343*b1cdbd2cSJim Jagielski         If both, user and share settings are nil, then NULL is returned.
344*b1cdbd2cSJim Jagielski     */
345*b1cdbd2cSJim Jagielski     JavaInfo * createJavaInfo() const;
346*b1cdbd2cSJim Jagielski 
347*b1cdbd2cSJim Jagielski     /** returns the value of the attribute /java/javaInfo[@vendorUpdate].
348*b1cdbd2cSJim Jagielski      */
349*b1cdbd2cSJim Jagielski     ::rtl::OString const & getJavaInfoAttrVendorUpdate() const;
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski #ifdef WNT
352*b1cdbd2cSJim Jagielski     /** returns the javaInfo@autoSelect attribute.
353*b1cdbd2cSJim Jagielski         Before calling this function loadFromSettings must be called.
354*b1cdbd2cSJim Jagielski         It uses the javaInfo@autoSelect attribute  to determine
355*b1cdbd2cSJim Jagielski         the return value;
356*b1cdbd2cSJim Jagielski      */
357*b1cdbd2cSJim Jagielski     bool getJavaInfoAttrAutoSelect() const;
358*b1cdbd2cSJim Jagielski #endif
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski     /** returns an array.
361*b1cdbd2cSJim Jagielski         Caller must free the strings and the array.
362*b1cdbd2cSJim Jagielski      */
363*b1cdbd2cSJim Jagielski     void getVmParametersArray(rtl_uString *** parParameters, sal_Int32 * size) const;
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski     /** returns an array.
366*b1cdbd2cSJim Jagielski         Caller must free the strings and the array.
367*b1cdbd2cSJim Jagielski      */
368*b1cdbd2cSJim Jagielski     void getJRELocations(rtl_uString *** parLocations, sal_Int32 * size) const;
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski     const ::std::vector< ::rtl::OUString> & getJRELocations() const;
371*b1cdbd2cSJim Jagielski };
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski class VersionInfo
375*b1cdbd2cSJim Jagielski {
376*b1cdbd2cSJim Jagielski     ::std::vector< ::rtl::OUString> vecExcludeVersions;
377*b1cdbd2cSJim Jagielski     rtl_uString ** arVersions;
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski public:
380*b1cdbd2cSJim Jagielski     VersionInfo();
381*b1cdbd2cSJim Jagielski     ~VersionInfo();
382*b1cdbd2cSJim Jagielski 
383*b1cdbd2cSJim Jagielski     void addExcludeVersion(const ::rtl::OUString& sVersion);
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski     ::rtl::OUString sMinVersion;
386*b1cdbd2cSJim Jagielski     ::rtl::OUString sMaxVersion;
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski     /** The caller DOES NOT get ownership of the strings. That is he
389*b1cdbd2cSJim Jagielski         does not need to release the strings.
390*b1cdbd2cSJim Jagielski         The array exists as long as this object exists.
391*b1cdbd2cSJim Jagielski     */
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski     rtl_uString** getExcludeVersions();
394*b1cdbd2cSJim Jagielski     sal_Int32 getExcludeVersionSize();
395*b1cdbd2cSJim Jagielski };
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski struct PluginLibrary
398*b1cdbd2cSJim Jagielski {
PluginLibraryjfw::PluginLibrary399*b1cdbd2cSJim Jagielski     PluginLibrary()
400*b1cdbd2cSJim Jagielski     {
401*b1cdbd2cSJim Jagielski     }
PluginLibraryjfw::PluginLibrary402*b1cdbd2cSJim Jagielski     PluginLibrary(rtl::OUString vendor,::rtl::OUString path) :
403*b1cdbd2cSJim Jagielski         sVendor(vendor), sPath(path)
404*b1cdbd2cSJim Jagielski     {
405*b1cdbd2cSJim Jagielski     }
406*b1cdbd2cSJim Jagielski     /** contains the vendor string which is later userd in the xml API
407*b1cdbd2cSJim Jagielski      */
408*b1cdbd2cSJim Jagielski     ::rtl::OUString sVendor;
409*b1cdbd2cSJim Jagielski     /** File URL the plug-in library
410*b1cdbd2cSJim Jagielski      */
411*b1cdbd2cSJim Jagielski     ::rtl::OUString sPath;
412*b1cdbd2cSJim Jagielski };
413*b1cdbd2cSJim Jagielski 
414*b1cdbd2cSJim Jagielski } //end namespace
415*b1cdbd2cSJim Jagielski #endif
416