diff options
author | Michael Meeks <michael.meeks@suse.com> | 2012-11-06 12:12:33 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-11-12 11:46:43 +0000 |
commit | 2b4fd2c89a38ccac13c72f2e94501a8702e7da4b (patch) | |
tree | 8d1da4778021a1e753ca4d01d7cc8ff2e21b0d5d /desktop/source | |
parent | 08894f7c7def58431be699c3e59ef7bbc0c725a4 (diff) |
re-base on ALv2 code. Includes:
Patches contributed by Pedro Giffuni:
Avoid some uses of non portable #!/bin/bash in shell scripts.
http://svn.apache.org/viewvc?view=revision&revision=1235297
Reduce the dependencies on non standard GNU copy.
http://svn.apache.org/viewvc?view=revision&revision=1238684
Correct /usr/bin/env path.
http://svn.apache.org/viewvc?view=revision&revision=1235619
Complex Toolbar Controls Extension from the SDK
Patches contributed by Ariel Constenla-Haile
http://svn.apache.org/viewvc?view=revision&revision=1190390
i118615 - make epm more verbose
http://svn.apache.org/viewvc?view=revision&revision=1204288
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
Patches contributed by Juergen Schmidt:
jsc341: i117327: take care if no dependency node in current
description exists, create one
http://svn.apache.org/viewvc?view=revision&revision=1172101
jsc341: i117327: add extra extension dependency check
http://svn.apache.org/viewvc?view=revision&revision=1172098
make initial branding changes
http://svn.apache.org/viewvc?view=revision&revision=1231878
Patches contributed by Ingo Schmidt
native373: #i117733# no linux jre installation on 64 bit systems
http://svn.apache.org/viewvc?view=revision&revision=1167536
native373: ##164464# improve debian support
http://svn.apache.org/viewvc?view=revision&revision=1167537
Patch contribtued by Armin Le-Grand:
Changed various aspects concerning usages of old vendor names
http://svn.apache.org/viewvc?view=revision&revision=1293313
fix for neon webdav, remove coinmp bits, improve odk script,
cleanup & remove OS/2 conditionals, system ucpp fixes,
remove OS/2 conditionals, restore our license filenames.
Diffstat (limited to 'desktop/source')
-rw-r--r-- | desktop/source/deployment/inc/dp_descriptioninfoset.hxx | 51 | ||||
-rw-r--r-- | desktop/source/deployment/misc/dp_descriptioninfoset.cxx | 158 |
2 files changed, 162 insertions, 47 deletions
diff --git a/desktop/source/deployment/inc/dp_descriptioninfoset.hxx b/desktop/source/deployment/inc/dp_descriptioninfoset.hxx index d16e9127af8a..8a5361be372e 100644 --- a/desktop/source/deployment/inc/dp_descriptioninfoset.hxx +++ b/desktop/source/deployment/inc/dp_descriptioninfoset.hxx @@ -1,30 +1,21 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* +/* + * This file is part of the LibreOffice project. * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * 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/. * - * Copyright 2000, 2010 Oracle and/or its affiliates. + * This file incorporates work covered by the following license notice: * - * 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. - * - ************************************************************************/ + * 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 . + */ #ifndef INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_DESCRIPTIONINFOSET_HXX #define INCLUDED_DESKTOP_SOURCE_DEPLOYMENT_INC_DP_DESCRIPTIONINFOSET_HXX @@ -277,6 +268,20 @@ private: SAL_DLLPRIVATE ::rtl::OUString getNodeValueFromExpression(::rtl::OUString const & expression) const; + /** Check the extensions blacklist if additional extension meta data (e.g. dependencies) + are defined for this extension and have to be taken into account. + */ + SAL_DLLPRIVATE void + checkBlacklist() const; + + /** Helper method to compare the versions with the current version + */ + SAL_DLLPRIVATE bool + checkBlacklistVersion(::rtl::OUString currentversion, + ::com::sun::star::uno::Sequence< ::rtl::OUString > const & versions) const; + + ::com::sun::star::uno::Reference< + ::com::sun::star::uno::XComponentContext > m_context; ::com::sun::star::uno::Reference< ::com::sun::star::xml::dom::XNode > m_element; ::com::sun::star::uno::Reference< diff --git a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx index 48054bd77102..534b1c6afabc 100644 --- a/desktop/source/deployment/misc/dp_descriptioninfoset.cxx +++ b/desktop/source/deployment/misc/dp_descriptioninfoset.cxx @@ -1,31 +1,21 @@ /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* +/* + * This file is part of the LibreOffice project. * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * 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/. * - * Copyright 2000, 2010 Oracle and/or its affiliates. + * This file incorporates work covered by the following license notice: * - * 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. - * - ************************************************************************/ - + * 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_descriptioninfoset.hxx" @@ -33,10 +23,15 @@ #include "sal/config.h" #include "comphelper/sequence.hxx" +#include "comphelper/seqstream.hxx" #include "comphelper/makesequence.hxx" #include "comphelper/processfactory.hxx" #include "boost/optional.hpp" +#include "com/sun/star/container/XNameAccess.hpp" #include "com/sun/star/beans/Optional.hpp" +#include "com/sun/star/beans/PropertyValue.hpp" +#include "com/sun/star/beans/XPropertySet.hpp" +#include "com/sun/star/io/SequenceInputStream.hpp" #include "com/sun/star/lang/XMultiComponentFactory.hpp" #include "com/sun/star/lang/Locale.hpp" #include "com/sun/star/uno/Reference.hxx" @@ -361,6 +356,7 @@ DescriptionInfoset getDescriptionInfoset(OUString const & sExtensionFolderURL) DescriptionInfoset::DescriptionInfoset( css::uno::Reference< css::uno::XComponentContext > const & context, css::uno::Reference< css::xml::dom::XNode > const & element): + m_context(context), m_element(element) { css::uno::Reference< css::lang::XMultiComponentFactory > manager( @@ -403,6 +399,117 @@ DescriptionInfoset::~DescriptionInfoset() {} return n.is() ? getNodeValue(n) : ::rtl::OUString(); } +void DescriptionInfoset::checkBlacklist() const +{ + if (m_element.is()) { + boost::optional< OUString > id(getIdentifier()); + if (!id) + return; // nothing to check + OUString currentversion(getVersion()); + if (currentversion.getLength() == 0) + return; // nothing to check + + css::uno::Reference< css::lang::XMultiComponentFactory > manager( + m_context->getServiceManager(), css::uno::UNO_QUERY_THROW); + css::uno::Reference< css::lang::XMultiServiceFactory> provider( + manager->createInstanceWithContext( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationProvider")), m_context), + css::uno::UNO_QUERY_THROW); + + css::uno::Sequence< css::uno::Any > args = css::uno::Sequence< css::uno::Any >(1); + css::beans::PropertyValue prop; + prop.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")); + prop.Value <<= ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/org.openoffice.Office.ExtensionDependencies/Extensions")); + args[0] <<= prop; + + css::uno::Reference< css::container::XNameAccess > blacklist( + provider->createInstanceWithArguments( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationAccess")), args), + css::uno::UNO_QUERY_THROW); + + // check first if a blacklist entry is available + if (blacklist.is() && blacklist->hasByName(*id)) { + css::uno::Reference< css::beans::XPropertySet > extProps( + blacklist->getByName(*id), css::uno::UNO_QUERY_THROW); + + css::uno::Any anyValue = extProps->getPropertyValue( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Versions"))); + + css::uno::Sequence< ::rtl::OUString > blversions; + anyValue >>= blversions; + + // check if the current version requires further dependency checks from the blacklist + if (checkBlacklistVersion(currentversion, blversions)) { + anyValue = extProps->getPropertyValue( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Dependencies"))); + ::rtl::OUString udeps; + anyValue >>= udeps; + + if (udeps.getLength() == 0) + return; // nothing todo + + ::rtl::OString xmlDependencies = ::rtl::OUStringToOString(udeps, RTL_TEXTENCODING_UNICODE); + + css::uno::Reference< css::xml::dom::XDocumentBuilder> docbuilder( + manager->createInstanceWithContext( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.xml.dom.DocumentBuilder")), m_context), + css::uno::UNO_QUERY_THROW); + + css::uno::Sequence< sal_Int8 > byteSeq((const sal_Int8*)xmlDependencies.getStr(), xmlDependencies.getLength()); + + css::uno::Reference< css::io::XInputStream> inputstream( css::io::SequenceInputStream::createStreamFromSequence(m_context, byteSeq), + css::uno::UNO_QUERY_THROW); + + css::uno::Reference< css::xml::dom::XDocument > xDocument(docbuilder->parse(inputstream)); + css::uno::Reference< css::xml::dom::XElement > xElement(xDocument->getDocumentElement()); + css::uno::Reference< css::xml::dom::XNodeList > xDeps(xElement->getChildNodes()); + sal_Int32 nLen = xDeps->getLength(); + + // get the parent xml document of current description info for the import + css::uno::Reference< css::xml::dom::XDocument > xCurrentDescInfo(m_element->getOwnerDocument()); + + // get dependency node of current description info to merge the new dependencies from the blacklist + css::uno::Reference< css::xml::dom::XNode > xCurrentDeps( + m_xpath->selectSingleNode(m_element, ::rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("desc:dependencies")))); + + // if no dependency node exists, create a new one in the current description info + if (!xCurrentDeps.is()) { + css::uno::Reference< css::xml::dom::XNode > xNewDepNode( + xCurrentDescInfo->createElementNS( + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http://openoffice.org/extensions/description/2006")), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("dependencies"))), css::uno::UNO_QUERY_THROW); + m_element->appendChild(xNewDepNode); + xCurrentDeps = m_xpath->selectSingleNode(m_element, ::rtl::OUString( + RTL_CONSTASCII_USTRINGPARAM("desc:dependencies"))); + } + + for (sal_Int32 i=0; i<nLen; i++) { + css::uno::Reference< css::xml::dom::XNode > xNode(xDeps->item(i)); + css::uno::Reference< css::xml::dom::XElement > xDep(xNode, css::uno::UNO_QUERY); + if (xDep.is()) { + // found valid blacklist dependency, import the node first and append it to the existing dependency node + css::uno::Reference< css::xml::dom::XNode > importedNode = xCurrentDescInfo->importNode(xNode, true); + xCurrentDeps->appendChild(importedNode); + } + } + } + } + } +} + +bool DescriptionInfoset::checkBlacklistVersion( + ::rtl::OUString currentversion, + ::com::sun::star::uno::Sequence< ::rtl::OUString > const & versions) const +{ + sal_Int32 nLen = versions.getLength(); + for (sal_Int32 i=0; i<nLen; i++) { + if (currentversion.equals(versions[i])) + return true; + } + + return false; +} ::rtl::OUString DescriptionInfoset::getVersion() const { @@ -452,6 +559,9 @@ css::uno::Reference< css::xml::dom::XNodeList > DescriptionInfoset::getDependencies() const { if (m_element.is()) { try { + // check the extension blacklist first and expand the dependencies if applicable + checkBlacklist(); + return m_xpath->selectNodeList(m_element, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("desc:dependencies/*"))); } catch (const css::xml::xpath::XPathException &) { |