xref: /trunk/main/unotools/source/config/configmgr.cxx (revision 4879a985229a914ff3c48523f89343d3faf64b2c)
1b5088357SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b5088357SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b5088357SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b5088357SAndrew Rist  * distributed with this work for additional information
6b5088357SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b5088357SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b5088357SAndrew Rist  * "License"); you may not use this file except in compliance
9b5088357SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11b5088357SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13b5088357SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b5088357SAndrew Rist  * software distributed under the License is distributed on an
15b5088357SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b5088357SAndrew Rist  * KIND, either express or implied.  See the License for the
17b5088357SAndrew Rist  * specific language governing permissions and limitations
18b5088357SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20b5088357SAndrew Rist  *************************************************************/
21b5088357SAndrew Rist 
22b5088357SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_unotools.hxx"
26cdf0e10cSrcweir #include "unotools/configmgr.hxx"
27cdf0e10cSrcweir #include "unotools/configitem.hxx"
28cdf0e10cSrcweir #include "unotools/configpathes.hxx"
29cdf0e10cSrcweir #include <unotools/processfactory.hxx>
30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
31cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
32cdf0e10cSrcweir #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
33cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
34cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
35cdf0e10cSrcweir #include <osl/diagnose.h>
36cdf0e10cSrcweir #include <rtl/bootstrap.hxx>
37cdf0e10cSrcweir #include <rtl/instance.hxx>
38cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 0
39cdf0e10cSrcweir #include <rtl/strbuf.hxx>
40cdf0e10cSrcweir #endif
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include <list>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir //-----------------------------------------------------------------------------
45cdf0e10cSrcweir 
46cdf0e10cSrcweir using namespace utl;
47cdf0e10cSrcweir using namespace rtl;
48cdf0e10cSrcweir using namespace com::sun::star::uno;
49cdf0e10cSrcweir using namespace com::sun::star::lang;
50cdf0e10cSrcweir using namespace com::sun::star::beans;
51cdf0e10cSrcweir using namespace com::sun::star::container;
52cdf0e10cSrcweir 
53cdf0e10cSrcweir #define C2U(cChar) OUString::createFromAscii(cChar)
54cdf0e10cSrcweir #define UNISTRING(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
55cdf0e10cSrcweir 
56cdf0e10cSrcweir //-----------------------------------------------------------------------------
57cdf0e10cSrcweir const char* cConfigBaseURL = "/org.openoffice.";
58cdf0e10cSrcweir //const char* cConfigBaseURL = "/com.sun.star.";
59cdf0e10cSrcweir const char* cAccessSrvc = "com.sun.star.configuration.ConfigurationUpdateAccess";
60cdf0e10cSrcweir 
61cdf0e10cSrcweir namespace
62cdf0e10cSrcweir {
63cdf0e10cSrcweir     struct BrandName
64cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, BrandName > {};
65cdf0e10cSrcweir     struct ProductVersion
66cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, ProductVersion > {};
67cdf0e10cSrcweir     struct AboutBoxProductVersion
68cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, AboutBoxProductVersion > {};
69cdf0e10cSrcweir     struct OOOVendor
70cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, OOOVendor > {};
71cdf0e10cSrcweir     struct ProductExtension
72cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, ProductExtension > {};
73cdf0e10cSrcweir     struct XMLFileFormatName
74cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, XMLFileFormatName > {};
75cdf0e10cSrcweir     struct XMLFileFormatVersion
76cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, XMLFileFormatVersion > {};
77cdf0e10cSrcweir     struct WriterCompatibilityVersionOOo11
78cdf0e10cSrcweir         : public rtl::Static< ::rtl::OUString, WriterCompatibilityVersionOOo11 > {};
79cdf0e10cSrcweir     struct OpenSourceContext : public rtl::StaticWithInit< sal_Int32, OpenSourceContext >
80cdf0e10cSrcweir     {
81cdf0e10cSrcweir         sal_Int32 operator() () { return sal_Int32( -1 ); }
82cdf0e10cSrcweir     };
83cdf0e10cSrcweir 
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir //-----------------------------------------------------------------------------
87cdf0e10cSrcweir struct ConfigItemListEntry_Impl
88cdf0e10cSrcweir {
89cdf0e10cSrcweir     ConfigItem*                 pConfigItem;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir     ConfigItemListEntry_Impl(ConfigItem*    pItem ) :
92cdf0e10cSrcweir         pConfigItem(pItem){}
93cdf0e10cSrcweir };
94cdf0e10cSrcweir typedef std::list<ConfigItemListEntry_Impl> ConfigItemList;
95cdf0e10cSrcweir struct utl::ConfigMgr_Impl
96cdf0e10cSrcweir {
97cdf0e10cSrcweir     ConfigItemList                          aItemList;
98cdf0e10cSrcweir };
99cdf0e10cSrcweir 
100cdf0e10cSrcweir /* -----------------------------28.08.00 15:35--------------------------------
101cdf0e10cSrcweir 
102cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
103cdf0e10cSrcweir ConfigManager::ConfigManager() :
104cdf0e10cSrcweir     pMgrImpl(new utl::ConfigMgr_Impl)
105cdf0e10cSrcweir {
106cdf0e10cSrcweir     GetConfigurationProvider(); // attempt to create the provider early
107cdf0e10cSrcweir }
108cdf0e10cSrcweir /* -----------------------------17.11.00 13:51--------------------------------
109cdf0e10cSrcweir 
110cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
111cdf0e10cSrcweir ConfigManager::ConfigManager(Reference< XMultiServiceFactory > xConfigProv) :
112cdf0e10cSrcweir     xConfigurationProvider(xConfigProv),
113cdf0e10cSrcweir     pMgrImpl(new utl::ConfigMgr_Impl)
114cdf0e10cSrcweir {
115cdf0e10cSrcweir }
116cdf0e10cSrcweir /* -----------------------------28.08.00 15:35--------------------------------
117cdf0e10cSrcweir 
118cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
119cdf0e10cSrcweir ConfigManager::~ConfigManager()
120cdf0e10cSrcweir {
121cdf0e10cSrcweir     //check list content -> should be empty!
122cdf0e10cSrcweir     OSL_ENSURE(pMgrImpl->aItemList.empty(), "some ConfigItems are still alive");
123cdf0e10cSrcweir     if(!pMgrImpl->aItemList.empty())
124cdf0e10cSrcweir     {
125cdf0e10cSrcweir         ConfigItemList::iterator aListIter;
126cdf0e10cSrcweir         for(aListIter = pMgrImpl->aItemList.begin(); aListIter != pMgrImpl->aItemList.end(); ++aListIter)
127cdf0e10cSrcweir         {
128cdf0e10cSrcweir             ConfigItemListEntry_Impl& rEntry = *aListIter;
129cdf0e10cSrcweir             rEntry.pConfigItem->ReleaseConfigMgr();
130cdf0e10cSrcweir         }
131cdf0e10cSrcweir         pMgrImpl->aItemList.erase(pMgrImpl->aItemList.begin(), pMgrImpl->aItemList.end());
132cdf0e10cSrcweir     }
133cdf0e10cSrcweir     delete pMgrImpl;
134cdf0e10cSrcweir 
135cdf0e10cSrcweir }
136cdf0e10cSrcweir /* -----------------------------28.08.00 16:17--------------------------------
137cdf0e10cSrcweir 
138cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
139cdf0e10cSrcweir Reference< XMultiServiceFactory > ConfigManager::GetConfigurationProvider()
140cdf0e10cSrcweir {
141cdf0e10cSrcweir     if(!xConfigurationProvider.is())
142cdf0e10cSrcweir     {
143cdf0e10cSrcweir         Reference< XMultiServiceFactory > xMSF = ::utl::getProcessServiceFactory();
144cdf0e10cSrcweir         if ( xMSF.is() )
145cdf0e10cSrcweir         {
146cdf0e10cSrcweir             try
147cdf0e10cSrcweir             {
148cdf0e10cSrcweir                 xConfigurationProvider = Reference< XMultiServiceFactory >
149cdf0e10cSrcweir                     (xMSF->createInstance(
150cdf0e10cSrcweir                         C2U("com.sun.star.configuration.ConfigurationProvider")),
151cdf0e10cSrcweir                      UNO_QUERY);
152cdf0e10cSrcweir             }
153cdf0e10cSrcweir #ifdef DBG_UTIL
154cdf0e10cSrcweir     catch(Exception& rEx)
155cdf0e10cSrcweir     {
156cdf0e10cSrcweir         static sal_Bool bMessage = sal_True;
157cdf0e10cSrcweir         if(bMessage)
158cdf0e10cSrcweir         {
159cdf0e10cSrcweir             bMessage = sal_False;
160cdf0e10cSrcweir             OString sMsg("CreateInstance with arguments exception: ");
161cdf0e10cSrcweir             sMsg += OString(rEx.Message.getStr(),
162cdf0e10cSrcweir                         rEx.Message.getLength(),
163cdf0e10cSrcweir                         RTL_TEXTENCODING_ASCII_US);
164cdf0e10cSrcweir             OSL_ENSURE(sal_False, sMsg.getStr());
165cdf0e10cSrcweir         }
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir #else
168cdf0e10cSrcweir     catch(Exception&){}
169cdf0e10cSrcweir #endif
170cdf0e10cSrcweir         }
171cdf0e10cSrcweir     }
172cdf0e10cSrcweir     return xConfigurationProvider;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir /* -----------------------------03.12.02 -------------------------------------
175cdf0e10cSrcweir 
176cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
177cdf0e10cSrcweir namespace
178cdf0e10cSrcweir {
179cdf0e10cSrcweir     // helper to achieve exception - safe registration of a ConfigItem under construction
180cdf0e10cSrcweir     class RegisterConfigItemHelper // : Noncopyable
181cdf0e10cSrcweir     {
182cdf0e10cSrcweir         utl::ConfigManager & rCfgMgr;
183cdf0e10cSrcweir         utl::ConfigItem* pCfgItem;
184cdf0e10cSrcweir     public:
185cdf0e10cSrcweir         RegisterConfigItemHelper(utl::ConfigManager & rMgr, utl::ConfigItem& rCfgItem)
186cdf0e10cSrcweir         : rCfgMgr(rMgr)
187cdf0e10cSrcweir         , pCfgItem(&rCfgItem)
188cdf0e10cSrcweir         {
189cdf0e10cSrcweir             rCfgMgr.RegisterConfigItem(rCfgItem);
190cdf0e10cSrcweir         }
191cdf0e10cSrcweir 
192cdf0e10cSrcweir         ~RegisterConfigItemHelper()
193cdf0e10cSrcweir         {
194cdf0e10cSrcweir             if (pCfgItem) rCfgMgr.RemoveConfigItem(*pCfgItem);
195cdf0e10cSrcweir         }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir         void keep() { pCfgItem = 0; }
198cdf0e10cSrcweir     };
199cdf0e10cSrcweir }
200cdf0e10cSrcweir /* -----------------------------12.12.00 17:19--------------------------------
201cdf0e10cSrcweir 
202cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
203cdf0e10cSrcweir Reference< XMultiServiceFactory > ConfigManager::GetLocalConfigurationProvider()
204cdf0e10cSrcweir {
205cdf0e10cSrcweir     return GetConfigurationProvider();
206cdf0e10cSrcweir }
207cdf0e10cSrcweir /* -----------------------------29.08.00 12:35--------------------------------
208cdf0e10cSrcweir 
209cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
210cdf0e10cSrcweir Reference< XHierarchicalNameAccess > ConfigManager::AddConfigItem(utl::ConfigItem& rCfgItem)
211cdf0e10cSrcweir {
212cdf0e10cSrcweir     RegisterConfigItemHelper registeredItem(*this,rCfgItem);
213cdf0e10cSrcweir     Reference< XHierarchicalNameAccess > xTree = AcquireTree(rCfgItem);
214cdf0e10cSrcweir     registeredItem.keep();
215cdf0e10cSrcweir     return xTree;
216cdf0e10cSrcweir }
217cdf0e10cSrcweir /* -----------------------------21.06.01 12:20--------------------------------
218cdf0e10cSrcweir 
219cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
220cdf0e10cSrcweir void    ConfigManager::RegisterConfigItem(utl::ConfigItem& rCfgItem)
221cdf0e10cSrcweir {
222cdf0e10cSrcweir     ConfigItemList::iterator aListIter = pMgrImpl->aItemList.begin();
223cdf0e10cSrcweir #ifdef DBG_UTIL
224cdf0e10cSrcweir     for(aListIter = pMgrImpl->aItemList.begin(); aListIter != pMgrImpl->aItemList.end(); ++aListIter)
225cdf0e10cSrcweir     {
226cdf0e10cSrcweir         ConfigItemListEntry_Impl& rEntry = *aListIter;
227cdf0e10cSrcweir         if(rEntry.pConfigItem == &rCfgItem)
228cdf0e10cSrcweir             OSL_ENSURE(sal_False, "RegisterConfigItem: already inserted!");
229cdf0e10cSrcweir     }
230cdf0e10cSrcweir #endif
231cdf0e10cSrcweir     pMgrImpl->aItemList.insert(aListIter, ConfigItemListEntry_Impl(&rCfgItem));
232cdf0e10cSrcweir }
233cdf0e10cSrcweir /* -----------------------------21.06.01 12:20--------------------------------
234cdf0e10cSrcweir 
235cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
236cdf0e10cSrcweir Reference< XHierarchicalNameAccess> ConfigManager::AcquireTree(utl::ConfigItem& rCfgItem)
237cdf0e10cSrcweir {
238cdf0e10cSrcweir     ConfigItemList::iterator aListIter = pMgrImpl->aItemList.begin();
239cdf0e10cSrcweir #ifdef DBG_UTIL
240cdf0e10cSrcweir     sal_Bool bFound = sal_False;
241cdf0e10cSrcweir     for(aListIter = pMgrImpl->aItemList.begin(); aListIter != pMgrImpl->aItemList.end(); ++aListIter)
242cdf0e10cSrcweir     {
243cdf0e10cSrcweir         ConfigItemListEntry_Impl& rEntry = *aListIter;
244cdf0e10cSrcweir         if(rEntry.pConfigItem == &rCfgItem)
245cdf0e10cSrcweir         {
246cdf0e10cSrcweir             bFound = sal_True;
247cdf0e10cSrcweir             break;
248cdf0e10cSrcweir         }
249cdf0e10cSrcweir     }
250cdf0e10cSrcweir     OSL_ENSURE(bFound, "AcquireTree: ConfigItem unknown!");
251cdf0e10cSrcweir #endif
252cdf0e10cSrcweir     OUString sPath = C2U(cConfigBaseURL);
253cdf0e10cSrcweir     sPath += rCfgItem.GetSubTreeName();
254cdf0e10cSrcweir     Sequence< Any > aArgs(2);
255cdf0e10cSrcweir     Any* pArgs = aArgs.getArray();
256cdf0e10cSrcweir     PropertyValue aPath;
257cdf0e10cSrcweir     aPath.Name = C2U("nodepath");
258cdf0e10cSrcweir     aPath.Value <<= sPath;
259cdf0e10cSrcweir     pArgs[0] <<= aPath;
260cdf0e10cSrcweir     sal_Bool bLazy = 0 != (rCfgItem.GetMode()&CONFIG_MODE_DELAYED_UPDATE);
261cdf0e10cSrcweir     PropertyValue aUpdate;
262cdf0e10cSrcweir     aUpdate.Name = C2U("lazywrite");
263cdf0e10cSrcweir     aUpdate.Value.setValue(&bLazy, ::getBooleanCppuType());
264cdf0e10cSrcweir     pArgs[1] <<= aUpdate;
265cdf0e10cSrcweir 
266cdf0e10cSrcweir     // Initialize item with support for reading/writing more then one locales at same time!
267cdf0e10cSrcweir     // It's neccessary for creation of a complete configuration entry without changing office locale
268cdf0e10cSrcweir     // at runtime.
269cdf0e10cSrcweir     if((rCfgItem.GetMode() & CONFIG_MODE_ALL_LOCALES) == CONFIG_MODE_ALL_LOCALES)
270cdf0e10cSrcweir     {
271cdf0e10cSrcweir         sal_Int32 nCount = aArgs.getLength();
272cdf0e10cSrcweir         aArgs.realloc(nCount+1);
273cdf0e10cSrcweir 
274cdf0e10cSrcweir         PropertyValue aAllLocale;
275cdf0e10cSrcweir         aAllLocale.Name  =   C2U("locale");
276cdf0e10cSrcweir         aAllLocale.Value <<= C2U("*"     );
277cdf0e10cSrcweir         aArgs[nCount]    <<= aAllLocale;
278cdf0e10cSrcweir     }
279cdf0e10cSrcweir 
280cdf0e10cSrcweir     Reference< XMultiServiceFactory > xCfgProvider = GetConfigurationProvider();
281cdf0e10cSrcweir     Reference< XInterface > xIFace;
282cdf0e10cSrcweir     if(xCfgProvider.is())
283cdf0e10cSrcweir     {
284cdf0e10cSrcweir         try
285cdf0e10cSrcweir         {
286cdf0e10cSrcweir             xIFace = xCfgProvider->createInstanceWithArguments(
287cdf0e10cSrcweir                     C2U(cAccessSrvc),
288cdf0e10cSrcweir                     aArgs);
289cdf0e10cSrcweir         }
290cdf0e10cSrcweir         catch(Exception& rEx)
291cdf0e10cSrcweir         {
292cdf0e10cSrcweir             if (CONFIG_MODE_PROPAGATE_ERRORS & rCfgItem.GetMode())
293cdf0e10cSrcweir             {
294cdf0e10cSrcweir                 OSL_TRACE("ConfigItem: Propagating creation error: %s\n",
295cdf0e10cSrcweir                             OUStringToOString(rEx.Message,RTL_TEXTENCODING_ASCII_US).getStr());
296cdf0e10cSrcweir 
297cdf0e10cSrcweir                 throw;
298cdf0e10cSrcweir             }
299cdf0e10cSrcweir #ifdef DBG_UTIL
300cdf0e10cSrcweir             if(0 == (CONFIG_MODE_IGNORE_ERRORS & rCfgItem.GetMode()))
301cdf0e10cSrcweir             {
302cdf0e10cSrcweir                 OString sMsg("CreateInstance exception: ");
303cdf0e10cSrcweir                 sMsg += OString(rEx.Message.getStr(),
304cdf0e10cSrcweir                             rEx.Message.getLength(),
305cdf0e10cSrcweir                             RTL_TEXTENCODING_ASCII_US);
306cdf0e10cSrcweir                 OSL_ENSURE(sal_False, sMsg.getStr());
307cdf0e10cSrcweir             }
308cdf0e10cSrcweir #endif
309cdf0e10cSrcweir         }
310cdf0e10cSrcweir     }
311cdf0e10cSrcweir     return Reference<XHierarchicalNameAccess>(xIFace, UNO_QUERY);
312cdf0e10cSrcweir }
313cdf0e10cSrcweir /* -----------------------------29.08.00 12:35--------------------------------
314cdf0e10cSrcweir 
315cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
316cdf0e10cSrcweir void ConfigManager::RemoveConfigItem(utl::ConfigItem& rCfgItem)
317cdf0e10cSrcweir {
318cdf0e10cSrcweir     if( !pMgrImpl->aItemList.empty() )
319cdf0e10cSrcweir     {
320cdf0e10cSrcweir         ConfigItemList::iterator aListIter = pMgrImpl->aItemList.begin();
321cdf0e10cSrcweir         for(aListIter = pMgrImpl->aItemList.begin(); aListIter != pMgrImpl->aItemList.end(); ++aListIter)
322cdf0e10cSrcweir         {
323cdf0e10cSrcweir             ConfigItemListEntry_Impl& rEntry = *aListIter;
324cdf0e10cSrcweir             if(rEntry.pConfigItem == &rCfgItem)
325cdf0e10cSrcweir             {
326cdf0e10cSrcweir                 pMgrImpl->aItemList.erase(aListIter);
327cdf0e10cSrcweir                 break;
328cdf0e10cSrcweir             }
329cdf0e10cSrcweir         }
330cdf0e10cSrcweir     }
331cdf0e10cSrcweir }
332cdf0e10cSrcweir /* -----------------------------30.08.00 15:04--------------------------------
333cdf0e10cSrcweir 
334cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
335cdf0e10cSrcweir void ConfigManager::StoreConfigItems()
336cdf0e10cSrcweir {
337cdf0e10cSrcweir     if(!pMgrImpl->aItemList.empty())
338cdf0e10cSrcweir     {
339cdf0e10cSrcweir         ConfigItemList::iterator aListIter = pMgrImpl->aItemList.begin();
340cdf0e10cSrcweir         for(aListIter = pMgrImpl->aItemList.begin(); aListIter != pMgrImpl->aItemList.end(); ++aListIter)
341cdf0e10cSrcweir         {
342cdf0e10cSrcweir             ConfigItemListEntry_Impl& rEntry = *aListIter;
343cdf0e10cSrcweir             if(rEntry.pConfigItem->IsModified())
344cdf0e10cSrcweir             {
345cdf0e10cSrcweir                 rEntry.pConfigItem->Commit();
346cdf0e10cSrcweir                 rEntry.pConfigItem->ClearModified();
347cdf0e10cSrcweir             }
348cdf0e10cSrcweir         }
349cdf0e10cSrcweir     }
350cdf0e10cSrcweir }
351*4879a985SPedro Giffuni ConfigManager*   ConfigManager::pConfigManager = 0;
352cdf0e10cSrcweir /* -----------------------------07.09.00 11:06--------------------------------
353cdf0e10cSrcweir 
354cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
355cdf0e10cSrcweir ConfigManager*  ConfigManager::GetConfigManager()
356cdf0e10cSrcweir {
357*4879a985SPedro Giffuni     if(!pConfigManager)
358*4879a985SPedro Giffuni     {
359*4879a985SPedro Giffuni         pConfigManager = new ConfigManager();
360*4879a985SPedro Giffuni     }
361*4879a985SPedro Giffuni     return pConfigManager;
362*4879a985SPedro Giffuni }
363*4879a985SPedro Giffuni /* -----------------------------07.09.00 11:06--------------------------------
364*4879a985SPedro Giffuni 
365*4879a985SPedro Giffuni  ---------------------------------------------------------------------------*/
366*4879a985SPedro Giffuni void    ConfigManager::RemoveConfigManager()
367*4879a985SPedro Giffuni {
368*4879a985SPedro Giffuni     if(pConfigManager)
369*4879a985SPedro Giffuni     {
370*4879a985SPedro Giffuni         delete pConfigManager;
371*4879a985SPedro Giffuni         pConfigManager = 0;
372*4879a985SPedro Giffuni     }
373cdf0e10cSrcweir }
374cdf0e10cSrcweir /* -----------------------------08.09.00 13:22--------------------------------
375cdf0e10cSrcweir 
376cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
377cdf0e10cSrcweir rtl::OUString ConfigManager::GetConfigBaseURL()
378cdf0e10cSrcweir {
379cdf0e10cSrcweir     return C2U(cConfigBaseURL);
380cdf0e10cSrcweir }
381cdf0e10cSrcweir /* -----------------------------25.09.00 16:34--------------------------------
382cdf0e10cSrcweir 
383cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
384cdf0e10cSrcweir Any ConfigManager::GetDirectConfigProperty(ConfigProperty eProp)
385cdf0e10cSrcweir {
386cdf0e10cSrcweir     switch(eProp)
387cdf0e10cSrcweir     {
388cdf0e10cSrcweir         case INSTALLPATH:
389cdf0e10cSrcweir             OSL_ENSURE( false,
390cdf0e10cSrcweir                         "ConfigManager::GetDirectConfigProperty: "
391cdf0e10cSrcweir                         "INSTALLPATH no longer supported." );
392cdf0e10cSrcweir             return Any();
393cdf0e10cSrcweir         case USERINSTALLURL:
394cdf0e10cSrcweir             OSL_ENSURE( false,
395cdf0e10cSrcweir                         "ConfigManager::GetDirectConfigProperty: "
396cdf0e10cSrcweir                         "USERINSTALLURL no longer supported." );
397cdf0e10cSrcweir             return Any();
398cdf0e10cSrcweir         case OFFICEINSTALL:
399cdf0e10cSrcweir             OSL_ENSURE( false,
400cdf0e10cSrcweir                         "ConfigManager::GetDirectConfigProperty: "
401cdf0e10cSrcweir                         "OFFICEINSTALL no longer supported." );
402cdf0e10cSrcweir             return Any();
403cdf0e10cSrcweir         case OFFICEINSTALLURL:
404cdf0e10cSrcweir             OSL_ENSURE( false,
405cdf0e10cSrcweir                         "ConfigManager::GetDirectConfigProperty: "
406cdf0e10cSrcweir                         "OFFICEINSTALLURL no longer supported." );
407cdf0e10cSrcweir             return Any();
408cdf0e10cSrcweir         default:
409cdf0e10cSrcweir             break;
410cdf0e10cSrcweir     }
411cdf0e10cSrcweir 
412cdf0e10cSrcweir     Any aRet;
413cdf0e10cSrcweir     ::rtl::OUString &rBrandName = BrandName::get();
414cdf0e10cSrcweir     if ( eProp == PRODUCTNAME && rBrandName.getLength() )
415cdf0e10cSrcweir     {
416cdf0e10cSrcweir         aRet <<= rBrandName;
417cdf0e10cSrcweir         return aRet;
418cdf0e10cSrcweir     }
419cdf0e10cSrcweir 
420cdf0e10cSrcweir     rtl::OUString &rProductVersion = ProductVersion::get();
421cdf0e10cSrcweir     if ( eProp == PRODUCTVERSION && rProductVersion.getLength() )
422cdf0e10cSrcweir     {
423cdf0e10cSrcweir         aRet <<= rProductVersion;
424cdf0e10cSrcweir         return aRet;
425cdf0e10cSrcweir     }
426cdf0e10cSrcweir 
427cdf0e10cSrcweir     rtl::OUString &rAboutBoxProductVersion = AboutBoxProductVersion::get();
428cdf0e10cSrcweir     if ( eProp == ABOUTBOXPRODUCTVERSION && rAboutBoxProductVersion.getLength() )
429cdf0e10cSrcweir     {
430cdf0e10cSrcweir         aRet <<= rAboutBoxProductVersion;
431cdf0e10cSrcweir         return aRet;
432cdf0e10cSrcweir     }
433cdf0e10cSrcweir 
434cdf0e10cSrcweir     rtl::OUString &rOOOVendor = OOOVendor::get();
435cdf0e10cSrcweir     if ( eProp == OOOVENDOR && rOOOVendor.getLength() )
436cdf0e10cSrcweir     {
437cdf0e10cSrcweir         aRet <<= rOOOVendor;
438cdf0e10cSrcweir         return aRet;
439cdf0e10cSrcweir     }
440cdf0e10cSrcweir 
441cdf0e10cSrcweir 
442cdf0e10cSrcweir     rtl::OUString &rProductExtension = ProductExtension::get();
443cdf0e10cSrcweir     if ( eProp == PRODUCTEXTENSION && rProductExtension.getLength() )
444cdf0e10cSrcweir     {
445cdf0e10cSrcweir         aRet <<= rProductExtension;
446cdf0e10cSrcweir         return aRet;
447cdf0e10cSrcweir     }
448cdf0e10cSrcweir 
449cdf0e10cSrcweir     rtl::OUString &rXMLFileFormatName = XMLFileFormatName::get();
450cdf0e10cSrcweir     if ( eProp == PRODUCTXMLFILEFORMATNAME && rXMLFileFormatName.getLength() )
451cdf0e10cSrcweir     {
452cdf0e10cSrcweir         aRet <<= rXMLFileFormatName;
453cdf0e10cSrcweir         return aRet;
454cdf0e10cSrcweir     }
455cdf0e10cSrcweir 
456cdf0e10cSrcweir     rtl::OUString &rXMLFileFormatVersion = XMLFileFormatVersion::get();
457cdf0e10cSrcweir     if ( eProp == PRODUCTXMLFILEFORMATVERSION && rXMLFileFormatVersion.getLength() )
458cdf0e10cSrcweir     {
459cdf0e10cSrcweir         aRet <<= rXMLFileFormatVersion;
460cdf0e10cSrcweir         return aRet;
461cdf0e10cSrcweir     }
462cdf0e10cSrcweir 
463cdf0e10cSrcweir     sal_Int32 &rOpenSourceContext = OpenSourceContext::get();
464cdf0e10cSrcweir     if ( eProp == OPENSOURCECONTEXT && ( rOpenSourceContext >= 0 ) )
465cdf0e10cSrcweir     {
466cdf0e10cSrcweir         aRet <<= rOpenSourceContext;
467cdf0e10cSrcweir         return aRet;
468cdf0e10cSrcweir     }
469cdf0e10cSrcweir 
470cdf0e10cSrcweir     rtl::OUString &rWriterCompatibilityVersionOOo11 = WriterCompatibilityVersionOOo11::get();
471cdf0e10cSrcweir     if ( eProp == WRITERCOMPATIBILITYVERSIONOOO11 && rWriterCompatibilityVersionOOo11.getLength() )
472cdf0e10cSrcweir     {
473cdf0e10cSrcweir         aRet <<= rWriterCompatibilityVersionOOo11;
474cdf0e10cSrcweir         return aRet;
475cdf0e10cSrcweir     }
476cdf0e10cSrcweir 
477cdf0e10cSrcweir     if (eProp == PRODUCTEXTENSION) {
478cdf0e10cSrcweir         rtl::OUString name(
479cdf0e10cSrcweir             rtl::OUString(
480cdf0e10cSrcweir                 RTL_CONSTASCII_USTRINGPARAM(
481cdf0e10cSrcweir                     "${BRAND_BASE_DIR}/program/edition/edition.ini")));
482cdf0e10cSrcweir         rtl::Bootstrap::expandMacros(name);
483cdf0e10cSrcweir         if (rtl::Bootstrap(name).getFrom(
484cdf0e10cSrcweir                 rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EDITIONNAME")),
485cdf0e10cSrcweir                 rProductExtension))
486cdf0e10cSrcweir         {
487cdf0e10cSrcweir             return com::sun::star::uno::Any(rProductExtension);
488cdf0e10cSrcweir         }
489cdf0e10cSrcweir     }
490cdf0e10cSrcweir 
491cdf0e10cSrcweir     OUString sPath = C2U(cConfigBaseURL);
492cdf0e10cSrcweir     switch(eProp)
493cdf0e10cSrcweir     {
494cdf0e10cSrcweir         case LOCALE:                        sPath += C2U("Setup/L10N"); break;
495cdf0e10cSrcweir 
496cdf0e10cSrcweir         case PRODUCTNAME:
497cdf0e10cSrcweir         case PRODUCTVERSION:
498cdf0e10cSrcweir         case PRODUCTEXTENSION:
499cdf0e10cSrcweir         case PRODUCTXMLFILEFORMATNAME :
500cdf0e10cSrcweir         case PRODUCTXMLFILEFORMATVERSION:
501cdf0e10cSrcweir         case OPENSOURCECONTEXT:
502cdf0e10cSrcweir         case OOOVENDOR:
503cdf0e10cSrcweir         case ABOUTBOXPRODUCTVERSION:        sPath += C2U("Setup/Product"); break;
504cdf0e10cSrcweir 
505cdf0e10cSrcweir         case DEFAULTCURRENCY:               sPath += C2U("Setup/L10N"); break;
506cdf0e10cSrcweir 
507cdf0e10cSrcweir         case WRITERCOMPATIBILITYVERSIONOOO11:
508cdf0e10cSrcweir             sPath += C2U("Office.Compatibility/WriterCompatibilityVersion"); break;
509cdf0e10cSrcweir         default:
510cdf0e10cSrcweir             break;
511cdf0e10cSrcweir     }
512cdf0e10cSrcweir     Sequence< Any > aArgs(1);
513cdf0e10cSrcweir     aArgs[0] <<= sPath;
514cdf0e10cSrcweir     Reference< XMultiServiceFactory > xCfgProvider = GetConfigManager()->GetConfigurationProvider();
515cdf0e10cSrcweir     if(!xCfgProvider.is())
516cdf0e10cSrcweir         return aRet;
517cdf0e10cSrcweir     Reference< XInterface > xIFace;
518cdf0e10cSrcweir     try
519cdf0e10cSrcweir     {
520cdf0e10cSrcweir         xIFace = xCfgProvider->createInstanceWithArguments(
521cdf0e10cSrcweir                 C2U(cAccessSrvc),
522cdf0e10cSrcweir                 aArgs);
523cdf0e10cSrcweir 
524cdf0e10cSrcweir     }
525cdf0e10cSrcweir     catch(Exception&){}
526cdf0e10cSrcweir     Reference<XNameAccess> xDirectAccess(xIFace, UNO_QUERY);
527cdf0e10cSrcweir     if(xDirectAccess.is())
528cdf0e10cSrcweir     {
529cdf0e10cSrcweir         OUString sProperty;
530cdf0e10cSrcweir         switch(eProp)
531cdf0e10cSrcweir         {
532cdf0e10cSrcweir             case LOCALE:                            sProperty = C2U("ooLocale"); break;
533cdf0e10cSrcweir             case PRODUCTNAME:                       sProperty = C2U("ooName"); break;
534cdf0e10cSrcweir             case PRODUCTVERSION:                    sProperty = C2U("ooSetupVersion"); break;
535cdf0e10cSrcweir             case ABOUTBOXPRODUCTVERSION:            sProperty = C2U("ooSetupVersionAboutBox"); break;
536cdf0e10cSrcweir             case OOOVENDOR:                         sProperty = C2U("ooVendor"); break;
537cdf0e10cSrcweir             case PRODUCTEXTENSION:                  sProperty = C2U("ooSetupExtension"); break;
538cdf0e10cSrcweir             case PRODUCTXMLFILEFORMATNAME:          sProperty = C2U("ooXMLFileFormatName"); break;
539cdf0e10cSrcweir             case PRODUCTXMLFILEFORMATVERSION:       sProperty = C2U("ooXMLFileFormatVersion"); break;
540cdf0e10cSrcweir             case OPENSOURCECONTEXT:                 sProperty = C2U("ooOpenSourceContext"); break;
541cdf0e10cSrcweir             case DEFAULTCURRENCY:                   sProperty = C2U("ooSetupCurrency"); break;
542cdf0e10cSrcweir             case WRITERCOMPATIBILITYVERSIONOOO11:   sProperty = C2U("OOo11"); break;
543cdf0e10cSrcweir             default:
544cdf0e10cSrcweir                 break;
545cdf0e10cSrcweir         }
546cdf0e10cSrcweir         try
547cdf0e10cSrcweir         {
548cdf0e10cSrcweir             aRet = xDirectAccess->getByName(sProperty);
549cdf0e10cSrcweir         }
550cdf0e10cSrcweir         catch(Exception&)
551cdf0e10cSrcweir         {
552cdf0e10cSrcweir             #if OSL_DEBUG_LEVEL > 0
553cdf0e10cSrcweir             rtl::OStringBuffer aBuf(256);
554cdf0e10cSrcweir             aBuf.append( "ConfigManager::GetDirectConfigProperty: could not retrieve the property \"" );
555cdf0e10cSrcweir             aBuf.append( rtl::OUStringToOString( sProperty, RTL_TEXTENCODING_ASCII_US ) );
556cdf0e10cSrcweir             aBuf.append( "\" under \"" );
557cdf0e10cSrcweir             aBuf.append( rtl::OUStringToOString( sPath, RTL_TEXTENCODING_ASCII_US ) );
558cdf0e10cSrcweir             aBuf.append( "\" (caught an exception)!" );
559cdf0e10cSrcweir             OSL_ENSURE( sal_False, aBuf.getStr() );
560cdf0e10cSrcweir             #endif
561cdf0e10cSrcweir         }
562cdf0e10cSrcweir     }
563cdf0e10cSrcweir 
564cdf0e10cSrcweir     if ( eProp == PRODUCTNAME )
565cdf0e10cSrcweir         aRet >>= rBrandName;
566cdf0e10cSrcweir 
567cdf0e10cSrcweir     if ( eProp == PRODUCTXMLFILEFORMATNAME )
568cdf0e10cSrcweir         aRet >>= rXMLFileFormatName;
569cdf0e10cSrcweir 
570cdf0e10cSrcweir     if ( eProp == PRODUCTXMLFILEFORMATVERSION )
571cdf0e10cSrcweir         aRet >>= rXMLFileFormatVersion;
572cdf0e10cSrcweir 
573cdf0e10cSrcweir     if ( eProp == PRODUCTVERSION )
574cdf0e10cSrcweir         aRet >>= rProductVersion;
575cdf0e10cSrcweir 
576cdf0e10cSrcweir     if( eProp == OOOVENDOR )
577cdf0e10cSrcweir         aRet >>= rOOOVendor;
578cdf0e10cSrcweir 
579cdf0e10cSrcweir     if ( eProp == ABOUTBOXPRODUCTVERSION )
580cdf0e10cSrcweir     {
581cdf0e10cSrcweir         aRet >>= rAboutBoxProductVersion;
582cdf0e10cSrcweir         getBasisAboutBoxProductVersion( rAboutBoxProductVersion );
583cdf0e10cSrcweir         aRet <<= rAboutBoxProductVersion;
584cdf0e10cSrcweir     }
585cdf0e10cSrcweir 
586cdf0e10cSrcweir     if ( eProp == PRODUCTEXTENSION )
587cdf0e10cSrcweir         aRet >>= rProductExtension;
588cdf0e10cSrcweir 
589cdf0e10cSrcweir     if ( eProp == WRITERCOMPATIBILITYVERSIONOOO11 )
590cdf0e10cSrcweir         aRet >>= rWriterCompatibilityVersionOOo11;
591cdf0e10cSrcweir 
592cdf0e10cSrcweir     if ( eProp == OPENSOURCECONTEXT )
593cdf0e10cSrcweir         aRet >>= rOpenSourceContext;
594cdf0e10cSrcweir 
595cdf0e10cSrcweir     return aRet;
596cdf0e10cSrcweir }
597cdf0e10cSrcweir 
598cdf0e10cSrcweir /*---------------------------------------------------------------------------*/
599cdf0e10cSrcweir void ConfigManager::getBasisAboutBoxProductVersion( OUString& rVersion )
600cdf0e10cSrcweir {
601cdf0e10cSrcweir     rtl::OUString aPackageVersion = UNISTRING( "${$OOO_BASE_DIR/program/" SAL_CONFIGFILE("version") ":OOOPackageVersion}" );
602cdf0e10cSrcweir     rtl::Bootstrap::expandMacros( aPackageVersion );
603cdf0e10cSrcweir 
604cdf0e10cSrcweir     if ( aPackageVersion.getLength() )
605cdf0e10cSrcweir     {
606cdf0e10cSrcweir         sal_Int32 nTokIndex = 0;
607cdf0e10cSrcweir         rtl::OUString aVersionMinor = aPackageVersion.getToken( 1, '.', nTokIndex );
608cdf0e10cSrcweir         rtl::OUString aVersionMicro;
609cdf0e10cSrcweir 
610cdf0e10cSrcweir         if ( nTokIndex > 0 )
611cdf0e10cSrcweir             aVersionMicro = aPackageVersion.getToken( 0, '.', nTokIndex );
612cdf0e10cSrcweir 
613cdf0e10cSrcweir         if ( aVersionMinor.getLength() == 0 )
614cdf0e10cSrcweir             aVersionMinor = UNISTRING( "0" );
615cdf0e10cSrcweir         if ( aVersionMicro.getLength() == 0 )
616cdf0e10cSrcweir             aVersionMicro = UNISTRING( "0" );
617cdf0e10cSrcweir 
618cdf0e10cSrcweir         sal_Int32 nIndex = rVersion.indexOf( '.' );
619cdf0e10cSrcweir         if ( nIndex == -1 )
620cdf0e10cSrcweir         {
621cdf0e10cSrcweir             rVersion += UNISTRING( "." );
622cdf0e10cSrcweir             rVersion += aVersionMinor;
623cdf0e10cSrcweir         }
624cdf0e10cSrcweir         else
625cdf0e10cSrcweir         {
626cdf0e10cSrcweir             nIndex = rVersion.indexOf( '.', nIndex+1 );
627cdf0e10cSrcweir         }
628cdf0e10cSrcweir         if ( nIndex == -1 )
629cdf0e10cSrcweir         {
630cdf0e10cSrcweir             rVersion += UNISTRING( "." );
631cdf0e10cSrcweir             rVersion += aVersionMicro;
632cdf0e10cSrcweir         }
633cdf0e10cSrcweir         else
634cdf0e10cSrcweir         {
635cdf0e10cSrcweir             rVersion = rVersion.replaceAt( nIndex+1, rVersion.getLength()-nIndex-1, aVersionMicro );
636cdf0e10cSrcweir         }
637cdf0e10cSrcweir     }
638cdf0e10cSrcweir }
639cdf0e10cSrcweir 
640cdf0e10cSrcweir /* -----------------------------12.12.00 17:22--------------------------------
641cdf0e10cSrcweir 
642cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
643cdf0e10cSrcweir Reference< XHierarchicalNameAccess> ConfigManager::GetHierarchyAccess(const OUString& rFullPath)
644cdf0e10cSrcweir {
645cdf0e10cSrcweir     Sequence< Any > aArgs(1);
646cdf0e10cSrcweir     aArgs[0] <<= rFullPath;
647cdf0e10cSrcweir     Reference< XMultiServiceFactory > xCfgProvider = GetLocalConfigurationProvider();
648cdf0e10cSrcweir     Reference< XInterface > xIFace;
649cdf0e10cSrcweir     if(xCfgProvider.is())
650cdf0e10cSrcweir     {
651cdf0e10cSrcweir         try
652cdf0e10cSrcweir         {
653cdf0e10cSrcweir             xIFace = xCfgProvider->createInstanceWithArguments(
654cdf0e10cSrcweir                     C2U(cAccessSrvc),
655cdf0e10cSrcweir                     aArgs);
656cdf0e10cSrcweir         }
657cdf0e10cSrcweir #ifdef DBG_UTIL
658cdf0e10cSrcweir         catch(Exception& rEx)
659cdf0e10cSrcweir         {
660cdf0e10cSrcweir             OString sMsg("CreateInstance exception: ");
661cdf0e10cSrcweir             sMsg += OString(rEx.Message.getStr(),
662cdf0e10cSrcweir                         rEx.Message.getLength(),
663cdf0e10cSrcweir                         RTL_TEXTENCODING_ASCII_US);
664cdf0e10cSrcweir             OSL_ENSURE(sal_False, sMsg.getStr());
665cdf0e10cSrcweir         }
666cdf0e10cSrcweir #else
667cdf0e10cSrcweir         catch(Exception&){}
668cdf0e10cSrcweir #endif
669cdf0e10cSrcweir     }
670cdf0e10cSrcweir     return Reference<XHierarchicalNameAccess>(xIFace, UNO_QUERY);
671cdf0e10cSrcweir }
672cdf0e10cSrcweir /* -----------------------------12.12.00 17:17--------------------------------
673cdf0e10cSrcweir 
674cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
675cdf0e10cSrcweir Any ConfigManager::GetLocalProperty(const OUString& rProperty)
676cdf0e10cSrcweir {
677cdf0e10cSrcweir     OUString sPath = C2U(cConfigBaseURL);
678cdf0e10cSrcweir     sPath += rProperty;
679cdf0e10cSrcweir 
680cdf0e10cSrcweir     OUString sNode, sProperty;
681cdf0e10cSrcweir     OSL_VERIFY( splitLastFromConfigurationPath(sPath, sNode, sProperty) );
682cdf0e10cSrcweir 
683cdf0e10cSrcweir     Reference< XNameAccess> xAccess( GetHierarchyAccess(sNode), UNO_QUERY );
684cdf0e10cSrcweir     Any aRet;
685cdf0e10cSrcweir     try
686cdf0e10cSrcweir     {
687cdf0e10cSrcweir         if(xAccess.is())
688cdf0e10cSrcweir             aRet = xAccess->getByName(sProperty);
689cdf0e10cSrcweir     }
690cdf0e10cSrcweir #ifdef DBG_UTIL
691cdf0e10cSrcweir     catch(Exception& rEx)
692cdf0e10cSrcweir     {
693cdf0e10cSrcweir         OString sMsg("GetLocalProperty: ");
694cdf0e10cSrcweir         sMsg += OString(rEx.Message.getStr(),
695cdf0e10cSrcweir                     rEx.Message.getLength(),
696cdf0e10cSrcweir                     RTL_TEXTENCODING_ASCII_US);
697cdf0e10cSrcweir         OSL_ENSURE(sal_False, sMsg.getStr());
698cdf0e10cSrcweir     }
699cdf0e10cSrcweir #else
700cdf0e10cSrcweir     catch(Exception&){}
701cdf0e10cSrcweir #endif
702cdf0e10cSrcweir     return aRet;
703cdf0e10cSrcweir }
704cdf0e10cSrcweir /* -----------------------------12.12.00 17:17--------------------------------
705cdf0e10cSrcweir 
706cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
707cdf0e10cSrcweir void ConfigManager::PutLocalProperty(const OUString& rProperty, const Any& rValue)
708cdf0e10cSrcweir {
709cdf0e10cSrcweir     OUString sPath = C2U(cConfigBaseURL);
710cdf0e10cSrcweir     sPath += rProperty;
711cdf0e10cSrcweir 
712cdf0e10cSrcweir     OUString sNode, sProperty;
713cdf0e10cSrcweir     OSL_VERIFY( splitLastFromConfigurationPath(sPath, sNode, sProperty) );
714cdf0e10cSrcweir 
715cdf0e10cSrcweir     Reference<XNameReplace> xNodeReplace(GetHierarchyAccess(sNode), UNO_QUERY);
716cdf0e10cSrcweir     if(xNodeReplace.is())
717cdf0e10cSrcweir     {
718cdf0e10cSrcweir         try
719cdf0e10cSrcweir         {
720cdf0e10cSrcweir             xNodeReplace->replaceByName(sProperty, rValue);
721cdf0e10cSrcweir         }
722cdf0e10cSrcweir #ifdef DBG_UTIL
723cdf0e10cSrcweir         catch(Exception& rEx)
724cdf0e10cSrcweir         {
725cdf0e10cSrcweir             OString sMsg("PutLocalProperty: ");
726cdf0e10cSrcweir             sMsg += OString(rEx.Message.getStr(),
727cdf0e10cSrcweir                         rEx.Message.getLength(),
728cdf0e10cSrcweir                         RTL_TEXTENCODING_ASCII_US);
729cdf0e10cSrcweir             OSL_ENSURE(sal_False, sMsg.getStr());
730cdf0e10cSrcweir         }
731cdf0e10cSrcweir #else
732cdf0e10cSrcweir         catch(Exception& ){}
733cdf0e10cSrcweir #endif
734cdf0e10cSrcweir     }
735cdf0e10cSrcweir }
736cdf0e10cSrcweir /* -----------------------------13.12.00 08:47--------------------------------
737cdf0e10cSrcweir 
738cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
739cdf0e10cSrcweir sal_Bool    ConfigManager::IsLocalConfigProvider()
740cdf0e10cSrcweir {
741cdf0e10cSrcweir     return false;
742cdf0e10cSrcweir }
743cdf0e10cSrcweir 
744