LibreOffice Module unotools (master) 1
configmgr.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <sal/config.h>
21
22#include <com/sun/star/beans/NamedValue.hpp>
23#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
24#include <com/sun/star/configuration/theDefaultProvider.hpp>
25#include <com/sun/star/lang/XMultiServiceFactory.hpp>
26#include <com/sun/star/uno/Any.hxx>
27#include <com/sun/star/uno/Reference.hxx>
28#include <com/sun/star/uno/Sequence.hxx>
30#include <officecfg/Setup.hxx>
31#include <rtl/ustring.hxx>
32#include <sal/log.hxx>
36
37namespace {
38
39class RegisterConfigItemHelper {
40public:
41 RegisterConfigItemHelper(
42 utl::ConfigManager & manager, utl::ConfigItem & item):
43 manager_(manager), item_(&item)
44 {
45 manager.registerConfigItem(item_);
46 }
47
48 ~RegisterConfigItemHelper() {
49 if (item_ != nullptr) {
50 manager_.removeConfigItem(*item_);
51 }
52 }
53
54 void keep() { item_ = nullptr; }
55
56private:
58 utl::ConfigItem * item_;
59
60 RegisterConfigItemHelper(const RegisterConfigItemHelper&) = delete;
61 RegisterConfigItemHelper& operator=(const RegisterConfigItemHelper&) = delete;
62};
63
64css::uno::Reference< css::lang::XMultiServiceFactory >
65getConfigurationProvider() {
67}
68
69}
70
73}
74
77}
78
81}
82
85}
86
89}
90
93}
94
97}
98
101}
102
105}
106
108 getConfigManager().doStoreConfigItems();
109}
110
112 static utl::ConfigManager theConfigManager;
113 return theConfigManager;
114}
115
116css::uno::Reference< css::container::XHierarchicalNameAccess >
118 css::uno::Sequence< css::uno::Any > args{ css::uno::Any(css::beans::NamedValue(
119 "nodepath",
120 css::uno::Any("/org.openoffice." + item.GetSubTreeName()))) };
121 if (item.GetMode() & ConfigItemMode::AllLocales) {
122 args.realloc(2);
123 args.getArray()[1] <<= css::beans::NamedValue("locale", css::uno::Any(OUString("*")));
124 }
125 return css::uno::Reference< css::container::XHierarchicalNameAccess >(
126 getConfigurationProvider()->createInstanceWithArguments(
127 "com.sun.star.configuration.ConfigurationUpdateAccess",
128 args),
129 css::uno::UNO_QUERY_THROW);
130}
131
132css::uno::Reference< css::container::XHierarchicalNameAccess >
133utl::ConfigManager::acquireTree(std::u16string_view rSubTreeName) {
134 css::uno::Sequence< css::uno::Any > args{ css::uno::Any(css::beans::NamedValue(
135 "nodepath",
136 css::uno::Any(OUString::Concat(u"/org.openoffice.") + rSubTreeName))) };
137 return css::uno::Reference< css::container::XHierarchicalNameAccess >(
138 getConfigurationProvider()->createInstanceWithArguments(
139 "com.sun.star.configuration.ConfigurationUpdateAccess",
140 args),
141 css::uno::UNO_QUERY_THROW);
142}
143
145
147 SAL_WARN_IF(!items_.empty(), "unotools.config", "ConfigManager not empty");
148}
149
150css::uno::Reference< css::container::XHierarchicalNameAccess >
152 RegisterConfigItemHelper reg(*this, item);
153 css::uno::Reference< css::container::XHierarchicalNameAccess > tree(
154 acquireTree(item));
155 reg.keep();
156 return tree;
157}
158
160 items_.erase(std::remove(items_.begin(), items_.end(), &item), items_.end());
161}
162
164 assert(item != nullptr);
165 items_.push_back(item);
166}
167
169 for (auto const& item : items_)
170 {
171 if (item->IsModified()) {
172 item->Commit();
173 item->ClearModified();
174 }
175 }
176}
177
178static bool bIsFuzzing = false;
179
180#if !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
182{
183 return bIsFuzzing;
184}
185#endif
186
188{
189 bIsFuzzing = true;
191}
192
193/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static void disable_lt_tag_parse()
const OUString & GetSubTreeName() const
Definition: configitem.hxx:175
bool IsModified() const
Definition: configitem.hxx:177
ConfigItemMode GetMode() const
Definition: configitem.hxx:181
SAL_DLLPRIVATE css::uno::Reference< css::container::XHierarchicalNameAccess > addConfigItem(utl::ConfigItem &item)
Definition: configmgr.cxx:151
void doStoreConfigItems()
Definition: configmgr.cxx:168
static OUString getWorkLocale()
Definition: configmgr.cxx:87
SAL_DLLPRIVATE void removeConfigItem(utl::ConfigItem &item)
Definition: configmgr.cxx:159
static OUString getProductVersion()
Definition: configmgr.cxx:99
static void storeConfigItems()
Definition: configmgr.cxx:107
SAL_DLLPRIVATE ConfigManager()
Definition: configmgr.cxx:144
static OUString getUILocale()
Definition: configmgr.cxx:83
static SAL_DLLPRIVATE css::uno::Reference< css::container::XHierarchicalNameAccess > acquireTree(utl::ConfigItem const &item)
Definition: configmgr.cxx:117
static OUString getAboutBoxProductVersionSuffix()
Definition: configmgr.cxx:75
static OUString getProductExtension()
Definition: configmgr.cxx:91
static OUString getAboutBoxProductVersion()
Definition: configmgr.cxx:71
static OUString getVendor()
Definition: configmgr.cxx:103
SAL_DLLPRIVATE void registerConfigItem(utl::ConfigItem *item)
Definition: configmgr.cxx:163
SAL_DLLPRIVATE ~ConfigManager()
Definition: configmgr.cxx:146
static OUString getDefaultCurrency()
Definition: configmgr.cxx:79
static OUString getProductName()
Definition: configmgr.cxx:95
static SAL_DLLPRIVATE ConfigManager & getConfigManager()
Definition: configmgr.cxx:111
static bool IsFuzzing()
Definition: configmgr.cxx:181
static void EnableFuzzing()
Definition: configmgr.cxx:187
rtl::Reference< ParseManager > manager
static bool bIsFuzzing
Definition: configmgr.cxx:178
float u
rtl::Reference< Manager > manager_
#define SAL_WARN_IF(condition, area, stream)
OUString get(TranslateId sContextAndId, const std::locale &loc)
Definition: resmgr.cxx:211
Reference< XComponentContext > getProcessComponentContext()
args