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