2004-07-23 10:53:01 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* $RCSfile: vendorbase.cxx,v $
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2006-09-16 16:47:02 +00:00
|
|
|
* $Revision: 1.6 $
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2006-09-16 16:47:02 +00:00
|
|
|
* last change: $Author: obo $ $Date: 2006-09-16 17:47:02 $
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
2005-09-07 18:32:45 +00:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
2004-07-23 10:53:01 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-16 16:47:02 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_jvmfwk.hxx"
|
|
|
|
|
2004-07-23 10:53:01 +00:00
|
|
|
#include "osl/file.hxx"
|
|
|
|
|
|
|
|
#include "vendorbase.hxx"
|
|
|
|
#include "util.hxx"
|
|
|
|
#include "sunjre.hxx"
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
using namespace rtl;
|
|
|
|
using namespace osl;
|
|
|
|
|
|
|
|
namespace jfw_plugin
|
|
|
|
{
|
|
|
|
rtl::Reference<VendorBase> createInstance(createInstance_func pFunc,
|
|
|
|
vector<pair<OUString, OUString> > properties);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//##############################################################################
|
|
|
|
|
|
|
|
MalformedVersionException::MalformedVersionException()
|
|
|
|
{}
|
|
|
|
MalformedVersionException::MalformedVersionException(
|
|
|
|
const MalformedVersionException & )
|
|
|
|
{}
|
|
|
|
MalformedVersionException::~MalformedVersionException()
|
|
|
|
{}
|
|
|
|
MalformedVersionException &
|
|
|
|
MalformedVersionException::operator =(
|
|
|
|
const MalformedVersionException &)
|
|
|
|
{
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
//##############################################################################
|
|
|
|
|
|
|
|
|
|
|
|
VendorBase::VendorBase(): m_bAccessibility(false)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
char const* const * VendorBase::getJavaExePaths(int* size)
|
|
|
|
{
|
|
|
|
static char const * ar[] = {
|
|
|
|
#ifdef WNT
|
|
|
|
"java.exe",
|
|
|
|
"bin/java.exe"
|
|
|
|
#elif UNX
|
|
|
|
"java",
|
|
|
|
"bin/java"
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
*size = sizeof(ar) / sizeof(char*);
|
|
|
|
return ar;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
rtl::Reference<VendorBase> VendorBase::createInstance()
|
|
|
|
{
|
|
|
|
VendorBase *pBase = new VendorBase();
|
|
|
|
return rtl::Reference<VendorBase>(pBase);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VendorBase::initialize(vector<pair<OUString, OUString> > props)
|
|
|
|
{
|
|
|
|
//get java.vendor, java.version, java.home,
|
|
|
|
//javax.accessibility.assistive_technologies from system properties
|
|
|
|
|
|
|
|
OUString sVendor;
|
|
|
|
typedef vector<pair<OUString, OUString> >::const_iterator it_prop;
|
|
|
|
OUString sVendorProperty(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("java.vendor"));
|
|
|
|
OUString sVersionProperty(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("java.version"));
|
|
|
|
OUString sHomeProperty(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("java.home"));
|
|
|
|
OUString sAccessProperty(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("javax.accessibility.assistive_technologies"));
|
|
|
|
|
|
|
|
bool bVersion = false;
|
|
|
|
bool bVendor = false;
|
|
|
|
bool bHome = false;
|
|
|
|
bool bAccess = false;
|
|
|
|
|
|
|
|
typedef vector<pair<OUString, OUString> >::const_iterator it_prop;
|
|
|
|
for (it_prop i = props.begin(); i != props.end(); i++)
|
|
|
|
{
|
|
|
|
if(! bVendor && sVendorProperty.equals(i->first))
|
|
|
|
{
|
|
|
|
m_sVendor = i->second;
|
|
|
|
bVendor = true;
|
|
|
|
}
|
|
|
|
else if (!bVersion && sVersionProperty.equals(i->first))
|
|
|
|
{
|
|
|
|
m_sVersion = i->second;
|
|
|
|
bVersion = true;
|
|
|
|
}
|
|
|
|
else if (!bHome && sHomeProperty.equals(i->first))
|
|
|
|
{
|
|
|
|
OUString fileURL;
|
|
|
|
if (osl_getFileURLFromSystemPath(i->second.pData,& fileURL.pData) ==
|
|
|
|
osl_File_E_None)
|
|
|
|
{
|
|
|
|
//make sure that the drive letter have all the same case
|
|
|
|
//otherwise file:///c:/jre and file:///C:/jre produce two
|
|
|
|
//different objects!!!
|
|
|
|
if (makeDriveLetterSame( & fileURL))
|
|
|
|
{
|
|
|
|
m_sHome = fileURL;
|
|
|
|
bHome = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (!bAccess && sAccessProperty.equals(i->first))
|
|
|
|
{
|
|
|
|
if (i->second.getLength() > 0)
|
|
|
|
{
|
|
|
|
m_bAccessibility = true;
|
|
|
|
bAccess = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// the javax.accessibility.xxx property may not be set. Therefore we
|
|
|
|
//must search through all properties.
|
|
|
|
|
|
|
|
}
|
|
|
|
if (!bVersion || !bVendor || !bHome)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
// init m_sRuntimeLibrary
|
|
|
|
OSL_ASSERT(m_sHome.getLength());
|
|
|
|
//call virtual function to get the possible paths to the runtime library.
|
|
|
|
|
|
|
|
int size = 0;
|
|
|
|
char const* const* arRtPaths = getRuntimePaths( & size);
|
|
|
|
vector<OUString> libpaths = getVectorFromCharArray(arRtPaths, size);
|
|
|
|
|
|
|
|
bool bRt = false;
|
|
|
|
typedef vector<OUString>::const_iterator i_path;
|
|
|
|
for(i_path ip = libpaths.begin(); ip != libpaths.end(); ip++)
|
|
|
|
{
|
|
|
|
//Construct an absolute path to the possible runtime
|
|
|
|
OUString usRt= m_sHome + *ip;
|
|
|
|
DirectoryItem item;
|
|
|
|
if(DirectoryItem::get(usRt, item) == File::E_None)
|
|
|
|
{
|
|
|
|
//found runtime lib
|
|
|
|
m_sRuntimeLibrary = usRt;
|
|
|
|
bRt = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!bRt)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
// init m_sLD_LIBRARY_PATH
|
|
|
|
OSL_ASSERT(m_sHome.getLength());
|
|
|
|
size = 0;
|
|
|
|
char const * const * arLDPaths = getLibraryPaths( & size);
|
|
|
|
vector<OUString> ld_paths = getVectorFromCharArray(arLDPaths, size);
|
|
|
|
|
|
|
|
char arSep[]= {SAL_PATHSEPARATOR, 0};
|
|
|
|
OUString sPathSep= OUString::createFromAscii(arSep);
|
|
|
|
bool bLdPath = true;
|
|
|
|
int c = 0;
|
|
|
|
for(i_path il = ld_paths.begin(); il != ld_paths.end(); il ++, c++)
|
|
|
|
{
|
|
|
|
OUString usAbsUrl= m_sHome + *il;
|
|
|
|
// convert to system path
|
|
|
|
OUString usSysPath;
|
|
|
|
if(File::getSystemPathFromFileURL(usAbsUrl, usSysPath) == File::E_None)
|
|
|
|
{
|
|
|
|
|
|
|
|
if(c > 0)
|
|
|
|
m_sLD_LIBRARY_PATH+= sPathSep;
|
|
|
|
m_sLD_LIBRARY_PATH+= usSysPath;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
bLdPath = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (bLdPath == false)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2006-06-19 23:10:20 +00:00
|
|
|
char const* const* VendorBase::getRuntimePaths(int* /*size*/)
|
2004-07-23 10:53:01 +00:00
|
|
|
{
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
2006-06-19 23:10:20 +00:00
|
|
|
char const* const* VendorBase::getLibraryPaths(int* /*size*/)
|
2004-07-23 10:53:01 +00:00
|
|
|
{
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
const OUString & VendorBase::getVendor() const
|
|
|
|
{
|
|
|
|
return m_sVendor;
|
|
|
|
}
|
|
|
|
const OUString & VendorBase::getVersion() const
|
|
|
|
{
|
|
|
|
return m_sVersion;
|
|
|
|
}
|
|
|
|
|
|
|
|
const OUString & VendorBase::getHome() const
|
|
|
|
{
|
|
|
|
return m_sHome;
|
|
|
|
}
|
|
|
|
|
|
|
|
const OUString & VendorBase::getLibraryPaths() const
|
|
|
|
{
|
|
|
|
return m_sLD_LIBRARY_PATH;
|
|
|
|
}
|
|
|
|
|
|
|
|
const OUString & VendorBase::getRuntimeLibrary() const
|
|
|
|
{
|
|
|
|
return m_sRuntimeLibrary;
|
|
|
|
}
|
|
|
|
bool VendorBase::supportsAccessibility() const
|
|
|
|
{
|
|
|
|
return m_bAccessibility;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool VendorBase::needsRestart() const
|
|
|
|
{
|
|
|
|
if (getLibraryPaths().getLength() > 0)
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2006-06-19 23:10:20 +00:00
|
|
|
int VendorBase::compareVersions(const rtl::OUString& /*sSecond*/) const
|
2004-07-23 10:53:01 +00:00
|
|
|
{
|
2004-12-16 10:46:09 +00:00
|
|
|
OSL_ENSURE(0, "[Java framework] VendorBase::compareVersions must be "
|
|
|
|
"overridden in derived class.");
|
|
|
|
return 0;
|
2004-07-23 10:53:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-16 10:46:09 +00:00
|
|
|
|
|
|
|
|
2004-07-23 10:53:01 +00:00
|
|
|
}
|