summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configmgr/source/components.cxx10
-rw-r--r--configmgr/source/xcsparser.cxx24
-rw-r--r--desktop/inc/deployment.hrc3
-rw-r--r--desktop/source/deployment/gui/dp_gui_updatedialog.cxx2
-rw-r--r--desktop/source/deployment/inc/dp_dependencies.hxx7
-rw-r--r--desktop/source/deployment/manager/dp_informationprovider.cxx2
-rw-r--r--desktop/source/deployment/misc/dp_dependencies.cxx100
-rw-r--r--desktop/source/deployment/misc/dp_misc.src12
-rw-r--r--desktop/source/deployment/registry/inc/dp_backend.h2
-rw-r--r--desktop/source/deployment/registry/package/dp_package.cxx3
-rw-r--r--desktop/test/deployment/boxt/Addons.xcu50
-rw-r--r--desktop/test/deployment/boxt/ProtocolHandler.xcu38
-rw-r--r--desktop/test/deployment/boxt/boxt.cxx235
-rw-r--r--desktop/test/deployment/boxt/description.xml40
-rw-r--r--desktop/test/deployment/boxt/makefile.mk78
-rw-r--r--desktop/test/deployment/boxt/manifest.xml37
-rw-r--r--desktop/util/makefile.mk71
17 files changed, 617 insertions, 97 deletions
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 6d97971e1a2c..48f90fa8382e 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -494,12 +494,10 @@ void Components::parseFileList(
try {
(*parseFile)(url, layer, data_, 0, 0);
} catch (css::container::NoSuchElementException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "stat'ed file does not exist: ")) +
- e.Message),
- css::uno::Reference< css::uno::XInterface >());
+ OSL_TRACE(
+ "configmgr file does not exist: %s",
+ rtl::OUStringToOString(
+ e.Message, RTL_TEXTENCODING_UTF8).getStr());
}
}
if (i == -1) {
diff --git a/configmgr/source/xcsparser.cxx b/configmgr/source/xcsparser.cxx
index 12e64ebbe171..8bda874cc5b3 100644
--- a/configmgr/source/xcsparser.cxx
+++ b/configmgr/source/xcsparser.cxx
@@ -78,19 +78,19 @@ void merge(
case Node::KIND_LOCALIZED_VALUE:
break; //TODO: merge certain parts?
case Node::KIND_GROUP:
- if (dynamic_cast< GroupNode * >(original.get())->isExtensible()) {
- for (NodeMap::iterator i2(update->getMembers().begin());
- i2 != update->getMembers().end(); ++i2)
- {
- NodeMap::iterator i1(
- original->getMembers().find(i2->first));
- if (i1 == original->getMembers().end()) {
- if (i2->second->kind() == Node::KIND_PROPERTY) {
- original->getMembers().insert(*i2);
- }
- } else if (i2->second->kind() == i1->second->kind()) {
- merge(i1->second, i2->second);
+ for (NodeMap::iterator i2(update->getMembers().begin());
+ i2 != update->getMembers().end(); ++i2)
+ {
+ NodeMap::iterator i1(original->getMembers().find(i2->first));
+ if (i1 == original->getMembers().end()) {
+ if (i2->second->kind() == Node::KIND_PROPERTY &&
+ dynamic_cast< GroupNode * >(
+ original.get())->isExtensible())
+ {
+ original->getMembers().insert(*i2);
}
+ } else if (i2->second->kind() == i1->second->kind()) {
+ merge(i1->second, i2->second);
}
}
break;
diff --git a/desktop/inc/deployment.hrc b/desktop/inc/deployment.hrc
index 7e4c21d3c5a4..6b51376d8524 100644
--- a/desktop/inc/deployment.hrc
+++ b/desktop/inc/deployment.hrc
@@ -79,6 +79,9 @@
#define RID_DEPLYOMENT_DEPENDENCIES_UNKNOWN RID_DEPLOYMENT_DEPENDENCIES_START
#define RID_DEPLYOMENT_DEPENDENCIES_MIN (RID_DEPLOYMENT_DEPENDENCIES_START+1)
#define RID_DEPLYOMENT_DEPENDENCIES_MAX (RID_DEPLOYMENT_DEPENDENCIES_START+2)
+#define RID_DEPLOYMENT_DEPENDENCIES_REPO_POS (RID_DEPLOYMENT_DEPENDENCIES_START + 3)
+#define RID_DEPLOYMENT_DEPENDENCIES_REPO_NEG (RID_DEPLOYMENT_DEPENDENCIES_START + 4)
+#define RID_DEPLOYMENT_DEPENDENCIES_REPO_BOTH (RID_DEPLOYMENT_DEPENDENCIES_START + 5)
#define RID_DEPLOYMENT_LICENSE_START (RID_DEPLOYMENT_START+4500)
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index 61479f799e6f..9097cdcf63a4 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -521,7 +521,7 @@ bool UpdateDialog::Thread::update(
dp_misc::DescriptionInfoset infoset(m_context, updateInfo);
OSL_ASSERT(infoset.getVersion().getLength() != 0);
css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > > ds(
- dp_misc::Dependencies::check(infoset));
+ dp_misc::Dependencies::check(infoset, packageManager->getContext()));
UpdateDialog::DisabledUpdate du;
du.aUpdateInfo = updateInfo;
diff --git a/desktop/source/deployment/inc/dp_dependencies.hxx b/desktop/source/deployment/inc/dp_dependencies.hxx
index 13be1e8612fb..65e9c9dd6b4a 100644
--- a/desktop/source/deployment/inc/dp_dependencies.hxx
+++ b/desktop/source/deployment/inc/dp_dependencies.hxx
@@ -53,6 +53,9 @@ namespace Dependencies {
@param infoset
the infoset containing the dependencies to check
+ @param repository
+ the repository into which to deploy
+
@return
a list of the unsatisfied dependencies from <code>infoset</code> (in no
specific order)
@@ -60,7 +63,9 @@ namespace Dependencies {
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC
::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference<
::com::sun::star::xml::dom::XElement > >
- check(::dp_misc::DescriptionInfoset const & infoset);
+ check(
+ ::dp_misc::DescriptionInfoset const & infoset,
+ ::rtl::OUString const & repository);
/**
Obtain the (human-readable) error message of a failed dependency.
diff --git a/desktop/source/deployment/manager/dp_informationprovider.cxx b/desktop/source/deployment/manager/dp_informationprovider.cxx
index 9f2e0c9e1177..6267135e0d55 100644
--- a/desktop/source/deployment/manager/dp_informationprovider.cxx
+++ b/desktop/source/deployment/manager/dp_informationprovider.cxx
@@ -387,7 +387,7 @@ uno::Sequence< uno::Sequence< rtl::OUString > >
if (*id2 == id)
{
// check, if there are unsatisfied dependencies and ignore those updates
- uno::Sequence< uno::Reference< xml::dom::XElement > > ds( dp_misc::Dependencies::check( infoset ) );
+ uno::Sequence< uno::Reference< xml::dom::XElement > > ds( dp_misc::Dependencies::check( infoset, _xManager->getContext() ) );
if ( ds.getLength() )
continue;
diff --git a/desktop/source/deployment/misc/dp_dependencies.cxx b/desktop/source/deployment/misc/dp_dependencies.cxx
index 63badbb0c211..e5a81f4528f9 100644
--- a/desktop/source/deployment/misc/dp_dependencies.cxx
+++ b/desktop/source/deployment/misc/dp_dependencies.cxx
@@ -56,17 +56,44 @@ namespace css = ::com::sun::star;
static char const xmlNamespace[] =
"http://openoffice.org/extensions/description/2006";
-::dp_misc::Order compareWithVersion(::rtl::OUString const & version) {
+bool satisfiesMinimalVersion(::rtl::OUString const & version) {
::rtl::OUString v(
RTL_CONSTASCII_USTRINGPARAM(
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version")
":Version:OOOPackageVersion}"));
::rtl::Bootstrap::expandMacros(v);
- return ::dp_misc::compareVersions(v, version);
+ return ::dp_misc::compareVersions(v, version) != ::dp_misc::LESS;
}
-bool satisfiesMinimalVersion(::rtl::OUString const & version) {
- return compareWithVersion(version) != ::dp_misc::LESS;
+bool contains(::rtl::OUString const & list, ::rtl::OUString const & element) {
+ for (::sal_Int32 i = 0;;) {
+ ::sal_Int32 n = i;
+ i = list.indexOf(',', i);
+ if (i == -1) {
+ i = list.getLength();
+ }
+ if (list.copy(n, i) == element) {
+ return true;
+ }
+ if (i == list.getLength()) {
+ return false;
+ }
+ ++i;
+ }
+}
+
+bool checkDeploymentRepositories(
+ css::uno::Reference< css::xml::dom::XElement > const & dependency,
+ ::rtl::OUString const & repository)
+{
+ css::uno::Reference< css::xml::dom::XAttr > sup(
+ dependency->getAttributeNode(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("supported"))));
+ css::uno::Reference< css::xml::dom::XAttr > notSup(
+ dependency->getAttributeNode(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("not-supported"))));
+ return (!sup.is() || contains(sup->getValue(), repository)) &&
+ !(notSup.is() && contains(notSup->getValue(), repository));
}
}
@@ -76,7 +103,10 @@ namespace dp_misc {
namespace Dependencies {
css::uno::Sequence< css::uno::Reference< css::xml::dom::XElement > >
-check(::dp_misc::DescriptionInfoset const & infoset) {
+check(
+ ::dp_misc::DescriptionInfoset const & infoset,
+ ::rtl::OUString const & repository)
+{
css::uno::Reference< css::xml::dom::XNodeList > deps(
infoset.getDependencies());
::sal_Int32 n = deps->getLength();
@@ -102,11 +132,23 @@ check(::dp_misc::DescriptionInfoset const & infoset) {
RTL_CONSTASCII_STRINGPARAM(
"OpenOffice.org-maximal-version")))
{
+ ::rtl::OUString v(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version")
+ ":Version:OOOBaseVersion}"));
+ ::rtl::Bootstrap::expandMacros(v);
sat =
- compareWithVersion(
+ ::dp_misc::compareVersions(
+ v,
e->getAttribute(
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("value"))))
!= ::dp_misc::GREATER;
+ } else if (e->getNamespaceURI().equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(xmlNamespace))
+ && e->getTagName().equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("deployment-repositories")))
+ {
+ sat = checkDeploymentRepositories(e, repository);
} else if (e->hasAttributeNS(
::rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(xmlNamespace)),
@@ -145,6 +187,52 @@ check(::dp_misc::DescriptionInfoset const & infoset) {
sValue = dependency->getAttribute( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("value") ) );
sReason = ::rtl::OUString( ::String(::dp_misc::getResId(RID_DEPLYOMENT_DEPENDENCIES_MAX)) );
}
+ else if (dependency->getNamespaceURI().equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(xmlNamespace)) &&
+ dependency->getTagName().equalsAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("deployment-repositories")))
+ {
+ css::uno::Reference< css::xml::dom::XAttr > sup(
+ dependency->getAttributeNode(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("supported"))));
+ css::uno::Reference< css::xml::dom::XAttr > notSup(
+ dependency->getAttributeNode(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("not-supported"))));
+ sValue = ::String(
+ ::dp_misc::getResId(
+ sup.is()
+ ? (notSup.is()
+ ? RID_DEPLOYMENT_DEPENDENCIES_REPO_BOTH
+ : RID_DEPLOYMENT_DEPENDENCIES_REPO_POS)
+ : (notSup.is()
+ ? RID_DEPLOYMENT_DEPENDENCIES_REPO_NEG
+ : RID_DEPLYOMENT_DEPENDENCIES_UNKNOWN)));
+ ::rtl::OUStringBuffer buf;
+ for (::sal_Int32 i = 0;;) {
+ ::sal_Int32 j = sValue.indexOf('%', i);
+ if (j == -1) {
+ buf.append(sValue.copy(i));
+ break;
+ }
+ if (sup.is() &&
+ sValue.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("POS"), j + 1))
+ {
+ buf.append(sValue.copy(i, j - i));
+ buf.append(sup->getValue());
+ i = j + RTL_CONSTASCII_LENGTH("%POS");
+ } else if (notSup.is() &&
+ sValue.matchAsciiL(
+ RTL_CONSTASCII_STRINGPARAM("NEG"), j + 1))
+ {
+ buf.append(sValue.copy(i, j - i));
+ buf.append(notSup->getValue());
+ i = j + RTL_CONSTASCII_LENGTH("%NEG");
+ } else {
+ i = j + 1;
+ }
+ }
+ return buf.makeStringAndClear();
+ }
else if ( dependency->hasAttributeNS( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( xmlNamespace ) ),
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "OpenOffice.org-minimal-version" ))))
{
diff --git a/desktop/source/deployment/misc/dp_misc.src b/desktop/source/deployment/misc/dp_misc.src
index 0d341122af16..6dada0178978 100644
--- a/desktop/source/deployment/misc/dp_misc.src
+++ b/desktop/source/deployment/misc/dp_misc.src
@@ -38,3 +38,15 @@ String RID_DEPLYOMENT_DEPENDENCIES_MIN {
String RID_DEPLYOMENT_DEPENDENCIES_MAX {
Text[en-US] = "Extension doesn't support versions greater than: OpenOffice.org %VERSION";
};
+
+String RID_DEPLOYMENT_DEPENDENCIES_REPO_POS {
+ Text[en-US] = "Extension can only be deployed to repositories \"%POS\"";
+};
+
+String RID_DEPLOYMENT_DEPENDENCIES_REPO_NEG {
+ Text[en-US] = "Extension can not be deployed to repositories \"%NEG\"";
+};
+
+String RID_DEPLOYMENT_DEPENDENCIES_REPO_BOTH {
+ Text[en-US] = "Extension can be deployed to repositories \"%POS\" but not to \"%NEG\"";
+};
diff --git a/desktop/source/deployment/registry/inc/dp_backend.h b/desktop/source/deployment/registry/inc/dp_backend.h
index fe52c8ffc7e3..fdf950434395 100644
--- a/desktop/source/deployment/registry/inc/dp_backend.h
+++ b/desktop/source/deployment/registry/inc/dp_backend.h
@@ -299,6 +299,8 @@ public:
inline ::rtl::OUString const & getCachePath() const { return m_cachePath; }
inline bool transientMode() const { return m_cachePath.getLength() == 0; }
+ inline ::rtl::OUString getContext() const {return m_context; }
+
// XEventListener
virtual void SAL_CALL disposing( css::lang::EventObject const & evt )
throw (css::uno::RuntimeException);
diff --git a/desktop/source/deployment/registry/package/dp_package.cxx b/desktop/source/deployment/registry/package/dp_package.cxx
index e45f7fb7ef73..2008edc26713 100644
--- a/desktop/source/deployment/registry/package/dp_package.cxx
+++ b/desktop/source/deployment/registry/package/dp_package.cxx
@@ -553,7 +553,8 @@ bool BackendImpl::PackageImpl::checkDependencies(
dp_misc::Dependencies::check(
DescriptionInfoset(
getMyBackend()->getComponentContext(),
- description.getRootElement())));
+ description.getRootElement()),
+ getMyBackend()->getContext()));
if (unsatisfied.getLength() == 0) {
return true;
} else {
diff --git a/desktop/test/deployment/boxt/Addons.xcu b/desktop/test/deployment/boxt/Addons.xcu
new file mode 100644
index 000000000000..3df7e2de274c
--- /dev/null
+++ b/desktop/test/deployment/boxt/Addons.xcu
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+**********************************************************************-->
+
+<o:component-data xmlns:o="http://openoffice.org/2001/registry"
+ o:package="org.openoffice.Office" o:name="Addons">
+ <node o:name="AddonUI">
+ <node o:name="OfficeMenuBar">
+ <node o:name="org.openoffice.test.desktop.deployment.boxt" o:op="replace">
+ <prop o:name="Title" xml:lang="en-US">
+ <value>boxt</value>
+ </prop>
+ <node o:name="Submenu">
+ <node o:name="1" o:op="replace">
+ <prop o:name="URL">
+ <value>vnd.org.openoffice.test.desktop.deployment.boxt:</value>
+ </prop>
+ <prop o:name="Title" xml:lang="en-US">
+ <value>boxt</value>
+ </prop>
+ </node>
+ </node>
+ </node>
+ </node>
+ </node>
+</o:component-data>
diff --git a/desktop/test/deployment/boxt/ProtocolHandler.xcu b/desktop/test/deployment/boxt/ProtocolHandler.xcu
new file mode 100644
index 000000000000..fe448aedbe17
--- /dev/null
+++ b/desktop/test/deployment/boxt/ProtocolHandler.xcu
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+**********************************************************************-->
+
+<o:component-data xmlns:o="http://openoffice.org/2001/registry"
+ o:package="org.openoffice.Office" o:name="ProtocolHandler">
+ <node o:name="HandlerSet">
+ <node o:name="com.sun.star.test.deployment.boxt" o:op="replace">
+ <prop o:name="Protocols">
+ <value>vnd.org.openoffice.test.desktop.deployment.boxt:*</value>
+ </prop>
+ </node>
+ </node>
+</o:component-data>
diff --git a/desktop/test/deployment/boxt/boxt.cxx b/desktop/test/deployment/boxt/boxt.cxx
new file mode 100644
index 000000000000..dc82c0c004d6
--- /dev/null
+++ b/desktop/test/deployment/boxt/boxt.cxx
@@ -0,0 +1,235 @@
+/*************************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+************************************************************************/
+
+#include "precompiled_desktop.hxx"
+#include "sal/config.h"
+
+#include "boost/noncopyable.hpp"
+#include "com/sun/star/beans/PropertyValue.hpp"
+#include "com/sun/star/frame/DispatchDescriptor.hpp"
+#include "com/sun/star/frame/XDispatch.hpp"
+#include "com/sun/star/frame/XDispatchProvider.hpp"
+#include "com/sun/star/frame/XStatusListener.hpp"
+#include "com/sun/star/lang/XServiceInfo.hpp"
+#include "com/sun/star/lang/XSingleComponentFactory.hpp"
+#include "com/sun/star/uno/Any.hxx"
+#include "com/sun/star/uno/Exception.hpp"
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/Sequence.hxx"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "com/sun/star/util/URL.hpp"
+#include "cppuhelper/factory.hxx"
+#include "cppuhelper/implbase1.hxx"
+#include "cppuhelper/implbase3.hxx"
+#include "cppuhelper/implementationentry.hxx"
+#include "cppuhelper/weak.hxx"
+#include "filter/msfilter/countryid.hxx"
+#include "osl/diagnose.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+#include "uno/lbnames.h"
+#include "vcl/svapp.hxx"
+
+namespace {
+
+namespace css = com::sun::star;
+
+namespace service {
+
+rtl::OUString getImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.test.deployment.boxt"));
+}
+
+css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.test.deployment.boxt"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
+
+}
+
+class Service:
+ public cppu::WeakImplHelper3<
+ css::lang::XServiceInfo, css::frame::XDispatchProvider,
+ css::frame::XDispatch >,
+ private boost::noncopyable
+{
+public:
+ Service() {}
+
+private:
+ virtual ~Service() {}
+
+ virtual rtl::OUString SAL_CALL getImplementationName()
+ throw (css::uno::RuntimeException)
+ { return service::getImplementationName(); }
+
+ virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
+ throw (css::uno::RuntimeException)
+ { return ServiceName == getSupportedServiceNames()[0]; } //TODO
+
+ virtual css::uno::Sequence< rtl::OUString > SAL_CALL
+ getSupportedServiceNames() throw (css::uno::RuntimeException)
+ { return service::getSupportedServiceNames(); }
+
+ virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch(
+ css::util::URL const &, rtl::OUString const &, sal_Int32)
+ throw (css::uno::RuntimeException)
+ { return this; }
+
+ virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > >
+ SAL_CALL queryDispatches(
+ css::uno::Sequence< css::frame::DispatchDescriptor > const & Requests)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL dispatch(
+ css::util::URL const &,
+ css::uno::Sequence< css::beans::PropertyValue > const &)
+ throw (css::uno::RuntimeException);
+
+ virtual void SAL_CALL addStatusListener(
+ css::uno::Reference< css::frame::XStatusListener > const &,
+ css::util::URL const &)
+ throw (css::uno::RuntimeException)
+ {}
+
+ virtual void SAL_CALL removeStatusListener(
+ css::uno::Reference< css::frame::XStatusListener > const &,
+ css::util::URL const &)
+ throw (css::uno::RuntimeException)
+ {}
+};
+
+css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > >
+Service::queryDispatches(
+ css::uno::Sequence< css::frame::DispatchDescriptor > const & Requests)
+ throw (css::uno::RuntimeException)
+{
+ css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > s(
+ Requests.getLength());
+ for (sal_Int32 i = 0; i < s.getLength(); ++i) {
+ s[i] = queryDispatch(
+ Requests[i].FeatureURL, Requests[i].FrameName,
+ Requests[i].SearchFlags);
+ }
+ return s;
+}
+
+void Service::dispatch(
+ css::util::URL const &,
+ css::uno::Sequence< css::beans::PropertyValue > const &)
+ throw (css::uno::RuntimeException)
+{
+ msfilter::ConvertCountryToLanguage(msfilter::COUNTRY_DONTKNOW);
+ // link against some obscure library that is unlikely already loaded
+ Application::ShowNativeErrorBox(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("boxt")),
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("test")));
+}
+
+class Factory:
+ public cppu::WeakImplHelper1< css::lang::XSingleComponentFactory >,
+ private boost::noncopyable
+{
+public:
+ Factory() {}
+
+private:
+ virtual ~Factory() {}
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithContext(
+ css::uno::Reference< css::uno::XComponentContext > const &)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+ { return static_cast< cppu::OWeakObject * >(new Service); }
+
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
+ createInstanceWithArgumentsAndContext(
+ css::uno::Sequence< css::uno::Any > const &,
+ css::uno::Reference< css::uno::XComponentContext > const & Context)
+ throw (css::uno::Exception, css::uno::RuntimeException)
+ { return createInstanceWithContext(Context); }
+};
+
+css::uno::Reference< css::uno::XInterface > SAL_CALL dummy(
+ css::uno::Reference< css::uno::XComponentContext > const &)
+ SAL_THROW((css::uno::Exception))
+{
+ OSL_ASSERT(false);
+ return css::uno::Reference< css::uno::XInterface >();
+}
+
+rtl::OUString SAL_CALL getImplementationName() {
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.test.deployment.boxt"));
+}
+
+css::uno::Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames() {
+ rtl::OUString name(
+ RTL_CONSTASCII_USTRINGPARAM("com.sun.star.test.deployment.boxt"));
+ return css::uno::Sequence< rtl::OUString >(&name, 1);
+}
+
+css::uno::Reference< css::lang::XSingleComponentFactory > SAL_CALL
+createFactory(
+ cppu::ComponentFactoryFunc, rtl::OUString const &,
+ css::uno::Sequence< rtl::OUString > const &, rtl_ModuleCount *)
+ SAL_THROW(())
+{
+ return new Factory;
+}
+
+static cppu::ImplementationEntry const services[] = {
+ { &dummy, &service::getImplementationName,
+ &service::getSupportedServiceNames, &createFactory, 0, 0 },
+ { 0, 0, 0, 0, 0, 0 }
+};
+
+}
+
+extern "C" void * SAL_CALL component_getFactory(
+ char const * pImplName, void * pServiceManager, void * pRegistryKey)
+{
+ return cppu::component_getFactoryHelper(
+ pImplName, pServiceManager, pRegistryKey, services);
+}
+
+extern "C" void SAL_CALL component_getImplementationEnvironment(
+ char const ** ppEnvTypeName, uno_Environment **)
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+extern "C" sal_Bool SAL_CALL component_writeInfo(
+ void * pServiceManager, void * pRegistryKey)
+{
+ return component_writeInfoHelper(pServiceManager, pRegistryKey, services);
+}
diff --git a/desktop/test/deployment/boxt/description.xml b/desktop/test/deployment/boxt/description.xml
new file mode 100644
index 000000000000..bb574cb3c022
--- /dev/null
+++ b/desktop/test/deployment/boxt/description.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+**********************************************************************-->
+
+<d:description xmlns:d="http://openoffice.org/extensions/description/2006">
+ <d:identifier value="org.openoffice/framework/desktop/test/deployment/boxt"/>
+ <d:version value="@VERSION@"/>
+ <d:platform value="@PLATFORM@"/>
+ <d:dependencies>
+ <d:OpenOffice.org-minimal-version d:name="OpenOffice.org @VERSION@"
+ value="@VERSION@"/>
+ <d:OpenOffice.org-maximal-version d:name="OpenOffice.org @VERSION@ or older"
+ d:OpenOffice.org-minimal-version="2.3" value="@VERSION@"/>
+ @DEPENDENCY@
+ </d:dependencies>
+</d:description>
diff --git a/desktop/test/deployment/boxt/makefile.mk b/desktop/test/deployment/boxt/makefile.mk
new file mode 100644
index 000000000000..5dbf6f899b68
--- /dev/null
+++ b/desktop/test/deployment/boxt/makefile.mk
@@ -0,0 +1,78 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#***********************************************************************/
+
+PRJ = ../../..
+PRJNAME = desktop
+TARGET = test_deployment_boxt
+
+ENABLE_EXCEPTIONS = TRUE
+
+.INCLUDE: settings.mk
+.INCLUDE: rtlbootstrap.mk
+
+#TODO: The underlying OOo base version needed here is currently only available
+# as instsetoo_native/util/openoffice.lst OOOBASEVERSION, so hard-coding it here
+# for now (see issue 110653):
+my_version = 3.3
+
+.IF "$(OS)" == "LINUX" || "$(OS)" == "MACOSX" || "$(OS)" == "SOLARIS"
+my_dependency = <d:deployment-repositories \
+ d:name="cannot be deployed to repository 'user'" not-supported="user"/>
+.ELSE
+my_dependency =
+.END
+
+DLLPRE =
+
+SLOFILES = $(SHL1OBJS)
+
+SHL1TARGET = boxt.uno
+SHL1OBJS = $(SLO)/boxt.obj
+SHL1RPATH = BOXT
+SHL1STDLIBS = \
+ $(CPPUHELPERLIB) $(CPPULIB) $(MSFILTERLIB) $(SALLIB) $(TOOLSLIB) $(VCLLIB)
+SHL1VERSIONMAP = $(SOLARENV)/src/component.map
+DEF1NAME = $(SHL1TARGET)
+
+.INCLUDE: target.mk
+
+ALLTAR : $(MISC)/boxt.oxt
+
+$(MISC)/boxt.oxt .ERRREMOVE : manifest.xml description.xml Addons.xcu \
+ ProtocolHandler.xcu $(SHL1TARGETN)
+ $(RM) -r $@ $(MISC)/$(TARGET).zip
+ $(MKDIR) $(MISC)/$(TARGET).zip
+ $(MKDIR) $(MISC)/$(TARGET).zip/META-INF
+ $(SED) -e 's|@PATH@|$(SHL1TARGETN:f)|g' < manifest.xml \
+ > $(MISC)/$(TARGET).zip/META-INF/manifest.xml
+ $(SED) -e 's|@PLATFORM@|$(RTL_OS:l)_$(RTL_ARCH:l)|g' \
+ -e 's|@VERSION@|$(my_version)|g' \
+ -e 's|@DEPENDENCY@|$(my_dependency)|g' < description.xml \
+ > $(MISC)/$(TARGET).zip/description.xml
+ $(COPY) Addons.xcu ProtocolHandler.xcu $(SHL1TARGETN) $(MISC)/$(TARGET).zip
+ cd $(MISC)/$(TARGET).zip && zip ../boxt.oxt META-INF/manifest.xml \
+ description.xml Addons.xcu ProtocolHandler.xcu $(SHL1TARGETN:f)
diff --git a/desktop/test/deployment/boxt/manifest.xml b/desktop/test/deployment/boxt/manifest.xml
new file mode 100644
index 000000000000..73ebfc306e30
--- /dev/null
+++ b/desktop/test/deployment/boxt/manifest.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+**********************************************************************-->
+
+<m:manifest xmlns:m="http://openoffice.org/2001/manifest">
+ <m:file-entry m:media-type="application/vnd.sun.star.configuration-data"
+ m:full-path="Addons.xcu"/>
+ <m:file-entry m:media-type="application/vnd.sun.star.configuration-data"
+ m:full-path="ProtocolHandler.xcu"/>
+ <m:file-entry
+ m:media-type="application/vnd.sun.star.uno-component;type=native"
+ m:full-path="@PATH@"/>
+</m:manifest>
diff --git a/desktop/util/makefile.mk b/desktop/util/makefile.mk
index c669206bb3f3..47885dfd6b73 100644
--- a/desktop/util/makefile.mk
+++ b/desktop/util/makefile.mk
@@ -81,41 +81,7 @@ APP1TARGET=so$/$(TARGET)
APP1NOSAL=TRUE
APP1RPATH=BRAND
APP1OBJS=$(OBJ)$/copyright_ascii_sun.obj $(OBJ)$/main.obj
-APP1STDLIBS = \
- $(SALLIB) \
- $(SOFFICELIB) \
- $(COMPHELPERLIB) \
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(I18NISOLANGLIB) \
- $(SALLIB) \
- $(SFXLIB) \
- $(SVLLIB) \
- $(SVTOOLLIB) \
- $(TKLIB) \
- $(TOOLSLIB) \
- $(UCBHELPERLIB) \
- $(UNOTOOLSLIB) \
- $(VCLLIB) \
- $(FWELIB) \
- $(BASICLIB) \
- $(XMLSCRIPTLIB) \
- $(SALHELPERLIB) \
- $(SOTLIB) \
- $(SAXLIB) \
- $(FWILIB) \
- $(ICUUCLIB) \
- $(I18NUTILLIB) \
- $(ICULIB) \
- $(JVMFWKLIB) \
- $(BASEGFXLIB) \
- $(ICUDATALIB) \
- $(ICULELIB) \
- $(JVMACCESSLIB) \
- $(SALHELPERLIB) \
- $(VOSLIB)
-
-
+APP1STDLIBS = $(SALLIB) $(SOFFICELIB)
APP1DEPN= $(APP1RES) verinfo.rc
.IF "$(GUI)" == "WNT"
@@ -140,40 +106,7 @@ APP5TARGET=soffice
APP5NOSAL=TRUE
APP5RPATH=BRAND
APP5OBJS=$(OBJ)$/copyright_ascii_ooo.obj $(OBJ)$/main.obj
-APP5STDLIBS = \
- $(SALLIB) \
- $(SOFFICELIB) \
- $(COMPHELPERLIB) \
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(I18NISOLANGLIB) \
- $(SALLIB) \
- $(SFXLIB) \
- $(SVLLIB) \
- $(SVTOOLLIB) \
- $(TKLIB) \
- $(TOOLSLIB) \
- $(UCBHELPERLIB) \
- $(UNOTOOLSLIB) \
- $(VCLLIB) \
- $(FWELIB) \
- $(BASICLIB) \
- $(XMLSCRIPTLIB) \
- $(SALHELPERLIB) \
- $(SOTLIB) \
- $(SAXLIB) \
- $(FWILIB) \
- $(ICUUCLIB) \
- $(I18NUTILLIB) \
- $(ICULIB) \
- $(JVMFWKLIB) \
- $(BASEGFXLIB) \
- $(ICUDATALIB) \
- $(ICULELIB) \
- $(JVMACCESSLIB) \
- $(SALHELPERLIB) \
- $(VOSLIB)
-
+APP5STDLIBS = $(SALLIB) $(SOFFICELIB)
.IF "$(OS)" == "LINUX"
APP5STDLIBS+= -lXext
#APP5STDLIBS+= -lXext -lSM -lICE