2009-05-15 14:06:56 +02:00
|
|
|
/*************************************************************************
|
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
|
*
|
|
|
|
* Copyright 2009 by Sun Microsystems, Inc.
|
|
|
|
*
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
|
|
*
|
|
|
|
* $RCSfile: code,v $
|
|
|
|
*
|
|
|
|
* $Revision: 1.4 $
|
|
|
|
*
|
|
|
|
* 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_configmgr.hxx"
|
|
|
|
#include "sal/config.h"
|
|
|
|
|
2009-07-28 15:30:19 +02:00
|
|
|
#include <algorithm>
|
2009-08-04 10:36:31 +02:00
|
|
|
#include <list>
|
2009-05-15 14:06:56 +02:00
|
|
|
|
|
|
|
#include "com/sun/star/uno/RuntimeException.hpp"
|
2009-05-28 10:19:30 +02:00
|
|
|
#include "com/sun/star/uno/XInterface.hpp"
|
2009-05-15 14:06:56 +02:00
|
|
|
#include "osl/file.hxx"
|
|
|
|
#include "rtl/bootstrap.hxx"
|
2009-05-19 10:49:37 +02:00
|
|
|
#include "rtl/ref.hxx"
|
2009-05-15 14:06:56 +02:00
|
|
|
#include "rtl/string.h"
|
|
|
|
#include "rtl/ustring.h"
|
|
|
|
#include "rtl/ustring.hxx"
|
|
|
|
#include "sal/types.h"
|
|
|
|
|
|
|
|
#include "components.hxx"
|
2009-08-07 10:25:27 +02:00
|
|
|
#include "data.hxx"
|
2009-05-15 14:06:56 +02:00
|
|
|
#include "node.hxx"
|
2009-08-07 10:25:27 +02:00
|
|
|
#include "xml.hxx"
|
2009-05-15 14:06:56 +02:00
|
|
|
|
|
|
|
namespace configmgr {
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
|
|
|
namespace css = com::sun::star;
|
|
|
|
|
2009-08-04 10:36:31 +02:00
|
|
|
struct UnresolvedListItem {
|
|
|
|
rtl::OUString name;
|
2009-08-18 10:00:07 +02:00
|
|
|
rtl::Reference< xml::Reader > reader;
|
2009-08-04 10:36:31 +02:00
|
|
|
|
2009-08-18 10:00:07 +02:00
|
|
|
UnresolvedListItem(
|
|
|
|
rtl::OUString const & theName, rtl::Reference< xml::Reader > theReader):
|
|
|
|
name(theName), reader(theReader) {}
|
2009-08-04 10:36:31 +02:00
|
|
|
};
|
|
|
|
|
2009-08-18 10:00:07 +02:00
|
|
|
typedef std::list< UnresolvedListItem > UnresolvedList;
|
2009-08-04 10:36:31 +02:00
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
void parseSystemLayer() {
|
|
|
|
//TODO
|
2009-05-15 14:06:56 +02:00
|
|
|
}
|
|
|
|
|
2009-07-23 12:42:37 +02:00
|
|
|
rtl::OUString expand(rtl::OUString const & str) {
|
|
|
|
rtl::OUString s(str);
|
|
|
|
rtl::Bootstrap::expandMacros(s); //TODO: detect failure
|
2009-08-07 10:25:27 +02:00
|
|
|
return s;
|
2009-07-23 12:42:37 +02:00
|
|
|
}
|
|
|
|
|
2009-07-10 11:20:28 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
Components & Components::singleton() {
|
|
|
|
static Components * c = new Components(); // leaks
|
|
|
|
return *c;
|
2009-07-10 11:20:28 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
bool Components::allLocales(rtl::OUString const & locale) {
|
|
|
|
return locale.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("*"));
|
2009-07-10 11:20:28 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
rtl::Reference< Node > Components::resolvePath(
|
2009-08-07 10:25:27 +02:00
|
|
|
rtl::OUString const & path, rtl::OUString * lastSegment,
|
|
|
|
rtl::OUString * canonicalPath, int * finalizedLayer) const
|
2009-07-14 17:10:46 +02:00
|
|
|
{
|
2009-08-07 10:25:27 +02:00
|
|
|
return data_.resolvePath(
|
|
|
|
path, 0, lastSegment, canonicalPath, 0, finalizedLayer);
|
2009-07-14 17:10:46 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
rtl::Reference< Node > Components::getTemplate(
|
|
|
|
int layer, rtl::OUString const & fullName) const
|
2009-07-08 17:25:16 +02:00
|
|
|
{
|
2009-08-07 10:25:27 +02:00
|
|
|
return data_.getTemplate(layer, fullName);
|
2009-07-22 14:41:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Components::addModification(rtl::OUString const & path) {
|
2009-08-07 10:25:27 +02:00
|
|
|
data_.addModification(path);
|
2009-07-22 14:41:57 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Components::writeModifications() {
|
2009-08-07 10:25:27 +02:00
|
|
|
xml::writeModFile(getModificationFileUrl(), data_);
|
2009-07-08 17:25:16 +02:00
|
|
|
}
|
|
|
|
|
2009-07-24 16:56:06 +02:00
|
|
|
void Components::insertXcsFile(int layer, rtl::OUString const & fileUri) {
|
2009-08-07 10:25:27 +02:00
|
|
|
xml::parseXcsFile(fileUri, layer, &data_);
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Components::insertXcuFile(int layer, rtl::OUString const & fileUri) {
|
2009-08-07 10:25:27 +02:00
|
|
|
xml::parseXcuFile(fileUri, layer + 1, &data_);
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
Components::Components() {
|
|
|
|
parseXcsXcuLayer(
|
|
|
|
0,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/share/registry"))));
|
|
|
|
parseModuleLayer(
|
|
|
|
2,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"$OOO_BASE_DIR/share/registry/modules"))));
|
|
|
|
parseResLayer(
|
|
|
|
3,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("$OOO_BASE_DIR/share/registry"))));
|
|
|
|
parseXcsXcuLayer(
|
|
|
|
4,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"$BRAND_BASE_DIR/share/registry"))));
|
|
|
|
parseModuleLayer(
|
|
|
|
6,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"$BRAND_BASE_DIR/share/registry/modules"))));
|
2009-07-24 16:56:06 +02:00
|
|
|
parseXcsXcuLayer( //TODO: migrate
|
2009-07-22 14:41:57 +02:00
|
|
|
7,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
|
|
|
|
":UNO_SHARED_PACKAGES_CACHE}/registry/"
|
|
|
|
"com.sun.star.comp.deployment.configuration."
|
2009-07-22 14:41:57 +02:00
|
|
|
"PackageRegistryBackend/registry"))));
|
2009-07-24 16:56:06 +02:00
|
|
|
parseXcsXcuIniLayer(
|
2009-07-22 14:41:57 +02:00
|
|
|
9,
|
2009-07-24 16:56:06 +02:00
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
|
|
|
|
":UNO_SHARED_PACKAGES_CACHE}/registry/"
|
|
|
|
"com.sun.star.comp.deployment.configuration."
|
2009-07-24 16:56:06 +02:00
|
|
|
"PackageRegistryBackend/configmgrrc"))));
|
|
|
|
parseSystemLayer();
|
|
|
|
parseXcsXcuLayer( //TODO: migrate
|
|
|
|
11,
|
2009-07-22 14:41:57 +02:00
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
|
|
|
|
":UNO_USER_PACKAGES_CACHE}/registry/"
|
|
|
|
"com.sun.star.comp.deployment.configuration."
|
2009-07-22 14:41:57 +02:00
|
|
|
"PackageRegistryBackend/registry"))));
|
2009-07-24 16:56:06 +02:00
|
|
|
parseXcsXcuIniLayer(
|
|
|
|
13,
|
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("uno")
|
|
|
|
":UNO_USER_PACKAGES_CACHE}/registry/"
|
|
|
|
"com.sun.star.comp.deployment.configuration."
|
2009-07-24 16:56:06 +02:00
|
|
|
"PackageRegistryBackend/configmgrrc"))));
|
2009-07-22 14:41:57 +02:00
|
|
|
parseXcsXcuLayer(
|
2009-07-24 16:56:06 +02:00
|
|
|
15,
|
2009-07-22 14:41:57 +02:00
|
|
|
expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("bootstrap")
|
|
|
|
":UserInstallation}/user/registry"))));
|
2009-07-22 14:41:57 +02:00
|
|
|
parseModificationLayer();
|
2009-05-20 17:20:08 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
Components::~Components() {}
|
|
|
|
|
2009-08-04 10:36:31 +02:00
|
|
|
void Components::parseFiles(
|
|
|
|
int layer, rtl::OUString const & extension,
|
2009-08-07 10:25:27 +02:00
|
|
|
void (* parseFile)(rtl::OUString const &, int, Data *),
|
2009-08-04 10:36:31 +02:00
|
|
|
rtl::OUString const & url, bool recursive)
|
|
|
|
{
|
|
|
|
osl::Directory dir(url);
|
|
|
|
switch (dir.open()) {
|
|
|
|
case osl::FileBase::E_None:
|
|
|
|
break;
|
|
|
|
case osl::FileBase::E_NOENT:
|
|
|
|
if (!recursive) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// fall through
|
|
|
|
default:
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot open directory ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
2009-07-30 17:24:11 +02:00
|
|
|
}
|
2009-08-04 10:36:31 +02:00
|
|
|
for (;;) {
|
|
|
|
osl::DirectoryItem i;
|
|
|
|
osl::FileBase::RC rc = dir.getNextItem(i, SAL_MAX_UINT32);
|
|
|
|
if (rc == osl::FileBase::E_NOENT) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (rc != osl::FileBase::E_None) {
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot iterate directory ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
|
|
|
}
|
|
|
|
osl::FileStatus stat(
|
|
|
|
FileStatusMask_Type | FileStatusMask_FileName |
|
|
|
|
FileStatusMask_FileURL);
|
|
|
|
if (i.getFileStatus(stat) != osl::FileBase::E_None) {
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot stat in directory ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
|
|
|
}
|
|
|
|
if (stat.getFileType() == osl::FileStatus::Directory) { //TODO: symlinks
|
|
|
|
parseFiles(layer, extension, parseFile, stat.getFileURL(), true);
|
|
|
|
} else {
|
|
|
|
rtl::OUString file(stat.getFileName());
|
|
|
|
if (file.getLength() >= extension.getLength() &&
|
|
|
|
file.match(extension, file.getLength() - extension.getLength()))
|
|
|
|
{
|
2009-08-07 10:25:27 +02:00
|
|
|
(*parseFile)(stat.getFileURL(), layer, &data_);
|
2009-08-04 10:36:31 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void Components::parseFileList(
|
2009-08-07 10:25:27 +02:00
|
|
|
int layer, void (* parseFile)(rtl::OUString const &, int, Data *),
|
2009-08-04 10:36:31 +02:00
|
|
|
rtl::OUString const & urls, rtl::Bootstrap const & ini)
|
|
|
|
{
|
|
|
|
for (sal_Int32 i = 0;;) {
|
|
|
|
rtl::OUString url(urls.getToken(0, ' ', i));
|
|
|
|
if (url.getLength() != 0) {
|
|
|
|
ini.expandMacrosFrom(url); //TODO: detect failure
|
2009-08-07 10:25:27 +02:00
|
|
|
(*parseFile)(url, layer, &data_);
|
2009-08-04 10:36:31 +02:00
|
|
|
}
|
|
|
|
if (i == -1) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-08-07 10:25:27 +02:00
|
|
|
void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
|
2009-07-22 14:41:57 +02:00
|
|
|
osl::Directory dir(url);
|
|
|
|
switch (dir.open()) {
|
|
|
|
case osl::FileBase::E_None:
|
|
|
|
break;
|
|
|
|
case osl::FileBase::E_NOENT:
|
2009-08-04 10:36:31 +02:00
|
|
|
return;
|
2009-07-22 14:41:57 +02:00
|
|
|
default:
|
2009-07-08 17:25:16 +02:00
|
|
|
throw css::uno::RuntimeException(
|
2009-07-22 14:41:57 +02:00
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot open directory ")) +
|
|
|
|
url),
|
2009-07-08 17:25:16 +02:00
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
|
|
|
}
|
2009-08-04 10:36:31 +02:00
|
|
|
UnresolvedList unres;
|
2009-08-18 10:00:07 +02:00
|
|
|
xml::XcdParser::Dependencies deps;
|
2009-07-22 14:41:57 +02:00
|
|
|
for (;;) {
|
|
|
|
osl::DirectoryItem i;
|
|
|
|
osl::FileBase::RC rc = dir.getNextItem(i, SAL_MAX_UINT32);
|
|
|
|
if (rc == osl::FileBase::E_NOENT) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (rc != osl::FileBase::E_None) {
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot iterate directory ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
|
|
|
}
|
|
|
|
osl::FileStatus stat(
|
|
|
|
FileStatusMask_Type | FileStatusMask_FileName |
|
|
|
|
FileStatusMask_FileURL);
|
|
|
|
if (i.getFileStatus(stat) != osl::FileBase::E_None) {
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM("cannot stat in directory ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
|
|
|
}
|
2009-08-04 10:36:31 +02:00
|
|
|
if (stat.getFileType() != osl::FileStatus::Directory) { //TODO: symlinks
|
2009-07-22 14:41:57 +02:00
|
|
|
rtl::OUString file(stat.getFileName());
|
2009-08-04 10:36:31 +02:00
|
|
|
if (file.getLength() >= RTL_CONSTASCII_LENGTH(".xcd") &&
|
|
|
|
file.matchAsciiL(
|
|
|
|
RTL_CONSTASCII_STRINGPARAM(".xcd"),
|
|
|
|
file.getLength() - RTL_CONSTASCII_LENGTH(".xcd")))
|
2009-07-22 14:41:57 +02:00
|
|
|
{
|
2009-08-04 10:36:31 +02:00
|
|
|
rtl::OUString name(
|
|
|
|
file.copy(
|
|
|
|
0, file.getLength() - RTL_CONSTASCII_LENGTH(".xcd")));
|
2009-08-18 10:00:07 +02:00
|
|
|
rtl::Reference< xml::Reader > reader(
|
|
|
|
new xml::Reader(
|
|
|
|
stat.getFileURL(),
|
|
|
|
new xml::XcdParser(layer, deps, &data_)));
|
|
|
|
if (reader->parse()) {
|
2009-08-04 10:36:31 +02:00
|
|
|
deps.insert(name);
|
|
|
|
} else {
|
2009-08-18 10:00:07 +02:00
|
|
|
unres.push_back(UnresolvedListItem(name, reader));
|
2009-08-04 10:36:31 +02:00
|
|
|
}
|
2009-07-13 14:54:09 +02:00
|
|
|
}
|
2009-07-08 17:25:16 +02:00
|
|
|
}
|
|
|
|
}
|
2009-08-04 10:36:31 +02:00
|
|
|
while (!unres.empty()) {
|
|
|
|
bool resolved = false;
|
|
|
|
for (UnresolvedList::iterator i(unres.begin()); i != unres.end();) {
|
2009-08-18 10:00:07 +02:00
|
|
|
if (i->reader->parse()) {
|
2009-08-04 10:36:31 +02:00
|
|
|
deps.insert(i->name);
|
2009-08-18 10:00:07 +02:00
|
|
|
unres.erase(i++);
|
2009-08-04 10:36:31 +02:00
|
|
|
resolved = true;
|
|
|
|
} else {
|
|
|
|
++i;
|
|
|
|
}
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
2009-08-04 10:36:31 +02:00
|
|
|
if (!resolved) {
|
|
|
|
throw css::uno::RuntimeException(
|
|
|
|
(rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
|
|
|
"xcd: unresolved dependencies in ")) +
|
|
|
|
url),
|
|
|
|
css::uno::Reference< css::uno::XInterface >());
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
void Components::parseXcsXcuLayer(int layer, rtl::OUString const & url) {
|
2009-08-07 10:25:27 +02:00
|
|
|
parseXcdFiles(layer, url);
|
2009-07-22 14:41:57 +02:00
|
|
|
parseFiles(
|
|
|
|
layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcs")),
|
2009-08-07 10:25:27 +02:00
|
|
|
&xml::parseXcsFile,
|
2009-07-22 14:41:57 +02:00
|
|
|
url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/schema")), false);
|
|
|
|
parseFiles(
|
|
|
|
layer + 1, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
|
2009-08-07 10:25:27 +02:00
|
|
|
&xml::parseXcuFile,
|
2009-07-22 14:41:57 +02:00
|
|
|
url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/data")), false);
|
2009-05-15 14:06:56 +02:00
|
|
|
}
|
|
|
|
|
2009-07-24 16:56:06 +02:00
|
|
|
void Components::parseXcsXcuIniLayer(int layer, rtl::OUString const & url) {
|
|
|
|
//TODO: rtl::Bootstrap::getFrom "first trie[s] to retrieve the value via the
|
|
|
|
// global function"
|
|
|
|
rtl::Bootstrap ini(url);
|
|
|
|
rtl::OUString urls;
|
|
|
|
if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SCHEMA")), urls))
|
|
|
|
{
|
2009-08-07 10:25:27 +02:00
|
|
|
parseFileList(layer, &xml::parseXcsFile, urls, ini);
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
|
|
|
if (ini.getFrom(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATA")), urls))
|
|
|
|
{
|
2009-08-07 10:25:27 +02:00
|
|
|
parseFileList(layer + 1, &xml::parseXcuFile, urls, ini);
|
2009-07-24 16:56:06 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
void Components::parseModuleLayer(int layer, rtl::OUString const & url) {
|
|
|
|
parseFiles(
|
|
|
|
layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
|
2009-08-07 10:25:27 +02:00
|
|
|
&xml::parseXcuFile, url, false);
|
2009-05-15 14:06:56 +02:00
|
|
|
}
|
|
|
|
|
2009-07-22 14:41:57 +02:00
|
|
|
void Components::parseResLayer(int layer, rtl::OUString const & url) {
|
2009-08-04 10:36:31 +02:00
|
|
|
rtl::OUString resUrl(
|
|
|
|
url + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/res")));
|
2009-08-07 10:25:27 +02:00
|
|
|
parseXcdFiles(layer, resUrl);
|
2009-07-22 14:41:57 +02:00
|
|
|
parseFiles(
|
|
|
|
layer, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".xcu")),
|
2009-08-07 10:25:27 +02:00
|
|
|
&xml::parseXcuFile, resUrl, false);
|
2009-05-15 14:06:56 +02:00
|
|
|
}
|
|
|
|
|
2009-07-08 17:25:16 +02:00
|
|
|
rtl::OUString Components::getModificationFileUrl() const {
|
|
|
|
return expand(
|
|
|
|
rtl::OUString(
|
|
|
|
RTL_CONSTASCII_USTRINGPARAM(
|
2009-08-27 17:03:38 +02:00
|
|
|
"${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE("bootstrap")
|
|
|
|
":UserInstallation}/user/registrymodifications.xcu")));
|
2009-07-08 17:25:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void Components::parseModificationLayer() {
|
2009-08-07 10:25:27 +02:00
|
|
|
xml::parseModFile(getModificationFileUrl(), &data_);
|
2009-07-02 14:21:36 +02:00
|
|
|
}
|
|
|
|
|
2009-05-15 14:06:56 +02:00
|
|
|
}
|