Files
libreoffice/desktop/source/deployment/registry/component/dp_component.cxx

1763 lines
67 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
re-base on ALv2 code. Includes: Patch contributed by: Jurgen Schmidt remove onlineregistration with dependencies http://svn.apache.org/viewvc?view=revision&revision=1240245 imported patch package_eventlistener.patch http://svn.apache.org/viewvc?view=revision&revision=1172103 Patch contributed by Pedro Giffuni Accept Google Chrome OS fonts as equivalent to MS fonts. http://svn.apache.org/viewvc?view=revision&revision=1233155 http://svn.apache.org/viewvc?view=revision&revision=1233408 Patch contributed by Andre Fischer Do not add targets for junit tests when junit is disabled. http://svn.apache.org/viewvc?view=revision&revision=1241508 Patches contributed by Mathias Bauer (and others) gnumake4 work variously http://svn.apache.org/viewvc?view=revision&revision=1394707 http://svn.apache.org/viewvc?view=revision&revision=1394326 cws mba34issues01: #i114600#: remove forbidden characters from list of unencoded characters http://svn.apache.org/viewvc?view=revision&revision=1172370 Patches contributed by Oliver Rainer-Wittman some clean up in JPEGReader due to memory constraints http://svn.apache.org/viewvc?view=revision&revision=1299729 119114 - method <UpdateDialog::addSpecificError(..)> - create entry with correct type http://svn.apache.org/viewvc?view=revision&revision=1305265 Patches contributed by Ariel Constenla-Haile i118707 - make toolbar control's popup window grab focus http://svn.apache.org/viewvc?view=revision&revision=1225846 Patches contributed by Herbert Duerr #i118662# remove usage of BerkeleyDB in desktop module http://svn.apache.org/viewvc?view=revision&revision=1213171 minor cleanups in dp_persmap.* http://svn.apache.org/viewvc?view=revision&revision=1215064 flush early to prevent problem with extension manager not cleaning up its objects http://svn.apache.org/viewvc?view=revision&revision=1228147 i118726 do not flush *pmap file while reading it http://svn.apache.org/viewvc?view=revision&revision=1230614 #i119048# migrate BDB extension entries using a simple heuristic http://svn.apache.org/viewvc?view=revision&revision=1300972 #i119048# handle edge cases when importing BDB hash files http://svn.apache.org/viewvc?view=revision&revision=1301428 #i119113# fix of-by-one when importing BDB files http://svn.apache.org/viewvc?view=revision&revision=1305420 restore our encryption settings, icon themes, and dictionaries. removed wrapper hacks, kill obsolete bundled extension blob / pre-registration handling, remove duplicated quickstart code. remove OS/2 conditionals.
2012-11-15 17:28:16 +00:00
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "dp_component.hrc"
#include "dp_backend.h"
#include "dp_platform.hxx"
#include "dp_ucb.h"
#include "rtl/string.hxx"
#include "rtl/strbuf.hxx"
#include "rtl/ustrbuf.hxx"
#include "rtl/uri.hxx"
#include "cppuhelper/exc_hlp.hxx"
#include "ucbhelper/content.hxx"
#include "comphelper/anytostring.hxx"
#include "comphelper/servicedecl.hxx"
#include "comphelper/sequence.hxx"
#include "xmlscript/xml_helper.hxx"
#include "svl/inettype.hxx"
#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
#include "com/sun/star/container/XNameContainer.hpp"
#include "com/sun/star/container/XSet.hpp"
#include "com/sun/star/registry/XSimpleRegistry.hpp"
#include "com/sun/star/registry/XImplementationRegistration.hpp"
#include "com/sun/star/loader/XImplementationLoader.hpp"
#include "com/sun/star/io/XInputStream.hpp"
#include "com/sun/star/ucb/NameClash.hpp"
#include "com/sun/star/util/theMacroExpander.hpp"
#include <list>
#include <boost/unordered_map.hpp>
#include <vector>
#include <memory>
#include <algorithm>
#include "dp_compbackenddb.hxx"
using namespace ::dp_misc;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ucb;
namespace dp_registry {
namespace backend {
namespace component {
namespace {
typedef ::std::list<OUString> t_stringlist;
typedef ::std::vector< ::std::pair<OUString, OUString> > t_stringpairvec;
#define IMPLEMENTATION_NAME "com.sun.star.comp.deployment.component.PackageRegistryBackend"
/** return a vector of bootstrap variables which have been provided
as command arguments.
*/
::std::vector<OUString> getCmdBootstrapVariables()
{
::std::vector<OUString> ret;
sal_uInt32 count = osl_getCommandArgCount();
for (sal_uInt32 i = 0; i < count; i++)
{
OUString arg;
osl_getCommandArg(i, &arg.pData);
if (arg.match("-env:"))
ret.push_back(arg);
}
return ret;
}
bool jarManifestHeaderPresent(
OUString const & url, OUString const & name,
Reference<XCommandEnvironment> const & xCmdEnv )
{
OUStringBuffer buf;
buf.appendAscii( "vnd.sun.star.zip://" );
buf.append(
::rtl::Uri::encode(
url, rtl_UriCharClassRegName, rtl_UriEncodeIgnoreEscapes,
RTL_TEXTENCODING_UTF8 ) );
buf.appendAscii( "/META-INF/MANIFEST.MF" );
::ucbhelper::Content manifestContent;
OUString line;
return
create_ucb_content(
&manifestContent, buf.makeStringAndClear(), xCmdEnv,
false /* no throw */ )
&& readLine( &line, name, manifestContent, RTL_TEXTENCODING_ASCII_US );
}
//==============================================================================
class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend
{
class ComponentPackageImpl : public ::dp_registry::backend::Package
{
BackendImpl * getMyBackend() const;
const OUString m_loader;
enum reg {
REG_UNINIT, REG_VOID, REG_REGISTERED, REG_NOT_REGISTERED, REG_MAYBE_REGISTERED
} m_registered;
void getComponentInfo(
ComponentBackendDb::Data * data,
std::vector< css::uno::Reference< css::uno::XInterface > > *
factories,
Reference<XComponentContext> const & xContext );
void componentLiveInsertion(
ComponentBackendDb::Data const & data,
std::vector< css::uno::Reference< css::uno::XInterface > > const &
factories);
void componentLiveRemoval(ComponentBackendDb::Data const & data);
virtual void SAL_CALL disposing();
// Package
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
const Reference<registry::XSimpleRegistry> getRDB() const;
public:
ComponentPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
OUString const & loader, bool bRemoved,
OUString const & identifier);
};
friend class ComponentPackageImpl;
class ComponentsPackageImpl : public ::dp_registry::backend::Package
{
BackendImpl * getMyBackend() const;
// Package
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
public:
ComponentsPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool bRemoved, OUString const & identifier);
};
friend class ComponentsPackageImpl;
class TypelibraryPackageImpl : public ::dp_registry::backend::Package
{
BackendImpl * getMyBackend() const;
const bool m_jarFile;
virtual void SAL_CALL disposing();
// Package
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
public:
TypelibraryPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool jarFile, bool bRemoved,
OUString const & identifier);
};
friend class TypelibraryPackageImpl;
/** Serves for unregistering packages that were registered on a
different platform. This can happen if one has remotely mounted
/home, for example.
*/
class OtherPlatformPackageImpl : public ::dp_registry::backend::Package
{
public:
OtherPlatformPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool bRemoved, OUString const & identifier, OUString const& rPlatform);
private:
BackendImpl * getMyBackend() const;
const Reference<registry::XSimpleRegistry> impl_openRDB() const;
const Reference<XInterface> impl_createInstance(OUString const& rService) const;
// Package
virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_(
::osl::ResettableMutexGuard & guard,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void processPackage_(
::osl::ResettableMutexGuard & guard,
bool registerPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv );
private:
OUString const m_aPlatform;
};
friend class OtherPlatformPackageImpl;
t_stringlist m_jar_typelibs;
t_stringlist m_rdb_typelibs;
t_stringlist m_components;
enum RcItem { RCITEM_JAR_TYPELIB, RCITEM_RDB_TYPELIB, RCITEM_COMPONENTS };
t_stringlist & getRcItemList( RcItem kind ) {
switch (kind)
{
case RCITEM_JAR_TYPELIB:
return m_jar_typelibs;
case RCITEM_RDB_TYPELIB:
return m_rdb_typelibs;
default: // case RCITEM_COMPONENTS
return m_components;
}
}
bool m_unorc_inited;
bool m_unorc_modified;
2008-09-29 08:59:45 +00:00
bool bSwitchedRdbFiles;
typedef ::boost::unordered_map< OUString, Reference<XInterface>,
OUStringHash > t_string2object;
t_string2object m_backendObjects;
// PackageRegistryBackend
virtual Reference<deployment::XPackage> bindPackage_(
OUString const & url, OUString const & mediaType,
sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv );
virtual void SAL_CALL disposing();
const Reference<deployment::XPackageTypeInfo> m_xDynComponentTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xJavaComponentTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xPythonComponentTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xComponentsTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xRDBTypelibTypeInfo;
const Reference<deployment::XPackageTypeInfo> m_xJavaTypelibTypeInfo;
Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos;
OUString m_commonRDB;
OUString m_nativeRDB;
//URLs of the original rdbs (before any switching):
OUString m_commonRDB_orig;
OUString m_nativeRDB_orig;
std::auto_ptr<ComponentBackendDb> m_backendDb;
void addDataToDb(OUString const & url, ComponentBackendDb::Data const & data);
ComponentBackendDb::Data readDataFromDb(OUString const & url);
void revokeEntryFromDb(OUString const & url);
Reference<registry::XSimpleRegistry> m_xCommonRDB;
Reference<registry::XSimpleRegistry> m_xNativeRDB;
void unorc_verify_init( Reference<XCommandEnvironment> const & xCmdEnv );
void unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv );
Reference<XInterface> getObject( OUString const & id );
Reference<XInterface> insertObject(
OUString const & id, Reference<XInterface> const & xObject );
void releaseObject( OUString const & id );
bool addToUnoRc( RcItem kind, OUString const & url,
Reference<XCommandEnvironment> const & xCmdEnv );
bool removeFromUnoRc( RcItem kind, OUString const & url,
Reference<XCommandEnvironment> const & xCmdEnv );
bool hasInUnoRc( RcItem kind, OUString const & url );
css::uno::Reference< css::uno::XComponentContext > getRootContext() const;
public:
BackendImpl( Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext );
// XPackageRegistry
virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL
getSupportedPackageTypes() throw (RuntimeException);
virtual void SAL_CALL packageRemoved(OUString const & url, OUString const & mediaType)
throw (deployment::DeploymentException,
uno::RuntimeException);
using PackageRegistryBackend::disposing;
2008-09-29 08:59:45 +00:00
//Will be called from ComponentPackageImpl
void initServiceRdbFiles();
};
//______________________________________________________________________________
BackendImpl::ComponentPackageImpl::ComponentPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
OUString const & loader, bool bRemoved,
OUString const & identifier)
: Package( myBackend, url, name, name /* display-name */,
xPackageType, bRemoved, identifier),
m_loader( loader ),
m_registered( REG_UNINIT )
{}
const Reference<registry::XSimpleRegistry>
BackendImpl::ComponentPackageImpl::getRDB() const
{
BackendImpl * that = getMyBackend();
2008-09-29 08:59:45 +00:00
//Late "initialization" of the services rdb files
//This is to prevent problems when running several
//instances of OOo with root rights in parallel. This
//would otherwise cause problems when copying the rdbs.
//See http://qa.openoffice.org/issues/show_bug.cgi?id=99257
2008-09-29 08:59:45 +00:00
{
const ::osl::MutexGuard guard( getMutex() );
if (!that->bSwitchedRdbFiles)
{
that->bSwitchedRdbFiles = true;
that->initServiceRdbFiles();
}
}
if ( m_loader == "com.sun.star.loader.SharedLibrary" )
return that->m_xNativeRDB;
else
return that->m_xCommonRDB;
}
BackendImpl * BackendImpl::ComponentPackageImpl::getMyBackend() const
{
BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
if (NULL == pBackend)
{
//Throws a DisposedException
check();
//We should never get here...
throw RuntimeException(
"Failed to get the BackendImpl",
static_cast<OWeakObject*>(const_cast<ComponentPackageImpl *>(this)));
}
return pBackend;
}
//______________________________________________________________________________
void BackendImpl::ComponentPackageImpl::disposing()
{
Package::disposing();
}
//______________________________________________________________________________
void BackendImpl::TypelibraryPackageImpl::disposing()
{
Package::disposing();
}
//______________________________________________________________________________
void BackendImpl::disposing()
{
try {
m_backendObjects = t_string2object();
if (m_xNativeRDB.is()) {
m_xNativeRDB->close();
m_xNativeRDB.clear();
}
if (m_xCommonRDB.is()) {
m_xCommonRDB->close();
m_xCommonRDB.clear();
}
unorc_flush( Reference<XCommandEnvironment>() );
PackageRegistryBackend::disposing();
}
2011-12-06 00:19:44 +09:00
catch (const RuntimeException &) {
throw;
}
2011-12-06 00:19:44 +09:00
catch (const Exception &) {
Any exc( ::cppu::getCaughtException() );
throw lang::WrappedTargetRuntimeException(
"caught unexpected exception while disposing...",
static_cast<OWeakObject *>(this), exc );
}
}
2008-09-29 08:59:45 +00:00
void BackendImpl::initServiceRdbFiles()
{
const Reference<XCommandEnvironment> xCmdEnv;
::ucbhelper::Content cacheDir( getCachePath(), xCmdEnv, m_xComponentContext );
::ucbhelper::Content oldRDB;
// switch common rdb:
if (!m_commonRDB_orig.isEmpty())
{
create_ucb_content(
&oldRDB, makeURL( getCachePath(), m_commonRDB_orig),
xCmdEnv, false /* no throw */ );
}
m_commonRDB = m_commonRDB_orig == "common.rdb" ? OUString("common_.rdb") : OUString("common.rdb");
if (oldRDB.get().is())
{
if (! cacheDir.transferContent(
2008-09-29 08:59:45 +00:00
oldRDB, ::ucbhelper::InsertOperation_COPY,
m_commonRDB, NameClash::OVERWRITE ))
{
throw RuntimeException( "UCB transferContent() failed!", 0 );
}
oldRDB = ::ucbhelper::Content();
}
// switch native rdb:
if (!m_nativeRDB_orig.isEmpty())
{
create_ucb_content(
&oldRDB, makeURL(getCachePath(), m_nativeRDB_orig),
xCmdEnv, false /* no throw */ );
}
const OUString plt_rdb( getPlatformString() + ".rdb" );
const OUString plt_rdb_( getPlatformString() + "_.rdb" );
m_nativeRDB = (m_nativeRDB_orig == plt_rdb ) ? plt_rdb_ : plt_rdb;
if (oldRDB.get().is())
{
if (! cacheDir.transferContent(
2008-09-29 08:59:45 +00:00
oldRDB, ::ucbhelper::InsertOperation_COPY,
m_nativeRDB, NameClash::OVERWRITE ))
throw RuntimeException( "UCB transferContent() failed!", 0 );
2008-09-29 08:59:45 +00:00
}
// UNO is bootstrapped, flush for next process start:
m_unorc_modified = true;
unorc_flush( Reference<XCommandEnvironment>() );
2008-09-29 08:59:45 +00:00
// common rdb for java, native rdb for shared lib components
if (!m_commonRDB.isEmpty()) {
2008-09-29 08:59:45 +00:00
m_xCommonRDB.set(
m_xComponentContext->getServiceManager()
->createInstanceWithContext(
"com.sun.star.registry.SimpleRegistry",
2008-09-29 08:59:45 +00:00
m_xComponentContext ), UNO_QUERY_THROW );
m_xCommonRDB->open(
makeURL( expandUnoRcUrl(getCachePath()), m_commonRDB ),
false, true);
2008-09-29 08:59:45 +00:00
}
if (!m_nativeRDB.isEmpty()) {
2008-09-29 08:59:45 +00:00
m_xNativeRDB.set(
m_xComponentContext->getServiceManager()
->createInstanceWithContext(
"com.sun.star.registry.SimpleRegistry",
2008-09-29 08:59:45 +00:00
m_xComponentContext ), UNO_QUERY_THROW );
m_xNativeRDB->open(
makeURL( expandUnoRcUrl(getCachePath()), m_nativeRDB ),
false, true);
2008-09-29 08:59:45 +00:00
}
}
BackendImpl::BackendImpl(
Sequence<Any> const & args,
Reference<XComponentContext> const & xComponentContext )
: PackageRegistryBackend( args, xComponentContext ),
m_unorc_inited( false ),
m_unorc_modified( false ),
2008-09-29 08:59:45 +00:00
bSwitchedRdbFiles(false),
m_xDynComponentTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-component;type=native;platform=" +
getPlatformString(),
OUString("*") + OUString(SAL_DLLEXTENSION),
getResourceString(RID_STR_DYN_COMPONENT),
RID_IMG_COMPONENT) ),
m_xJavaComponentTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-component;type=Java",
"*.jar",
getResourceString(RID_STR_JAVA_COMPONENT),
RID_IMG_JAVA_COMPONENT) ),
m_xPythonComponentTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-component;type=Python",
"*.py",
getResourceString(
RID_STR_PYTHON_COMPONENT),
RID_IMG_COMPONENT ) ),
m_xComponentsTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-components",
"*.components",
getResourceString(RID_STR_COMPONENTS),
Merge commit 'ooo/DEV300_m101' into integration/dev300_m101 Conflicts: avmedia/inc/avmedia/mediaitem.hxx avmedia/prj/build.lst avmedia/source/framework/mediaitem.cxx avmedia/source/gstreamer/gstcommon.hxx avmedia/source/gstreamer/gstframegrabber.cxx avmedia/source/gstreamer/gstframegrabber.hxx avmedia/source/gstreamer/gstmanager.cxx avmedia/source/gstreamer/gstmanager.hxx avmedia/source/gstreamer/gstplayer.cxx avmedia/source/gstreamer/gstplayer.hxx avmedia/source/gstreamer/gstuno.cxx avmedia/source/gstreamer/gstwindow.cxx avmedia/source/gstreamer/gstwindow.hxx avmedia/source/gstreamer/makefile.mk avmedia/source/quicktime/quicktimeuno.cxx avmedia/source/viewer/mediawindow.cxx avmedia/source/viewer/mediawindow_impl.cxx avmedia/source/viewer/mediawindow_impl.hxx avmedia/source/viewer/mediawindowbase_impl.cxx avmedia/source/win/winuno.cxx basic/inc/basic/basmgr.hxx basic/inc/basic/mybasic.hxx basic/inc/basic/process.hxx basic/inc/basic/sbmeth.hxx basic/inc/basic/sbmod.hxx basic/inc/basic/sbxdef.hxx basic/inc/basic/sbxvar.hxx basic/source/app/app.cxx basic/source/app/app.hxx basic/source/app/appbased.cxx basic/source/app/appedit.cxx basic/source/app/appwin.cxx basic/source/app/appwin.hxx basic/source/app/brkpnts.cxx basic/source/app/brkpnts.hxx basic/source/app/dialogs.cxx basic/source/app/dialogs.hxx basic/source/app/msgedit.cxx basic/source/app/mybasic.cxx basic/source/app/process.cxx basic/source/app/processw.hxx basic/source/app/textedit.cxx basic/source/basmgr/basicmanagerrepository.cxx basic/source/basmgr/basmgr.cxx basic/source/classes/disas.cxx basic/source/classes/eventatt.cxx basic/source/classes/image.cxx basic/source/classes/sb.cxx basic/source/classes/sbunoobj.cxx basic/source/classes/sbxmod.cxx basic/source/comp/codegen.cxx basic/source/comp/dim.cxx basic/source/comp/exprgen.cxx basic/source/comp/exprnode.cxx basic/source/comp/exprtree.cxx basic/source/comp/sbcomp.cxx basic/source/inc/expr.hxx basic/source/inc/object.hxx basic/source/inc/sbunoobj.hxx basic/source/runtime/dllmgr-x86.cxx basic/source/runtime/iosys.cxx basic/source/runtime/makefile.mk basic/source/runtime/methods.cxx basic/source/runtime/methods1.cxx basic/source/runtime/runtime.cxx basic/source/runtime/stdobj.cxx basic/source/runtime/step0.cxx basic/source/runtime/step1.cxx basic/source/runtime/step2.cxx basic/source/sbx/sbxarray.cxx basic/source/sbx/sbxbase.cxx basic/source/sbx/sbxbool.cxx basic/source/sbx/sbxbyte.cxx basic/source/sbx/sbxcoll.cxx basic/source/sbx/sbxconv.hxx basic/source/sbx/sbxcurr.cxx basic/source/sbx/sbxexec.cxx basic/source/sbx/sbxint.cxx basic/source/sbx/sbxobj.cxx basic/source/sbx/sbxscan.cxx basic/source/sbx/sbxstr.cxx basic/source/sbx/sbxvals.cxx basic/source/sbx/sbxvalue.cxx basic/source/sbx/sbxvar.cxx basic/workben/mgrtest.cxx configmgr/prj/build.lst configmgr/source/access.cxx configmgr/source/configurationprovider.cxx configmgr/source/defaultprovider.cxx configmgr/source/pad.cxx configmgr/source/services.cxx configmgr/source/update.cxx configmgr/source/xmlreader.cxx configmgr/source/xmlreader.hxx connectivity/prj/build.lst connectivity/qa/complex/connectivity/TestCase.java connectivity/source/cpool/Zregistration.cxx connectivity/source/drivers/adabas/Bservices.cxx connectivity/source/drivers/ado/Aservices.cxx connectivity/source/drivers/calc/Cservices.cxx connectivity/source/drivers/calc/makefile.mk connectivity/source/drivers/dbase/DIndex.cxx connectivity/source/drivers/dbase/DIndexIter.cxx connectivity/source/drivers/dbase/DNoException.cxx connectivity/source/drivers/dbase/DTable.cxx connectivity/source/drivers/dbase/Dservices.cxx connectivity/source/drivers/dbase/dindexnode.cxx connectivity/source/drivers/evoab/LNoException.cxx connectivity/source/drivers/evoab/LServices.cxx connectivity/source/drivers/evoab2/NServices.cxx connectivity/source/drivers/file/FNoException.cxx connectivity/source/drivers/file/FPreparedStatement.cxx connectivity/source/drivers/file/FResultSet.cxx connectivity/source/drivers/file/FStatement.cxx connectivity/source/drivers/file/quotedstring.cxx connectivity/source/drivers/flat/ETable.cxx connectivity/source/drivers/flat/Eservices.cxx connectivity/source/drivers/hsqldb/Hservices.cxx connectivity/source/drivers/jdbc/jservices.cxx connectivity/source/drivers/kab/KServices.cxx connectivity/source/drivers/macab/MacabServices.cxx connectivity/source/drivers/mozab/MResultSet.cxx connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx connectivity/source/drivers/mysql/Yservices.cxx connectivity/source/drivers/odbc/OFunctions.cxx connectivity/source/drivers/odbc/oservices.cxx connectivity/source/inc/dbase/DIndexPage.hxx connectivity/source/inc/file/FTable.hxx connectivity/source/manager/mregistration.cxx connectivity/source/parse/PColumn.cxx desktop/prj/build.lst desktop/qa/deployment_misc/test_dp_version.cxx desktop/source/app/app.cxx desktop/source/app/appfirststart.cxx desktop/source/app/cmdlineargs.cxx desktop/source/app/cmdlineargs.hxx desktop/source/app/sofficemain.cxx desktop/source/deployment/gui/dp_gui.hrc desktop/source/deployment/gui/dp_gui_dialog2.cxx desktop/source/deployment/gui/dp_gui_dialog2.hxx desktop/source/deployment/gui/dp_gui_updatedialog.cxx desktop/source/deployment/gui/dp_gui_updatedialog.hxx desktop/source/deployment/manager/dp_extensionmanager.cxx desktop/source/deployment/manager/dp_extensionmanager.hxx desktop/source/deployment/misc/dp_misc.src desktop/source/deployment/registry/component/dp_component.cxx desktop/source/deployment/registry/configuration/dp_configuration.cxx desktop/source/deployment/registry/dp_backend.cxx desktop/source/deployment/registry/help/dp_help.cxx desktop/source/deployment/registry/script/dp_script.cxx desktop/source/migration/pages.cxx desktop/source/migration/pages.hxx desktop/source/migration/wizard.cxx desktop/source/migration/wizard.hrc desktop/source/migration/wizard.hxx desktop/source/migration/wizard.src desktop/source/pkgchk/unopkg/unopkg_shared.h desktop/source/so_comp/services.cxx desktop/source/splash/makefile.mk desktop/source/splash/services_spl.cxx desktop/source/splash/splash.cxx drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx editeng/inc/editeng/adjitem.hxx editeng/inc/editeng/bolnitem.hxx editeng/inc/editeng/borderline.hxx editeng/inc/editeng/boxitem.hxx editeng/inc/editeng/brkitem.hxx editeng/inc/editeng/brshitem.hxx editeng/inc/editeng/bulitem.hxx editeng/inc/editeng/charreliefitem.hxx editeng/inc/editeng/charrotateitem.hxx editeng/inc/editeng/charscaleitem.hxx editeng/inc/editeng/cmapitem.hxx editeng/inc/editeng/colritem.hxx editeng/inc/editeng/crsditem.hxx editeng/inc/editeng/editdata.hxx editeng/inc/editeng/editeng.hxx editeng/inc/editeng/editobj.hxx editeng/inc/editeng/editstat.hxx editeng/inc/editeng/editview.hxx editeng/inc/editeng/emphitem.hxx editeng/inc/editeng/escpitem.hxx editeng/inc/editeng/fhgtitem.hxx editeng/inc/editeng/flstitem.hxx editeng/inc/editeng/fontitem.hxx editeng/inc/editeng/frmdiritem.hxx editeng/inc/editeng/fwdtitem.hxx editeng/inc/editeng/hyznitem.hxx editeng/inc/editeng/kernitem.hxx editeng/inc/editeng/langitem.hxx editeng/inc/editeng/lrspitem.hxx editeng/inc/editeng/lspcitem.hxx editeng/inc/editeng/numitem.hxx editeng/inc/editeng/outliner.hxx editeng/inc/editeng/paravertalignitem.hxx editeng/inc/editeng/pmdlitem.hxx editeng/inc/editeng/postitem.hxx editeng/inc/editeng/protitem.hxx editeng/inc/editeng/shaditem.hxx editeng/inc/editeng/sizeitem.hxx editeng/inc/editeng/svxacorr.hxx editeng/inc/editeng/svxfont.hxx editeng/inc/editeng/svxrtf.hxx editeng/inc/editeng/swafopt.hxx editeng/inc/editeng/tstpitem.hxx editeng/inc/editeng/twolinesitem.hxx editeng/inc/editeng/txtrange.hxx editeng/inc/editeng/udlnitem.hxx editeng/inc/editeng/ulspitem.hxx editeng/inc/editeng/wghtitem.hxx editeng/inc/editeng/writingmodeitem.hxx editeng/inc/editeng/xmlcnitm.hxx editeng/inc/helpid.hrc editeng/inc/pch/precompiled_editeng.hxx editeng/source/editeng/editdbg.cxx editeng/source/editeng/editdoc.cxx editeng/source/editeng/editdoc.hxx editeng/source/editeng/editdoc2.cxx editeng/source/editeng/editeng.cxx editeng/source/editeng/editobj.cxx editeng/source/editeng/editobj2.hxx editeng/source/editeng/editsel.cxx editeng/source/editeng/editundo.cxx editeng/source/editeng/editundo.hxx editeng/source/editeng/editview.cxx editeng/source/editeng/edtspell.hxx editeng/source/editeng/eehtml.cxx editeng/source/editeng/eehtml.hxx editeng/source/editeng/eeobj.cxx editeng/source/editeng/eerdll.cxx editeng/source/editeng/eertfpar.cxx editeng/source/editeng/impedit.cxx editeng/source/editeng/impedit.hxx editeng/source/editeng/impedit2.cxx editeng/source/editeng/impedit3.cxx editeng/source/editeng/impedit4.cxx editeng/source/editeng/impedit5.cxx editeng/source/editeng/makefile.mk editeng/source/items/bulitem.cxx editeng/source/items/charhiddenitem.cxx editeng/source/items/flditem.cxx editeng/source/items/frmitems.cxx editeng/source/items/makefile.mk editeng/source/items/numitem.cxx editeng/source/items/paraitem.cxx editeng/source/items/svxfont.cxx editeng/source/items/textitem.cxx editeng/source/items/writingmodeitem.cxx editeng/source/items/xmlcnitm.cxx editeng/source/misc/SvXMLAutoCorrectImport.cxx editeng/source/misc/svxacorr.cxx editeng/source/misc/txtrange.cxx editeng/source/misc/unolingu.cxx editeng/source/outliner/outleeng.cxx editeng/source/outliner/outliner.cxx editeng/source/outliner/outlundo.hxx editeng/source/outliner/outlvw.cxx editeng/source/outliner/paralist.cxx editeng/source/outliner/paralist.hxx editeng/source/rtf/rtfgrf.cxx editeng/source/rtf/rtfitem.cxx editeng/source/rtf/svxrtf.cxx editeng/source/uno/unoipset.cxx editeng/util/makefile.mk embeddedobj/prj/build.lst embeddedobj/source/commonembedding/miscobj.cxx eventattacher/prj/build.lst fileaccess/source/FileAccess.cxx formula/inc/formula/FormulaCompiler.hxx formula/inc/formula/token.hxx formula/inc/formula/tokenarray.hxx formula/source/core/api/FormulaCompiler.cxx formula/source/core/api/token.cxx formula/source/ui/dlg/FormulaHelper.cxx formula/source/ui/dlg/formula.cxx formula/source/ui/dlg/parawin.cxx formula/source/ui/dlg/structpg.cxx fpicker/prj/d.lst fpicker/source/aqua/FPentry.cxx fpicker/source/office/OfficeControlAccess.cxx fpicker/source/office/iodlg.cxx fpicker/source/office/iodlg.hxx fpicker/source/office/iodlg.src fpicker/source/office/iodlgimp.cxx fpicker/source/unx/gnome/FPentry.cxx fpicker/source/unx/gnome/SalGtkFilePicker.cxx fpicker/source/unx/gnome/SalGtkPicker.cxx fpicker/source/unx/kde4/KDE4FPEntry.cxx fpicker/source/win32/filepicker/FPentry.cxx framework/AllLangResTarget_fwe.mk framework/inc/dispatch/interaction.hxx framework/inc/framework/addonmenu.hxx framework/inc/framework/addonsoptions.hxx framework/inc/framework/bmkmenu.hxx framework/inc/framework/imageproducer.hxx framework/inc/framework/sfxhelperfunctions.hxx framework/inc/framework/statusbarconfiguration.hxx framework/inc/framework/titlehelper.hxx framework/inc/framework/toolboxconfiguration.hxx framework/inc/threadhelp/lockhelper.hxx framework/inc/xml/eventsdocumenthandler.hxx framework/inc/xml/statusbardocumenthandler.hxx framework/inc/xml/toolboxconfiguration.hxx framework/inc/xml/toolboxconfigurationdefines.hxx framework/inc/xml/toolboxdocumenthandler.hxx framework/prj/build.lst framework/qa/complex/ModuleManager/makefile.mk framework/qa/complex/accelerators/makefile.mk framework/qa/complex/framework/recovery/makefile.mk framework/qa/complex/imageManager/_XInitialization.java framework/source/classes/menumanager.cxx framework/source/dispatch/interaction.cxx framework/source/fwe/classes/bmkmenu.cxx framework/source/fwe/helper/actiontriggerhelper.cxx framework/source/fwe/helper/imageproducer.cxx framework/source/fwe/xml/menuconfiguration.cxx framework/source/fwe/xml/toolboxdocumenthandler.cxx framework/source/helper/uiconfigelementwrapperbase.cxx framework/source/helper/uielementwrapperbase.cxx framework/source/inc/pattern/window.hxx framework/source/jobs/jobdata.cxx framework/source/layoutmanager/layoutmanager.cxx framework/source/layoutmanager/panel.hxx framework/source/loadenv/loadenv.cxx framework/source/register/registerservices.cxx framework/source/services/menudocumenthandler.cxx framework/source/uiconfiguration/moduleuiconfigurationmanager.cxx framework/source/uiconfiguration/uiconfigurationmanager.cxx framework/source/uiconfiguration/uiconfigurationmanagerimpl.cxx framework/source/uielement/addonstoolbarmanager.cxx framework/source/uielement/controlmenucontroller.cxx framework/source/uielement/fontsizemenucontroller.cxx framework/source/uielement/imagebuttontoolbarcontroller.cxx framework/source/uielement/macrosmenucontroller.cxx framework/source/uielement/menubarmanager.cxx framework/source/uielement/newmenucontroller.cxx framework/source/uielement/togglebuttontoolbarcontroller.cxx framework/source/uielement/toolbarmanager.cxx framework/source/uielement/toolbarsmenucontroller.cxx framework/test/makefile.mk framework/test/threadtest/makefile.mk framework/test/typecfg/makefile.mk framework/util/guiapps/makefile.mk framework/util/makefile.mk idl/inc/bastype.hxx idl/inc/hash.hxx idl/inc/lex.hxx idl/inc/module.hxx idl/inc/object.hxx idl/inc/slot.hxx idl/inc/types.hxx idl/source/cmptools/hash.cxx idl/source/cmptools/lex.cxx idl/source/objects/basobj.cxx idl/source/objects/bastype.cxx idl/source/objects/module.cxx idl/source/objects/object.cxx idl/source/objects/slot.cxx idl/source/objects/types.cxx idl/source/prj/command.cxx idl/source/prj/database.cxx idl/source/prj/globals.cxx idl/source/prj/svidl.cxx linguistic/inc/linguistic/misc.hxx linguistic/prj/build.lst linguistic/source/convdic.cxx linguistic/source/convdiclist.cxx linguistic/source/dicimp.cxx linguistic/source/dlistimp.cxx linguistic/source/gciterator.cxx linguistic/source/iprcache.cxx linguistic/source/lngopt.cxx linguistic/source/lngprophelp.cxx linguistic/source/lngsvcmgr.cxx linguistic/source/lngsvcmgr.hxx linguistic/source/misc2.cxx linguistic/workben/sprophelp.cxx officecfg/registry/data/org/openoffice/VCL.xcu officecfg/util/makefile.mk oovbaapi/ooo/vba/XApplicationBase.idl oovbaapi/ooo/vba/XVBAAppService.idl oovbaapi/ooo/vba/XVBADocService.idl oovbaapi/ooo/vba/excel/XApplication.idl oovbaapi/ooo/vba/excel/XRange.idl oovbaapi/ooo/vba/excel/XWorkbook.idl oovbaapi/ooo/vba/excel/XWorksheet.idl oovbaapi/ooo/vba/word/XApplication.idl oovbaapi/ooo/vba/word/XGlobals.idl oovbaapi/ooo/vba/word/XTableOfContents.idl readlicense_oo/prj/build.lst scripting/prj/build.lst scripting/prj/d.lst scripting/source/basprov/basprov.cxx scripting/source/basprov/basscript.cxx scripting/source/basprov/basscript.hxx scripting/source/dlgprov/dlgprov.cxx scripting/source/inc/util/util.hxx scripting/source/protocolhandler/scripthandler.cxx scripting/source/provider/ProviderCache.cxx scripting/source/pyprov/makefile.mk scripting/source/runtimemgr/ScriptNameResolverImpl.cxx scripting/source/runtimemgr/ScriptRuntimeManager.cxx scripting/source/runtimemgr/StorageBridge.cxx scripting/source/storage/ScriptMetadataImporter.cxx scripting/source/storage/ScriptSecurityManager.cxx scripting/source/storage/ScriptStorage.cxx scripting/source/storage/ScriptStorageManager.cxx sfx2/inc/about.hxx sfx2/inc/brokenpackageint.hxx sfx2/inc/docvor.hxx sfx2/inc/pch/precompiled_sfx2.hxx sfx2/inc/sfx2/app.hxx sfx2/inc/sfx2/basmgr.hxx sfx2/inc/sfx2/bindings.hxx sfx2/inc/sfx2/childwin.hxx sfx2/inc/sfx2/ctrlitem.hxx sfx2/inc/sfx2/dinfdlg.hxx sfx2/inc/sfx2/dispatch.hxx sfx2/inc/sfx2/docfilt.hxx sfx2/inc/sfx2/evntconf.hxx sfx2/inc/sfx2/fcontnr.hxx sfx2/inc/sfx2/frame.hxx sfx2/inc/sfx2/imagemgr.hxx sfx2/inc/sfx2/imgmgr.hxx sfx2/inc/sfx2/linksrc.hxx sfx2/inc/sfx2/macrconf.hxx sfx2/inc/sfx2/macropg.hxx sfx2/inc/sfx2/mnuitem.hxx sfx2/inc/sfx2/mnumgr.hxx sfx2/inc/sfx2/module.hxx sfx2/inc/sfx2/msg.hxx sfx2/inc/sfx2/objsh.hxx sfx2/inc/sfx2/passwd.hxx sfx2/inc/sfx2/prnmon.hxx sfx2/inc/sfx2/request.hxx sfx2/inc/sfx2/sfx.hrc sfx2/inc/sfx2/sfxbasemodel.hxx sfx2/inc/sfx2/sfxhtml.hxx sfx2/inc/sfx2/sfxresid.hxx sfx2/inc/sfx2/sfxsids.hrc sfx2/inc/sfx2/sfxuno.hxx sfx2/inc/sfx2/shell.hxx sfx2/inc/sfx2/stbitem.hxx sfx2/inc/sfx2/styfitem.hxx sfx2/inc/sfx2/tabdlg.hxx sfx2/inc/sfx2/tbxctrl.hxx sfx2/inc/sfx2/tplpitem.hxx sfx2/inc/sfx2/viewfrm.hxx sfx2/inc/sfx2/viewsh.hxx sfx2/inc/sfxbasic.hxx sfx2/inc/sorgitm.hxx sfx2/prj/build.lst sfx2/qa/complex/docinfo/makefile.mk sfx2/qa/cppunit/makefile.mk sfx2/sdi/makefile.mk sfx2/source/appl/app.cxx sfx2/source/appl/app.hrc sfx2/source/appl/app.src sfx2/source/appl/appbas.cxx sfx2/source/appl/appcfg.cxx sfx2/source/appl/appchild.cxx sfx2/source/appl/appmain.cxx sfx2/source/appl/appmisc.cxx sfx2/source/appl/appopen.cxx sfx2/source/appl/appquit.cxx sfx2/source/appl/appserv.cxx sfx2/source/appl/appuno.cxx sfx2/source/appl/childwin.cxx sfx2/source/appl/fileobj.cxx sfx2/source/appl/helpinterceptor.cxx sfx2/source/appl/imagemgr.cxx sfx2/source/appl/impldde.cxx sfx2/source/appl/impldde.hxx sfx2/source/appl/linkmgr2.cxx sfx2/source/appl/lnkbase2.cxx sfx2/source/appl/makefile.mk sfx2/source/appl/module.cxx sfx2/source/appl/newhelp.cxx sfx2/source/appl/opengrf.cxx sfx2/source/appl/sfxdll.cxx sfx2/source/appl/sfxhelp.cxx sfx2/source/appl/shutdownicon.cxx sfx2/source/appl/shutdowniconunx.cxx sfx2/source/appl/workwin.cxx sfx2/source/bastyp/fltfnc.cxx sfx2/source/bastyp/frmhtml.cxx sfx2/source/bastyp/frmhtmlw.cxx sfx2/source/bastyp/helper.cxx sfx2/source/bastyp/minarray.cxx sfx2/source/bastyp/progress.cxx sfx2/source/bastyp/sfxhtml.cxx sfx2/source/config/evntconf.cxx sfx2/source/control/bindings.cxx sfx2/source/control/ctrlitem.cxx sfx2/source/control/dispatch.cxx sfx2/source/control/macrconf.cxx sfx2/source/control/macro.cxx sfx2/source/control/makefile.mk sfx2/source/control/minfitem.cxx sfx2/source/control/msg.cxx sfx2/source/control/msgpool.cxx sfx2/source/control/objface.cxx sfx2/source/control/request.cxx sfx2/source/control/shell.cxx sfx2/source/control/sorgitm.cxx sfx2/source/dialog/about.cxx sfx2/source/dialog/basedlgs.cxx sfx2/source/dialog/dinfdlg.cxx sfx2/source/dialog/dinfedt.cxx sfx2/source/dialog/dockwin.cxx sfx2/source/dialog/filedlghelper.cxx sfx2/source/dialog/mailmodel.cxx sfx2/source/dialog/mailmodelapi.cxx sfx2/source/dialog/makefile.mk sfx2/source/dialog/mgetempl.cxx sfx2/source/dialog/passwd.cxx sfx2/source/dialog/passwd.hrc sfx2/source/dialog/printopt.cxx sfx2/source/dialog/securitypage.cxx sfx2/source/dialog/splitwin.cxx sfx2/source/dialog/styfitem.cxx sfx2/source/dialog/tabdlg.cxx sfx2/source/dialog/taskpane.cxx sfx2/source/dialog/templdlg.cxx sfx2/source/dialog/tplpitem.cxx sfx2/source/dialog/versdlg.cxx sfx2/source/doc/QuerySaveDocument.cxx sfx2/source/doc/SfxDocumentMetaData.cxx sfx2/source/doc/applet.cxx sfx2/source/doc/doc.hrc sfx2/source/doc/doc.src sfx2/source/doc/docfile.cxx sfx2/source/doc/docinf.cxx sfx2/source/doc/doctempl.cxx sfx2/source/doc/doctemplates.cxx sfx2/source/doc/docvor.cxx sfx2/source/doc/guisaveas.cxx sfx2/source/doc/makefile.mk sfx2/source/doc/objcont.cxx sfx2/source/doc/objitem.cxx sfx2/source/doc/objmisc.cxx sfx2/source/doc/objserv.cxx sfx2/source/doc/printhelper.cxx sfx2/source/doc/sfxacldetect.cxx sfx2/source/doc/sfxbasemodel.cxx sfx2/source/inc/applet.hxx sfx2/source/inc/fltoptint.hxx sfx2/source/inc/sfxlocal.hrc sfx2/source/inc/virtmenu.hxx sfx2/source/inc/workwin.hxx sfx2/source/menu/mnuitem.cxx sfx2/source/menu/objmnctl.cxx sfx2/source/menu/virtmenu.cxx sfx2/source/notify/eventsupplier.cxx sfx2/source/notify/makefile.mk sfx2/source/toolbox/imgmgr.cxx sfx2/source/toolbox/tbxitem.cxx sfx2/source/view/frame.cxx sfx2/source/view/orgmgr.cxx sfx2/source/view/printer.cxx sfx2/source/view/prnmon.cxx sfx2/source/view/viewfrm.cxx sfx2/source/view/viewprn.cxx sfx2/source/view/viewsh.cxx sfx2/util/makefile.mk sfx2/workben/custompanel/makefile.mk shell/source/backends/desktopbe/desktopbackend.cxx shell/source/backends/gconfbe/gconfbackend.cxx shell/source/backends/kde4be/kde4backend.cxx shell/source/backends/kdebe/kdebackend.cxx shell/source/win32/SysShentry.cxx shell/source/win32/shlxthandler/propsheets/propsheets.cxx shell/source/win32/simplemail/smplmailentry.cxx svx/inc/float3d.hrc svx/inc/fmhelp.hrc svx/inc/globlmn_tmpl.hrc svx/inc/helpid.hrc svx/inc/pch/precompiled_svx.hxx svx/inc/sjctrl.hxx svx/inc/srchitem.hxx svx/inc/svdibrow.hxx svx/inc/svx/SmartTagItem.hxx svx/inc/svx/algitem.hxx svx/inc/svx/camera3d.hxx svx/inc/svx/chrtitem.hxx svx/inc/svx/clipfmtitem.hxx svx/inc/svx/ctredlin.hxx svx/inc/svx/dbtoolsclient.hxx svx/inc/svx/deflt3d.hxx svx/inc/svx/dialogs.hrc svx/inc/svx/drawitem.hxx svx/inc/svx/e3ditem.hxx svx/inc/svx/extrud3d.hxx svx/inc/svx/flagsdef.hxx svx/inc/svx/float3d.hxx svx/inc/svx/frmsel.hxx svx/inc/svx/gallery.hxx svx/inc/svx/gallery1.hxx svx/inc/svx/galtheme.hxx svx/inc/svx/grfcrop.hxx svx/inc/svx/hdft.hxx svx/inc/svx/hlnkitem.hxx svx/inc/svx/hyprlink.hxx svx/inc/svx/itemwin.hxx svx/inc/svx/lathe3d.hxx svx/inc/svx/linkwarn.hxx svx/inc/svx/modctrl.hxx svx/inc/svx/msdffdef.hxx svx/inc/svx/obj3d.hxx svx/inc/svx/optgenrl.hxx svx/inc/svx/optgrid.hxx svx/inc/svx/pageitem.hxx svx/inc/svx/paraprev.hxx svx/inc/svx/postattr.hxx svx/inc/svx/rotmodit.hxx svx/inc/svx/ruler.hxx svx/inc/svx/rulritem.hxx svx/inc/svx/scene3d.hxx svx/inc/svx/sdasaitm.hxx svx/inc/svx/sdasitm.hxx svx/inc/svx/sdggaitm.hxx svx/inc/svx/sdmetitm.hxx svx/inc/svx/sdtaaitm.hxx svx/inc/svx/sdtaditm.hxx svx/inc/svx/sdtaitm.hxx svx/inc/svx/sdtakitm.hxx svx/inc/svx/sdtfchim.hxx svx/inc/svx/sdtfsitm.hxx svx/inc/svx/srchdlg.hxx svx/inc/svx/svddrag.hxx svx/inc/svx/svdetc.hxx svx/inc/svx/svdglue.hxx svx/inc/svx/svdhlpln.hxx svx/inc/svx/svdlayer.hxx svx/inc/svx/svdmark.hxx svx/inc/svx/svdmodel.hxx svx/inc/svx/svdoashp.hxx svx/inc/svx/svdobj.hxx svx/inc/svx/svdocirc.hxx svx/inc/svx/svdoedge.hxx svx/inc/svx/svdogrp.hxx svx/inc/svx/svdomeas.hxx svx/inc/svx/svdoole2.hxx svx/inc/svx/svdorect.hxx svx/inc/svx/svdotable.hxx svx/inc/svx/svdotext.hxx svx/inc/svx/svdovirt.hxx svx/inc/svx/svdpage.hxx svx/inc/svx/svdsnpv.hxx svx/inc/svx/svdtrans.hxx svx/inc/svx/svdundo.hxx svx/inc/svx/svimbase.hxx svx/inc/svx/svx3ditems.hxx svx/inc/svx/svxdlg.hxx svx/inc/svx/sxcikitm.hxx svx/inc/svx/sxekitm.hxx svx/inc/svx/sxelditm.hxx svx/inc/svx/sxenditm.hxx svx/inc/svx/sxmkitm.hxx svx/inc/svx/sxmtpitm.hxx svx/inc/svx/sxmuitm.hxx svx/inc/svx/tabarea.hxx svx/inc/svx/tabline.hxx svx/inc/svx/unoprov.hxx svx/inc/svx/viewlayoutitem.hxx svx/inc/svx/xbitmap.hxx svx/inc/svx/xbtmpit.hxx svx/inc/svx/xcolit.hxx svx/inc/svx/xfillit0.hxx svx/inc/svx/xflclit.hxx svx/inc/svx/xflftrit.hxx svx/inc/svx/xflgrit.hxx svx/inc/svx/xflhtit.hxx svx/inc/svx/xftadit.hxx svx/inc/svx/xftsfit.hxx svx/inc/svx/xftshit.hxx svx/inc/svx/xlineit0.hxx svx/inc/svx/xlinjoit.hxx svx/inc/svx/xlnclit.hxx svx/inc/svx/xlndsit.hxx svx/inc/svx/xlnedcit.hxx svx/inc/svx/xlnedit.hxx svx/inc/svx/xlnedwit.hxx svx/inc/svx/xlnstcit.hxx svx/inc/svx/xlnstit.hxx svx/inc/svx/xlnstwit.hxx svx/inc/svx/xlnwtit.hxx svx/inc/svx/xtextit0.hxx svx/inc/svx/zoomitem.hxx svx/inc/svx/zoomslideritem.hxx svx/inc/xpolyimp.hxx svx/inc/zoom_def.hxx svx/prj/d.lst svx/source/accessibility/AccessibleShape.cxx svx/source/accessibility/DescriptionGenerator.cxx svx/source/customshapes/EnhancedCustomShapeEngine.cxx svx/source/customshapes/EnhancedCustomShapeFontWork.cxx svx/source/dialog/_bmpmask.cxx svx/source/dialog/_contdlg.cxx svx/source/dialog/connctrl.cxx svx/source/dialog/contwnd.cxx svx/source/dialog/ctredlin.cxx svx/source/dialog/ctredlin.hrc svx/source/dialog/ctredlin.src svx/source/dialog/dialcontrol.cxx svx/source/dialog/dlgctrl.cxx svx/source/dialog/docrecovery.cxx svx/source/dialog/fntctrl.cxx svx/source/dialog/fontwork.cxx svx/source/dialog/frmsel.cxx svx/source/dialog/graphctl.cxx svx/source/dialog/grfflt.cxx svx/source/dialog/hdft.cxx svx/source/dialog/hyperdlg.cxx svx/source/dialog/hyprdlg.hxx svx/source/dialog/hyprlink.cxx svx/source/dialog/hyprlink.hxx svx/source/dialog/hyprlink.src svx/source/dialog/imapdlg.cxx svx/source/dialog/imapwnd.cxx svx/source/dialog/linkwarn.hrc svx/source/dialog/makefile.mk svx/source/dialog/optgrid.cxx svx/source/dialog/orienthelper.cxx svx/source/dialog/pagectrl.cxx svx/source/dialog/prtqry.cxx svx/source/dialog/rlrcitem.cxx svx/source/dialog/rubydialog.cxx svx/source/dialog/rulritem.cxx svx/source/dialog/simptabl.cxx svx/source/dialog/srchdlg.cxx svx/source/dialog/svxbmpnumvalueset.cxx svx/source/dialog/svxruler.cxx svx/source/dialog/swframeexample.cxx svx/source/engine3d/float3d.cxx svx/source/engine3d/float3d.src svx/source/engine3d/svx3ditems.cxx svx/source/fmcomp/gridctrl.cxx svx/source/fmcomp/trace.cxx svx/source/form/ParseContext.cxx svx/source/form/datanavi.cxx svx/source/form/filtnav.cxx svx/source/form/fmexch.cxx svx/source/form/fmexpl.cxx svx/source/form/fmobjfac.cxx svx/source/form/fmpage.cxx svx/source/form/fmshell.cxx svx/source/form/fmshimp.cxx svx/source/form/fmsrcimp.cxx svx/source/form/fmvwimp.cxx svx/source/form/makefile.mk svx/source/form/tabwin.cxx svx/source/form/tbxform.cxx svx/source/form/typemap.cxx svx/source/gallery2/galbrws1.cxx svx/source/gallery2/galbrws2.cxx svx/source/gallery2/galexpl.cxx svx/source/gallery2/gallery1.cxx svx/source/gallery2/galtheme.cxx svx/source/gallery2/makefile.mk svx/source/gengal/gengal.cxx svx/source/gengal/makefile.mk svx/source/inc/fmgroup.hxx svx/source/intro/about_ooo.hrc svx/source/intro/iso.src svx/source/intro/ooo.src svx/source/items/SmartTagItem.cxx svx/source/items/algitem.cxx svx/source/items/chrtitem.cxx svx/source/items/clipfmtitem.cxx svx/source/items/customshapeitem.cxx svx/source/items/drawitem.cxx svx/source/items/e3ditem.cxx svx/source/items/grfitem.cxx svx/source/items/hlnkitem.cxx svx/source/items/makefile.mk svx/source/items/pageitem.cxx svx/source/items/rotmodit.cxx svx/source/items/viewlayoutitem.cxx svx/source/items/zoomitem.cxx svx/source/items/zoomslideritem.cxx svx/source/src/app.hrc svx/source/stbctrls/makefile.mk svx/source/stbctrls/modctrl.cxx svx/source/stbctrls/xmlsecctrl.cxx svx/source/stbctrls/zoomctrl.cxx svx/source/svdraw/clonelist.cxx svx/source/svdraw/svdattr.cxx svx/source/svdraw/svdcrtv.cxx svx/source/svdraw/svdedtv1.cxx svx/source/svdraw/svdedtv2.cxx svx/source/svdraw/svdedxv.cxx svx/source/svdraw/svdetc.cxx svx/source/svdraw/svdfmtf.cxx svx/source/svdraw/svdfmtf.hxx svx/source/svdraw/svdglue.cxx svx/source/svdraw/svdhdl.cxx svx/source/svdraw/svdhlpln.cxx svx/source/svdraw/svdibrow.cxx svx/source/svdraw/svdlayer.cxx svx/source/svdraw/svdmodel.cxx svx/source/svdraw/svdoashp.cxx svx/source/svdraw/svdobj.cxx svx/source/svdraw/svdocapt.cxx svx/source/svdraw/svdocirc.cxx svx/source/svdraw/svdoedge.cxx svx/source/svdraw/svdograf.cxx svx/source/svdraw/svdogrp.cxx svx/source/svdraw/svdomeas.cxx svx/source/svdraw/svdomedia.cxx svx/source/svdraw/svdopath.cxx svx/source/svdraw/svdotext.cxx svx/source/svdraw/svdotxdr.cxx svx/source/svdraw/svdotxed.cxx svx/source/svdraw/svdotxfl.cxx svx/source/svdraw/svdotxln.cxx svx/source/svdraw/svdotxtr.cxx svx/source/svdraw/svdoutl.cxx svx/source/svdraw/svdpage.cxx svx/source/svdraw/svdpagv.cxx svx/source/svdraw/svdpntv.cxx svx/source/svdraw/svdpoev.cxx svx/source/svdraw/svdsnpv.cxx svx/source/svdraw/svdstr.src svx/source/svdraw/svdtrans.cxx svx/source/svdraw/svdundo.cxx svx/source/svdraw/svdview.cxx svx/source/svdraw/svdxcgv.cxx svx/source/table/svdotable.cxx svx/source/tbxctrls/colorwindow.hxx svx/source/tbxctrls/extrusioncontrols.cxx svx/source/tbxctrls/fillctrl.cxx svx/source/tbxctrls/grafctrl.cxx svx/source/tbxctrls/itemwin.cxx svx/source/tbxctrls/layctrl.cxx svx/source/tbxctrls/lboxctrl.cxx svx/source/tbxctrls/linectrl.cxx svx/source/tbxctrls/tbcontrl.cxx svx/source/tbxctrls/verttexttbxctrl.cxx svx/source/unodraw/unomod.cxx svx/source/unodraw/unopage.cxx svx/source/unodraw/unoprov.cxx svx/source/unodraw/unoshape.cxx svx/source/unodraw/unoshtxt.cxx svx/source/xml/xmlxtexp.cxx svx/source/xoutdev/_xpoly.cxx svx/source/xoutdev/xattr.cxx svx/source/xoutdev/xattr2.cxx svx/source/xoutdev/xattrbmp.cxx svx/source/xoutdev/xtabcolr.cxx svx/util/makefile.mk svx/workben/edittest.cxx sysui/desktop/productversion.mk ucb/prj/build.lst ucb/source/cacher/cacheserv.cxx ucb/source/core/ucb1.component ucb/source/core/ucbserv.cxx ucb/source/core/ucbstore.cxx ucb/source/core/ucbstore.hxx ucb/source/sorter/sortmain.cxx ucb/source/ucp/file/prov.cxx ucb/source/ucp/file/shell.cxx ucb/source/ucp/ftp/ftpservices.cxx ucb/source/ucp/gio/gio_provider.cxx ucb/source/ucp/gvfs/gvfs_provider.cxx ucb/source/ucp/hierarchy/hierarchyservices.cxx ucb/source/ucp/odma/odma_lib.cxx ucb/source/ucp/odma/odma_services.cxx ucb/source/ucp/package/pkgservices.cxx ucb/source/ucp/tdoc/tdoc_services.cxx ucb/source/ucp/webdav/ContentProperties.cxx ucb/source/ucp/webdav/NeonHeadRequest.cxx ucb/source/ucp/webdav/webdavcontent.cxx ucb/source/ucp/webdav/webdavservices.cxx uui/source/iahndl.cxx uui/source/iahndl.hxx uui/source/loginerr.hxx uui/source/nameclashdlg.hxx uui/source/passcrtdlg.cxx uui/source/passworddlg.cxx uui/source/passworddlg.hxx uui/source/services.cxx vbahelper/inc/vbahelper/vbahelper.hxx vbahelper/prj/build.lst vbahelper/prj/d.lst vbahelper/source/msforms/makefile.mk vbahelper/source/msforms/vbauserform.cxx vbahelper/source/vbahelper/makefile.mk vbahelper/source/vbahelper/vbaapplicationbase.cxx vbahelper/source/vbahelper/vbacommandbarcontrol.cxx vbahelper/source/vbahelper/vbadocumentbase.cxx vbahelper/source/vbahelper/vbadocumentsbase.cxx vbahelper/source/vbahelper/vbahelper.cxx vbahelper/util/makefile.mk xmlhelp/source/cxxhelp/provider/databases.cxx xmlhelp/source/cxxhelp/provider/services.cxx xmlhelp/source/treeview/tvfactory.cxx xmloff/JunitTest_xmloff_unoapi.mk xmloff/inc/functional.hxx xmloff/inc/xmloff/formlayerexport.hxx xmloff/inc/xmloff/formlayerimport.hxx xmloff/inc/xmloff/functional.hxx xmloff/inc/xmloff/shapeimport.hxx xmloff/inc/xmloff/xmlcnitm.hxx xmloff/inc/xmloff/xmlnumfi.hxx xmloff/prj/build.lst xmloff/source/chart/SchXMLChartContext.cxx xmloff/source/chart/SchXMLExport.cxx xmloff/source/chart/SchXMLImport.cxx xmloff/source/chart/SchXMLLegendContext.hxx xmloff/source/chart/SchXMLPlotAreaContext.cxx xmloff/source/core/xmluconv.cxx xmloff/source/draw/sdxmlexp.cxx xmloff/source/draw/shapeexport4.cxx xmloff/source/draw/ximp3dobject.cxx xmloff/source/draw/ximp3dscene.cxx xmloff/source/forms/formlayerexport.cxx xmloff/source/forms/formlayerimport.cxx xmloff/source/forms/handler/vcl_time_handler.hxx xmloff/source/forms/layerimport.cxx xmloff/source/forms/layerimport.hxx xmloff/source/forms/property_meta_data.hxx xmloff/source/style/PageHeaderFooterContext.cxx xmloff/source/style/PageMasterStyleMap.cxx xmloff/source/style/prstylei.cxx xmloff/source/style/xmlimppr.cxx xmloff/source/style/xmlnumfi.cxx xmloff/source/style/xmlstyle.cxx xmloff/source/table/tabledesignsimporter.cxx xmloff/source/text/XMLTextNumRuleInfo.cxx xmloff/source/text/XMLTextShapeStyleContext.cxx xmloff/source/text/txtstyle.cxx xmloff/source/transform/ChartOOoTContext.cxx xmloff/source/transform/EventOOoTContext.cxx xmloff/source/transform/TransformerBase.cxx xmloff/util/makefile.mk xmlscript/util/xcr.component
2011-03-12 02:42:58 +01:00
RID_IMG_COMPONENT ) ),
m_xRDBTypelibTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-typelibrary;type=RDB",
"*.rdb",
getResourceString(RID_STR_RDB_TYPELIB),
RID_IMG_TYPELIB ) ),
m_xJavaTypelibTypeInfo( new Package::TypeInfo(
"application/vnd.sun.star.uno-typelibrary;type=Java",
"*.jar",
getResourceString(RID_STR_JAVA_TYPELIB),
RID_IMG_JAVA_TYPELIB ) ),
2011-03-15 12:42:59 +00:00
m_typeInfos( 6 )
{
m_typeInfos[ 0 ] = m_xDynComponentTypeInfo;
m_typeInfos[ 1 ] = m_xJavaComponentTypeInfo;
m_typeInfos[ 2 ] = m_xPythonComponentTypeInfo;
m_typeInfos[ 3 ] = m_xComponentsTypeInfo;
m_typeInfos[ 4 ] = m_xRDBTypelibTypeInfo;
m_typeInfos[ 5 ] = m_xJavaTypelibTypeInfo;
const Reference<XCommandEnvironment> xCmdEnv;
if (transientMode())
{
// in-mem rdbs:
// common rdb for java, native rdb for shared lib components
m_xCommonRDB.set(
xComponentContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.registry.SimpleRegistry",
xComponentContext ), UNO_QUERY_THROW );
m_xCommonRDB->open( OUString() /* in-mem */,
false /* ! read-only */, true /* create */ );
m_xNativeRDB.set(
xComponentContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.registry.SimpleRegistry",
xComponentContext ), UNO_QUERY_THROW );
m_xNativeRDB->open( OUString() /* in-mem */,
false /* ! read-only */, true /* create */ );
}
else
{
unorc_verify_init( xCmdEnv );
OUString dbFile = makeURL(getCachePath(), "backenddb.xml");
m_backendDb.reset(
new ComponentBackendDb(getComponentContext(), dbFile));
}
}
void BackendImpl::addDataToDb(
OUString const & url, ComponentBackendDb::Data const & data)
{
if (m_backendDb.get())
m_backendDb->addEntry(url, data);
}
ComponentBackendDb::Data BackendImpl::readDataFromDb(OUString const & url)
{
ComponentBackendDb::Data data;
if (m_backendDb.get())
data = m_backendDb->getEntry(url);
return data;
}
void BackendImpl::revokeEntryFromDb(OUString const & url)
{
if (m_backendDb.get())
m_backendDb->revokeEntry(url);
}
// XPackageRegistry
//______________________________________________________________________________
Sequence< Reference<deployment::XPackageTypeInfo> >
BackendImpl::getSupportedPackageTypes() throw (RuntimeException)
{
return m_typeInfos;
}
void BackendImpl::packageRemoved(OUString const & url, OUString const & /*mediaType*/)
throw (deployment::DeploymentException,
uno::RuntimeException)
{
if (m_backendDb.get())
m_backendDb->removeEntry(url);
}
// PackageRegistryBackend
//______________________________________________________________________________
Reference<deployment::XPackage> BackendImpl::bindPackage_(
OUString const & url, OUString const & mediaType_,
sal_Bool bRemoved, OUString const & identifier,
Reference<XCommandEnvironment> const & xCmdEnv )
{
OUString mediaType(mediaType_);
if ( mediaType.isEmpty() || mediaType == "application/vnd.sun.star.uno-component" || mediaType == "application/vnd.sun.star.uno-typelibrary" )
{
// detect exact media-type:
::ucbhelper::Content ucbContent;
if (create_ucb_content( &ucbContent, url, xCmdEnv )) {
const OUString title( StrTitle::getTitle( ucbContent ) );
if (title.endsWithIgnoreAsciiCase(SAL_DLLEXTENSION))
{
mediaType = "application/vnd.sun.star.uno-component;type=native;platform=" +
getPlatformString();
}
else if (title.endsWithIgnoreAsciiCase(".jar"))
{
if (jarManifestHeaderPresent(
url, "RegistrationClassName", xCmdEnv ))
mediaType = "application/vnd.sun.star.uno-component;type=Java";
if (mediaType.isEmpty())
mediaType = "application/vnd.sun.star.uno-typelibrary;type=Java";
}
else if (title.endsWithIgnoreAsciiCase(".py"))
mediaType = "application/vnd.sun.star.uno-component;type=Python";
else if (title.endsWithIgnoreAsciiCase(".rdb"))
mediaType = "application/vnd.sun.star.uno-typelibrary;type=RDB";
}
if (mediaType.isEmpty())
throw lang::IllegalArgumentException(
StrCannotDetectMediaType::get() + url,
static_cast<OWeakObject *>(this), static_cast<sal_Int16>(-1) );
}
OUString type, subType;
INetContentTypeParameterList params;
if (INetContentTypes::parse( mediaType, type, subType, &params ))
{
if (type.equalsIgnoreAsciiCase("application"))
{
OUString name;
if (!bRemoved)
{
::ucbhelper::Content ucbContent( url, xCmdEnv, m_xComponentContext );
name = StrTitle::getTitle( ucbContent );
}
if (subType.equalsIgnoreAsciiCase("vnd.sun.star.uno-component"))
{
// xxx todo: probe and evaluate component xml description
INetContentTypeParameter const * param = params.find(OString("platform"));
bool bPlatformFits(param == 0);
OUString aPlatform;
if (!bPlatformFits) // platform is specified, we have to check
{
aPlatform = param->m_sValue;
bPlatformFits = platform_fits(aPlatform);
}
// If the package is being removed, do not care whether
// platform fits. We won't be using it anyway.
if (bPlatformFits || bRemoved) {
param = params.find(OString("type"));
if (param != 0)
{
OUString const & value = param->m_sValue;
if (value.equalsIgnoreAsciiCase("native")) {
if (bPlatformFits)
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xDynComponentTypeInfo,
"com.sun.star.loader.SharedLibrary",
bRemoved, identifier);
else
return new BackendImpl::OtherPlatformPackageImpl(
this, url, name, m_xDynComponentTypeInfo,
bRemoved, identifier, aPlatform);
}
if (value.equalsIgnoreAsciiCase("Java")) {
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xJavaComponentTypeInfo,
"com.sun.star.loader.Java2",
bRemoved, identifier);
}
if (value.equalsIgnoreAsciiCase("Python")) {
return new BackendImpl::ComponentPackageImpl(
this, url, name, m_xPythonComponentTypeInfo,
"com.sun.star.loader.Python",
bRemoved, identifier);
}
}
}
}
else if (subType.equalsIgnoreAsciiCase("vnd.sun.star.uno-components"))
{
INetContentTypeParameter const * param = params.find(OString("platform"));
if (param == 0 || platform_fits( param->m_sValue )) {
return new BackendImpl::ComponentsPackageImpl(
this, url, name, m_xComponentsTypeInfo, bRemoved,
identifier);
}
}
else if (subType.equalsIgnoreAsciiCase( "vnd.sun.star.uno-typelibrary"))
{
INetContentTypeParameter const * param = params.find(OString("type"));
if (param != 0) {
OUString const & value = param->m_sValue;
if (value.equalsIgnoreAsciiCase("RDB"))
{
return new BackendImpl::TypelibraryPackageImpl(
this, url, name, m_xRDBTypelibTypeInfo,
false /* rdb */, bRemoved, identifier);
}
if (value.equalsIgnoreAsciiCase("Java")) {
return new BackendImpl::TypelibraryPackageImpl(
this, url, name, m_xJavaTypelibTypeInfo,
true /* jar */, bRemoved, identifier);
}
}
}
}
}
throw lang::IllegalArgumentException(
StrUnsupportedMediaType::get() + mediaType,
static_cast<OWeakObject *>(this),
static_cast<sal_Int16>(-1) );
}
//______________________________________________________________________________
void BackendImpl::unorc_verify_init(
Reference<XCommandEnvironment> const & xCmdEnv )
{
if (transientMode())
return;
const ::osl::MutexGuard guard( getMutex() );
if (! m_unorc_inited)
{
// common rc:
::ucbhelper::Content ucb_content;
if (create_ucb_content(
&ucb_content,
makeURL( getCachePath(), "unorc" ),
xCmdEnv, false /* no throw */ ))
{
OUString line;
if (readLine( &line, "UNO_JAVA_CLASSPATH=", ucb_content,
RTL_TEXTENCODING_UTF8 ))
{
sal_Int32 index = sizeof ("UNO_JAVA_CLASSPATH=") - 1;
do {
OUString token( line.getToken( 0, ' ', index ).trim() );
if (!token.isEmpty())
{
if (create_ucb_content(
0, expandUnoRcTerm(token), xCmdEnv,
false /* no throw */ ))
{
//The jar file may not exist anymore if a shared or bundled
//extension was removed, but it can still be in the unorc
//After running XExtensionManager::synchronize, the unorc is
//cleaned up
m_jar_typelibs.push_back( token );
}
}
}
while (index >= 0);
}
if (readLine( &line, "UNO_TYPES=", ucb_content,
RTL_TEXTENCODING_UTF8 )) {
sal_Int32 index = sizeof ("UNO_TYPES=") - 1;
do {
OUString token( line.getToken( 0, ' ', index ).trim() );
if (!token.isEmpty())
{
if (token[ 0 ] == '?')
token = token.copy( 1 );
if (create_ucb_content(
0, expandUnoRcTerm(token), xCmdEnv,
false /* no throw */ ))
{
//The RDB file may not exist anymore if a shared or bundled
//extension was removed, but it can still be in the unorc.
//After running XExtensionManager::synchronize, the unorc is
//cleaned up
m_rdb_typelibs.push_back( token );
}
}
}
while (index >= 0);
}
if (readLine( &line, "UNO_SERVICES=", ucb_content,
RTL_TEXTENCODING_UTF8 ))
{
// The UNO_SERVICES line always has the BNF form
// "UNO_SERVICES="
// ("?$ORIGIN/" <common-rdb>)? -- first
// "${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}"? -- second
// ("?" ("BUNDLED_EXTENSIONS" | -- third
// "UNO_SHARED_PACKAGES_CACHE" | "UNO_USER_PACKAGES_CACHE")
// ...)*
// so can unambiguously be split into its thre parts:
int state = 1;
for (sal_Int32 i = RTL_CONSTASCII_LENGTH("UNO_SERVICES=");
i >= 0;)
{
OUString token(line.getToken(0, ' ', i));
if (!token.isEmpty())
{
if (state == 1 && token.match("?$ORIGIN/"))
{
m_commonRDB_orig = token.copy(
RTL_CONSTASCII_LENGTH("?$ORIGIN/"));
state = 2;
}
else if ( state <= 2 && token == "${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}" )
{
state = 3;
}
else
{
if (token[0] == '?')
{
token = token.copy(1);
}
m_components.push_back(token);
state = 3;
}
}
}
}
// native rc:
if (create_ucb_content(
&ucb_content,
makeURL( getCachePath(), getPlatformString() + "rc"),
xCmdEnv, false /* no throw */ )) {
if (readLine( &line, "UNO_SERVICES=", ucb_content,
RTL_TEXTENCODING_UTF8 )) {
m_nativeRDB_orig = line.copy(
sizeof ("UNO_SERVICES=?$ORIGIN/") - 1 );
}
}
}
m_unorc_modified = false;
m_unorc_inited = true;
}
}
//______________________________________________________________________________
void BackendImpl::unorc_flush( Reference<XCommandEnvironment> const & xCmdEnv )
{
if (transientMode())
return;
if (!m_unorc_inited || !m_unorc_modified)
return;
OStringBuffer buf;
buf.append("ORIGIN=");
OUString sOrigin = dp_misc::makeRcTerm(m_cachePath);
OString osOrigin = OUStringToOString(sOrigin, RTL_TEXTENCODING_UTF8);
buf.append(osOrigin);
buf.append(LF);
if (! m_jar_typelibs.empty())
{
t_stringlist::const_iterator iPos( m_jar_typelibs.begin() );
t_stringlist::const_iterator const iEnd( m_jar_typelibs.end() );
buf.append( "UNO_JAVA_CLASSPATH=" );
while (iPos != iEnd) {
// encoded ASCII file-urls:
const OString item(
OUStringToOString( *iPos, RTL_TEXTENCODING_ASCII_US ) );
buf.append( item );
++iPos;
if (iPos != iEnd)
buf.append( ' ' );
}
buf.append(LF);
}
if (! m_rdb_typelibs.empty())
{
t_stringlist::const_iterator iPos( m_rdb_typelibs.begin() );
t_stringlist::const_iterator const iEnd( m_rdb_typelibs.end() );
buf.append( "UNO_TYPES=" );
while (iPos != iEnd) {
buf.append( '?' );
// encoded ASCII file-urls:
const OString item(
OUStringToOString( *iPos, RTL_TEXTENCODING_ASCII_US ) );
buf.append( item );
++iPos;
if (iPos != iEnd)
buf.append( ' ' );
}
buf.append(LF);
}
// If we duplicated the common or native rdb then we must use those urls
//otherwise we use those of the original files. That is, m_commonRDB_orig
//and m_nativeRDB_orig;
OUString sCommonRDB(m_commonRDB.isEmpty() ? m_commonRDB_orig : m_commonRDB );
OUString sNativeRDB(m_nativeRDB.isEmpty() ? m_nativeRDB_orig : m_nativeRDB );
if (!sCommonRDB.isEmpty() || !sNativeRDB.isEmpty() ||
!m_components.empty())
{
buf.append( "UNO_SERVICES=" );
bool space = false;
if (!sCommonRDB.isEmpty())
{
buf.append( "?$ORIGIN/" );
buf.append( OUStringToOString(
sCommonRDB, RTL_TEXTENCODING_ASCII_US ) );
space = true;
}
if (!sNativeRDB.isEmpty())
{
if (space)
{
buf.append(' ');
}
buf.append( "${$ORIGIN/${_OS}_${_ARCH}rc:UNO_SERVICES}" );
space = true;
// write native rc:
OStringBuffer buf2;
buf2.append("ORIGIN=");
buf2.append(osOrigin);
buf2.append(LF);
buf2.append( "UNO_SERVICES=?$ORIGIN/" );
buf2.append( OUStringToOString(
sNativeRDB, RTL_TEXTENCODING_ASCII_US ) );
buf2.append(LF);
const Reference<io::XInputStream> xData(
::xmlscript::createInputStream(
::rtl::ByteSequence(
reinterpret_cast<sal_Int8 const *>(buf2.getStr()),
buf2.getLength() ) ) );
::ucbhelper::Content ucb_content(
makeURL( getCachePath(), getPlatformString() + "rc" ),
xCmdEnv, m_xComponentContext );
ucb_content.writeStream( xData, true /* replace existing */ );
}
for (t_stringlist::iterator i(m_components.begin());
i != m_components.end(); ++i)
{
if (space)
{
buf.append(' ');
}
buf.append('?');
buf.append(OUStringToOString(*i, RTL_TEXTENCODING_UTF8));
space = true;
}
buf.append(LF);
}
// write unorc:
const Reference<io::XInputStream> xData(
::xmlscript::createInputStream(
::rtl::ByteSequence(
reinterpret_cast<sal_Int8 const *>(buf.getStr()),
buf.getLength() ) ) );
::ucbhelper::Content ucb_content(
makeURL( getCachePath(), "unorc" ), xCmdEnv, m_xComponentContext );
ucb_content.writeStream( xData, true /* replace existing */ );
m_unorc_modified = false;
}
//______________________________________________________________________________
bool BackendImpl::addToUnoRc( RcItem kind, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
unorc_verify_init( xCmdEnv );
t_stringlist & rSet = getRcItemList(kind);
if (::std::find( rSet.begin(), rSet.end(), rcterm ) == rSet.end()) {
rSet.push_front( rcterm ); // prepend to list, thus overriding
// write immediately:
m_unorc_modified = true;
unorc_flush( xCmdEnv );
return true;
}
else
return false;
}
//______________________________________________________________________________
bool BackendImpl::removeFromUnoRc(
RcItem kind, OUString const & url_,
Reference<XCommandEnvironment> const & xCmdEnv )
{
const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
unorc_verify_init( xCmdEnv );
getRcItemList(kind).remove( rcterm );
// write immediately:
m_unorc_modified = true;
unorc_flush( xCmdEnv );
return true;
}
//______________________________________________________________________________
bool BackendImpl::hasInUnoRc(
RcItem kind, OUString const & url_ )
{
const OUString rcterm( dp_misc::makeRcTerm(url_) );
const ::osl::MutexGuard guard( getMutex() );
t_stringlist const & rSet = getRcItemList(kind);
return ::std::find( rSet.begin(), rSet.end(), rcterm ) != rSet.end();
}
css::uno::Reference< css::uno::XComponentContext > BackendImpl::getRootContext()
const
{
css::uno::Reference< css::uno::XComponentContext > rootContext(
getComponentContext()->getValueByName("_root"),
css::uno::UNO_QUERY);
return rootContext.is() ? rootContext : getComponentContext();
}
//______________________________________________________________________________
void BackendImpl::releaseObject( OUString const & id )
{
const ::osl::MutexGuard guard( getMutex() );
m_backendObjects.erase( id );
}
//______________________________________________________________________________
Reference<XInterface> BackendImpl::getObject( OUString const & id )
{
const ::osl::MutexGuard guard( getMutex() );
const t_string2object::const_iterator iFind( m_backendObjects.find( id ) );
if (iFind == m_backendObjects.end())
return Reference<XInterface>();
else
return iFind->second;
}
//______________________________________________________________________________
Reference<XInterface> BackendImpl::insertObject(
OUString const & id, Reference<XInterface> const & xObject )
{
const ::osl::MutexGuard guard( getMutex() );
const ::std::pair<t_string2object::iterator, bool> insertion(
m_backendObjects.insert( t_string2object::value_type(
id, xObject ) ) );
return insertion.first->second;
}
//------------------------------------------------------------------------------
Reference<XComponentContext> raise_uno_process(
Reference<XComponentContext> const & xContext,
::rtl::Reference<AbortChannel> const & abortChannel )
{
OSL_ASSERT( xContext.is() );
OUString url( util::theMacroExpander::get(xContext)->expandMacros( "$URE_BIN_DIR/uno" ) );
OUStringBuffer buf;
buf.appendAscii( "uno:pipe,name=" );
OUString pipeId( generateRandomPipeId() );
buf.append( pipeId );
buf.appendAscii( ";urp;uno.ComponentContext" );
const OUString connectStr( buf.makeStringAndClear() );
// raise core UNO process to register/run a component,
// javavm service uses unorc next to executable to retrieve deployed
// jar typelibs
::std::vector<OUString> args;
#if OSL_DEBUG_LEVEL == 0
args.push_back( "--quiet" );
#endif
args.push_back( "--singleaccept" );
args.push_back( "-u" );
args.push_back( connectStr );
// don't inherit from unorc:
args.push_back( "-env:INIFILENAME=" );
//now add the bootstrap variables which were supplied on the command line
::std::vector<OUString> bootvars = getCmdBootstrapVariables();
args.insert(args.end(), bootvars.begin(), bootvars.end());
oslProcess hProcess = raiseProcess(
url, comphelper::containerToSequence(args) );
try {
return Reference<XComponentContext>(
resolveUnoURL( connectStr, xContext, abortChannel.get() ),
UNO_QUERY_THROW );
}
catch (...) {
// try to terminate process:
if ( osl_terminateProcess( hProcess ) != osl_Process_E_None )
{
OSL_ASSERT( false );
}
throw;
}
}
//------------------------------------------------------------------------------
namespace {
void extractComponentData(
css::uno::Reference< css::uno::XComponentContext > const & context,
css::uno::Reference< css::registry::XRegistryKey > const & registry,
ComponentBackendDb::Data * data,
std::vector< css::uno::Reference< css::uno::XInterface > > * factories,
css::uno::Reference< css::loader::XImplementationLoader > const &
componentLoader,
OUString const & componentUrl)
{
OSL_ASSERT(
context.is() && registry.is() && data != 0 && componentLoader.is());
OUString registryName(registry->getKeyName());
sal_Int32 prefix = registryName.getLength();
if (!registryName.endsWith("/")) {
prefix += RTL_CONSTASCII_LENGTH("/");
}
css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
keys(registry->openKeys());
css::uno::Reference< css::lang::XMultiComponentFactory > smgr(
context->getServiceManager(), css::uno::UNO_QUERY_THROW);
for (sal_Int32 i = 0; i < keys.getLength(); ++i) {
OUString name(keys[i]->getKeyName().copy(prefix));
data->implementationNames.push_back(name);
css::uno::Reference< css::registry::XRegistryKey > singletons(
keys[i]->openKey("UNO/SINGLETONS"));
if (singletons.is()) {
sal_Int32 prefix2 = keys[i]->getKeyName().getLength() +
RTL_CONSTASCII_LENGTH("/UNO/SINGLETONS/");
css::uno::Sequence<
css::uno::Reference< css::registry::XRegistryKey > >
singletonKeys(singletons->openKeys());
for (sal_Int32 j = 0; j < singletonKeys.getLength(); ++j) {
data->singletons.push_back(
std::pair< OUString, OUString >(
singletonKeys[j]->getKeyName().copy(prefix2), name));
}
}
if (factories != 0) {
factories->push_back(
componentLoader->activate(
name, OUString(), componentUrl, keys[i]));
}
}
}
}
void BackendImpl::ComponentPackageImpl::getComponentInfo(
ComponentBackendDb::Data * data,
std::vector< css::uno::Reference< css::uno::XInterface > > * factories,
Reference<XComponentContext> const & xContext )
{
const Reference<loader::XImplementationLoader> xLoader(
xContext->getServiceManager()->createInstanceWithContext(
m_loader, xContext ), UNO_QUERY );
if (! xLoader.is())
{
throw css::deployment::DeploymentException(
"cannot instantiate loader " + m_loader,
static_cast< OWeakObject * >(this), Any());
}
// HACK: highly dependent on stoc/source/servicemanager
// and stoc/source/implreg implementation which rely on the same
// services.rdb format!
// .../UNO/LOCATION and .../UNO/ACTIVATOR appear not to be written by
// writeRegistryInfo, however, but are known, fixed values here, so
// can be passed into extractComponentData
OUString url(getURL());
const Reference<registry::XSimpleRegistry> xMemReg(
xContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.registry.SimpleRegistry", xContext ),
UNO_QUERY_THROW );
xMemReg->open( OUString() /* in mem */, false, true );
xLoader->writeRegistryInfo( xMemReg->getRootKey(), OUString(), url );
extractComponentData(
xContext, xMemReg->getRootKey(), data, factories, xLoader, url);
}
void BackendImpl::ComponentPackageImpl::componentLiveInsertion(
ComponentBackendDb::Data const & data,
std::vector< css::uno::Reference< css::uno::XInterface > > const &
factories)
{
css::uno::Reference< css::uno::XComponentContext > rootContext(
getMyBackend()->getRootContext());
css::uno::Reference< css::container::XSet > set(
rootContext->getServiceManager(), css::uno::UNO_QUERY_THROW);
std::vector< css::uno::Reference< css::uno::XInterface > >::const_iterator
factory(factories.begin());
for (t_stringlist::const_iterator i(data.implementationNames.begin());
i != data.implementationNames.end(); ++i)
{
try {
set->insert(css::uno::Any(*factory++));
2011-12-06 00:19:44 +09:00
} catch (const container::ElementExistException &) {
OSL_TRACE(
"implementation %s already registered",
OUStringToOString(*i, RTL_TEXTENCODING_UTF8).getStr());
}
}
if (!data.singletons.empty()) {
css::uno::Reference< css::container::XNameContainer > cont(
rootContext, css::uno::UNO_QUERY_THROW);
for (t_stringpairvec::const_iterator i(data.singletons.begin());
i != data.singletons.end(); ++i)
{
OUString name("/singletons/" + i->first);
//TODO: Update should be atomic:
try {
cont->removeByName( name + "/arguments");
} catch (const container::NoSuchElementException &) {}
try {
cont->insertByName( name + "/service", css::uno::Any(i->second));
} catch (const container::ElementExistException &) {
cont->replaceByName( name + "/service", css::uno::Any(i->second));
}
try {
cont->insertByName(name, css::uno::Any());
} catch (const container::ElementExistException &) {
OSL_TRACE(
"singleton %s already registered",
OUStringToOString(
i->first, RTL_TEXTENCODING_UTF8).getStr());
cont->replaceByName(name, css::uno::Any());
}
}
}
}
void BackendImpl::ComponentPackageImpl::componentLiveRemoval(
ComponentBackendDb::Data const & data)
{
css::uno::Reference< css::uno::XComponentContext > rootContext(
getMyBackend()->getRootContext());
css::uno::Reference< css::container::XSet > set(
rootContext->getServiceManager(), css::uno::UNO_QUERY_THROW);
for (t_stringlist::const_iterator i(data.implementationNames.begin());
i != data.implementationNames.end(); ++i)
{
try {
set->remove(css::uno::Any(*i));
2011-12-06 00:19:44 +09:00
} catch (const css::container::NoSuchElementException &) {
// ignore if factory has not been live deployed
}
}
if (!data.singletons.empty()) {
css::uno::Reference< css::container::XNameContainer > cont(
rootContext, css::uno::UNO_QUERY_THROW);
for (t_stringpairvec::const_iterator i(data.singletons.begin());
i != data.singletons.end(); ++i)
{
OUString name("/singletons/" + i->first);
//TODO: Removal should be atomic:
try {
cont->removeByName(name);
} catch (const container::NoSuchElementException &) {}
try {
cont->removeByName( name + "/service" );
} catch (const container::NoSuchElementException &) {}
try {
cont->removeByName( name + "/arguments" );
} catch (const container::NoSuchElementException &) {}
}
}
}
// Package
//______________________________________________________________________________
//We could use here BackendImpl::hasActiveEntry. However, this check is just as well.
//And it also shows the problem if another extension has overwritten an implementation
//entry, because it contains the same service implementation
beans::Optional< beans::Ambiguous<sal_Bool> >
BackendImpl::ComponentPackageImpl::isRegistered_(
::osl::ResettableMutexGuard &,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & )
{
if (m_registered == REG_UNINIT)
{
m_registered = REG_NOT_REGISTERED;
bool bAmbiguousComponentName = false;
const Reference<registry::XSimpleRegistry> xRDB( getRDB() );
if (xRDB.is())
{
// lookup rdb for location URL:
const Reference<registry::XRegistryKey> xRootKey(
xRDB->getRootKey() );
const Reference<registry::XRegistryKey> xImplKey(
xRootKey->openKey( "IMPLEMENTATIONS" ) );
Sequence<OUString> implNames;
if (xImplKey.is() && xImplKey->isValid())
implNames = xImplKey->getKeyNames();
OUString const * pImplNames = implNames.getConstArray();
sal_Int32 pos = implNames.getLength();
for ( ; pos--; )
{
checkAborted( abortChannel );
const OUString key(
pImplNames[ pos ] + "/UNO/LOCATION" );
const Reference<registry::XRegistryKey> xKey(
xRootKey->openKey(key) );
if (xKey.is() && xKey->isValid())
{
const OUString location( xKey->getAsciiValue() );
if (location.equalsIgnoreAsciiCase( getURL() ))
{
break;
}
else
{
//try to match only the file name
OUString thisUrl(getURL());
OUString thisFileName(thisUrl.copy(thisUrl.lastIndexOf('/')));
OUString locationFileName(location.copy(location.lastIndexOf('/')));
if (locationFileName.equalsIgnoreAsciiCase(thisFileName))
bAmbiguousComponentName = true;
}
}
}
if (pos >= 0)
m_registered = REG_REGISTERED;
else if (bAmbiguousComponentName)
m_registered = REG_MAYBE_REGISTERED;
}
}
//Different extensions can use the same service implementations. Then the extensions
//which was installed last will overwrite the one from the other extension. That is
//the registry will contain the path (the location) of the library or jar of the
//second extension. In this case isRegistered called for the lib of the first extension
//would return "not registered". That would mean that during uninstallation
//XPackage::registerPackage is not called, because it just was not registered. This is,
//however, necessary for jar files. Registering and unregistering update
//uno_packages/cache/registry/com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc
//Therefore, we will return always "is ambiguous" if the path of this component cannot
//be found in the registry and if there is another path and both have the same file name (but
//the rest of the path is different).
//If the caller cannot precisely determine that this package was registered, then it must
//call registerPackage.
sal_Bool bAmbiguous = m_registered == REG_VOID // REG_VOID == we are in the progress of unregistration
|| m_registered == REG_MAYBE_REGISTERED;
return beans::Optional< beans::Ambiguous<sal_Bool> >(
true /* IsPresent */,
beans::Ambiguous<sal_Bool>(
m_registered == REG_REGISTERED, bAmbiguous) );
}
//______________________________________________________________________________
void BackendImpl::ComponentPackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
{
BackendImpl * that = getMyBackend();
OUString url(getURL());
if (doRegisterPackage) {
ComponentBackendDb::Data data;
css::uno::Reference< css::uno::XComponentContext > context;
if (startup) {
context = that->getComponentContext();
} else {
context.set(that->getObject(url), css::uno::UNO_QUERY);
if (!context.is()) {
context.set(
that->insertObject(
url,
raise_uno_process(
that->getComponentContext(), abortChannel)),
css::uno::UNO_QUERY_THROW);
}
}
css::uno::Reference< css::registry::XImplementationRegistration> impreg(
context->getServiceManager()->createInstanceWithContext(
"com.sun.star.registry.ImplementationRegistration",
context),
css::uno::UNO_QUERY_THROW);
css::uno::Reference< css::registry::XSimpleRegistry > rdb(getRDB());
impreg->registerImplementation(m_loader, url, rdb);
// Only write to unorc after successful registration; it may fail if
// there is no suitable java
if (m_loader == "com.sun.star.loader.Java2" && !jarManifestHeaderPresent(url, "UNO-Type-Path", xCmdEnv))
{
that->addToUnoRc(RCITEM_JAR_TYPELIB, url, xCmdEnv);
data.javaTypeLibrary = true;
}
std::vector< css::uno::Reference< css::uno::XInterface > > factories;
getComponentInfo(&data, startup ? 0 : &factories, context);
if (!startup) {
try {
componentLiveInsertion(data, factories);
} catch (css::uno::Exception & e) {
SAL_INFO(
"desktop.deployment", "caught Exception " << e.Message);
try {
impreg->revokeImplementation(url, rdb);
} catch (css::uno::RuntimeException & e2) {
SAL_WARN(
"desktop.deployment",
"ignored RuntimeException " << e2.Message);
}
throw;
}
}
m_registered = REG_REGISTERED;
that->addDataToDb(url, data);
} else { // revoke
m_registered = REG_VOID;
ComponentBackendDb::Data data(that->readDataFromDb(url));
css::uno::Reference< css::uno::XComponentContext > context(
that->getObject(url), css::uno::UNO_QUERY);
bool remoteContext = context.is();
if (!remoteContext) {
context = that->getComponentContext();
}
if (!startup) {
componentLiveRemoval(data);
}
css::uno::Reference< css::registry::XImplementationRegistration >(
context->getServiceManager()->createInstanceWithContext(
"com.sun.star.registry.ImplementationRegistration",
context),
css::uno::UNO_QUERY_THROW)->revokeImplementation(url, getRDB());
if (data.javaTypeLibrary) {
that->removeFromUnoRc(RCITEM_JAR_TYPELIB, url, xCmdEnv);
}
if (remoteContext) {
that->releaseObject(url);
}
m_registered = REG_NOT_REGISTERED;
getMyBackend()->revokeEntryFromDb(url);
}
}
BackendImpl::TypelibraryPackageImpl::TypelibraryPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool jarFile, bool bRemoved, OUString const & identifier)
: Package( myBackend, url, name, name /* display-name */,
xPackageType, bRemoved, identifier),
m_jarFile( jarFile )
{
}
// Package
BackendImpl * BackendImpl::TypelibraryPackageImpl::getMyBackend() const
{
BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
if (NULL == pBackend)
{
//May throw a DisposedException
check();
//We should never get here...
throw RuntimeException( "Failed to get the BackendImpl",
static_cast<OWeakObject*>(const_cast<TypelibraryPackageImpl *>(this)));
}
return pBackend;
}
//______________________________________________________________________________
beans::Optional< beans::Ambiguous<sal_Bool> >
BackendImpl::TypelibraryPackageImpl::isRegistered_(
::osl::ResettableMutexGuard &,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & )
{
BackendImpl * that = getMyBackend();
return beans::Optional< beans::Ambiguous<sal_Bool> >(
true /* IsPresent */,
beans::Ambiguous<sal_Bool>(
that->hasInUnoRc(
m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB, getURL() ),
false /* IsAmbiguous */ ) );
}
//______________________________________________________________________________
void BackendImpl::TypelibraryPackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
bool /*startup*/,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & xCmdEnv )
{
BackendImpl * that = getMyBackend();
const OUString url( getURL() );
if (doRegisterPackage)
{
// live insertion:
if (m_jarFile) {
// xxx todo add to classpath at runtime: ???
//SB: It is probably not worth it to add the live inserted type
// library JAR to the UnoClassLoader in the soffice process. Any
// live inserted component JAR that might reference this type
// library JAR runs in its own uno process, so there is probably no
// Java code in the soffice process that would see any UNO types
// introduced by this type library JAR.
}
else // RDB:
{
css::uno::Reference< css::container::XSet >(
that->getComponentContext()->getValueByName(
"/singletons"
"/com.sun.star.reflection.theTypeDescriptionManager"),
css::uno::UNO_QUERY_THROW)->insert(
css::uno::makeAny(expandUnoRcUrl(url)));
}
that->addToUnoRc( m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB,
url, xCmdEnv );
}
else // revokePackage()
{
that->removeFromUnoRc(
m_jarFile ? RCITEM_JAR_TYPELIB : RCITEM_RDB_TYPELIB, url, xCmdEnv );
// revoking types at runtime, possible, sensible?
if (!m_jarFile) {
css::uno::Reference< css::container::XSet >(
that->getComponentContext()->getValueByName(
"/singletons"
"/com.sun.star.reflection.theTypeDescriptionManager"),
css::uno::UNO_QUERY_THROW)->remove(
css::uno::makeAny(expandUnoRcUrl(url)));
}
}
}
BackendImpl::OtherPlatformPackageImpl::OtherPlatformPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool bRemoved, OUString const & identifier, OUString const& rPlatform)
: Package(myBackend, url, name, name, xPackageType, bRemoved, identifier)
, m_aPlatform(rPlatform)
{
OSL_PRECOND(bRemoved, "this class can only be used for removing packages!");
}
BackendImpl *
BackendImpl::OtherPlatformPackageImpl::getMyBackend() const
{
BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
if (NULL == pBackend)
{
//Throws a DisposedException
check();
//We should never get here...
throw RuntimeException("Failed to get the BackendImpl",
static_cast<OWeakObject*>(const_cast<OtherPlatformPackageImpl*>(this)));
}
return pBackend;
}
Reference<registry::XSimpleRegistry> const
BackendImpl::OtherPlatformPackageImpl::impl_openRDB() const
{
OUString const aRDB(m_aPlatform + ".rdb");
OUString const aRDBPath(makeURL(getMyBackend()->getCachePath(), aRDB));
Reference<registry::XSimpleRegistry> xRegistry;
try
{
xRegistry.set(
impl_createInstance("com.sun.star.registry.SimpleRegistry"),
UNO_QUERY)
;
if (xRegistry.is())
xRegistry->open(expandUnoRcUrl(aRDBPath), false, false);
}
catch (registry::InvalidRegistryException const&)
{
// If the registry does not exist, we do not need to bother at all
xRegistry.set(0);
}
OSL_POSTCOND(xRegistry.is(), "could not create registry for the package's platform");
return xRegistry;
}
Reference<XInterface> const
BackendImpl::OtherPlatformPackageImpl::impl_createInstance(OUString const& rService)
const
{
Reference<XComponentContext> const xContext(getMyBackend()->getComponentContext());
OSL_ASSERT(xContext.is());
Reference<XInterface> xService;
if (xContext.is())
xService.set(xContext->getServiceManager()->createInstanceWithContext(rService, xContext));
return xService;
}
beans::Optional<beans::Ambiguous<sal_Bool> >
BackendImpl::OtherPlatformPackageImpl::isRegistered_(
::osl::ResettableMutexGuard& /* guard */,
::rtl::Reference<AbortChannel> const& /* abortChannel */,
Reference<XCommandEnvironment> const& /* xCmdEnv */ )
{
return beans::Optional<beans::Ambiguous<sal_Bool> >(sal_True,
beans::Ambiguous<sal_Bool>(sal_True, sal_False));
}
void
BackendImpl::OtherPlatformPackageImpl::processPackage_(
::osl::ResettableMutexGuard& /* guard */,
bool bRegisterPackage,
bool /* bStartup */,
::rtl::Reference<AbortChannel> const& /* abortChannel */,
Reference<XCommandEnvironment> const& /* xCmdEnv */)
{
OSL_PRECOND(!bRegisterPackage, "this class can only be used for removing packages!");
(void) bRegisterPackage;
OUString const aURL(getURL());
Reference<registry::XSimpleRegistry> const xServicesRDB(impl_openRDB());
Reference<registry::XImplementationRegistration> const xImplReg(
impl_createInstance("com.sun.star.registry.ImplementationRegistration"),
UNO_QUERY)
;
if (xImplReg.is() && xServicesRDB.is())
xImplReg->revokeImplementation(aURL, xServicesRDB);
if (xServicesRDB.is())
xServicesRDB->close();
2011-03-13 16:07:53 -05:00
getMyBackend()->revokeEntryFromDb(aURL);
}
BackendImpl * BackendImpl::ComponentsPackageImpl::getMyBackend() const
{
BackendImpl * pBackend = static_cast<BackendImpl *>(m_myBackend.get());
if (NULL == pBackend)
{
//Throws a DisposedException
check();
//We should never get here...
throw RuntimeException("Failed to get the BackendImpl",
static_cast<OWeakObject*>(const_cast<ComponentsPackageImpl *>(this)));
}
return pBackend;
}
beans::Optional< beans::Ambiguous<sal_Bool> >
BackendImpl::ComponentsPackageImpl::isRegistered_(
::osl::ResettableMutexGuard &,
::rtl::Reference<AbortChannel> const &,
Reference<XCommandEnvironment> const & )
{
return beans::Optional< beans::Ambiguous<sal_Bool> >(
true,
beans::Ambiguous<sal_Bool>(
getMyBackend()->hasInUnoRc(RCITEM_COMPONENTS, getURL()), false));
}
void BackendImpl::ComponentsPackageImpl::processPackage_(
::osl::ResettableMutexGuard &,
bool doRegisterPackage,
bool startup,
::rtl::Reference<AbortChannel> const & abortChannel,
Reference<XCommandEnvironment> const & xCmdEnv )
{
BackendImpl * that = getMyBackend();
OUString url(getURL());
if (doRegisterPackage) {
if (!startup) {
css::uno::Reference< css::uno::XComponentContext > context(
that->getObject(url), css::uno::UNO_QUERY);
2011-02-03 10:50:04 +01:00
if (!context.is()) {
context.set(
that->insertObject(
url,
raise_uno_process(
that->getComponentContext(), abortChannel)),
css::uno::UNO_QUERY_THROW);
}
// This relies on the root component context's service manager
// supporting the extended XSet semantics:
css::uno::Sequence< css::beans::NamedValue > args(2);
args[0].Name = "uri";
args[0].Value <<= expandUnoRcUrl(url);
args[1].Name = "component-context";
args[1].Value <<= context;
css::uno::Reference< css::container::XSet > smgr(
that->getRootContext()->getServiceManager(),
css::uno::UNO_QUERY_THROW);
smgr->insert(css::uno::makeAny(args));
}
that->addToUnoRc(RCITEM_COMPONENTS, url, xCmdEnv);
} else { // revoke
that->removeFromUnoRc(RCITEM_COMPONENTS, url, xCmdEnv);
if (!startup) {
// This relies on the root component context's service manager
// supporting the extended XSet semantics:
css::uno::Sequence< css::beans::NamedValue > args(1);
args[0].Name = "uri";
args[0].Value <<= expandUnoRcUrl(url);
css::uno::Reference< css::container::XSet > smgr(
that->getRootContext()->getServiceManager(),
css::uno::UNO_QUERY_THROW);
smgr->remove(css::uno::makeAny(args));
}
that->releaseObject(url);
that->revokeEntryFromDb(url); // in case it got added with old code
}
}
BackendImpl::ComponentsPackageImpl::ComponentsPackageImpl(
::rtl::Reference<PackageRegistryBackend> const & myBackend,
OUString const & url, OUString const & name,
Reference<deployment::XPackageTypeInfo> const & xPackageType,
bool bRemoved, OUString const & identifier)
: Package( myBackend, url, name, name /* display-name */,
xPackageType, bRemoved, identifier)
{}
} // anon namespace
namespace sdecl = comphelper::service_decl;
sdecl::class_<BackendImpl, sdecl::with_args<true> > serviceBI;
extern sdecl::ServiceDecl const serviceDecl(
serviceBI,
IMPLEMENTATION_NAME,
BACKEND_SERVICE_NAME );
} // namespace component
} // namespace backend
} // namespace dp_registry
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */