summaryrefslogtreecommitdiff
path: root/desktop/source/deployment/manager/dp_extensionmanager.cxx
diff options
context:
space:
mode:
authorJoachim Lingner <jl@openoffice.org>2010-05-28 17:50:38 +0200
committerJoachim Lingner <jl@openoffice.org>2010-05-28 17:50:38 +0200
commit776d5631f5089f94cbe87b6f869f7887aeff2092 (patch)
treed65da9c50c2b4a14c6c28c12b6186502a5fd7343 /desktop/source/deployment/manager/dp_extensionmanager.cxx
parent3d3b46bb623c859265d2b95068845b18a1b64716 (diff)
jl152 #i77196# new update behavior for extensions
Diffstat (limited to 'desktop/source/deployment/manager/dp_extensionmanager.cxx')
-rw-r--r--desktop/source/deployment/manager/dp_extensionmanager.cxx77
1 files changed, 70 insertions, 7 deletions
diff --git a/desktop/source/deployment/manager/dp_extensionmanager.cxx b/desktop/source/deployment/manager/dp_extensionmanager.cxx
index fddefb5ad277..251e70a19ce6 100644
--- a/desktop/source/deployment/manager/dp_extensionmanager.cxx
+++ b/desktop/source/deployment/manager/dp_extensionmanager.cxx
@@ -250,7 +250,8 @@ void ExtensionManager::addExtensionsToMap(
*/
::std::list<Reference<deploy::XPackage> >
ExtensionManager::getExtensionsWithSameId(
- OUString const & identifier, OUString const & fileName)
+ OUString const & identifier, OUString const & fileName,
+ Reference< ucb::XCommandEnvironment> const & xCmdEnv)
{
::std::list<Reference<deploy::XPackage> > extensionList;
@@ -282,13 +283,70 @@ void ExtensionManager::addExtensionsToMap(
return extensionList;
}
+uno::Sequence<Reference<deploy::XPackage> >
+ExtensionManager::getExtensionsWithSameIdentifier(
+ OUString const & identifier,
+ OUString const & fileName,
+ Reference< ucb::XCommandEnvironment> const & xCmdEnv )
+ throw (
+ deploy::DeploymentException,
+ ucb::CommandFailedException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException)
+{
+ try
+ {
+ ::std::list<Reference<deploy::XPackage> > listExtensions =
+ getExtensionsWithSameId(
+ identifier, fileName, xCmdEnv);
+ sal_Bool bHasExtension = false;
+
+ //throw an IllegalArgumentException if there is no extension at all.
+ typedef ::std::list<Reference<deploy::XPackage> >::const_iterator CIT;
+ for (CIT i = listExtensions.begin(); i != listExtensions.end(); i++)
+ bHasExtension |= i->is();
+ if (!bHasExtension)
+ throw lang::IllegalArgumentException(
+ OUSTR("Could not find extension: ") + identifier + OUSTR(", ") + fileName,
+ static_cast<cppu::OWeakObject*>(this), -1);
+
+ return comphelper::containerToSequence<
+ Reference<deploy::XPackage>,
+ ::std::list<Reference<deploy::XPackage> >
+ > (listExtensions);
+ }
+ catch (deploy::DeploymentException & )
+ {
+ throw;
+ }
+ catch ( ucb::CommandFailedException & )
+ {
+ throw;
+ }
+ catch (lang::IllegalArgumentException &)
+ {
+ throw;
+ }
+ catch (...)
+ {
+ uno::Any exc = ::cppu::getCaughtException();
+ throw deploy::DeploymentException(
+ OUSTR("Extension Manager: exception during getExtensionsWithSameIdentifier"),
+ static_cast<OWeakObject*>(this), exc);
+ }
+}
+
bool ExtensionManager::isUserDisabled(
OUString const & identifier, OUString const & fileName)
{
- ::std::list<Reference<deploy::XPackage> > listExtensions =
- getExtensionsWithSameId(identifier, fileName);
+ ::std::list<Reference<deploy::XPackage> > listExtensions;
+
+ try {
+ listExtensions = getExtensionsWithSameId(identifier, fileName);
+ } catch (lang::IllegalArgumentException & ) {
+ }
OSL_ASSERT(listExtensions.size() == 3);
return isUserDisabled( ::comphelper::containerToSequence<
@@ -339,8 +397,11 @@ void ExtensionManager::activateExtension(
Reference<task::XAbortChannel> const & xAbortChannel,
Reference<ucb::XCommandEnvironment> const & xCmdEnv )
{
- ::std::list<Reference<deploy::XPackage> > listExtensions =
- getExtensionsWithSameId(identifier, fileName);
+ ::std::list<Reference<deploy::XPackage> > listExtensions;
+ try {
+ listExtensions = getExtensionsWithSameId(identifier, fileName);
+ } catch (lang::IllegalArgumentException &) {
+ }
OSL_ASSERT(listExtensions.size() == 3);
activateExtension(
@@ -510,9 +571,11 @@ Reference<deploy::XPackage> ExtensionManager::addExtension(
ExtensionProperties props(OUString(), properties, Reference<ucb::XCommandEnvironment>());
if (licenseAttributes && licenseAttributes->suppressIfRequired
&& props.isSuppressedLicense())
- _xCmdEnv = Reference<ucb::XCommandEnvironment>(new NoLicenseCommandEnv(xCmdEnv->getInteractionHandler()));
+ _xCmdEnv = Reference<ucb::XCommandEnvironment>(
+ new NoLicenseCommandEnv(xCmdEnv->getInteractionHandler()));
+
bCanInstall = xTmpExtension->checkPrerequisites(
- xAbortChannel, _xCmdEnv, xOldExtension.is()) == 0 ? true : false;
+ xAbortChannel, _xCmdEnv, xOldExtension.is() || props.isExtensionUpdate()) == 0 ? true : false;
}
catch (deploy::DeploymentException& ) {
excOccurred1 = ::cppu::getCaughtException();