summaryrefslogtreecommitdiff
path: root/desktop/source/deployment
diff options
context:
space:
mode:
authorJoachim Lingner <jl@openoffice.org>2010-05-21 09:42:27 +0200
committerJoachim Lingner <jl@openoffice.org>2010-05-21 09:42:27 +0200
commit89b704f9db9ebbff43f6a423d2a1f17314de7a5c (patch)
tree078ba9aa27a55002239e6af1db6d371c962e8114 /desktop/source/deployment
parent7df75b6fe4c992f61c593dc33bb84ba537f05f99 (diff)
jl152 #i77196# XExtensionManager::synchronize now has no repository argument; adapted PackageInformationProvider to use bundled extensions
Diffstat (limited to 'desktop/source/deployment')
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx90
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.hxx1
-rw-r--r--desktop/source/deployment/manager/dp_informationprovider.cxx174
-rw-r--r--desktop/source/deployment/misc/dp_misc.cxx22
4 files changed, 109 insertions, 178 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx
index edc414dc6f5d..2781231b8f5e 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.cxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx
@@ -116,6 +116,29 @@ OUString CompIdentifiers::getName(::std::vector<Reference<deploy::XPackage> > co
OSL_ASSERT(extension.is());
return extension->getDisplayName();
}
+
+void writeLastModified(OUString & url, Reference<ucb::XCommandEnvironment> const & xCmdEnv)
+{
+ //Write the lastmodified file
+ try {
+ ::rtl::Bootstrap::expandMacros(url);
+ ::ucbhelper::Content ucbStamp(url, xCmdEnv );
+ dp_misc::erase_path( url, xCmdEnv );
+ ::rtl::OString stamp("1" );
+ Reference<css::io::XInputStream> xData(
+ ::xmlscript::createInputStream(
+ ::rtl::ByteSequence(
+ reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
+ stamp.getLength() ) ) );
+ ucbStamp.writeStream( xData, true /* replace existing */ );
+ }
+ catch(...)
+ {
+ uno::Any exc(::cppu::getCaughtException());
+ throw deploy::DeploymentException(
+ OUSTR("Failed to update") + url, 0, exc);
+ }
+}
} //end namespace
namespace dp_manager {
@@ -1021,7 +1044,6 @@ void ExtensionManager::reinstallDeployedExtensions(
}
sal_Bool ExtensionManager::synchronize(
- OUString const & repository,
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<ucb::XCommandEnvironment> const & xCmdEnv )
throw (deploy::DeploymentException,
@@ -1033,37 +1055,20 @@ sal_Bool ExtensionManager::synchronize(
try
{
sal_Bool bModified = sal_False;
- Reference<deploy::XPackageManager> xPackageManager;
- OUString file;
- if (repository.equals(OUSTR("user")))
- {
- xPackageManager = m_userRepository;
- }
- else if (repository.equals(OUSTR("shared")))
- {
- xPackageManager = m_sharedRepository;
- file = OUString (
- RTL_CONSTASCII_USTRINGPARAM(
- "$SHARED_EXTENSIONS_USER/lastsynchronized"));
- }
- else if (repository.equals(OUSTR("bundled")))
- {
- xPackageManager = m_bundledRepository;
- file = OUString (
- RTL_CONSTASCII_USTRINGPARAM(
- "$BUNDLED_EXTENSIONS_USER/lastsynchronized"));
- }
- else
- throw lang::IllegalArgumentException(
- OUSTR("No valid repository name provided."),
- static_cast<cppu::OWeakObject*>(this), 0);
::osl::MutexGuard guard(getMutex());
- String sSynchronizing(StrSyncRepository::get());
- sSynchronizing.SearchAndReplaceAllAscii( "%NAME", repository );
- dp_misc::ProgressLevel progress(xCmdEnv, sSynchronizing);
+ String sSynchronizingShared(StrSyncRepository::get());
+ sSynchronizingShared.SearchAndReplaceAllAscii( "%NAME", OUSTR("shared"));
+ dp_misc::ProgressLevel progressShared(xCmdEnv, sSynchronizingShared);
+ bModified = m_sharedRepository->synchronize(xAbortChannel, xCmdEnv);
+ progressShared.update(OUSTR("\n\n"));
+
+ String sSynchronizingBundled(StrSyncRepository::get());
+ sSynchronizingBundled.SearchAndReplaceAllAscii( "%NAME", OUSTR("bundled"));
+ dp_misc::ProgressLevel progressBundled(xCmdEnv, sSynchronizingBundled);
+ bModified |= m_bundledRepository->synchronize(xAbortChannel, xCmdEnv);
+ progressBundled.update(OUSTR("\n\n"));
- bModified = xPackageManager->synchronize(xAbortChannel, xCmdEnv);
try
{
const uno::Sequence<uno::Sequence<Reference<deploy::XPackage> > >
@@ -1082,31 +1087,8 @@ sal_Bool ExtensionManager::synchronize(
//so we will no repeat this everytime OOo starts.
OSL_ENSURE(0, "Extensions Manager: synchronize");
}
-
-
- progress.update(OUSTR("\n\n"));
-
- //Write the lastmodified file
- try {
- ::rtl::Bootstrap::expandMacros(file);
- ::ucbhelper::Content ucbStamp(file, xCmdEnv );
- dp_misc::erase_path( file, xCmdEnv );
- ::rtl::OString stamp("1" );
- Reference<css::io::XInputStream> xData(
- ::xmlscript::createInputStream(
- ::rtl::ByteSequence(
- reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
- stamp.getLength() ) ) );
- ucbStamp.writeStream( xData, true /* replace existing */ );
- }
- catch(...)
- {
- uno::Any exc(::cppu::getCaughtException());
- throw deploy::DeploymentException(
- OUSTR("Failed to update") + file,
- static_cast<OWeakObject*>(this), exc);
-
- }
+ writeLastModified(OUSTR("$BUNDLED_EXTENSIONS_USER/lastsynchronized"), xCmdEnv);
+ writeLastModified(OUSTR("$SHARED_EXTENSIONS_USER/lastsynchronized"), xCmdEnv);
return bModified;
} catch (deploy::DeploymentException& ) {
throw;
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.hxx b/desktop/source/deployment/manager/dp_extensionmanager.hxx
index 4367770945aa..ad0e7d95df7e 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.hxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.hxx
@@ -186,7 +186,6 @@ public:
css::uno::RuntimeException);
virtual sal_Bool SAL_CALL synchronize(
- ::rtl::OUString const & repository,
css::uno::Reference<css::task::XAbortChannel> const & xAbortChannel,
css::uno::Reference<css::ucb::XCommandEnvironment> const & xCmdEnv )
throw (css::deployment::DeploymentException,
diff --git a/desktop/source/deployment/manager/dp_informationprovider.cxx b/desktop/source/deployment/manager/dp_informationprovider.cxx
index 9f2e0c9e1177..537b7233ef77 100644
--- a/desktop/source/deployment/manager/dp_informationprovider.cxx
+++ b/desktop/source/deployment/manager/dp_informationprovider.cxx
@@ -32,11 +32,10 @@
#include "comphelper/servicedecl.hxx"
-#include "com/sun/star/deployment/thePackageManagerFactory.hpp"
#include "com/sun/star/deployment/UpdateInformationProvider.hpp"
#include "com/sun/star/deployment/XPackage.hpp"
#include "com/sun/star/deployment/XPackageInformationProvider.hpp"
-#include "com/sun/star/deployment/XPackageManager.hpp"
+#include "com/sun/star/deployment/ExtensionManager.hpp"
#include "com/sun/star/deployment/XUpdateInformationProvider.hpp"
#include "com/sun/star/lang/XServiceInfo.hpp"
#include "com/sun/star/registry/XRegistryKey.hpp"
@@ -104,7 +103,7 @@ private:
uno::Reference< uno::XComponentContext> mxContext;
- rtl::OUString getPackageLocation( const uno::Reference< deployment::XPackageManager > _xManager,
+ rtl::OUString getPackageLocation( const rtl::OUString& repository,
const rtl::OUString& _sExtensionId );
uno::Reference< deployment::XUpdateInformationProvider > mxUpdateInformation;
@@ -113,10 +112,9 @@ private:
getUpdateInformation( uno::Sequence< rtl::OUString > const & urls,
rtl::OUString const & identifier ) const;
uno::Sequence< uno::Reference< deployment::XPackage > >
- getPackages( const uno::Reference< deployment::XPackageManager > _xManager );
- uno::Sequence< uno::Sequence< rtl::OUString > > isUpdateAvailable( const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _sExtensionId );
- uno::Sequence< uno::Sequence< rtl::OUString > > getExtensionList( const uno::Reference< deployment::XPackageManager > _xManager );
+ getPackages(rtl::OUString const & repository);
+ uno::Sequence< uno::Sequence< rtl::OUString > > isUpdateAvailable(
+ rtl::OUString const & repository, const rtl::OUString& _sExtensionId );
uno::Sequence< uno::Sequence< rtl::OUString > > concatLists( uno::Sequence< uno::Sequence< rtl::OUString > > aFirst,
uno::Sequence< uno::Sequence< rtl::OUString > > aSecond );
};
@@ -148,15 +146,18 @@ void SAL_CALL PackageInformationProvider::handle( uno::Reference< task::XInterac
//------------------------------------------------------------------------------
rtl::OUString PackageInformationProvider::getPackageLocation(
- const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _rExtensionId )
+ const rtl::OUString & repository,
+ const rtl::OUString& _rExtensionId )
{
rtl::OUString aLocationURL;
+ uno::Reference<deployment::XExtensionManager> xManager =
+ deployment::ExtensionManager::get(mxContext);
- if ( _xManager.is() )
+ if ( xManager.is() )
{
const uno::Sequence< uno::Reference< deployment::XPackage > > packages(
- _xManager->getDeployedPackages(
+ xManager->getDeployedExtensions(
+ repository,
uno::Reference< task::XAbortChannel >(),
static_cast < XCommandEnvironment *> (this) ) );
@@ -187,32 +188,21 @@ rtl::OUString SAL_CALL
PackageInformationProvider::getPackageLocation( const rtl::OUString& _sExtensionId )
throw ( uno::RuntimeException )
{
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- rtl::OUString aLocationURL = getPackageLocation( xManager, _sExtensionId );
+ rtl::OUString aLocationURL = getPackageLocation( UNISTRING("user"), _sExtensionId );
if ( aLocationURL.getLength() == 0 )
{
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aLocationURL = getPackageLocation( xManager, _sExtensionId );
+ aLocationURL = getPackageLocation( UNISTRING("shared"), _sExtensionId );
+ }
+ if ( aLocationURL.getLength() == 0 )
+ {
+ aLocationURL = getPackageLocation( UNISTRING("bundled"), _sExtensionId );
}
-
if ( aLocationURL.getLength() )
{
::ucbhelper::Content aContent( aLocationURL, NULL );
aLocationURL = aContent.getURL();
}
-
return aLocationURL;
}
@@ -222,75 +212,76 @@ uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL
PackageInformationProvider::isUpdateAvailable( const rtl::OUString& _sExtensionId )
throw ( uno::RuntimeException )
{
- uno::Sequence< uno::Sequence< rtl::OUString > > aUpdateListUser;
+ uno::Sequence< uno::Sequence< rtl::OUString > >
+ aUpdateListUser = isUpdateAvailable( UNISTRING("user"), _sExtensionId );
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
+ uno::Sequence< uno::Sequence< rtl::OUString > >
+ aUpdateListShared = isUpdateAvailable( UNISTRING("shared"), _sExtensionId );
- aUpdateListUser = isUpdateAvailable( xManager, _sExtensionId );
+ uno::Sequence< uno::Sequence< rtl::OUString > >
+ aUpdateListBundled = isUpdateAvailable( UNISTRING("bundled"), _sExtensionId );
- uno::Sequence< uno::Sequence< rtl::OUString > > aUpdateListShared;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
-
- aUpdateListShared = isUpdateAvailable( xManager, _sExtensionId );
-
- if ( !aUpdateListUser.hasElements() )
- return aUpdateListShared;
- else if ( !aUpdateListShared.hasElements() )
- return aUpdateListUser;
- else
- return concatLists( aUpdateListUser, aUpdateListShared );
+ uno::Sequence< uno::Sequence< rtl::OUString > > user_shared =
+ concatLists( aUpdateListUser, aUpdateListShared );
+ return concatLists(user_shared, aUpdateListBundled);
}
//------------------------------------------------------------------------------
uno::Sequence< uno::Sequence< rtl::OUString > > SAL_CALL PackageInformationProvider::getExtensionList()
throw ( uno::RuntimeException )
{
- uno::Sequence< uno::Sequence< rtl::OUString > > aListUser;
+ const uno::Reference<deployment::XExtensionManager> mgr =
+ deployment::ExtensionManager::get(mxContext);
- uno::Reference< deployment::XPackageManager > xManager;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("user") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
+ if (!mgr.is())
+ return uno::Sequence< uno::Sequence< rtl::OUString > >();
- aListUser = getExtensionList( xManager );
+ const uno::Sequence< uno::Sequence< uno::Reference<deployment::XPackage > > >
+ allExt = mgr->getAllExtensions(
+ uno::Reference< task::XAbortChannel >(),
+ static_cast < XCommandEnvironment *> (this) );
- uno::Sequence< uno::Sequence< rtl::OUString > > aListShared;
- try {
- xManager = deployment::thePackageManagerFactory::get( mxContext )->getPackageManager( UNISTRING("shared") );
- }
- catch ( css_ucb::CommandFailedException & ){}
- catch ( uno::RuntimeException & ) {}
+ uno::Sequence< uno::Sequence< rtl::OUString > > retList;
- aListShared = getExtensionList( xManager );
+ sal_Int32 cAllIds = allExt.getLength();
+ retList.realloc(cAllIds);
- if ( !aListUser.hasElements() )
- return aListShared;
- else if ( !aListShared.hasElements() )
- return aListUser;
- else
- return concatLists( aListUser, aListShared );
+ for (sal_Int32 i = 0; i < cAllIds; i++)
+ {
+ //The inner sequence contains extensions with the same identifier from
+ //all the different repositories, that is user, share, bundled.
+ const uno::Sequence< uno::Reference< deployment::XPackage > > &
+ seqExtension = allExt[i];
+ sal_Int32 cExt = seqExtension.getLength();
+ OSL_ASSERT(cExt == 3);
+ for (sal_Int32 j = 0; j < cExt; j++)
+ {
+ //ToDo according to the old code the first found extenions is used
+ //even if another one with the same id has a better version. Design flaw?
+ uno::Reference< deployment::XPackage > const & xExtension( seqExtension[j] );
+ if (xExtension.is())
+ {
+ rtl::OUString aNewEntry[2];
+ aNewEntry[0] = dp_misc::getIdentifier(xExtension);
+ aNewEntry[1] = xExtension->getVersion();
+ retList[i] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
+ break;
+ }
+ }
+ }
+ return retList;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
uno::Sequence< uno::Reference< deployment::XPackage > >
- PackageInformationProvider::getPackages( const uno::Reference< deployment::XPackageManager > _xMgr )
+PackageInformationProvider::getPackages( const rtl::OUString & repository )
{
uno::Sequence< uno::Reference< deployment::XPackage > > packages;
try {
- packages = _xMgr->getDeployedPackages( uno::Reference< task::XAbortChannel >(),
+ uno::Reference<deployment::XExtensionManager> xMgr = deployment::ExtensionManager::get(mxContext);
+ packages = xMgr->getDeployedExtensions(repository, uno::Reference< task::XAbortChannel >(),
static_cast < XCommandEnvironment *> (this) );
}
catch ( deployment::DeploymentException & )
@@ -329,18 +320,19 @@ uno::Sequence< uno::Reference< xml::dom::XElement > >
//------------------------------------------------------------------------------
uno::Sequence< uno::Sequence< rtl::OUString > >
PackageInformationProvider::isUpdateAvailable(
- const uno::Reference< deployment::XPackageManager > _xManager,
- const rtl::OUString& _sExtensionId )
+ const rtl::OUString& repository,
+ const rtl::OUString& _sExtensionId )
{
uno::Sequence< uno::Sequence< rtl::OUString > > aList;
sal_Int32 nCount = 0;
bool bPackageFound = false;
+ uno::Reference<deployment::XExtensionManager> xManager = deployment::ExtensionManager::get(mxContext);
// If the package manager is readonly then the user cannot modify anything anyway
// so we can abort the search here
- if ( _xManager.is() && ! _xManager->isReadOnly() )
+ if ( xManager.is() && ! xManager->isReadOnlyRepository(repository) )
{
- uno::Sequence< uno::Reference< deployment::XPackage > > packages( getPackages( _xManager ) );
+ uno::Sequence< uno::Reference< deployment::XPackage > > packages( getPackages( repository ) );
uno::Sequence< uno::Reference< xml::dom::XElement > > defaultInfos;
for ( int pos = packages.getLength(); pos-- && !bPackageFound; )
@@ -413,32 +405,6 @@ uno::Sequence< uno::Sequence< rtl::OUString > >
}
//------------------------------------------------------------------------------
-uno::Sequence< uno::Sequence< rtl::OUString > >
- PackageInformationProvider::getExtensionList(
- const uno::Reference< deployment::XPackageManager > _xManager )
-{
- uno::Sequence< uno::Sequence< rtl::OUString > > aList;
-
- if ( _xManager.is() )
- {
- uno::Sequence< uno::Reference< deployment::XPackage > > packages( getPackages( _xManager ) );
-
- aList.realloc( packages.getLength() );
-
- for ( int pos = packages.getLength(); pos--; )
- {
- uno::Reference< deployment::XPackage > package( packages[ pos ] );
- rtl::OUString aNewEntry[2];
-
- aNewEntry[0] = dp_misc::getIdentifier( package );
- aNewEntry[1] = package->getVersion();
- aList[ pos ] = ::uno::Sequence< rtl::OUString >( aNewEntry, 2 );
- }
- }
- return aList;
-}
-
-//------------------------------------------------------------------------------
uno::Sequence< uno::Sequence< rtl::OUString > > PackageInformationProvider::concatLists(
uno::Sequence< uno::Sequence< rtl::OUString > > aFirst,
uno::Sequence< uno::Sequence< rtl::OUString > > aSecond )
diff --git a/desktop/source/deployment/misc/dp_misc.cxx b/desktop/source/deployment/misc/dp_misc.cxx
index 3867f741f982..5269e3d8aac5 100644
--- a/desktop/source/deployment/misc/dp_misc.cxx
+++ b/desktop/source/deployment/misc/dp_misc.cxx
@@ -603,8 +603,8 @@ void syncRepositories(Reference<ucb::XCommandEnvironment> const & xCmdEnv)
//synchronize shared before bundled otherewise there are
//more revoke and registration calls.
sal_Bool bModified = false;
- const OUString sShared(RTL_CONSTASCII_USTRINGPARAM("shared"));
- if (needToSyncRepostitory(sShared))
+ if (needToSyncRepostitory(OUString(RTL_CONSTASCII_USTRINGPARAM("shared")))
+ || needToSyncRepostitory(OUString(RTL_CONSTASCII_USTRINGPARAM("bundled"))))
{
xExtensionManager =
deployment::ExtensionManager::get(
@@ -613,23 +613,7 @@ void syncRepositories(Reference<ucb::XCommandEnvironment> const & xCmdEnv)
if (xExtensionManager.is())
{
bModified = xExtensionManager->synchronize(
- sShared, Reference<task::XAbortChannel>(), xCmdEnv);
- }
- }
-
- const OUString sBundled(RTL_CONSTASCII_USTRINGPARAM("bundled"));
- if (needToSyncRepostitory( sBundled))
- {
- if (!xExtensionManager.is())
- {
- xExtensionManager =
- deployment::ExtensionManager::get(
- comphelper_getProcessComponentContext());
- }
- if (xExtensionManager.is())
- {
- bModified |= xExtensionManager->synchronize(
- sBundled, Reference<task::XAbortChannel>(), xCmdEnv);
+ Reference<task::XAbortChannel>(), xCmdEnv);
}
}