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_JFW_PLUGIN_UTIL_HXX 24*b1cdbd2cSJim Jagielski #define INCLUDED_JFW_PLUGIN_UTIL_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx" 27*b1cdbd2cSJim Jagielski #include "rtl/bootstrap.hxx" 28*b1cdbd2cSJim Jagielski #include <vector> 29*b1cdbd2cSJim Jagielski #include "vendorbase.hxx" 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski namespace jfw_plugin 32*b1cdbd2cSJim Jagielski { 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski class VendorBase; 35*b1cdbd2cSJim Jagielski std::vector<rtl::OUString> getVectorFromCharArray(char const * const * ar, int size); 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski /* The function uses the relative paths, such as "bin/java.exe" as provided by 38*b1cdbd2cSJim Jagielski VendorBase::getJavaExePaths and the provided path to derive the the home directory. 39*b1cdbd2cSJim Jagielski The home directory is then used as argument to getJREInfoByPath. For example 40*b1cdbd2cSJim Jagielski usBinDir is file:///c:/j2sdk/jre/bin then file:///c:/j2sdk/jre would be derived. 41*b1cdbd2cSJim Jagielski */ 42*b1cdbd2cSJim Jagielski bool getJREInfoFromBinPath( 43*b1cdbd2cSJim Jagielski const rtl::OUString& path, std::vector<rtl::Reference<VendorBase> > & vecInfos); 44*b1cdbd2cSJim Jagielski inline rtl::OUString getDirFromFile(const rtl::OUString& usFilePath); 45*b1cdbd2cSJim Jagielski void createJavaInfoFromPath(std::vector<rtl::Reference<VendorBase> >& vecInfos); 46*b1cdbd2cSJim Jagielski void createJavaInfoFromJavaHome(std::vector<rtl::Reference<VendorBase> > &vecInfos); 47*b1cdbd2cSJim Jagielski void createJavaInfoDirScan(std::vector<rtl::Reference<VendorBase> >& vecInfos); 48*b1cdbd2cSJim Jagielski #ifdef WNT 49*b1cdbd2cSJim Jagielski void createJavaInfoFromWinReg(std::vector<rtl::Reference<VendorBase> >& vecInfos); 50*b1cdbd2cSJim Jagielski #endif 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski bool makeDriveLetterSame(rtl::OUString * fileURL); 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski /* for std::find_if 56*b1cdbd2cSJim Jagielski Used to find a JavaInfo::Impl object in a std::vector<Impl*> which has a member usJavaHome 57*b1cdbd2cSJim Jagielski as the specified string in the constructor. 58*b1cdbd2cSJim Jagielski */ 59*b1cdbd2cSJim Jagielski struct InfoFindSame 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski rtl::OUString sJava; InfoFindSamejfw_plugin::InfoFindSame62*b1cdbd2cSJim Jagielski InfoFindSame(const rtl::OUString& sJavaHome):sJava(sJavaHome){} 63*b1cdbd2cSJim Jagielski operator ()jfw_plugin::InfoFindSame64*b1cdbd2cSJim Jagielski bool operator () (const rtl::Reference<VendorBase> & aVendorInfo) 65*b1cdbd2cSJim Jagielski { 66*b1cdbd2cSJim Jagielski return aVendorInfo->getHome().equals(sJava) == sal_True ? true : false; 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski }; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski struct SameOrSubDirJREMap 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski rtl::OUString s1; SameOrSubDirJREMapjfw_plugin::SameOrSubDirJREMap73*b1cdbd2cSJim Jagielski SameOrSubDirJREMap(const rtl::OUString& s):s1(s){ 74*b1cdbd2cSJim Jagielski } 75*b1cdbd2cSJim Jagielski operator ()jfw_plugin::SameOrSubDirJREMap76*b1cdbd2cSJim Jagielski bool operator () (const std::pair<const rtl::OUString, rtl::Reference<VendorBase> > & s2) 77*b1cdbd2cSJim Jagielski { 78*b1cdbd2cSJim Jagielski if (s1 == s2.first) 79*b1cdbd2cSJim Jagielski return true; 80*b1cdbd2cSJim Jagielski rtl::OUString sSub; 81*b1cdbd2cSJim Jagielski sSub = s2.first + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")); 82*b1cdbd2cSJim Jagielski if (s1.match(sSub) == sal_True) 83*b1cdbd2cSJim Jagielski return true; 84*b1cdbd2cSJim Jagielski return false; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski }; 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski /* Creates a VendorBase object if a JRE could be found at the specified path. 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski This depends if there is a JRE at all and if it is from a vendor that 92*b1cdbd2cSJim Jagielski is supported by this plugin. 93*b1cdbd2cSJim Jagielski */ 94*b1cdbd2cSJim Jagielski rtl::Reference<VendorBase> getJREInfoByPath(const rtl::OUString& path); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski /* Creates a VendorBase object if a JRE could be found at the specified path. 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski The difference to the other getJREInfoByPath is that this function checks 99*b1cdbd2cSJim Jagielski first if the path corresponds to one of the VendorBase::getHome path already 100*b1cdbd2cSJim Jagielski contained in vecInfo. Only if there is no such entry, then the other 101*b1cdbd2cSJim Jagielski getJREInfoByPath is called. Again the created VendorBase is compared to 102*b1cdbd2cSJim Jagielski those contained in vecInfos. If it it not in there then it's added. 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski @return 105*b1cdbd2cSJim Jagielski true a VendorBase was created and added to the end of vecInfos. 106*b1cdbd2cSJim Jagielski false - no VendorBase has been created. Either the path did not represent a 107*b1cdbd2cSJim Jagielski supported JRE installation or there was already a VendorBase in vecInfos. 108*b1cdbd2cSJim Jagielski */ 109*b1cdbd2cSJim Jagielski bool getJREInfoByPath(const rtl::OUString& path, 110*b1cdbd2cSJim Jagielski std::vector<rtl::Reference<VendorBase> > & vecInfos); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski std::vector<rtl::Reference<VendorBase> > getAllJREInfos(); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski bool getJavaProps( 115*b1cdbd2cSJim Jagielski const rtl::OUString & exePath, 116*b1cdbd2cSJim Jagielski std::vector<std::pair<rtl::OUString, rtl::OUString> >& props, 117*b1cdbd2cSJim Jagielski bool * bProcessRun); 118*b1cdbd2cSJim Jagielski 119*b1cdbd2cSJim Jagielski void createJavaInfoFromWinReg(std::vector<rtl::Reference<VendorBase> > & vecInfos); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski void bubbleSortVersion(std::vector<rtl::Reference<VendorBase> >& vec); 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski rtl::Bootstrap* getBootstrap(); 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski #endif 127