/************************************************************** * * 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 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_extensions.hxx" #include "myconfigurationhelper.hxx" #include #include #include #include #include #include namespace css = ::com::sun::star; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::uno; using ::rtl::OUString; using ::rtl::OUStringBuffer; using ::std::vector; namespace { static const Sequence sequenceFromVector(const vector& vec) { Sequence result(vec.size()); for(size_t idx = 0; idx < vec.size(); ++idx) result[idx] = vec[idx]; return result; }; static const OUString noSuchElement(const OUString& path) { OUStringBuffer buf(256); buf.appendAscii("The requested path \""); buf.append(path); buf.appendAscii("\" does not exists."); return buf.makeStringAndClear(); }; } namespace oooimprovement { Reference MyConfigurationHelper::openConfig( const Reference xSMGR, const OUString& sPackage, sal_Int32 eMode) { Reference xConfigProvider( xSMGR->createInstance(OUString::createFromAscii("com.sun.star.configuration.ConfigurationProvider")), UNO_QUERY_THROW); vector lParams; css::beans::PropertyValue aParam; // set root path aParam.Name = OUString::createFromAscii("nodepath"); aParam.Value <<= sPackage; lParams.push_back(makeAny(aParam)); // enable all locales mode if ((eMode & MyConfigurationHelper::E_ALL_LOCALES)==MyConfigurationHelper::E_ALL_LOCALES) { aParam.Name = OUString::createFromAscii("locale"); aParam.Value <<= OUString::createFromAscii("*"); lParams.push_back(makeAny(aParam)); } // enable lazy writing sal_Bool bLazy = ((eMode & MyConfigurationHelper::E_LAZY_WRITE)==MyConfigurationHelper::E_LAZY_WRITE); aParam.Name = OUString::createFromAscii("lazywrite"); aParam.Value = makeAny(bLazy); lParams.push_back(makeAny(aParam)); // open it Reference xCFG; sal_Bool bReadOnly = ((eMode & MyConfigurationHelper::E_READONLY)==MyConfigurationHelper::E_READONLY); if (bReadOnly) xCFG = xConfigProvider->createInstanceWithArguments( OUString::createFromAscii("com.sun.star.configuration.ConfigurationAccess"), sequenceFromVector(lParams)); else xCFG = xConfigProvider->createInstanceWithArguments( OUString::createFromAscii("com.sun.star.configuration.ConfigurationUpdateAccess"), sequenceFromVector(lParams)); return xCFG; } Any MyConfigurationHelper::readRelativeKey( const Reference xCFG, const OUString& sRelPath, const OUString& sKey) { Reference xAccess(xCFG, UNO_QUERY_THROW); Reference xProps; xAccess->getByHierarchicalName(sRelPath) >>= xProps; if (!xProps.is()) throw css::container::NoSuchElementException( noSuchElement(sRelPath), Reference()); return xProps->getPropertyValue(sKey); } void MyConfigurationHelper::writeRelativeKey( const Reference xCFG, const OUString& sRelPath, const OUString& sKey, const Any& aValue) { Reference xAccess(xCFG, UNO_QUERY_THROW); Reference xProps; xAccess->getByHierarchicalName(sRelPath) >>= xProps; if (!xProps.is()) throw css::container::NoSuchElementException( noSuchElement(sRelPath), Reference()); xProps->setPropertyValue(sKey, aValue); } Any MyConfigurationHelper::readDirectKey( const Reference xSMGR, const OUString& sPackage, const OUString& sRelPath, const OUString& sKey, sal_Int32 eMode) { Reference xCFG = MyConfigurationHelper::openConfig(xSMGR, sPackage, eMode); return MyConfigurationHelper::readRelativeKey(xCFG, sRelPath, sKey); } void MyConfigurationHelper::writeDirectKey( const Reference xSMGR, const OUString& sPackage, const OUString& sRelPath, const OUString& sKey, const Any& aValue, sal_Int32 eMode) { Reference xCFG = MyConfigurationHelper::openConfig(xSMGR, sPackage, eMode); MyConfigurationHelper::writeRelativeKey(xCFG, sRelPath, sKey, aValue); MyConfigurationHelper::flush(xCFG); } void MyConfigurationHelper::flush(const Reference& xCFG) { Reference xBatch(xCFG, UNO_QUERY_THROW); xBatch->commitChanges(); } }