summaryrefslogtreecommitdiff
path: root/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/source/deployment/misc/dp_descriptioninfoset.cxx')
-rw-r--r--desktop/source/deployment/misc/dp_descriptioninfoset.cxx866
1 files changed, 0 insertions, 866 deletions
diff --git a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
deleted file mode 100644
index f42f2365a1..0000000000
--- a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx
+++ /dev/null
@@ -1,866 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_desktop.hxx"
-
-#include "dp_descriptioninfoset.hxx"
-
-#include "dp_resource.h"
-#include "sal/config.h"
-
-#include "comphelper/sequence.hxx"
-#include "comphelper/makesequence.hxx"
-#include "comphelper/processfactory.hxx"
-#include "boost/optional.hpp"
-#include "com/sun/star/beans/Optional.hpp"
-#include "com/sun/star/lang/XMultiComponentFactory.hpp"
-#include "com/sun/star/lang/Locale.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/xml/dom/DOMException.hpp"
-#include "com/sun/star/xml/dom/XNode.hpp"
-#include "com/sun/star/xml/dom/XNodeList.hpp"
-#include "com/sun/star/xml/dom/XDocumentBuilder.hpp"
-#include "com/sun/star/xml/xpath/XXPathAPI.hpp"
-#include "com/sun/star/ucb/InteractiveAugmentedIOException.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "cppuhelper/exc_hlp.hxx"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-#include "ucbhelper/content.hxx"
-
-namespace {
-
-namespace css = ::com::sun::star;
-using css::uno::Reference;
-using ::rtl::OUString;
-
-class EmptyNodeList: public ::cppu::WeakImplHelper1< css::xml::dom::XNodeList >
-{
-public:
- EmptyNodeList();
-
- virtual ~EmptyNodeList();
-
- virtual ::sal_Int32 SAL_CALL getLength() throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::xml::dom::XNode > SAL_CALL
- item(::sal_Int32 index) throw (css::uno::RuntimeException);
-
-private:
- EmptyNodeList(EmptyNodeList &); // not defined
- void operator =(EmptyNodeList &); // not defined
-};
-
-EmptyNodeList::EmptyNodeList() {}
-
-EmptyNodeList::~EmptyNodeList() {}
-
-::sal_Int32 EmptyNodeList::getLength() throw (css::uno::RuntimeException) {
- return 0;
-}
-
-css::uno::Reference< css::xml::dom::XNode > EmptyNodeList::item(::sal_Int32)
- throw (css::uno::RuntimeException)
-{
- throw css::uno::RuntimeException(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "bad EmptyNodeList com.sun.star.xml.dom.XNodeList.item call")),
- static_cast< ::cppu::OWeakObject * >(this));
-}
-
-::rtl::OUString getNodeValue(
- css::uno::Reference< css::xml::dom::XNode > const & node)
-{
- OSL_ASSERT(node.is());
- try {
- return node->getNodeValue();
- } catch (css::xml::dom::DOMException & e) {
- throw css::uno::RuntimeException(
- (::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.xml.dom.DOMException: ")) +
- e.Message),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-/**The class uses the UCB to access the description.xml file in an
- extension. The UCB must have been initialized already. It also
- requires that the extension has already be unzipped to a particular
- location.
- */
-class ExtensionDescription
-{
-public:
- /**throws an exception if the description.xml is not
- available, cannot be read, does not contain the expected data,
- or any other error occurred. Therefore it shoult only be used with
- new extensions.
-
- Throws com::sun::star::uno::RuntimeException,
- com::sun::star::deployment::DeploymentException,
- dp_registry::backend::bundle::NoDescriptionException.
- */
- ExtensionDescription(
- const css::uno::Reference<css::uno::XComponentContext>& xContext,
- const ::rtl::OUString& installDir,
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
-
- ~ExtensionDescription();
-
- css::uno::Reference<css::xml::dom::XNode> getRootElement() const
- {
- return m_xRoot;
- }
-
- ::rtl::OUString getExtensionRootUrl() const
- {
- return m_sExtensionRootUrl;
- }
-
-
-private:
- css::uno::Reference<css::xml::dom::XNode> m_xRoot;
- ::rtl::OUString m_sExtensionRootUrl;
-};
-
-class NoDescriptionException
-{
-};
-
-class FileDoesNotExistFilter
- : public ::cppu::WeakImplHelper2< css::ucb::XCommandEnvironment,
- css::task::XInteractionHandler >
-
-{
- bool m_bExist;
- css::uno::Reference< css::ucb::XCommandEnvironment > m_xCommandEnv;
-
-public:
- virtual ~FileDoesNotExistFilter();
- FileDoesNotExistFilter(
- const css::uno::Reference< css::ucb::XCommandEnvironment >& xCmdEnv);
-
- bool exist();
- // XCommandEnvironment
- virtual css::uno::Reference<css::task::XInteractionHandler > SAL_CALL
- getInteractionHandler() throw (css::uno::RuntimeException);
- virtual css::uno::Reference<css::ucb::XProgressHandler >
- SAL_CALL getProgressHandler() throw (css::uno::RuntimeException);
-
- // XInteractionHandler
- virtual void SAL_CALL handle(
- css::uno::Reference<css::task::XInteractionRequest > const & xRequest )
- throw (css::uno::RuntimeException);
-};
-
-ExtensionDescription::ExtensionDescription(
- const Reference<css::uno::XComponentContext>& xContext,
- const OUString& installDir,
- const Reference< css::ucb::XCommandEnvironment >& xCmdEnv)
-{
- try {
- m_sExtensionRootUrl = installDir;
- //may throw ::com::sun::star::ucb::ContentCreationException
- //If there is no description.xml then ucb will start an interaction which
- //brings up a dialog.We want to prevent this. Therefore we wrap the xCmdEnv
- //and filter the respective exception out.
- OUString sDescriptionUri(installDir + OUSTR("/description.xml"));
- Reference<css::ucb::XCommandEnvironment> xFilter =
- static_cast<css::ucb::XCommandEnvironment*>(
- new FileDoesNotExistFilter(xCmdEnv));
- ::ucbhelper::Content descContent(sDescriptionUri, xFilter);
-
- //throws an com::sun::star::uno::Exception if the file is not available
- Reference<css::io::XInputStream> xIn;
- try
- { //throws com.sun.star.ucb.InteractiveAugmentedIOException
- xIn = descContent.openStream();
- }
- catch (css::uno::Exception& )
- {
- if ( ! static_cast<FileDoesNotExistFilter*>(xFilter.get())->exist())
- throw NoDescriptionException();
- throw;
- }
- if (!xIn.is())
- {
- throw css::uno::Exception(
- OUSTR("Could not get XInputStream for description.xml of extension ") +
- sDescriptionUri, 0);
- }
-
- //get root node of description.xml
- Reference<css::xml::dom::XDocumentBuilder> xDocBuilder(
- xContext->getServiceManager()->createInstanceWithContext(
- OUSTR("com.sun.star.xml.dom.DocumentBuilder"),
- xContext ), css::uno::UNO_QUERY);
- if (!xDocBuilder.is())
- throw css::uno::Exception(OUSTR(" Could not create service com.sun.star.xml.dom.DocumentBuilder"), 0);
-
- if (xDocBuilder->isNamespaceAware() == sal_False)
- {
- throw css::uno::Exception(
- OUSTR("Service com.sun.star.xml.dom.DocumentBuilder is not namespace aware."), 0);
- }
-
- Reference<css::xml::dom::XDocument> xDoc = xDocBuilder->parse(xIn);
- if (!xDoc.is())
- {
- throw css::uno::Exception(sDescriptionUri + OUSTR(" contains data which cannot be parsed. "), 0);
- }
-
- //check for proper root element and namespace
- Reference<css::xml::dom::XElement> xRoot = xDoc->getDocumentElement();
- if (!xRoot.is())
- {
- throw css::uno::Exception(
- sDescriptionUri + OUSTR(" contains no root element."), 0);
- }
-
- if ( ! xRoot->getTagName().equals(OUSTR("description")))
- {
- throw css::uno::Exception(
- sDescriptionUri + OUSTR(" does not contain the root element <description>."), 0);
- }
-
- m_xRoot = Reference<css::xml::dom::XNode>(
- xRoot, css::uno::UNO_QUERY_THROW);
- OUString nsDescription = xRoot->getNamespaceURI();
-
- //check if this namespace is supported
- if ( ! nsDescription.equals(OUSTR("http://openoffice.org/extensions/description/2006")))
- {
- throw css::uno::Exception(sDescriptionUri + OUSTR(" contains a root element with an unsupported namespace. "), 0);
- }
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::deployment::DeploymentException &) {
- throw;
- } catch (css::uno::Exception & e) {
- css::uno::Any a(cppu::getCaughtException());
- throw css::deployment::DeploymentException(
- e.Message, Reference< css::uno::XInterface >(), a);
- }
-}
-
-ExtensionDescription::~ExtensionDescription()
-{
-}
-
-//======================================================================
-FileDoesNotExistFilter::FileDoesNotExistFilter(
- const Reference< css::ucb::XCommandEnvironment >& xCmdEnv):
- m_bExist(true), m_xCommandEnv(xCmdEnv)
-{}
-
-FileDoesNotExistFilter::~FileDoesNotExistFilter()
-{
-};
-
-bool FileDoesNotExistFilter::exist()
-{
- return m_bExist;
-}
- // XCommandEnvironment
-Reference<css::task::XInteractionHandler >
- FileDoesNotExistFilter::getInteractionHandler() throw (css::uno::RuntimeException)
-{
- return static_cast<css::task::XInteractionHandler*>(this);
-}
-
-Reference<css::ucb::XProgressHandler >
- FileDoesNotExistFilter::getProgressHandler() throw (css::uno::RuntimeException)
-{
- return m_xCommandEnv.is()
- ? m_xCommandEnv->getProgressHandler()
- : Reference<css::ucb::XProgressHandler>();
-}
-
-// XInteractionHandler
-//If the interaction was caused by a non-existing file which is specified in the ctor
-//of FileDoesNotExistFilter, then we do nothing
-void FileDoesNotExistFilter::handle(
- Reference<css::task::XInteractionRequest > const & xRequest )
- throw (css::uno::RuntimeException)
-{
- css::uno::Any request( xRequest->getRequest() );
-
- css::ucb::InteractiveAugmentedIOException ioexc;
- if ((request>>= ioexc) && ioexc.Code == css::ucb::IOErrorCode_NOT_EXISTING )
- {
- m_bExist = false;
- return;
- }
- Reference<css::task::XInteractionHandler> xInteraction;
- if (m_xCommandEnv.is()) {
- xInteraction = m_xCommandEnv->getInteractionHandler();
- }
- if (xInteraction.is()) {
- xInteraction->handle(xRequest);
- }
-}
-
-}
-
-namespace dp_misc {
-
-DescriptionInfoset getDescriptionInfoset(OUString const & sExtensionFolderURL)
-{
- Reference< css::xml::dom::XNode > root;
- Reference<css::uno::XComponentContext> context =
- comphelper_getProcessComponentContext();
- OSL_ASSERT(context.is());
- try {
- root =
- ExtensionDescription(
- context, sExtensionFolderURL,
- Reference< css::ucb::XCommandEnvironment >()).
- getRootElement();
- } catch (NoDescriptionException &) {
- } catch (css::deployment::DeploymentException & e) {
- throw css::uno::RuntimeException(
- (OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.deployment.DeploymentException: ")) +
- e.Message), 0);
- }
- return DescriptionInfoset(context, root);
-}
-
-DescriptionInfoset::DescriptionInfoset(
- css::uno::Reference< css::uno::XComponentContext > const & context,
- css::uno::Reference< css::xml::dom::XNode > const & element):
- m_element(element)
-{
- css::uno::Reference< css::lang::XMultiComponentFactory > manager(
- context->getServiceManager(), css::uno::UNO_QUERY_THROW);
- if (m_element.is()) {
- m_xpath = css::uno::Reference< css::xml::xpath::XXPathAPI >(
- manager->createInstanceWithContext(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.xml.xpath.XPathAPI")),
- context),
- css::uno::UNO_QUERY_THROW);
- m_xpath->registerNS(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("desc")),
- element->getNamespaceURI());
- m_xpath->registerNS(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("xlink")),
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("http://www.w3.org/1999/xlink")));
- }
-}
-
-DescriptionInfoset::~DescriptionInfoset() {}
-
-::boost::optional< ::rtl::OUString > DescriptionInfoset::getIdentifier() const {
- return getOptionalValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("desc:identifier/@value")));
-}
-
-::rtl::OUString DescriptionInfoset::getNodeValueFromExpression(::rtl::OUString const & expression) const
-{
- css::uno::Reference< css::xml::dom::XNode > n;
- if (m_element.is()) {
- try {
- n = m_xpath->selectSingleNode(m_element, expression);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- return n.is() ? getNodeValue(n) : ::rtl::OUString();
-}
-
-
-::rtl::OUString DescriptionInfoset::getVersion() const
-{
- return getNodeValueFromExpression( ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("desc:version/@value")));
-}
-
-css::uno::Sequence< ::rtl::OUString > DescriptionInfoset::getSupportedPlaforms() const
-{
- //When there is no description.xml then we assume that we support all platforms
- if (! m_element.is())
- {
- return comphelper::makeSequence(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("all")));
- }
-
- //Check if the <platform> element was provided. If not the default is "all" platforms
- css::uno::Reference< css::xml::dom::XNode > nodePlatform(
- m_xpath->selectSingleNode(m_element, ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("desc:platform"))));
- if (!nodePlatform.is())
- {
- return comphelper::makeSequence(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("all")));
- }
-
- //There is a platform element.
- const ::rtl::OUString value = getNodeValueFromExpression(::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("desc:platform/@value")));
- //parse the string, it can contained multiple strings separated by commas
- ::std::vector< ::rtl::OUString> vec;
- sal_Int32 nIndex = 0;
- do
- {
- ::rtl::OUString aToken = value.getToken( 0, ',', nIndex );
- aToken = aToken.trim();
- if (aToken.getLength())
- vec.push_back(aToken);
-
- }
- while (nIndex >= 0);
-
- return comphelper::containerToSequence(vec);
-}
-
-css::uno::Reference< css::xml::dom::XNodeList >
-DescriptionInfoset::getDependencies() const {
- if (m_element.is()) {
- try {
- return m_xpath->selectNodeList(m_element, ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("desc:dependencies/*")));
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- return new EmptyNodeList;
-}
-
-css::uno::Sequence< ::rtl::OUString >
-DescriptionInfoset::getUpdateInformationUrls() const {
- return getUrls(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "desc:update-information/desc:src/@xlink:href")));
-}
-
-css::uno::Sequence< ::rtl::OUString >
-DescriptionInfoset::getUpdateDownloadUrls() const
-{
- return getUrls(
- ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "desc:update-download/desc:src/@xlink:href")));
-}
-
-::rtl::OUString DescriptionInfoset::getIconURL( sal_Bool bHighContrast ) const
-{
- css::uno::Sequence< ::rtl::OUString > aStrList = getUrls( ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "desc:icon/desc:default/@xlink:href")));
- css::uno::Sequence< ::rtl::OUString > aStrListHC = getUrls( ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM( "desc:icon/desc:high-contrast/@xlink:href")));
-
- if ( bHighContrast && aStrListHC.hasElements() && aStrListHC[0].getLength() )
- return aStrListHC[0];
-
- if ( aStrList.hasElements() && aStrList[0].getLength() )
- return aStrList[0];
-
- return ::rtl::OUString();
-}
-
-::boost::optional< ::rtl::OUString > DescriptionInfoset::getLocalizedUpdateWebsiteURL()
- const
-{
- bool bParentExists = false;
- const ::rtl::OUString sURL (getLocalizedHREFAttrFromChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:update-website")), &bParentExists ));
-
- if (sURL.getLength() > 0)
- return ::boost::optional< ::rtl::OUString >(sURL);
- else
- return bParentExists ? ::boost::optional< ::rtl::OUString >(::rtl::OUString()) :
- ::boost::optional< ::rtl::OUString >();
-}
-
-::boost::optional< ::rtl::OUString > DescriptionInfoset::getOptionalValue(
- ::rtl::OUString const & expression) const
-{
- css::uno::Reference< css::xml::dom::XNode > n;
- if (m_element.is()) {
- try {
- n = m_xpath->selectSingleNode(m_element, expression);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- return n.is()
- ? ::boost::optional< ::rtl::OUString >(getNodeValue(n))
- : ::boost::optional< ::rtl::OUString >();
-}
-
-css::uno::Sequence< ::rtl::OUString > DescriptionInfoset::getUrls(
- ::rtl::OUString const & expression) const
-{
- css::uno::Reference< css::xml::dom::XNodeList > ns;
- if (m_element.is()) {
- try {
- ns = m_xpath->selectNodeList(m_element, expression);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- css::uno::Sequence< ::rtl::OUString > urls(ns.is() ? ns->getLength() : 0);
- for (::sal_Int32 i = 0; i < urls.getLength(); ++i) {
- urls[i] = getNodeValue(ns->item(i));
- }
- return urls;
-}
-
-::std::pair< ::rtl::OUString, ::rtl::OUString > DescriptionInfoset::getLocalizedPublisherNameAndURL() const
-{
- css::uno::Reference< css::xml::dom::XNode > node =
- getLocalizedChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("desc:publisher")));
-
- ::rtl::OUString sPublisherName;
- ::rtl::OUString sURL;
- if (node.is())
- {
- const ::rtl::OUString exp1(RTL_CONSTASCII_USTRINGPARAM("text()"));
- css::uno::Reference< css::xml::dom::XNode > xPathName;
- try {
- xPathName = m_xpath->selectSingleNode(node, exp1);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- OSL_ASSERT(xPathName.is());
- if (xPathName.is())
- sPublisherName = xPathName->getNodeValue();
-
- const ::rtl::OUString exp2(RTL_CONSTASCII_USTRINGPARAM("@xlink:href"));
- css::uno::Reference< css::xml::dom::XNode > xURL;
- try {
- xURL = m_xpath->selectSingleNode(node, exp2);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- OSL_ASSERT(xURL.is());
- if (xURL.is())
- sURL = xURL->getNodeValue();
- }
- return ::std::make_pair(sPublisherName, sURL);
-}
-
-::rtl::OUString DescriptionInfoset::getLocalizedReleaseNotesURL() const
-{
- return getLocalizedHREFAttrFromChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:release-notes")), NULL);
-}
-
-::rtl::OUString DescriptionInfoset::getLocalizedDisplayName() const
-{
- css::uno::Reference< css::xml::dom::XNode > node =
- getLocalizedChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("desc:display-name")));
- if (node.is())
- {
- const ::rtl::OUString exp(RTL_CONSTASCII_USTRINGPARAM("text()"));
- css::uno::Reference< css::xml::dom::XNode > xtext;
- try {
- xtext = m_xpath->selectSingleNode(node, exp);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- if (xtext.is())
- return xtext->getNodeValue();
- }
- return ::rtl::OUString();
-}
-
-::rtl::OUString DescriptionInfoset::getLocalizedLicenseURL() const
-{
- return getLocalizedHREFAttrFromChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:registration/desc:simple-license")), NULL);
-
-}
-
-::boost::optional<SimpleLicenseAttributes>
-DescriptionInfoset::getSimpleLicenseAttributes() const
-{
- //Check if the node exist
- css::uno::Reference< css::xml::dom::XNode > n;
- if (m_element.is()) {
- try {
- n = m_xpath->selectSingleNode(m_element,
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:registration/desc:simple-license/@accept-by")));
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- if (n.is())
- {
- SimpleLicenseAttributes attributes;
- attributes.acceptBy =
- getNodeValueFromExpression(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:registration/desc:simple-license/@accept-by")));
-
- ::boost::optional< ::rtl::OUString > suppressOnUpdate = getOptionalValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:registration/desc:simple-license/@suppress-on-update")));
- if (suppressOnUpdate)
- attributes.suppressOnUpdate = (*suppressOnUpdate).trim().equalsIgnoreAsciiCase(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("true")));
- else
- attributes.suppressOnUpdate = false;
-
- ::boost::optional< ::rtl::OUString > suppressIfRequired = getOptionalValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:registration/desc:simple-license/@suppress-if-required")));
- if (suppressIfRequired)
- attributes.suppressIfRequired = (*suppressIfRequired).trim().equalsIgnoreAsciiCase(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("true")));
- else
- attributes.suppressIfRequired = false;
-
- return ::boost::optional<SimpleLicenseAttributes>(attributes);
- }
- }
- return ::boost::optional<SimpleLicenseAttributes>();
-}
-
-::rtl::OUString DescriptionInfoset::getLocalizedDescriptionURL() const
-{
- return getLocalizedHREFAttrFromChild(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/desc:description/desc:extension-description")), NULL);
-}
-
-css::uno::Reference< css::xml::dom::XNode >
-DescriptionInfoset::getLocalizedChild( const ::rtl::OUString & sParent) const
-{
- if ( ! m_element.is() || !sParent.getLength())
- return css::uno::Reference< css::xml::dom::XNode > ();
-
- css::uno::Reference< css::xml::dom::XNode > xParent;
- try {
- xParent = m_xpath->selectSingleNode(m_element, sParent);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- css::uno::Reference<css::xml::dom::XNode> nodeMatch;
- if (xParent.is())
- {
- const ::rtl::OUString sLocale = getOfficeLocaleString();
- nodeMatch = matchFullLocale(xParent, sLocale);
-
- //office: en-DE, en, en-DE-altmark
- if (! nodeMatch.is())
- {
- const css::lang::Locale officeLocale = getOfficeLocale();
- nodeMatch = matchCountryAndLanguage(xParent, officeLocale);
- if ( ! nodeMatch.is())
- {
- nodeMatch = matchLanguage(xParent, officeLocale);
- if (! nodeMatch.is())
- nodeMatch = getChildWithDefaultLocale(xParent);
- }
- }
- }
-
- return nodeMatch;
-}
-
-css::uno::Reference<css::xml::dom::XNode>
-DescriptionInfoset::matchFullLocale(css::uno::Reference< css::xml::dom::XNode >
- const & xParent, ::rtl::OUString const & sLocale) const
-{
- OSL_ASSERT(xParent.is());
- const ::rtl::OUString exp1(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*[@lang=\""))
- + sLocale +
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"]")));
- try {
- return m_xpath->selectSingleNode(xParent, exp1);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- return 0;
- }
-}
-
-css::uno::Reference<css::xml::dom::XNode>
-DescriptionInfoset::matchCountryAndLanguage(
- css::uno::Reference< css::xml::dom::XNode > const & xParent, css::lang::Locale const & officeLocale) const
-{
- OSL_ASSERT(xParent.is());
- css::uno::Reference<css::xml::dom::XNode> nodeMatch;
-
- if (officeLocale.Country.getLength())
- {
- const ::rtl::OUString sLangCountry(officeLocale.Language +
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-")) +
- officeLocale.Country);
- //first try exact match for lang-country
- const ::rtl::OUString exp1(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*[@lang=\""))
- + sLangCountry +
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"]")));
- try {
- nodeMatch = m_xpath->selectSingleNode(xParent, exp1);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
-
- //try to match in strings that also have a variant, for example en-US matches in
- //en-US-montana
- if (!nodeMatch.is())
- {
- const ::rtl::OUString exp2(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*[starts-with(@lang,\""))
- + sLangCountry +
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-\")]")));
- try {
- nodeMatch = m_xpath->selectSingleNode(xParent, exp2);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- }
-
- return nodeMatch;
-}
-
-
-css::uno::Reference<css::xml::dom::XNode>
-DescriptionInfoset::matchLanguage(
- css::uno::Reference< css::xml::dom::XNode > const & xParent, css::lang::Locale const & officeLocale) const
-{
- OSL_ASSERT(xParent.is());
- css::uno::Reference<css::xml::dom::XNode> nodeMatch;
-
- //first try exact match for lang
- const ::rtl::OUString exp1(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*[@lang=\""))
- + officeLocale.Language
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"]")));
- try {
- nodeMatch = m_xpath->selectSingleNode(xParent, exp1);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
-
- //try to match in strings that also have a country and/orvariant, for example en matches in
- //en-US-montana, en-US, en-montana
- if (!nodeMatch.is())
- {
- const ::rtl::OUString exp2(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("*[starts-with(@lang,\""))
- + officeLocale.Language
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("-\")]")));
- try {
- nodeMatch = m_xpath->selectSingleNode(xParent, exp2);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- return nodeMatch;
-}
-
-css::uno::Reference<css::xml::dom::XNode>
-DescriptionInfoset::getChildWithDefaultLocale(css::uno::Reference< css::xml::dom::XNode >
- const & xParent) const
-{
- OSL_ASSERT(xParent.is());
- if (xParent->getNodeName().equals(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("simple-license"))))
- {
- css::uno::Reference<css::xml::dom::XNode> nodeDefault;
- try {
- nodeDefault = m_xpath->selectSingleNode(xParent, ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("@default-license-id")));
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- if (nodeDefault.is())
- {
- //The old way
- const ::rtl::OUString exp1(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("desc:license-text[@license-id = \""))
- + nodeDefault->getNodeValue()
- + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\"]")));
- try {
- return m_xpath->selectSingleNode(xParent, exp1);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- }
- }
-
- const ::rtl::OUString exp2(RTL_CONSTASCII_USTRINGPARAM("*[1]"));
- try {
- return m_xpath->selectSingleNode(xParent, exp2);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- return 0;
- }
-}
-
-::rtl::OUString DescriptionInfoset::getLocalizedHREFAttrFromChild(
- ::rtl::OUString const & sXPathParent, bool * out_bParentExists)
- const
-{
- css::uno::Reference< css::xml::dom::XNode > node =
- getLocalizedChild(sXPathParent);
-
- ::rtl::OUString sURL;
- if (node.is())
- {
- if (out_bParentExists)
- *out_bParentExists = true;
- const ::rtl::OUString exp(RTL_CONSTASCII_USTRINGPARAM("@xlink:href"));
- css::uno::Reference< css::xml::dom::XNode > xURL;
- try {
- xURL = m_xpath->selectSingleNode(node, exp);
- } catch (css::xml::xpath::XPathException &) {
- // ignore
- }
- OSL_ASSERT(xURL.is());
- if (xURL.is())
- sURL = xURL->getNodeValue();
- }
- else
- {
- if (out_bParentExists)
- *out_bParentExists = false;
- }
- return sURL;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */