summaryrefslogtreecommitdiff
path: root/configmgr/source/misc/bootstrap.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/misc/bootstrap.cxx')
-rw-r--r--configmgr/source/misc/bootstrap.cxx704
1 files changed, 0 insertions, 704 deletions
diff --git a/configmgr/source/misc/bootstrap.cxx b/configmgr/source/misc/bootstrap.cxx
deleted file mode 100644
index 4e747153d32c..000000000000
--- a/configmgr/source/misc/bootstrap.cxx
+++ /dev/null
@@ -1,704 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: bootstrap.cxx,v $
- * $Revision: 1.35 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_configmgr.hxx"
-
-#include <stdio.h>
-
-#include "bootstrap.hxx"
-
-#ifndef CONFIGMGR_API_FACTORY_HXX_
-#include "confapifactory.hxx"
-#endif
-#include "serviceinfohelper.hxx"
-#include "matchlocale.hxx"
-#include "tracer.hxx"
-#include <cppuhelper/component_context.hxx>
-#include <rtl/bootstrap.hxx>
-#include <rtl/ustring.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <osl/file.hxx>
-#include <osl/process.h>
-#include <osl/diagnose.h>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/configuration/MissingBootstrapFileException.hpp>
-#include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
-#include <com/sun/star/configuration/InstallationIncompleteException.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-
-// ---------------------------------------------------------------------------------------
-// legacy argument names
-#define ARGUMENT_LOCALE_COMPAT "locale"
-#define ARGUMENT_ASYNC_COMPAT "lazywrite"
-#define ARGUMENT_SERVERTYPE_COMPAT "servertype"
-
-// legacy servertype setting
-#define SETTING_SERVERTYPE_COMPAT "ServerType"
-#define BOOTSTRAP_SERVERTYPE_COMPAT CONTEXT_ITEM_PREFIX_ SETTING_SERVERTYPE_COMPAT
-
-#define SERVERTYPE_UNO_COMPAT "uno"
-#define SERVERTYPE_PLUGIN_COMPAT "plugin"
-// ---------------------------------------------------------------------------------------
-
-#define NAME( N ) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(N))
-#define ITEM( N ) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(N))
-// ---------------------------------------------------------------------------------------
-// -------------------------------------------------------------------------
-
-// ---------------------------------------------------------------------------------------
-namespace configmgr
-{
-// ---------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------
- static void convertToBool(const uno::Any& aValue, sal_Bool& bValue)
- {
- rtl::OUString aStrValue;
- if (aValue >>= aStrValue)
- {
- if (aStrValue.equalsIgnoreAsciiCaseAscii("true"))
- {
- bValue = sal_True;
- }
- else if (aStrValue.equalsIgnoreAsciiCaseAscii("false"))
- {
- bValue = sal_False;
- }
- }
- }
- // ----------------------------------------------------------------------------------
- const sal_Char k_BootstrapContextImplName[] = "com.sun.star.comp.configuration.bootstrap.BootstrapContext" ;
- const sal_Char k_BootstrapContextServiceName[] = "com.sun.star.configuration.bootstrap.BootstrapContext" ;
-
- // -------------------------------------------------------------------------
- static sal_Char const * const k_BootstrapContextServiceNames [] =
- {
- k_BootstrapContextServiceName,
- 0
- };
- static const ServiceImplementationInfo k_BootstrapContextServiceInfo =
- {
- k_BootstrapContextImplName,
- k_BootstrapContextServiceNames,
- 0
- };
- static const SingletonRegistrationInfo k_BootstrapContextSingletonInfo =
- {
- A_BootstrapContextSingletonName,
- k_BootstrapContextImplName,
- k_BootstrapContextServiceName,
- 0
- };
-// ---------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------
- uno::Reference<uno::XInterface> SAL_CALL
- instantiateBootstrapContext( uno::Reference< uno::XComponentContext > const& xTargetContext )
- {
- uno::Reference< uno::XComponentContext > xContext = UnoContextTunnel::recoverContext(xTargetContext);
-
- BootstrapContext * pContext = new BootstrapContext(xContext);
- uno::Reference< uno::XComponentContext > xResult(pContext);
-
- pContext->initialize();
-
- return uno::Reference< uno::XInterface >( xResult, uno::UNO_QUERY );
- }
-
- const SingletonRegistrationInfo * getBootstrapContextSingletonInfo()
- {
- return &k_BootstrapContextSingletonInfo;
- }
- const ServiceRegistrationInfo * getBootstrapContextServiceInfo()
- {
- return getRegistrationInfo(&k_BootstrapContextServiceInfo);
- }
-// ---------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-
- static
- inline
- cppu::ContextEntry_Init makeEntry(beans::NamedValue const & aOverride)
- {
- return cppu::ContextEntry_Init(aOverride.Name,aOverride.Value);
- }
-// ---------------------------------------------------------------------------
-
- static
- cppu::ContextEntry_Init makeSingleton(SingletonRegistrationInfo const * pSingletonInfo)
- {
- OSL_ASSERT( pSingletonInfo &&
- pSingletonInfo->singletonName &&
- pSingletonInfo->instantiatedServiceName );
-
- rtl::OUStringBuffer aSingletonName;
- aSingletonName.appendAscii( RTL_CONSTASCII_STRINGPARAM(SINGLETON_) );
- aSingletonName.appendAscii(pSingletonInfo->singletonName);
-
- rtl::OUString const aServiceName = rtl::OUString::createFromAscii(pSingletonInfo->instantiatedServiceName);
-
- return cppu::ContextEntry_Init(aSingletonName.makeStringAndClear(), uno::makeAny(aServiceName), true);
- }
-// ---------------------------------------------------------------------------
-
-uno::Reference< uno::XComponentContext > BootstrapContext::createWrapper(uno::Reference< uno::XComponentContext > const & _xContext, uno::Sequence < beans::NamedValue > const & _aOverrides)
-{
- std::vector< cppu::ContextEntry_Init > aContextEntries;
- aContextEntries.reserve(_aOverrides.getLength() + 5);
-
- // marker + bootstrap context
- aContextEntries.push_back( cppu::ContextEntry_Init(NAME(CONTEXT_ITEM_IS_WRAPPER_CONTEXT), uno::makeAny(sal_True)) );
- aContextEntries.push_back( cppu::ContextEntry_Init(NAME(CONTEXT_ITEM_IS_BOOTSTRAP_CONTEXT), uno::makeAny(sal_False)) );
-
- aContextEntries.push_back( makeSingleton(getBootstrapContextSingletonInfo()) );
-
- // singletons except for passthrough
- if (!isPassthrough(_xContext))
- {
- aContextEntries.push_back( makeSingleton(getDefaultProviderSingletonInfo()) );
- aContextEntries.push_back( makeSingleton(backend::getDefaultBackendSingletonInfo()) );
- }
-
- for (sal_Int32 i = 0; i<_aOverrides.getLength(); ++i)
- aContextEntries.push_back( makeEntry(_aOverrides[i]) );
-
- return cppu::createComponentContext(&aContextEntries.front(),aContextEntries.size(),_xContext);
-}
-// ---------------------------------------------------------------------------
-
-sal_Bool BootstrapContext::isWrapper(uno::Reference< uno::XComponentContext > const & _xContext)
-{
- OSL_ASSERT(_xContext.is());
- if (!_xContext.is()) return false;
-
- uno::Any aSetting = _xContext->getValueByName( NAME(CONTEXT_ITEM_IS_WRAPPER_CONTEXT) );
-
- if (!aSetting.hasValue()) return false;
-
- sal_Bool bValue = false;
- OSL_VERIFY(aSetting >>= bValue);
-
- return bValue;
-}
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------
-
-BootstrapContext::BootstrapContext(uno::Reference< uno::XComponentContext > const & _xContext)
-: ComponentContext(_xContext)
-{
-}
-// ---------------------------------------------------------------------------
-
-BootstrapContext::~BootstrapContext()
-{
-}
-// ---------------------------------------------------------------------------
-
-void BootstrapContext::initialize()
-{
- // get default Bootstrap URL
- rtl::OUString sURL;
- uno::Any aExplicitURL;
- if ( this->lookupInContext(aExplicitURL,NAME(CONTEXT_ITEM_PREFIX_ SETTING_INIFILE)) )
- {
- OSL_VERIFY(aExplicitURL >>= sURL);
- }
- else if (!rtl::Bootstrap::get(NAME(BOOTSTRAP_ITEM_INIFILE),sURL))
- {
- sURL = getDefaultConfigurationBootstrapURL();
- }
-
- ComponentContext::initialize(sURL);
-}
-// ---------------------------------------------------------------------------------------
-
-rtl::OUString BootstrapContext::getDefaultConfigurationBootstrapURL()
-{
- rtl::OUString url(
- RTL_CONSTASCII_USTRINGPARAM(
- "$OOO_BASE_DIR/program/" SAL_CONFIGFILE("configmgr")));
- rtl::Bootstrap::expandMacros(url); //TODO: detect failure
- return url;
-}
-// ---------------------------------------------------------------------------------------
-
-rtl::OUString BootstrapContext::makeContextName(rtl::OUString const & _aName)
-{
- // check that it isn't long already
- OSL_ENSURE(!_aName.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_MODULE_PREFIX_) ),
- "configmgr::BootstrapContext: passing argument in long context form won't work");
-
- return NAME(CONTEXT_ITEM_PREFIX_).concat(_aName);
-}
-// ---------------------------------------------------------------------------
-
-rtl::OUString BootstrapContext::makeBootstrapName(rtl::OUString const & _aName)
-{
- // check if already is short
- if (!_aName.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_PREFIX_) ) )
- {
- OSL_TRACE( "configmgr: Cannot map name to bootstrap name: %s",
- rtl::OUStringToOString(_aName,RTL_TEXTENCODING_ASCII_US).getStr() );
- return _aName;
- }
- return NAME(BOOTSTRAP_ITEM_PREFIX_).concat(_aName.copy(RTL_CONSTASCII_LENGTH(CONTEXT_ITEM_PREFIX_)));
-}
-// ---------------------------------------------------------------------------
-
-uno::Any SAL_CALL
- BootstrapContext::getValueByName( const rtl::OUString& aName )
- throw (uno::RuntimeException)
-{
- sal_Bool const bOurName = aName.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_MODULE_PREFIX_) );
-
- if (bOurName)
- {
- if (aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_BOOTSTRAP_ERROR) ) )
- return this->makeBootstrapException();
-
- if (aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_PREFIX_ SETTING_INIFILE) ) )
- return uno::makeAny( this->getBootstrapURL() );
-
- if (aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_IS_BOOTSTRAP_CONTEXT) ) )
- return uno::makeAny( sal_True );
- }
- else if (aName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(SINGLETON_ A_BootstrapContextSingletonName) ) )
- {
- return uno::makeAny( uno::Reference< uno::XComponentContext >(this) );
- }
-
- uno::Any aResult;
-
- bool bFound = lookupInContext ( aResult, aName );
-
- if (!bFound && bOurName) // requires: CONTEXT_ITEM_PREFIX_ starts with CONTEXT_MODULE_PREFIX_
- {
- if ( aName.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_PREFIX_) ) )
- {
- bFound = lookupInBootstrap( aResult, makeBootstrapName(aName) );
- }
- }
- return aResult;
-}
-
-// ---------------------------------------------------------------------------
-// class ContextReader
-// ---------------------------------------------------------------------------
-
- ContextReader::ContextReader(uno::Reference< uno::XComponentContext > const & context)
- : m_basecontext(context)
- , m_fullcontext()
- {
- OSL_ENSURE(context.is(), "ERROR: trying to create reader on NULL context\n");
- if (context.is())
- {
- uno::Any aBootstrapContext = context->getValueByName( SINGLETON(A_BootstrapContextSingletonName) );
- aBootstrapContext >>= m_fullcontext;
- }
- }
-// ---------------------------------------------------------------------------
-
- uno::Reference< lang::XMultiComponentFactory > ContextReader::getServiceManager() const
- {
- OSL_ASSERT(m_basecontext.is());
- return m_basecontext->getServiceManager();
- }
-// ---------------------------------------------------------------------------
- inline
- uno::Any ContextReader::getSetting(rtl::OUString const & _aSetting) const
- {
- OSL_ASSERT(m_basecontext.is());
- return getBestContext()->getValueByName(_aSetting);
- }
-
- inline
- sal_Bool ContextReader::hasSetting(rtl::OUString const & _aSetting) const
- {
- return getSetting(_aSetting).hasValue();
- }
-
- inline
- sal_Bool ContextReader::getBoolSetting(rtl::OUString const & _aSetting, sal_Bool bValue = false) const
- {
- uno::Any aValue = getSetting(_aSetting);
- if (!(aValue >>= bValue))
- convertToBool(aValue, bValue);
-
- return bValue;
- }
-
- inline
- rtl::OUString ContextReader::getStringSetting(rtl::OUString const & _aSetting, rtl::OUString aValue = rtl::OUString()) const
- {
- getSetting(_aSetting) >>= aValue;
- return aValue;
- }
-// ---------------------------------------------------------------------------------------
-
- sal_Bool ContextReader::isUnoBackend() const
- {
- rtl::OUString aSettingName = NAME(BOOTSTRAP_SERVERTYPE_COMPAT);
-
- rtl::OUString aValue;
- if (getSetting(aSettingName) >>= aValue)
- {
- return aValue.equalsAscii(SERVERTYPE_UNO_COMPAT);
- }
- else
- {
- return true;
- }
- }
-// ---------------------------------------------------------------------------------------
-
- sal_Bool ContextReader::hasUnoBackendService() const
- {
- return hasSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_UNOSERVICE) );
- }
- sal_Bool ContextReader::hasUnoBackendWrapper() const
- {
- return hasSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_UNOWRAPPER) );
- }
-
- sal_Bool ContextReader::hasLocale() const
- {
- return hasSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_LOCALE_NEW) );
- }
- sal_Bool ContextReader::hasAsyncSetting() const
- {
- return hasSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_ASYNC_NEW) );
- }
- sal_Bool ContextReader::hasOfflineSetting() const
- {
- return hasSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_OFFLINE) );
- }
-// ---------------------------------------------------------------------------------------
-
- rtl::OUString ContextReader::getUnoBackendService() const
- {
- return getStringSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_UNOSERVICE) );
- }
- rtl::OUString ContextReader::getUnoBackendWrapper() const
- {
- return getStringSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_UNOWRAPPER) );
- }
-
- rtl::OUString ContextReader::getLocale() const
- {
- return getStringSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_LOCALE_NEW) );
- }
- sal_Bool ContextReader::getAsyncSetting() const
- {
- return getBoolSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_ASYNC_NEW) );
- }
- sal_Bool ContextReader::getOfflineSetting() const
- {
- return getBoolSetting( NAME(CONTEXT_ITEM_PREFIX_ SETTING_OFFLINE) );
- }
-
- // get a special setting
- sal_Bool ContextReader::isAdminService() const
- {
- return getBoolSetting( NAME(CONTEXT_ITEM_ADMINFLAG) );
- }
-
- sal_Bool ContextReader::isBootstrapValid() const
- {
- return this->isUnoBackend() &&
- this->hasUnoBackendService() &&
- (this->hasUnoBackendWrapper() || !this->getOfflineSetting());
- }
-
- uno::Any ContextReader::getBootstrapError() const
- {
- return getSetting( NAME(CONTEXT_ITEM_BOOTSTRAP_ERROR) );
- }
-// ---------------------------------------------------------------------------------------
-
- bool ContextReader::testAdminService(uno::Reference< uno::XComponentContext > const & context, bool bAdmin)
- {
- OSL_ASSERT(context.is());
- if (!context.is()) return false;
-
- uno::Any aSetting = context->getValueByName( NAME(CONTEXT_ITEM_ADMINFLAG) );
-
- sal_Bool bValue = false;
- bool bTest = (aSetting >>= bValue) && bValue;
-
- return bTest == bAdmin;
- }
-// ---------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------
-
- bool ArgumentHelper::extractArgument(beans::NamedValue & rValue, const uno::Any & aOverride)
- {
- if ( ! (aOverride >>= rValue) )
- {
- // it must be a PropertyValue, if it isn't a NamedValue
- beans::PropertyValue aPV;
- if ( !(aOverride >>= aPV) )
- return false;
-
- rValue.Name = aPV.Name;
- rValue.Value = aPV.Value;
- }
-
- return true;
- }
-
-// ---------------------------------------------------------------------------------------
-
- bool ArgumentHelper::checkBackendArgument(beans::NamedValue const & aAdjustedValue)
- {
- bool isWrappable =
- aAdjustedValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_PREFIX_ SETTING_ASYNC_NEW)) ||
- aAdjustedValue.Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(CONTEXT_ITEM_PREFIX_ SETTING_LOCALE_NEW));
-
- if (isWrappable) return false;
-
- m_bHasBackendArguments = true;
- return true;
- }
-// ---------------------------------------------------------------------------------------
-
- bool ArgumentHelper::filterAndAdjustArgument(beans::NamedValue & rValue)
- {
- // handle old servertype argument and filter the 'plugin' value
- if (rValue.Name.equalsAscii(ARGUMENT_SERVERTYPE_COMPAT))
- {
- rtl::OUString aServertype;
- if (! (rValue.Value >>= aServertype))
- return false;
-
- if (aServertype.equalsAscii(SERVERTYPE_PLUGIN_COMPAT))
- return false;
-
- rValue.Name = NAME(BOOTSTRAP_SERVERTYPE_COMPAT);
- // check, if it is already there
- uno::Any const aExistingValue = m_context->getValueByName(rValue.Name);
-
- if (aExistingValue.hasValue())
- return !(aExistingValue == rValue.Value);
-
- else
- return !aServertype.equalsAscii(SERVERTYPE_UNO_COMPAT);
- }
-
- // map old argument names for comatibility
- else if (rValue.Name.equalsAscii(ARGUMENT_LOCALE_COMPAT))
- rValue.Name = NAME(SETTING_LOCALE_NEW);
-
- else if (rValue.Name.equalsAscii(ARGUMENT_ASYNC_COMPAT))
- rValue.Name = NAME(SETTING_ASYNC_NEW);
-
- // give the item a long name
- rValue.Name = BootstrapContext::makeContextName(rValue.Name);
-
- // check, if it is already there
- uno::Any const aExistingValue = m_context->getValueByName(rValue.Name);
-
- return ! (aExistingValue == rValue.Value);
- }
-// ---------------------------------------------------------------------------------------
-
- beans::NamedValue ArgumentHelper::makeAdminServiceOverride(sal_Bool bAdmin)
- {
- return beans::NamedValue( NAME(CONTEXT_ITEM_ADMINFLAG), uno::makeAny(bAdmin) );
- }
-// ---------------------------------------------------------------------------------------
-// ---------------------------------------------------------------------------------------
-// - bootstrapping error checking helper
-// ---------------------------------------------------------------------------------------
-namespace {
-// ---------------------------------------------------------------------------------------
-// error handling
-// ---------------------------------------------------------------------------------------
- enum BootstrapResult
- {
- BOOTSTRAP_DATA_OK,
- INCOMPLETE_BOOTSTRAP_DATA,
- INCOMPLETE_BOOTSTRAP_FILE,
- MISSING_BOOTSTRAP_FILE,
- BOOTSTRAP_FAILURE
- };
-// ---------------------------------------------------------------------------------------
- static
- rtl::OUString getFallbackErrorMessage( BootstrapResult _rc )
- {
- rtl::OUString sMessage(RTL_CONSTASCII_USTRINGPARAM("The program cannot start. "));
-
- switch (_rc)
- {
- case MISSING_BOOTSTRAP_FILE:
- sMessage = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("A main configuration file is missing"));
- break;
-
- case INCOMPLETE_BOOTSTRAP_FILE:
- sMessage = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("A main configuration file is invalid"));
- break;
-
- case INCOMPLETE_BOOTSTRAP_DATA:
- sMessage = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Required bootstrap data is not available"));
- break;
-
- default:
- sMessage = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Unexpected bootstrap failure"));
- break;
-
- case BOOTSTRAP_DATA_OK:
- break;
- }
- sMessage += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" (No detailed error message available.)"));
-
- return sMessage;
- }
-// ---------------------------------------------------------------------------------------
-
- static
- uno::Any impl_makeBootstrapException( BootstrapResult _rc, rtl::OUString const& _sMessage, rtl::OUString const& _sURL, uno::Reference< uno::XInterface > _xContext )
- {
- rtl::OUString sMessage(_sMessage);
- // ensure a message
- if (sMessage.getLength()== 0)
- {
- OSL_ENSURE(false, "Bootstrap error message missing");
-
- sMessage = getFallbackErrorMessage(_rc);
- }
-
- // raise the error
- switch (_rc)
- {
- case MISSING_BOOTSTRAP_FILE:
- return uno::makeAny( com::sun::star::configuration::MissingBootstrapFileException(sMessage, _xContext, _sURL) );
-
- case INCOMPLETE_BOOTSTRAP_FILE:
- return uno::makeAny( com::sun::star::configuration::InvalidBootstrapFileException(sMessage, _xContext, _sURL) );
-
- default: OSL_ENSURE(false, "Undefined BootstrapResult code");
- case INCOMPLETE_BOOTSTRAP_DATA:
- case BOOTSTRAP_FAILURE:
- return uno::makeAny( com::sun::star::configuration::CannotLoadConfigurationException(sMessage, _xContext) );
-
- case BOOTSTRAP_DATA_OK:
- break;
- }
- return uno::Any();
- }
-// ---------------------------------------------------------------------------------------
-
- static
- inline
- bool urlExists(rtl::OUString const& _sURL)
- {
- osl::DirectoryItem aCheck;
- return (osl::DirectoryItem::get(_sURL,aCheck) == osl::DirectoryItem::E_None);
- }
-// ---------------------------------------------------------------------------------------
-
- static
- rtl::OUString buildBootstrapError( sal_Char const* _sWhat, rtl::OUString const& _sName, sal_Char const* _sHow)
- {
- rtl::OUStringBuffer sMessage;
-
- sMessage.appendAscii(RTL_CONSTASCII_STRINGPARAM("The program cannot start. "));
- sMessage.appendAscii(_sWhat);
- sMessage.appendAscii(RTL_CONSTASCII_STRINGPARAM(" '")).append(_sName).appendAscii(RTL_CONSTASCII_STRINGPARAM("' "));
- sMessage.appendAscii(_sHow).appendAscii(". ");
-
- return sMessage.makeStringAndClear();
- }
-// ---------------------------------------------------------------------------------------
-
- BootstrapResult getBootstrapErrorMessage(BootstrapContext const & aContext, ContextReader const & aSettings, rtl::OUString& _rMessage, rtl::OUString& _rIniFile )
- {
- BootstrapResult eResult = BOOTSTRAP_DATA_OK;
-
- _rIniFile = aContext.getBootstrapURL();
-
- if ( !urlExists(_rIniFile) )
- {
- _rMessage = buildBootstrapError("The configuration file ",_rIniFile.copy(1+_rIniFile.lastIndexOf('/')),"is missing");
- eResult = MISSING_BOOTSTRAP_FILE;
- }
- else if (!aSettings.isUnoBackend())
- {
- _rMessage = buildBootstrapError("The configuration file ",_rIniFile.copy(1+_rIniFile.lastIndexOf('/')),"is for an older version of the configuration database");
- eResult = INCOMPLETE_BOOTSTRAP_FILE;
- }
- else if (!aSettings.isBootstrapValid() )
- {
- _rMessage = buildBootstrapError("Needed information to access",rtl::OUString::createFromAscii("application"), "configuration data is missing");
- eResult = INCOMPLETE_BOOTSTRAP_DATA;
- }
-
- return eResult;
- }
-// ---------------------------------------------------------------------------------------
-} // anonymous namespace
-// ---------------------------------------------------------------------------------------
-uno::Any BootstrapContext::makeBootstrapException()
-{
- ContextReader aReader(this);
-
- if (aReader.isBootstrapValid()) return uno::Any();
-
- rtl::OUString sMessage,sURL;
-
- BootstrapResult rc = getBootstrapErrorMessage(*this,aReader,sMessage,sURL);
-
- return impl_makeBootstrapException(rc,sMessage,sURL,*this);
-}
-// ---------------------------------------------------------------------------
-rtl::OUString SAL_CALL
- BootstrapContext::getImplementationName(void)
- throw (uno::RuntimeException)
-{
- return ServiceInfoHelper(&k_BootstrapContextServiceInfo).getImplementationName() ;
-}
-//------------------------------------------------------------------------------
-
-sal_Bool SAL_CALL
- BootstrapContext::supportsService(const rtl::OUString& aServiceName)
- throw (uno::RuntimeException)
-{
- return ServiceInfoHelper(&k_BootstrapContextServiceInfo).supportsService(aServiceName) ;
-}
-//------------------------------------------------------------------------------
-uno::Sequence<rtl::OUString> SAL_CALL
- BootstrapContext::getSupportedServiceNames(void)
- throw (uno::RuntimeException)
-{
- return ServiceInfoHelper(&k_BootstrapContextServiceInfo).getSupportedServiceNames() ;
-}
-// ---------------------------------------------------------------------------------------
-} // namespace configmgr
-
-