diff options
Diffstat (limited to 'configmgr/source/registry')
-rw-r--r-- | configmgr/source/registry/cfgregistrykey.cxx | 1479 | ||||
-rw-r--r-- | configmgr/source/registry/cfgregistrykey.hxx | 244 | ||||
-rw-r--r-- | configmgr/source/registry/configregistry.cxx | 376 | ||||
-rw-r--r-- | configmgr/source/registry/configregistry.hxx | 118 | ||||
-rw-r--r-- | configmgr/source/registry/makefile.mk | 48 |
5 files changed, 0 insertions, 2265 deletions
diff --git a/configmgr/source/registry/cfgregistrykey.cxx b/configmgr/source/registry/cfgregistrykey.cxx deleted file mode 100644 index 5a190dc7ff93..000000000000 --- a/configmgr/source/registry/cfgregistrykey.cxx +++ /dev/null @@ -1,1479 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_configmgr.hxx" -#include "cfgregistrykey.hxx" -#include "datalock.hxx" -#include "typeconverter.hxx" -#include <osl/diagnose.h> -#include <cppuhelper/extract.hxx> -#include <com/sun/star/container/XNameContainer.hpp> -#include <com/sun/star/container/XNamed.hpp> -#include <com/sun/star/container/XChild.hpp> -#include <com/sun/star/container/XHierarchicalName.hpp> -#include <com/sun/star/lang/XSingleServiceFactory.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/beans/Property.hpp> -#include <com/sun/star/beans/PropertyAttribute.hpp> -#include <com/sun/star/beans/XProperty.hpp> -#include <com/sun/star/util/XStringEscape.hpp> -#include <com/sun/star/uno/Sequence.hxx> -#include <typelib/typedescription.hxx> - -#include <limits> - -#define THISREF() static_cast< ::cppu::OWeakObject* >(this) -#define UNISTRING(c) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(c) ) - -//.......................................................................... -namespace configmgr -{ -//.......................................................................... - -//-------------------------------------------------------------------------- -namespace { - inline - com::sun::star::uno::Type getBinaryDataType() - { - com::sun::star::uno::Sequence<sal_Int8> const * const p= 0; - return ::getCppuType(p); - } - inline - bool isAscii(sal_Unicode ch) - { - return 0 < ch && ch < 128; - } - inline - bool isAscii(sal_Unicode const * ps, sal_Int32 nLen ) - { - for (int i= 0; i< nLen; ++i) - if ( !isAscii( ps[i] ) ) - return false; - return true; - } - inline - bool isAscii(rtl::OUString const& str) - { - return isAscii(str.getStr(),str.getLength()); - } - inline - bool isAscii(com::sun::star::uno::Sequence< rtl::OUString > const& strList) - { - for (int i= 0; i< strList.getLength(); ++i) - if ( !isAscii( strList[i] ) ) - return false; - return true; - } -} -// temporary helper -inline static void checkNullable() {} - -//========================================================================== -//= OConfigurationRegistryKey -//========================================================================== - -static -rtl::OUString getNodeName(const com::sun::star::uno::Reference< com::sun::star::container::XNameAccess >& _xNode) -{ - com::sun::star::uno::Reference< com::sun::star::container::XNamed > xName( _xNode, com::sun::star::uno::UNO_QUERY ); - if (xName.is()) - return xName->getName(); - - OSL_ENSURE( !_xNode.is(), "Cannot get name of node"); - return rtl::OUString(); -} -//-------------------------------------------------------------------------- - -static bool splitPath(const rtl::OUString& _sPath, rtl::OUString& _rsParentPath, rtl::OUString& _rsLocalName); -//-------------------------------------------------------------------------- - -OConfigurationRegistryKey::OConfigurationRegistryKey - (const com::sun::star::uno::Reference< com::sun::star::container::XNameAccess >& _rxRootNode - ,sal_Bool _bWriteable - ,SubtreeRoot - ) - :m_bReadOnly(!_bWriteable) - ,m_xNode(_rxRootNode) - ,m_xParentNode() - ,m_sLocalName() // this will be treated as root - maybe use hierarchical name () -{ - OSL_ENSURE(m_xNode.is(), "OConfigurationRegistryKey::OConfigurationRegistryKey : invalid config node param !"); -} - -//-------------------------------------------------------------------------- -OConfigurationRegistryKey::OConfigurationRegistryKey - (const com::sun::star::uno::Reference< com::sun::star::container::XNameAccess >& _rxNode - ,sal_Bool _bWriteable - ) - :m_bReadOnly(!_bWriteable) - ,m_xNode(_rxNode) - ,m_xParentNode() - ,m_sLocalName( getNodeName(_rxNode) ) // this will not be treated as root -{ - OSL_ENSURE(m_xNode.is(), "OConfigurationRegistryKey::OConfigurationRegistryKey : invalid config node param !"); -} - -//-------------------------------------------------------------------------- -OConfigurationRegistryKey::OConfigurationRegistryKey( - com::sun::star::uno::Any _rCurrentValue, - const com::sun::star::uno::Reference< com::sun::star::container::XNameAccess >& _rxParentNode, - const ::rtl::OUString& _rLocalName, - sal_Bool _bWriteable) - :m_bReadOnly(!_bWriteable) - ,m_xNode() - ,m_xParentNode(_rxParentNode) - ,m_sLocalName(_rLocalName) -{ - OSL_ENSURE(m_xParentNode.is(), "OConfigurationRegistryKey::OConfigurationRegistryKey : invalid parent node param !"); - OSL_ENSURE(m_sLocalName.getLength(), "OConfigurationRegistryKey::OConfigurationRegistryKey : invalid relative name !"); - OSL_ENSURE(m_xParentNode->hasByName( m_sLocalName ), "OConfigurationRegistryKey::OConfigurationRegistryKey : key not found in parent node !" ); // - OSL_ENSURE(m_xParentNode->getByName( m_sLocalName ) == _rCurrentValue, "OConfigurationRegistryKey::OConfigurationRegistryKey : wrong value parameter !" ); // - - _rCurrentValue >>= m_xNode; // we don't care if that fails -} -//-------------------------------------------------------------------------- - -com::sun::star::uno::Reference<com::sun::star::beans::XPropertySetInfo> OConfigurationRegistryKey::implGetParentPropertyInfo() throw(com::sun::star::uno::RuntimeException) -{ - if (!m_xParentNode.is()) - { - com::sun::star::uno::Reference< com::sun::star::container::XChild > xChild(m_xNode, com::sun::star::uno::UNO_QUERY); - if (xChild.is()) - m_xParentNode = m_xParentNode.query(xChild->getParent()); - } - - com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > xParentInfo; // the result - - com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > xParentProperties(m_xParentNode, com::sun::star::uno::UNO_QUERY); - if (xParentProperties.is()) - { - xParentInfo = xParentProperties->getPropertySetInfo(); - if (xParentInfo.is() && !xParentInfo->hasPropertyByName(m_sLocalName)) - { - OSL_ENSURE(false, "OConfigurationRegistryKey: This key is unknown in the parent node's PropertySetInfo !"); - xParentInfo.clear(); // this key is unknow, so don't return the info - } - } - - return xParentInfo; -} -//-------------------------------------------------------------------------- - -static -sal_Bool isNodeReadOnly(com::sun::star::uno::Reference< com::sun::star::uno::XInterface > const& _xNode) throw(com::sun::star::uno::RuntimeException) -{ - OSL_ASSERT( _xNode.is() ); - - com::sun::star::uno::Reference< com::sun::star::beans::XProperty > xProperty(_xNode, com::sun::star::uno::UNO_QUERY); - if (xProperty.is()) - { - com::sun::star::beans::Property aProperty = xProperty->getAsProperty(); - - return (aProperty.Attributes & com::sun::star::beans::PropertyAttribute::READONLY) != 0; - } - - com::sun::star::uno::Reference< com::sun::star::lang::XServiceInfo > xServiceInfo( _xNode, com::sun::star::uno::UNO_QUERY ); - if (xServiceInfo.is()) - { - // does it announce update capability ? - if (xServiceInfo->supportsService(UNISTRING("com.sun.star.configuration.ConfigurationUpdateAccess"))) - return false; - - // else does it announce the expected service at all ? - else if (xServiceInfo->supportsService(UNISTRING("com.sun.star.configuration.ConfigurationAccess"))) - return true; - } - - // no XProperty, no (meaningful) ServiceInfo - what can we do - return false; -} - -//-------------------------------------------------------------------------- - -sal_Bool OConfigurationRegistryKey::implIsReadOnly() throw (com::sun::star::uno::RuntimeException) -{ - sal_Bool bResult = m_bReadOnly;; - - // do checks only if this was requested to be writable - if (m_bReadOnly) - { - // nothing to check - } - - // try to ask the node itself - else if (m_xNode.is()) - { - bResult = m_bReadOnly = isNodeReadOnly( m_xNode ); - } - - // else use the parent - else if (m_xParentNode.is()) - { - com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > xParentInfo = implGetParentPropertyInfo(); - - if (xParentInfo.is()) - { - com::sun::star::beans::Property aProperty = xParentInfo->getPropertyByName(m_sLocalName); - - bResult = m_bReadOnly = ((aProperty.Attributes & com::sun::star::beans::PropertyAttribute::READONLY) != 0); - } - else - { - // no property info about this key ? - check if the parent itself is writable - - // NOTE: do not set m_bReadOnly here, as we haven't really found out about this object - bResult = isNodeReadOnly( m_xParentNode ); - } - } - else - { - // no data at all - OSL_ENSURE(false, "implIsReadOnly called for invalid object"); - bResult = true; // no object is certainly not writable ;-) - } - - return bResult; -} -//-------------------------------------------------------------------------- - -sal_Bool OConfigurationRegistryKey::implEnsureNode() throw (com::sun::star::registry::InvalidRegistryException,com::sun::star::uno::RuntimeException) -{ - if (!m_xNode.is()) - { - OSL_ENSURE( m_xParentNode.is(), "implEnsureNode called for invalid registry key"); - if (m_xParentNode.is()) - { - try - { - com::sun::star::uno::Any aNode = m_xParentNode->getByName( m_sLocalName ); - - if ( !(aNode >>= m_xNode) ) - OSL_ENSURE( ! (aNode.hasValue() && aNode.getValueTypeClass() == com::sun::star::uno::TypeClass_INTERFACE), - "OConfigurationRegistryKey: Node object does not implement expected interface"); - } - catch (com::sun::star::container::NoSuchElementException& e) - { - m_xParentNode.clear(); - - rtl::OUString sMessage = UNISTRING("Invalid OConfigurationRegistryKey. The node \""); - sMessage += m_sLocalName; - sMessage += UNISTRING("\" was not found in the parent. Parent error message: \n"); - sMessage += e.Message; - - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - } - } - return m_xNode.is(); -} -//-------------------------------------------------------------------------- - -com::sun::star::uno::Type OConfigurationRegistryKey::implGetUnoType() throw (com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Type aType; - if (m_xNode.is()) - { - aType = getCppuType(&m_xNode); // Its just an interface type - } - else if (m_xParentNode.is()) - { - - com::sun::star::uno::Reference< com::sun::star::beans::XPropertySetInfo > xParentInfo = implGetParentPropertyInfo(); - if (xParentInfo.is()) - { - aType = xParentInfo->getPropertyByName( m_sLocalName ).Type; - } - else - { - aType = m_xParentNode->getElementType(); - } - } - else - { - OSL_ASSERT( aType.getTypeClass() == com::sun::star::uno::TypeClass_VOID ); - OSL_ENSURE( false, "implGetUnoType called for invalid registry key"); - } - return aType; -} -//-------------------------------------------------------------------------- - -sal_Bool OConfigurationRegistryKey::implEnsureValue() throw (com::sun::star::uno::RuntimeException) -{ - if (m_xNode.is()) - return false; - - OSL_ENSURE( m_xParentNode.is(), "implEnsureValue called for invalid registry key"); - if (!m_xParentNode.is()) - return false; - - switch (implGetUnoType().getTypeClass()) - { - case com::sun::star::uno::TypeClass_INTERFACE: - return false; - - case com::sun::star::uno::TypeClass_BYTE: - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - case com::sun::star::uno::TypeClass_FLOAT: - OSL_ENSURE(false, "Unexpected (UNSIGNED INTERGRAL or FLOAT) type found for configuration node"); - - case com::sun::star::uno::TypeClass_STRING: - case com::sun::star::uno::TypeClass_BOOLEAN: - case com::sun::star::uno::TypeClass_SHORT: - case com::sun::star::uno::TypeClass_LONG: - case com::sun::star::uno::TypeClass_HYPER: - case com::sun::star::uno::TypeClass_DOUBLE: - case com::sun::star::uno::TypeClass_SEQUENCE: - return true; - - case com::sun::star::uno::TypeClass_ANY: - return true; - - case com::sun::star::uno::TypeClass_VOID: - OSL_ENSURE(false, "OConfigurationRegistryKey: Key does not exist or has VOID type"); - return false; - - default: - OSL_ENSURE(false, "OConfigurationRegistryKey: Key has unexpected UNO type (class)"); - return false; - } -} -//-------------------------------------------------------------------------- - -sal_Bool OConfigurationRegistryKey::implIsValid() throw () -{ - return m_xNode.is() || (m_xParentNode.is() && m_xParentNode->hasByName( m_sLocalName ) ); -} -//-------------------------------------------------------------------------- - -void OConfigurationRegistryKey::checkValid(KEY_ACCESS_TYPE _eIntentedAccess) throw (com::sun::star::registry::InvalidRegistryException,com::sun::star::uno::RuntimeException) -{ - if (!implIsValid()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The registry is not bound to a configuration node anymore."), THISREF()); - // "anymore", because at the moment the ctor was called it probably was bound .... - - switch (_eIntentedAccess) - { - case KAT_VALUE_WRITE: - if (implIsReadOnly()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This configuration node is not writeable."), THISREF()); - - // !!! NO !!! BREAK !!! - case KAT_VALUE: - if (m_xNode.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This configuration node is not a value, but an internal container."), THISREF()); - - if (!m_xParentNode.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This configuration node is invalid. It has no parent."), THISREF()); - - if (!implEnsureValue()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This configuration does not have a legal value type."), THISREF()); - break; - - case KAT_CHILD: - if (!implEnsureNode()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This configuration node does not have children, it is a value node."), THISREF()); - break; - - case KAT_META: - break; - } -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Any OConfigurationRegistryKey::implCreateDefaultElement(com::sun::star::uno::Type const& _aValueType) throw (com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aReturn; - - switch (_aValueType.getTypeClass()) - { - case com::sun::star::uno::TypeClass_STRING: - aReturn <<= rtl::OUString(); - break; - - // we don't distinguish between the different integer types or boolean - // (the RegistryKeyType is not granular enough), - // but we can't handle them all the same way here - case com::sun::star::uno::TypeClass_BYTE: - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_SHORT: - aReturn <<= (sal_Int16)0; - break; - - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - case com::sun::star::uno::TypeClass_LONG: - aReturn <<= (sal_Int32)0; - break; - - case com::sun::star::uno::TypeClass_BOOLEAN: - aReturn <<= sal_Bool(false); - break; - - // we cannot really handle 64-bit ints in the registry (but here we can) - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - case com::sun::star::uno::TypeClass_HYPER: - OSL_ENSURE(false, "Warning: cannot handle 64-bit values correctly in registry"); - aReturn <<= (sal_Int64)0; - break; - - // we cannot really handle doubles in the registry (but here we can) - case com::sun::star::uno::TypeClass_FLOAT: - case com::sun::star::uno::TypeClass_DOUBLE: - OSL_ENSURE(false, "Warning: cannot handle DOUBLE correctly in registry"); - aReturn <<= (double)0; - break; - - // we really want to leave an Any as NULL - hopefully this is acceptable to the set - case com::sun::star::uno::TypeClass_ANY: - break; - - case com::sun::star::uno::TypeClass_SEQUENCE: - if (_aValueType == getBinaryDataType()) - aReturn <<= com::sun::star::uno::Sequence< sal_Int8 >(); - - else - { - com::sun::star::uno::Type aElementType = getSequenceElementType(_aValueType); - switch (aElementType.getTypeClass()) - { - case com::sun::star::uno::TypeClass_STRING: - aReturn <<= com::sun::star::uno::Sequence< rtl::OUString >(); - break; - - case com::sun::star::uno::TypeClass_BYTE: - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_SHORT: - aReturn <<= com::sun::star::uno::Sequence< sal_Int16 >(); - break; - - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - case com::sun::star::uno::TypeClass_LONG: - aReturn <<= com::sun::star::uno::Sequence< sal_Int32 >(); - break; - - case com::sun::star::uno::TypeClass_BOOLEAN: - aReturn <<= com::sun::star::uno::Sequence< sal_Bool >(); - break; - - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - case com::sun::star::uno::TypeClass_HYPER: - aReturn <<= com::sun::star::uno::Sequence< sal_Int64 >(); - break; - - case com::sun::star::uno::TypeClass_FLOAT: - case com::sun::star::uno::TypeClass_DOUBLE: - aReturn <<= com::sun::star::uno::Sequence< double >(); - break; - - case com::sun::star::uno::TypeClass_SEQUENCE: - OSL_ENSURE(false, "Warning: cannot handle Sequence< BINARY > correctly in registry"); - if (aElementType == getBinaryDataType()) - { - OSL_ENSURE(false, "Warning: cannot handle Sequence< BINARY > correctly in registry"); - aReturn <<= com::sun::star::uno::Sequence< com::sun::star::uno::Sequence< sal_Int8 > >(); - break; - } - - // else FALL THRU to default - default: - OSL_ENSURE(false, "Unexpected sequence element type for configuration node - returning NULL"); - // throw here ?? - break; - } - } - break; - - case com::sun::star::uno::TypeClass_INTERFACE: - OSL_ENSURE(false, "Invalid call to OConfigurationRegistryKey::implCreateDefaultElement. Inner nodes must be created by a factory"); - break; - - default: - OSL_ENSURE(false, "Unexpected value type for configuration node - returning NULL"); - // throw here ?? - break; - } - - OSL_ENSURE( aReturn.getValueType() == _aValueType || (_aValueType.getTypeClass() == com::sun::star::uno::TypeClass_ANY && !aReturn.hasValue()), - "Warning: Unexpected data type found in Registry - returning similar value or NULL"); - return aReturn; -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Any OConfigurationRegistryKey::implGetDescendant(const rtl::OUString& _rDescendantName) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aElementReturn; - - try - { - if (!m_xNode.is()) - { - // implEnsureNode should have been called before this method - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getDescendant : invalid call !"); - - // this method should not be called if the object does not represent a container node ... - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("invalid object."), THISREF()); - } - - try - { - // look for a local member first - aElementReturn = m_xNode->getByName(_rDescendantName); - } - catch(com::sun::star::container::NoSuchElementException&) - { - // is it a (possibly) hierarchical name ? - if ( _rDescendantName.indexOf('/') <0 ) throw; - - // Yes, so try deep access - com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > xDeepAccess( m_xNode, com::sun::star::uno::UNO_QUERY ); - if (!xDeepAccess.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Nested element access not supported by this node."), THISREF()); - - aElementReturn = xDeepAccess->getByHierarchicalName(_rDescendantName); - } - } - catch(com::sun::star::container::NoSuchElementException&) - { // not allowed to leave the method, wrap it - rtl::OUString sMessage(UNISTRING("There is no element named ")); - sMessage += _rDescendantName; - sMessage += UNISTRING("."); - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::lang::WrappedTargetException& wte) - { // allowed to be thrown by XNameAccess::getByName, but not allowed to leave this method - rtl::OUString sMessage(UNISTRING("The configuration node could not provide an element for ")); - sMessage += _rDescendantName; - sMessage += UNISTRING(". Original Error: "); - sMessage += wte.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - - return aElementReturn; -} - -//-------------------------------------------------------------------------- -void OConfigurationRegistryKey::implSetValue(const com::sun::star::uno::Any& _rValue) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_VALUE_WRITE); - - // one possible interface - com::sun::star::uno::Reference< com::sun::star::container::XNameReplace > xParentValueAccess(m_xParentNode, com::sun::star::uno::UNO_QUERY); - if (xParentValueAccess.is()) - { - try - { - xParentValueAccess->replaceByName(m_sLocalName, _rValue); - } - catch(com::sun::star::lang::IllegalArgumentException& iae) - { - rtl::OUString sMessage = UNISTRING("Unable to replace the old value. The configuration node threw an "); - sMessage += UNISTRING("IllegalArgumentException: "); - sMessage += iae.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::container::NoSuchElementException& nse) - { - OSL_ENSURE(false, "OConfigurationRegistryKey::writeValueNode : a NoSuchElementException should be impossible !"); - - rtl::OUString sMessage = UNISTRING("Unable to replace the old value. The configuration node threw an "); - sMessage += UNISTRING("NoSuchElementException: "); - sMessage += nse.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::lang::WrappedTargetException& wte) - { - rtl::OUString sMessage = UNISTRING("Unable to replace the old value. The configuration node threw an "); - sMessage += UNISTRING("WrappedTargetException: "); - sMessage += wte.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - return; - } - - // not found - try other interface - com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > xParentPropertySet(m_xParentNode, com::sun::star::uno::UNO_QUERY); - if (xParentPropertySet.is()) - { - try - { - xParentPropertySet->setPropertyValue(m_sLocalName, _rValue); - } - catch(com::sun::star::lang::IllegalArgumentException& iae) - { - rtl::OUString sMessage = UNISTRING("Unable to set a new value. The configuration node threw an "); - sMessage += UNISTRING("IllegalArgumentException: "); - sMessage += iae.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::beans::UnknownPropertyException& upe) - { - OSL_ENSURE(false, "OConfigurationRegistryKey::writeValueNode : a UnknownPropertyException should be impossible !"); - - rtl::OUString sMessage = UNISTRING("Unable to set a new value. The configuration node threw an "); - sMessage += UNISTRING("UnknownPropertyException: "); - sMessage += upe.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::beans::PropertyVetoException& pve) - { - rtl::OUString sMessage = UNISTRING("Unable to set a new value. The configuration node threw an "); - sMessage += UNISTRING("PropertyVetoException: "); - sMessage += pve.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - catch(com::sun::star::lang::WrappedTargetException& wte) - { - rtl::OUString sMessage = UNISTRING("Unable to set a new value. The configuration node threw an "); - sMessage += UNISTRING("WrappedTargetException: "); - sMessage += wte.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - return; - } - - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("No interface found on parent node for writing to configuration value node."), THISREF()); -} - -//-------------------------------------------------------------------------- -::rtl::OUString SAL_CALL OConfigurationRegistryKey::getKeyName() throw(com::sun::star::uno::RuntimeException) -{ - return m_sLocalName; -} - -//-------------------------------------------------------------------------- -sal_Bool SAL_CALL OConfigurationRegistryKey::isReadOnly() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - OSL_ASSERT(UnoApiLock::isHeld()); - checkValid(KAT_META); - return m_bReadOnly; -} - -//-------------------------------------------------------------------------- -sal_Bool SAL_CALL OConfigurationRegistryKey::isValid() throw(com::sun::star::uno::RuntimeException) -{ - OSL_ASSERT(UnoApiLock::isHeld()); - // TODO : perhaps if the registry we're a part of is closed .... - return implIsValid(); -} - -//-------------------------------------------------------------------------- -com::sun::star::registry::RegistryKeyType SAL_CALL OConfigurationRegistryKey::getKeyType( const ::rtl::OUString& /*_rKeyName*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - OSL_ASSERT(UnoApiLock::isHeld()); - - // no further checks are made (for performance reasons) ... - // Maybe we should check only KAT_META for consistency ? - checkValid(KAT_CHILD); - - return com::sun::star::registry::RegistryKeyType_KEY; -} - -//-------------------------------------------------------------------------- -com::sun::star::registry::RegistryValueType SAL_CALL OConfigurationRegistryKey::getValueType() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_META); - - const com::sun::star::uno::Type aUnoType = implGetUnoType(); - - switch (aUnoType.getTypeClass()) - { - case com::sun::star::uno::TypeClass_INTERFACE: // this is really a case of 'no value type' - return com::sun::star::registry::RegistryValueType_NOT_DEFINED; - - case com::sun::star::uno::TypeClass_ANY: // this is really a case of 'all value types allowed' - return com::sun::star::registry::RegistryValueType_NOT_DEFINED; - - case com::sun::star::uno::TypeClass_STRING: - return com::sun::star::registry::RegistryValueType_STRING; - - case com::sun::star::uno::TypeClass_BYTE: - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - OSL_ENSURE(false, "Unexpected UNSIGNED type found for configuration node"); - // FALL THRU - - case com::sun::star::uno::TypeClass_BOOLEAN: - case com::sun::star::uno::TypeClass_SHORT: - case com::sun::star::uno::TypeClass_LONG: - return com::sun::star::registry::RegistryValueType_LONG; - - case com::sun::star::uno::TypeClass_FLOAT: - case com::sun::star::uno::TypeClass_DOUBLE: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : registry does not support floating point numbers !"); - return com::sun::star::registry::RegistryValueType_LONG; - - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - case com::sun::star::uno::TypeClass_HYPER: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : registry does not support 64-bit integer numbers !"); - return com::sun::star::registry::RegistryValueType_LONG; - - case com::sun::star::uno::TypeClass_SEQUENCE: - if ( aUnoType.equals( getBinaryDataType() ) ) - return com::sun::star::registry::RegistryValueType_BINARY; - - else - { - com::sun::star::uno::Type aElementType = getSequenceElementType(aUnoType); - - switch (aElementType.getTypeClass()) - { - case com::sun::star::uno::TypeClass_STRING: - return com::sun::star::registry::RegistryValueType_STRINGLIST; - - case com::sun::star::uno::TypeClass_BYTE: - OSL_ASSERT(false); // this is caught by the 'binary' case - - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - OSL_ENSURE(false, "Unexpected UNSIGNED-List type found for configuration node"); - // FALL THRU - - case com::sun::star::uno::TypeClass_BOOLEAN: - case com::sun::star::uno::TypeClass_SHORT: - case com::sun::star::uno::TypeClass_LONG: - return com::sun::star::registry::RegistryValueType_LONGLIST; - - case com::sun::star::uno::TypeClass_FLOAT: - case com::sun::star::uno::TypeClass_DOUBLE: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : registry does not support floating point number lists !"); - return com::sun::star::registry::RegistryValueType_LONGLIST; - - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - case com::sun::star::uno::TypeClass_HYPER: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : registry does not support 64-bit integer number lists !"); - return com::sun::star::registry::RegistryValueType_LONGLIST; - - case com::sun::star::uno::TypeClass_ANY: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : Unexpected: Any as sequence element type !"); - return com::sun::star::registry::RegistryValueType_NOT_DEFINED; - - default: - if (aElementType.equals(getBinaryDataType())) - OSL_ENSURE(sal_False,"OConfigurationRegistryKey::getValueType : Registry cannot support LIST of BINARY"); - else - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : unknown sequence element type !"); - - return com::sun::star::registry::RegistryValueType_NOT_DEFINED; - } - } - - default: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::getValueType : unknown entry type !"); - return com::sun::star::registry::RegistryValueType_NOT_DEFINED; - } -} - -//-------------------------------------------------------------------------- - -com::sun::star::uno::Any OConfigurationRegistryKey::implGetValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_VALUE); - - return m_xParentNode->getByName( m_sLocalName ); -} - -//-------------------------------------------------------------------------- -sal_Int32 SAL_CALL OConfigurationRegistryKey::getLongValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aValue = implGetValue(); - - sal_Int32 nLongValue(0); - switch (aValue.getValueTypeClass()) - { - // integral types that are small enough are straightforward - case com::sun::star::uno::TypeClass_BYTE : { sal_Int8 nNativeValue = 0; aValue >>= nNativeValue; nLongValue = nNativeValue; } break; - case com::sun::star::uno::TypeClass_BOOLEAN : { sal_Bool nNativeValue = false; aValue >>= nNativeValue; nLongValue = nNativeValue; } break; - case com::sun::star::uno::TypeClass_SHORT : { sal_Int16 nNativeValue; aValue >>= nNativeValue; nLongValue = nNativeValue; } break; - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT : { sal_uInt16 nNativeValue; aValue >>= nNativeValue; nLongValue = nNativeValue; } break; - case com::sun::star::uno::TypeClass_LONG : { sal_Int32 nNativeValue; aValue >>= nNativeValue; nLongValue = nNativeValue; } break; - - // this is lossless, but not value-preserving - use cast to avoid warnings - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - { - sal_uInt32 nNativeValue; - aValue >>= nNativeValue; - nLongValue = sal_Int32(nNativeValue); - } - break; - - // the following are larger than Long - check for loss and throw if applicable - case com::sun::star::uno::TypeClass_HYPER: - { - sal_Int64 nNativeValue; - aValue >>= nNativeValue; - nLongValue = sal_Int32(nNativeValue); - - // check for data loss - if (sal_Int64(nLongValue) != nNativeValue) - throw com::sun::star::registry::InvalidValueException(UNISTRING("Unsigned Hyper value too large for long; Value cannot be retrieved using registry."), THISREF()); - } - break; - - case com::sun::star::uno::TypeClass_UNSIGNED_HYPER: - { - sal_uInt64 nNativeValue; - aValue >>= nNativeValue; - nLongValue = sal_Int32(nNativeValue); - - // check for data loss - if (sal_uInt64(sal_uInt32(nLongValue)) != nNativeValue) - throw com::sun::star::registry::InvalidValueException(UNISTRING("Unsigned Hyper value too large for long; Value cannot be retrieved using registry."), THISREF()); - } - break; - - // for floating point types we need a limit for loss checking - case com::sun::star::uno::TypeClass_FLOAT: - OSL_ENSURE(false, "Unexpected type FLOAT in configuration node"); - { - // treat as double - float fNativeValue = 0; - if (aValue >>= fNativeValue) - aValue <<= double(fNativeValue); - } - // fall thru - - case com::sun::star::uno::TypeClass_DOUBLE: - { - double fNativeValue = 0; - aValue >>= fNativeValue; - - // find a reasonable allowed imprecision - const double fEps = (2.*fNativeValue + 5.) * std::numeric_limits<double>::epsilon(); - - // should be rounding here - nLongValue = sal_Int32(fNativeValue); - - // check for data loss - bool bRecheck = false; - - double diff = fNativeValue-double(nLongValue); - if ( diff > fEps) - { - // substitute for rounding here - if (diff > .5) - { - ++nLongValue; - diff = fNativeValue-double(nLongValue); - } - bRecheck = true; - } - else if ( diff < -fEps) - { - // substitute for rounding here - if (diff < -.5) - { - --nLongValue; - diff = fNativeValue-double(nLongValue); - } - bRecheck = true; - } - - if (bRecheck) - { - if (diff > fEps || diff < -fEps) - throw com::sun::star::registry::InvalidValueException(UNISTRING("Double value cannot fit in Long; Value cannot be retrieved using registry."), THISREF()); - } - } - break; - - case com::sun::star::uno::TypeClass_VOID: - // allow NULL values, if we maybe advertise this node as long - if (this->getValueType() == com::sun::star::registry::RegistryValueType_LONG) - break; - // else FALL THRU to exception - - default: - throw com::sun::star::registry::InvalidValueException(UNISTRING("This node does not contain a long (or a compatible) value."), THISREF()); - } - return nLongValue; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setLongValue( sal_Int32 _nValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - implSetValue(com::sun::star::uno::makeAny(_nValue)); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL OConfigurationRegistryKey::getLongListValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aValue = implGetValue(); - - com::sun::star::uno::Sequence< sal_Int32 > aReturn; - if (!aValue.hasValue()) - checkNullable();// let NULL values pass - - else if (!(aValue >>= aReturn)) - { - // TODO : maybe it's a sequence of sal_Int8 or anything like that which we're able to convert .... - - throw com::sun::star::registry::InvalidValueException(UNISTRING("This configuration node does not contain a list of longs !"), THISREF()); - } - - return aReturn; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setLongListValue( const com::sun::star::uno::Sequence< sal_Int32 >& _seqValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - implSetValue(com::sun::star::uno::makeAny(_seqValue)); -} - -//-------------------------------------------------------------------------- -rtl::OUString SAL_CALL OConfigurationRegistryKey::getAsciiValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - rtl::OUString sReturn = getStringValue(); - - if (!isAscii(sReturn)) - throw com::sun::star::registry::InvalidValueException(UNISTRING("This configuration node value (a string) is not pure ASCII !"), THISREF()); - - return sReturn; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setAsciiValue( const ::rtl::OUString& _rValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - OSL_ENSURE( isAscii(_rValue), "The string passesd to OConfigurationRegistryKey::setAsciiValue is not pure ASCII"); - - setStringValue(_rValue); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL OConfigurationRegistryKey::getAsciiListValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Sequence<rtl::OUString> aReturn = getStringListValue(); - - if (!isAscii(aReturn)) - throw com::sun::star::registry::InvalidValueException(UNISTRING("This configuration node value (a string list) is not pure ASCII !"), THISREF()); - - return aReturn; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setAsciiListValue( const com::sun::star::uno::Sequence< ::rtl::OUString >& _seqValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - OSL_ENSURE( isAscii(_seqValue), "The string passesd to OConfigurationRegistryKey::setAsciiValue is not pure ASCII"); - - setStringListValue(_seqValue); -} - -//-------------------------------------------------------------------------- -::rtl::OUString SAL_CALL OConfigurationRegistryKey::getStringValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aValue = implGetValue(); - - rtl::OUString sReturn; - if (!aValue.hasValue()) - checkNullable();// let NULL values pass - - else if (!(aValue >>= sReturn)) - throw com::sun::star::registry::InvalidValueException(UNISTRING("This node does not contain a string value."), THISREF()); - - return sReturn; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setStringValue( const ::rtl::OUString& _rValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - implSetValue(com::sun::star::uno::makeAny(_rValue)); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL OConfigurationRegistryKey::getStringListValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aValue = implGetValue(); - - com::sun::star::uno::Sequence< rtl::OUString > aReturn; - if (!aValue.hasValue()) - checkNullable();// let NULL values pass - - else if (!(aValue >>= aReturn)) - throw com::sun::star::registry::InvalidValueException(UNISTRING("This configuration node does not contain a list of strings !"), THISREF()); - - return aReturn; -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setStringListValue( const com::sun::star::uno::Sequence< ::rtl::OUString >& _seqValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - implSetValue(com::sun::star::uno::makeAny(_seqValue)); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL OConfigurationRegistryKey::getBinaryValue() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::InvalidValueException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aValue = implGetValue(); - - com::sun::star::uno::Sequence< sal_Int8 > aReturn; - if (!aValue.hasValue()) - checkNullable();// let NULL values pass - - else if (!(aValue >>= aReturn)) - return aReturn; - - throw com::sun::star::registry::InvalidValueException(UNISTRING("This configuration node does not contain a list of strings !"), THISREF()); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::setBinaryValue( const com::sun::star::uno::Sequence< sal_Int8 >& _rValue ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - implSetValue(com::sun::star::uno::makeAny(_rValue)); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > OConfigurationRegistryKey::implGetKey( const ::rtl::OUString& _rKeyName ) - throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aDescendant = implGetDescendant(_rKeyName); - if (aDescendant.getValueType().getTypeClass() == com::sun::star::uno::TypeClass_INTERFACE) - { - com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xNode; - ::cppu::extractInterface(xNode, aDescendant); - if (!xNode.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("invalid descendant node. No XNameAccess found."), THISREF()); - return new OConfigurationRegistryKey(xNode, !m_bReadOnly); - } - else - { -#if OSL_DEBUG_LEVEL > 1 - switch (aDescendant.getValueType().getTypeClass()) - { - case com::sun::star::uno::TypeClass_STRING: - case com::sun::star::uno::TypeClass_SHORT: - case com::sun::star::uno::TypeClass_UNSIGNED_SHORT: - case com::sun::star::uno::TypeClass_BYTE: - case com::sun::star::uno::TypeClass_LONG: - case com::sun::star::uno::TypeClass_UNSIGNED_LONG: - case com::sun::star::uno::TypeClass_BOOLEAN: - case com::sun::star::uno::TypeClass_SEQUENCE: - break; - case com::sun::star::uno::TypeClass_VOID: // NULL value found - break; - default: - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::openKey : unknown, invalid or unhandled descendant value type !"); - } -#endif - - OSL_ASSERT(m_xNode.is()); - - com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xDescParent(m_xNode); // the parent config node of the descandent - rtl::OUString sDescRelativeName( _rKeyName ); // local name of the descendant within xDescParent - - if (!m_xNode->hasByName(_rKeyName)) // it is a hierarchical Path -> more work - { - rtl::OUString sParentLocation; - - if ( !splitPath(_rKeyName, sParentLocation, sDescRelativeName) ) - { - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Cannot split path for value. The internal registry structure seems to be corrupt."), THISREF()); - } - - if (sParentLocation.getLength()) - { - com::sun::star::uno::Any aDescParent = implGetDescendant(sParentLocation); - ::cppu::extractInterface(xDescParent, aDescParent); - if (!xDescParent.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The internal registry structure seems to be corrupt."), THISREF()); - } - } - - OSL_ENSURE(xDescParent.is(), "No Parent Node found for value ?"); - OSL_ENSURE(xDescParent->hasByName(sDescRelativeName), "Parent Node does not contain found value ?"); - - return new OConfigurationRegistryKey(aDescendant, xDescParent, sDescRelativeName, !m_bReadOnly); - } -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > SAL_CALL OConfigurationRegistryKey::openKey( const ::rtl::OUString& _rKeyName ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_CHILD); - - return implGetKey(_rKeyName); -} -//-------------------------------------------------------------------------- -bool OConfigurationRegistryKey::checkRelativeKeyName(rtl::OUString& _rKeyName) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - // no empty names allowed - if (!_rKeyName.getLength()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key name is invalid."), THISREF()); - - bool bCleanPath = true; - - // cut trailing slashes - sal_Int32 nCleanEnd = _rKeyName.getLength(); - while (nCleanEnd > 0 && _rKeyName[nCleanEnd - 1] == '/' ) - --nCleanEnd; - - if (m_xNode.is()) - { - if (m_xNode-> hasByName(_rKeyName)) - { - bCleanPath = false; - } - - else - { - com::sun::star::uno::Reference< com::sun::star::util::XStringEscape > xSE(m_xNode, com::sun::star::uno::UNO_QUERY); - - sal_Bool bPreferLocal = xSE.is(); - - if (!bPreferLocal) - { - com::sun::star::uno::Reference< com::sun::star::lang::XServiceInfo > xSI(m_xNode, com::sun::star::uno::UNO_QUERY); - if (xSI.is() && xSI->supportsService(rtl::OUString::createFromAscii("com.sun.star.configuration.SetAccess"))) - bPreferLocal = true; - } - - if (bPreferLocal) - { - com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > xHA(m_xNode, com::sun::star::uno::UNO_QUERY); - rtl::OUString sCleanName = _rKeyName.copy(0, nCleanEnd); - - if (xHA.is() && xHA->hasByHierarchicalName(sCleanName)) - bPreferLocal = false; - } - - if (bPreferLocal && xSE.is()) - { - _rKeyName = xSE->escapeString(_rKeyName); - } - bCleanPath = !bPreferLocal; - } - } - - if (bCleanPath) - { - // no absolute names ("/...") allowed - if (_rKeyName.getStr()[0] == '/') - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key name is invalid. It must be a relative, not an absolute name."), THISREF()); - - if (nCleanEnd <= 0) - // the original name consists of slashes only - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key name is invalid."), THISREF()); - - - _rKeyName = _rKeyName.copy(0, nCleanEnd); - } - return bCleanPath; -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > SAL_CALL OConfigurationRegistryKey::createKey( const ::rtl::OUString& _rKeyName ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_CHILD); - - if (m_bReadOnly) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key is read only."), THISREF()); - - OSL_ENSURE(m_xNode.is(), "OConfigurationRegistryKey::createKey : somebody changed the checkValid(KAT_CHILD) behaviour !"); - - rtl::OUString sKeyName(_rKeyName); - if (checkRelativeKeyName(sKeyName)) - { - rtl::OUString sParentName, sLocalName; - - if (!splitPath(sKeyName,sParentName, sLocalName)) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key name is invalid."), THISREF()); - - if (sParentName.getLength()) // it's a nested key name - { - // check if we have the key already - com::sun::star::uno::Reference< com::sun::star::container::XHierarchicalNameAccess > xDeepAccess(m_xNode, com::sun::star::uno::UNO_QUERY); - if (xDeepAccess.is() && xDeepAccess->hasByHierarchicalName(sKeyName)) - { - // already there - just open it - return implGetKey(sKeyName); - } - - // deep access, but not found. delegate it to a registry key which is one level above the to-be-created one - com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > xSetNode = implGetKey(sParentName); - if (!xSetNode.is()) - { - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::createKey : somebody changed the implGetKey behaviour !"); - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("An internal error occured."), THISREF()); - } - return xSetNode->createKey(sLocalName); // problem: request for a/['b/c'] might find a/b/c - } - else - sKeyName = sLocalName; - } - - // The requested new key is one level below ourself. Can't delegate the creation. - if (m_xNode->hasByName(sKeyName) ) - { - // already there - just open it - return implGetKey(sKeyName); - } - - com::sun::star::uno::Reference< com::sun::star::container::XNameContainer > xContainer(m_xNode, com::sun::star::uno::UNO_QUERY); - if (!xContainer.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The configuration node represented by this key is not a set node, you can't insert keys."), THISREF()); - - com::sun::star::uno::Any aValueToInsert; - - com::sun::star::uno::Reference< com::sun::star::lang::XSingleServiceFactory > xChildFactory(xContainer, com::sun::star::uno::UNO_QUERY); - if (xChildFactory.is()) - { - // In the configuration API, the creation of a new child is two-stage process : first you create a child which - // is "floating", i.e. does not belong to the configuration tree, yet. After filling it with values, you insert - // it into the container node which was used for the creation. - // We can't map this behaviour with the registry API, so we have to combine both steps - - // create a new floating child for the container node - try - { - com::sun::star::uno::Reference< com::sun::star::uno::XInterface > xFloatingChild = xChildFactory->createInstance(); - OSL_ENSURE( xFloatingChild.is(), "The newly created element is NULL !"); - - com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xInsertedChild(xFloatingChild, com::sun::star::uno::UNO_QUERY); - OSL_ENSURE( xInsertedChild.is(), "The newly created element does not provide the required interface"); - - if (!xInsertedChild.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("An internal error occured. The objects provided by the configuration API are invalid."), THISREF()); - - aValueToInsert <<= xInsertedChild; // xFloatingChild; - } - catch (com::sun::star::uno::RuntimeException&) - { // allowed to leave this method - throw; - } - catch (com::sun::star::uno::Exception& e) - { // not allowed to leave this method - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Unable to create a new child for the configuration node. Original error message as provided by the configuration API : ") += e.Message, - THISREF()); - } - OSL_ENSURE(aValueToInsert.hasValue(), "New Child node did not get into the Any ?"); - } - else - { - // If the elements of the set are simple values, we need to create a matching value - com::sun::star::uno::Type aElementType = xContainer->getElementType(); - aValueToInsert = implCreateDefaultElement(aElementType); - - OSL_ENSURE(aValueToInsert.hasValue() || aElementType.getTypeClass() == com::sun::star::uno::TypeClass_ANY, "Internal error: NULL value created for new value element ?"); - } - - // and immediately insert it into the container - try - { - xContainer->insertByName(sKeyName, aValueToInsert); - } - catch (com::sun::star::lang::IllegalArgumentException& e) - { - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("illegal argument to InsertByName: ") += e.Message, THISREF()); - } - catch (com::sun::star::container::ElementExistException& e) - { - OSL_ENSURE(false, "There was an element of the same name inserted just now"); - - // try to return that one - try { return implGetKey(sKeyName); } - catch (com::sun::star::uno::Exception&) { OSL_ENSURE(false, "But the other element cannot be retrieved"); } - - - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Inserting raised a NoSuchElementException for an unavailable element ! Original error message : ") += e.Message, THISREF()); - } - catch (com::sun::star::lang::WrappedTargetException& e) - { - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Inserting raised a WrappedTargetException. Original error message : ") += e.Message, THISREF()); - } - - return new OConfigurationRegistryKey(aValueToInsert, m_xNode, sKeyName, !m_bReadOnly); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::closeKey() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - OSL_ASSERT(UnoApiLock::isHeld()); - checkValid(KAT_META); - - bool bRoot = (m_sLocalName.getLength() == 0); - - if (!bRoot) // don't close, if this is the root key .. - { - m_xNode.clear(); - m_xParentNode.clear(); -// m_sLocalName = rtl::OUString(); - local name is const ... - } -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::deleteKey( const rtl::OUString& _rKeyName ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_CHILD); - if (m_bReadOnly) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key is read only."), THISREF()); - - rtl::OUString sKeyName(_rKeyName); - if (checkRelativeKeyName(sKeyName)) - { - rtl::OUString sParentName, sLocalName; - - if (!splitPath(sKeyName,sParentName, sLocalName)) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The key name is invalid."), THISREF()); - - if (sParentName.getLength()) // it's a nested key name - { - com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > xSetNode = implGetKey(sParentName); - if (!xSetNode.is()) - { - OSL_ENSURE(sal_False, "OConfigurationRegistryKey::createKey : somebody changed the implGetKey behaviour !"); - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("An internal error occured."), THISREF()); - } - xSetNode->deleteKey(sLocalName); - return; - } - else - sKeyName = sLocalName; - } - - // The requested new key is one level below ourself. Can't delegate the creation. - com::sun::star::uno::Reference< com::sun::star::container::XNameContainer > xContainer(m_xNode, com::sun::star::uno::UNO_QUERY); - if (!xContainer.is()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The configuration node represented by this key is not a set node, you can't remove keys."), THISREF()); - - // and immediately remove it from the container - try - { - xContainer->removeByName(sKeyName); - } - catch (com::sun::star::container::NoSuchElementException& e) - { - if (e.Message.getLength()) - throw com::sun::star::registry::InvalidRegistryException(e.Message, THISREF()); - else - throw com::sun::star::registry::InvalidRegistryException((UNISTRING("There is no element named ") += sKeyName) += UNISTRING(" to remove."), THISREF()); - } - catch (com::sun::star::lang::WrappedTargetException& e) - { - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("Removing a node caused a WrappedTargetException. Original error message : ") += e.Message, THISREF()); - } -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > > SAL_CALL OConfigurationRegistryKey::openKeys() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_CHILD); - - com::sun::star::uno::Sequence< ::rtl::OUString > aNames(m_xNode->getElementNames()); - - sal_Int32 const nCount = aNames.getLength(); - - com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > > aReturn(nCount); - - for (sal_Int32 i=0; i<nCount; ++i) - aReturn[i] = implGetKey(aNames[i]); - - return aReturn; -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL OConfigurationRegistryKey::getKeyNames() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - checkValid(KAT_CHILD); - return m_xNode->getElementNames(); -} - -//-------------------------------------------------------------------------- -sal_Bool SAL_CALL OConfigurationRegistryKey::createLink( const ::rtl::OUString& /*aLinkName*/, const ::rtl::OUString& /*aLinkTarget*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This registry, which is base on a configuration tree, does not support links."), THISREF()); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistryKey::deleteLink( const ::rtl::OUString& /*rLinkName*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This registry, which is base on a configuration tree, does not support links."), THISREF()); -} - -//-------------------------------------------------------------------------- -::rtl::OUString SAL_CALL OConfigurationRegistryKey::getLinkTarget( const ::rtl::OUString& /*rLinkName*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This registry, which is base on a configuration tree, does not support links."), THISREF()); -} - -//-------------------------------------------------------------------------- -::rtl::OUString SAL_CALL OConfigurationRegistryKey::getResolvedName( const ::rtl::OUString& /*aKeyName*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This registry, which is base on a configuration tree, does not support links."), THISREF()); -} -//-------------------------------------------------------------------------- -//.......................................................................... -} // namespace configmgr -//.......................................................................... -// split path -#include "configpath.hxx" -#include "configexcept.hxx" - -bool configmgr::splitPath(const rtl::OUString& _sPath, rtl::OUString& _rsParentPath, rtl::OUString& _rsLocalName) -{ - bool bResult = false; - try - { - bool bAbsolute = configmgr::configuration::Path::isAbsolutePath(_sPath); - configmgr::configuration::Path::Rep aPath ; - - if (bAbsolute) - { - configmgr::configuration::AbsolutePath parsedPath = configmgr::configuration::AbsolutePath::parse(_sPath) ; - - aPath = parsedPath.rep() ; - } - else - { - configmgr::configuration::RelativePath parsedPath = configmgr::configuration::RelativePath::parse(_sPath) ; - - aPath = parsedPath.rep() ; - } - //configmgr::configuration::Path::Rep aPath = bAbsolute ? configmgr::configuration::AbsolutePath::parse(_sPath).rep() : configmgr::configuration::RelativePath::parse(_sPath).rep(); - - OSL_ENSURE(!aPath.isEmpty(), "Trying to split an empty or root path"); - std::vector<configuration::Path::Component>::const_reverse_iterator aFirst = aPath.begin(), aLast = aPath.end(); - - if (aFirst != aLast) - { - --aLast; - - _rsLocalName = aLast->getName(); - _rsParentPath = configmgr::configuration::Path::Rep(aFirst,aLast).toString(bAbsolute); - - bResult = true; - } - // else go on to fail - } - catch (configuration::Exception&) - { - } - return bResult; -} -//.......................................................................... - - diff --git a/configmgr/source/registry/cfgregistrykey.hxx b/configmgr/source/registry/cfgregistrykey.hxx deleted file mode 100644 index 9ee01d547412..000000000000 --- a/configmgr/source/registry/cfgregistrykey.hxx +++ /dev/null @@ -1,244 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * 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. - * - ************************************************************************/ - -#ifndef _CONFIGMGR_REGISTRY_CFGREGISTRYKEY_HXX_ -#define _CONFIGMGR_REGISTRY_CFGREGISTRYKEY_HXX_ - -#include <cppuhelper/implbase1.hxx> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/container/XHierarchicalNameAccess.hpp> -#include <com/sun/star/registry/XRegistryKey.hpp> -#include <com/sun/star/beans/XPropertySetInfo.hpp> - -//.......................................................................... -namespace configmgr -{ -//.......................................................................... - -//========================================================================== -//= OConfigurationRegistryKey -//========================================================================== -/** wraps the registry-like access to a single node of a configuration sub tree -*/ -class OConfigurationRegistryKey - :public cppu::WeakImplHelper1< com::sun::star::registry::XRegistryKey > -{ - sal_Bool m_bReadOnly; /// is the key readonly ? - - ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > - m_xNode; /// the config node object, if it is a container - - ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > - m_xParentNode; /// if the key is not the root, this is it's parent. - - const ::rtl::OUString m_sLocalName; /** the name of the element relative to the parent, which is - m_xParentNode if that is present - */ - - // TODO : the current concept does not recognize when config keys are disposed (e.g. when the registry is closed) - // - // Possible solutions: - // 1. each registry key is a listener on the component containing its node - // may be is expensive ?. - // - // At the moment we ignore this restriction, but perhaps we can't do that forever .... - -public: - /// when used as ctor parameter, this indicates that the key wraps a config tree subtree root - struct SubtreeRoot { }; - - /** builds an registry key which wraps the root of a configuration registry - */ - OConfigurationRegistryKey( - const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxRootNode - ,sal_Bool _bWriteable - ,SubtreeRoot - ); - - /** builds an registry key for a configuration node - @param _rxContainerNode the node the key should represent - @param _bWriteable should the key be writeable ? - */ - OConfigurationRegistryKey( - const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxNode - ,sal_Bool _bWriteable - ); - - /** builds an registry key for a configuration value container node. - @param _rCurrentValue the current value of the node. Must be the same as _rxParentNode->getByName(_rRelativeName) would provide - @param _rxParentNode the parent of the value node. Used for update access and for obtaining the initial value. - @param _rRelativeName te relative name within the parent - @param _bWriteable should the key be writeable ? - */ - OConfigurationRegistryKey( - ::com::sun::star::uno::Any _rCurrentValue - ,const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxParentNode - ,const ::rtl::OUString& _rRelativeName - ,sal_Bool _bWriteable - ); - - // XRegistryKey - virtual ::rtl::OUString SAL_CALL getKeyName() throw(::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isValid( ) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::registry::RegistryKeyType SAL_CALL getKeyType( const ::rtl::OUString& rKeyName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::registry::RegistryValueType SAL_CALL getValueType( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual sal_Int32 SAL_CALL getLongValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setLongValue( sal_Int32 value ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setLongListValue( const ::com::sun::star::uno::Sequence< sal_Int32 >& seqValue ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getAsciiValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setAsciiValue( const ::rtl::OUString& value ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getAsciiListValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setAsciiListValue( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& seqValue ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getStringValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setStringValue( const ::rtl::OUString& value ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getStringListValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setStringListValue( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& seqValue ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::InvalidValueException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBinaryValue( const ::com::sun::star::uno::Sequence< sal_Int8 >& value ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > SAL_CALL openKey( const ::rtl::OUString& aKeyName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > SAL_CALL createKey( const ::rtl::OUString& aKeyName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL closeKey( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL deleteKey( const ::rtl::OUString& rKeyName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > > SAL_CALL openKeys( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getKeyNames( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL createLink( const ::rtl::OUString& aLinkName, const ::rtl::OUString& aLinkTarget ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL deleteLink( const ::rtl::OUString& rLinkName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getLinkTarget( const ::rtl::OUString& rLinkName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::rtl::OUString SAL_CALL getResolvedName( const ::rtl::OUString& aKeyName ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - -protected: - /** specifies the kind of access to the key. - */ - enum KEY_ACCESS_TYPE - { - KAT_META, /// access on a meta level, e.g. asking for the read-onyl flag - KAT_VALUE, /// read access to the value the node represents - KAT_VALUE_WRITE, /// write access to the value the node represents - KAT_CHILD /// access to one of the (grand-)children of the node - }; - - ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > - implGetParentPropertyInfo() - throw(::com::sun::star::uno::RuntimeException); - - sal_Bool implIsReadOnly() - throw(::com::sun::star::uno::RuntimeException); - - sal_Bool implEnsureNode() - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - ::com::sun::star::uno::Type implGetUnoType() - throw(::com::sun::star::uno::RuntimeException); - - sal_Bool implEnsureValue() - throw(::com::sun::star::uno::RuntimeException); - - sal_Bool implIsValid() throw (); - - /** check if the registry key is valid - @param _eIntentedAccess type of access which the caller wants to perform on the object - @throws <type scope="com.sun.star.registry">InvalidRegistryException</type> if the key is invalid - */ - void checkValid(KEY_ACCESS_TYPE _eIntentedAccess) - throw (::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - /** return an child element. - @param _rDescendantName the name of the descendant to open. May have a depth of more than 1, if - the node container support XHierarchicalNameAccess - @return the requested element. The caller can assume that the returned - <type scope="com.sun.star.uno">Any</type> always contains an object, all other cases are - handled with exceptions - @throws <type scope="com.sun.star.registry">InvalidRegistryException</type> if the key is invalid, - the element refered by _rName does not exist, the configuration node threw an exception, or - the name has a depth of more than one and the config node does not support this. - */ - ::com::sun::star::uno::Any - implGetDescendant(const ::rtl::OUString& _rDescendantName) - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - /** write the given value into the configuration node the object represents. - @throws <type scope="com.sun.star.registry">InvalidRegistryException</type> if the key is invalid, - not opened for write access or the configurations parent is not able to provide a value access - @throws <type scope="com.sun.star.uno">RuntimeException</type> if a fatal runtime error occurs - */ - void implSetValue(const ::com::sun::star::uno::Any& _rValue) - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - ::com::sun::star::uno::Any implGetValue() - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - /** open the sub key (depth 1 or more) determined by the given name - @param _rKeyName the name of the descendant node - @return a XRegistryKey wrapper for the requested configuration node - @throws <type scope="com.sun.star.registry">InvalidRegistryException</type> if the key is invalid, - the element refered by _rName does not exist, the configuration node threw an exception, or - the name has a depth of more than one and the config node does not support this. - */ - ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > - implGetKey( const ::rtl::OUString& _rKeyName ) - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - /** check the given (relative) key name syntactically. - - <p>In particular, this means that no checks are made if a node with the given name exists or something like - that ...<br/> - In addition, the given name will be normalized. Basically, this means that it does not contain trailing slashes. - </p> - @returns - <TRUE/> if the name is a valid relative path - <FALSE/> if the name is a local name only - @throws InvalidRegistryException - if the name is invalid or not relative (i.e. if it starts with an slash) - */ - bool checkRelativeKeyName(::rtl::OUString& _rKeyName) - throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - /** get a default value for a value of a given type - - <p>Creates an Any with an empty or zero value of the given type.</p> - - @param _rType the type of the element to create - @return - an <type scope="com::sun::star::uno">Any</type> representing a default for the node value type. If the - return value is still VOID, the node has a nullable type (e.g. any) or is of unsupported type - - */ - ::com::sun::star::uno::Any - implCreateDefaultElement(::com::sun::star::uno::Type const& _rType) - throw(::com::sun::star::uno::RuntimeException); -}; - - -//.......................................................................... -} // namespace configmgr -//.......................................................................... - -#endif // _CONFIGMGR_REGISTRY_CFGREGISTRYKEY_HXX_ - - diff --git a/configmgr/source/registry/configregistry.cxx b/configmgr/source/registry/configregistry.cxx deleted file mode 100644 index a4e2ed80f829..000000000000 --- a/configmgr/source/registry/configregistry.cxx +++ /dev/null @@ -1,376 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_configmgr.hxx" - - -#include "configregistry.hxx" -#include "cfgregistrykey.hxx" -#include "confapifactory.hxx" -#include "datalock.hxx" -#include "utility.hxx" -#include <comphelper/sequence.hxx> -#include <cppuhelper/typeprovider.hxx> -#include <osl/diagnose.h> -#include <com/sun/star/lang/ServiceNotRegisteredException.hpp> -#include <com/sun/star/lang/DisposedException.hpp> -#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> -#include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/container/XNameAccess.hpp> -#include <com/sun/star/uno/XComponentContext.hpp> - -#define THISREF() static_cast< ::cppu::OWeakObject* >(this) -#define UNISTRING(c) makeUniString(c) - -//.......................................................................... -namespace configmgr -{ -//.......................................................................... - -namespace beans = ::com::sun::star::beans; - -//========================================================================== -//= OConfigurationRegistry -//========================================================================== - inline - static - rtl::OUString makeUniString(char const* c) - { - return rtl::OUString::createFromAscii(c); - } - - - // #99130# Don't export SimpleRegistry service - static sal_Char const * const aExportedConfigRegistryServices[] = - { - "com.sun.star.configuration.ConfigurationRegistry", - NULL - }; - static sal_Char const * const aAdditionalConfigRegistryServices[] = - { - "com.sun.star.registry.SimpleRegistry", - NULL - }; - - sal_Char const * const aConfigRegistryImplementationName = "com.sun.star.comp.configuration.OConfigurationRegistry"; - - const ServiceImplementationInfo OConfigurationRegistry::s_aServiceInfo = - { - aConfigRegistryImplementationName, - aExportedConfigRegistryServices, - aAdditionalConfigRegistryServices - }; - - com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL instantiateConfigRegistry(uno::Reference< uno::XComponentContext > const& xContext ) - { - OSL_ASSERT( xContext.is() ); - com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > xServiceManager( xContext->getServiceManager(), com::sun::star::uno::UNO_QUERY ); - ::cppu::OWeakObject * pNewInstance = new OConfigurationRegistry(xServiceManager); - return pNewInstance; - } - - const ServiceRegistrationInfo* getConfigurationRegistryServiceInfo() - { - return getRegistrationInfo(& OConfigurationRegistry::s_aServiceInfo); - } - -//-------------------------------------------------------------------------- -OConfigurationRegistry::OConfigurationRegistry(const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& _rORB) throw(com::sun::star::uno::Exception, com::sun::star::uno::RuntimeException) - :ServiceComponentImpl(&s_aServiceInfo) - ,m_xORB(_rORB) -{ - // create the configuration provider used for accessing the configuration - OSL_ENSURE(m_xORB.is(), "OConfigurationRegistry::OConfigurationRegistry : invalid service factory !"); - if (m_xORB.is()) - { - m_xConfigurationProvider = - m_xConfigurationProvider.query( - m_xORB->createInstance(UNISTRING("com.sun.star.configuration.ConfigurationProvider")) - ); - } - - if (!m_xConfigurationProvider.is()) - { - // it's heavily needed ... - throw com::sun::star::lang::ServiceNotRegisteredException(UNISTRING("Failed to instantiate the mandatory service com.sun.star.configuration.ConfigurationProvider."), - THISREF()); - } -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Any SAL_CALL OConfigurationRegistry::queryInterface( const com::sun::star::uno::Type& _rType ) throw(com::sun::star::uno::RuntimeException) -{ - com::sun::star::uno::Any aReturn = ServiceComponentImpl::queryInterface(_rType); - if (!aReturn.hasValue()) - aReturn = cppu::ImplHelper2< com::sun::star::registry::XSimpleRegistry, com::sun::star::util::XFlushable >::queryInterface(_rType); - return aReturn; -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< com::sun::star::uno::Type > SAL_CALL OConfigurationRegistry::getTypes( ) throw(com::sun::star::uno::RuntimeException) -{ - return ::comphelper::concatSequences( - ServiceComponentImpl::getTypes(), - cppu::ImplHelper2< com::sun::star::registry::XSimpleRegistry, com::sun::star::util::XFlushable >::getTypes()); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL OConfigurationRegistry::getImplementationId( ) throw(com::sun::star::uno::RuntimeException) -{ - static cppu::OImplementationId aId; - return aId.getImplementationId(); -} - -//-------------------------------------------------------------------------- -::rtl::OUString OConfigurationRegistry::getNodePathFromURL(const ::rtl::OUString& _rURL) -{ - // TODO - return _rURL; -} - -//-------------------------------------------------------------------------- -::rtl::OUString SAL_CALL OConfigurationRegistry::getURL() throw(com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - return m_sLocation; -} - -//-------------------------------------------------------------------------- - -// Not guarded ! -void OConfigurationRegistry::implCheckOpen() throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - if (!implIsOpen()) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The registry is not bound to a configuration node."), THISREF()); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::open( const ::rtl::OUString& _rURL, sal_Bool _bReadOnly, sal_Bool /*_bCreate*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - - if (implIsOpen()) - close(); - - ::rtl::OUString sNodePath = getNodePathFromURL(_rURL); - - if (!m_xConfigurationProvider.is()) - throw com::sun::star::lang::DisposedException(UNISTRING("invalid object. configuration provider is already disposed."), THISREF()); - - com::sun::star::uno::Reference< com::sun::star::uno::XInterface > xNodeAccess; - try - { - char const * const sAccessType = _bReadOnly ? - "com.sun.star.configuration.ConfigurationAccess" : - "com.sun.star.configuration.ConfigurationUpdateAccess"; - - // prepare parameters for creating the config access : the node path - beans::PropertyValue aArgValue; - aArgValue.Handle = -1; - - // currently theres is one parameter: the node path - com::sun::star::uno::Sequence< com::sun::star::uno::Any > aArguments(1); - - aArgValue.Name = UNISTRING("nodepath"); - aArgValue.Value <<= sNodePath; - - aArguments[0] <<= aArgValue; - - - xNodeAccess = m_xConfigurationProvider->createInstanceWithArguments(UNISTRING(sAccessType), aArguments); - } - catch (com::sun::star::uno::RuntimeException&) - { // allowed to leave this method - throw; - } - catch (com::sun::star::uno::Exception& e) - { // not allowed to leave this method - ::rtl::OUString sMessage = UNISTRING("The configuration provider does not supply a registry access for the requested Node."); - sMessage += UNISTRING(" original error message of the provider : "); - sMessage += e.Message; - throw com::sun::star::registry::InvalidRegistryException(sMessage, THISREF()); - } - - com::sun::star::uno::Reference< com::sun::star::container::XNameAccess > xReadRoot(xNodeAccess, com::sun::star::uno::UNO_QUERY); - if (!_bReadOnly) - m_xUpdateRoot = m_xUpdateRoot.query(xReadRoot); - - if (!xReadRoot.is() || (!_bReadOnly && !m_xUpdateRoot.is())) - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("The object supplied the by configuration provider is invalid."), THISREF()); - - m_xRootKey = new OConfigurationRegistryKey(xReadRoot, !_bReadOnly, OConfigurationRegistryKey::SubtreeRoot()); - m_xSubtreeRoot = xNodeAccess; -} - -//-------------------------------------------------------------------------- -sal_Bool SAL_CALL OConfigurationRegistry::isValid( ) throw(com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - return implIsOpen(); -} - -//-------------------------------------------------------------------------- -sal_Bool OConfigurationRegistry::implIsOpen( ) throw(com::sun::star::uno::RuntimeException) -{ - return m_xRootKey.is(); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::close( ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - - com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > xRootKey(m_xRootKey); - m_xRootKey = NULL; - - com::sun::star::uno::Reference< XComponent > xRootComponent(m_xSubtreeRoot, com::sun::star::uno::UNO_QUERY); - m_xSubtreeRoot = NULL; - m_xUpdateRoot = NULL; - - m_sLocation = ::rtl::OUString(); - - if (xRootKey.is()) - xRootKey->closeKey(); - - if (xRootComponent.is()) - xRootComponent->dispose(); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::disposing() -{ - close(); - - { - UnoApiLock aLock; - - m_xConfigurationProvider.clear(); - m_xORB.clear(); - } - - ServiceComponentImpl::disposing(); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::destroy( ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - implCheckOpen(); - - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("This registry is a wrapper for a configuration access. It can not be destroyed."), THISREF()); -} - -//-------------------------------------------------------------------------- -com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey > SAL_CALL OConfigurationRegistry::getRootKey( ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - implCheckOpen(); - - return m_xRootKey; -} - -//-------------------------------------------------------------------------- -sal_Bool SAL_CALL OConfigurationRegistry::isReadOnly( ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - implCheckOpen(); - - return !m_xUpdateRoot.is(); - // if we don't have the update root, we're readonly -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::mergeKey( const ::rtl::OUString& /*aKeyName*/, const ::rtl::OUString& /*aUrl*/ ) throw(com::sun::star::registry::InvalidRegistryException, com::sun::star::registry::MergeConflictException, com::sun::star::uno::RuntimeException) -{ - UnoApiLock aLock; - implCheckOpen(); - - // not supported. but we can't throw an NoSupportException here ... - throw com::sun::star::registry::InvalidRegistryException(UNISTRING("You can't merge into this registry. It's just a wrapper for a configuration node, which has a fixed structure which can not be modified"), THISREF()); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::flush( ) throw(com::sun::star::uno::RuntimeException) -{ - { - UnoApiLock aLock; - if (m_xUpdateRoot.is()) - { - try - { - m_xUpdateRoot->commitChanges(); - } - catch (com::sun::star::lang::WrappedTargetException& e) - { // not allowed to leave this method - - ::rtl::OUString sMessage; - sMessage = UNISTRING("The changes made could not be committed. Orginal exception message : "); - sMessage += e.Message; - - // TODO : the specification of XFlushable has to be changed !!!!! - OSL_ENSURE(sal_False, "OConfigurationRegistry::flush : caught an exception, could not flush the data !"); - // return; - - throw com::sun::star::lang::WrappedTargetRuntimeException(sMessage, THISREF(), e.TargetException); - } - } - } - - com::sun::star::uno::Reference< com::sun::star::util::XFlushListener > const * const pSelector = 0; - if (cppu::OInterfaceContainerHelper* pContainer = this->rBHelper.getContainer(::getCppuType(pSelector)) ) - { - ::cppu::OInterfaceIteratorHelper aIter( *pContainer ); - - com::sun::star::lang::EventObject aFlushed(THISREF()); - while (aIter.hasMoreElements()) - try - { - static_cast< com::sun::star::util::XFlushListener* >(aIter.next())->flushed(aFlushed); - } - catch (uno::Exception & ) - {} - } -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::addFlushListener( const com::sun::star::uno::Reference< com::sun::star::util::XFlushListener >& _rxListener ) throw(com::sun::star::uno::RuntimeException) -{ - this->rBHelper.addListener(::getCppuType(&_rxListener),_rxListener); -} - -//-------------------------------------------------------------------------- -void SAL_CALL OConfigurationRegistry::removeFlushListener( const com::sun::star::uno::Reference< com::sun::star::util::XFlushListener >& _rxListener ) throw(com::sun::star::uno::RuntimeException) -{ - this->rBHelper.removeListener(::getCppuType(&_rxListener),_rxListener); -} - -//.......................................................................... -} // namespace configmgr -//.......................................................................... - - diff --git a/configmgr/source/registry/configregistry.hxx b/configmgr/source/registry/configregistry.hxx deleted file mode 100644 index 7664c1292b5d..000000000000 --- a/configmgr/source/registry/configregistry.hxx +++ /dev/null @@ -1,118 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * 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. - * - ************************************************************************/ - -#ifndef _CONFIGMGR_REGISTRY_CONFIGREGISTRY_HXX_ -#define _CONFIGMGR_REGISTRY_CONFIGREGISTRY_HXX_ - -#include <cppuhelper/implbase2.hxx> -#include "confsvccomponent.hxx" -#include <com/sun/star/registry/XSimpleRegistry.hpp> -#include <com/sun/star/util/XFlushable.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/util/XChangesBatch.hpp> - -//.......................................................................... -namespace configmgr -{ -//.......................................................................... - -//========================================================================== -//= OConfigurationRegistry -//========================================================================== -/** an object implmenting the <service scope="com.sun.star.configuration">ConfigurationRegistry</service> - service. -*/ -class OConfigurationRegistry - :public ServiceComponentImpl - ,public cppu::ImplHelper2< com::sun::star::registry::XSimpleRegistry, com::sun::star::util::XFlushable > -{ -public: - static const ServiceImplementationInfo s_aServiceInfo; - -protected: - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - m_xORB; /// the service provider used for creating the instance - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > - m_xConfigurationProvider; /// the configuration provider used for creating configuration accesses - - ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > - m_xRootKey; /// the root key for the registry-like configuration access - ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > - m_xSubtreeRoot; /// the root of the sub tree the object wraps - ::com::sun::star::uno::Reference< ::com::sun::star::util::XChangesBatch > - m_xUpdateRoot; /// the update access to the root of the sub tree, valid if opened for writing - ::rtl::OUString m_sLocation; /// URL of the configuration node we're representing, if any - - -public: - OConfigurationRegistry( - const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rORB) - throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); - - // XInterface - virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL acquire( ) throw() { ServiceComponentImpl::acquire(); } - virtual void SAL_CALL release( ) throw() { ServiceComponentImpl::release(); } - - // XTypeProvider - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); - - // XSimpleRegistry - virtual ::rtl::OUString SAL_CALL getURL() throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL open( const ::rtl::OUString& rURL, sal_Bool bReadOnly, sal_Bool bCreate ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isValid( ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL close( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL destroy( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey > SAL_CALL getRootKey( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual sal_Bool SAL_CALL isReadOnly( ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL mergeKey( const ::rtl::OUString& aKeyName, const ::rtl::OUString& aUrl ) throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::registry::MergeConflictException, ::com::sun::star::uno::RuntimeException); - - // XFlushable - virtual void SAL_CALL flush( ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL addFlushListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XFlushListener >& l ) throw(::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL removeFlushListener( const ::com::sun::star::uno::Reference< ::com::sun::star::util::XFlushListener >& l ) throw(::com::sun::star::uno::RuntimeException); - -protected: - virtual void SAL_CALL disposing(); - /// translates the given URL into a nodepath which may be used with the configuration provider - ::rtl::OUString getNodePathFromURL(const ::rtl::OUString& _rURL); - - void implCheckOpen() throw(::com::sun::star::registry::InvalidRegistryException, ::com::sun::star::uno::RuntimeException); - - sal_Bool implIsOpen() - throw (::com::sun::star::uno::RuntimeException); -}; - - -//.......................................................................... -} // namespace configmgr -//.......................................................................... - -#endif // _CONFIGMGR_REGISTRY_CONFIGREGISTRY_HXX_ - - diff --git a/configmgr/source/registry/makefile.mk b/configmgr/source/registry/makefile.mk deleted file mode 100644 index b3864291e5d2..000000000000 --- a/configmgr/source/registry/makefile.mk +++ /dev/null @@ -1,48 +0,0 @@ -#************************************************************************* -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# Copyright 2000, 2010 Oracle and/or its affiliates. -# -# 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. -# -#************************************************************************* - -PRJ=..$/.. -PRJINC=$(PRJ)$/source$/inc -PRJNAME=configmgr -TARGET=registry - -ENABLE_EXCEPTIONS=TRUE - -# --- Settings ---------------------------------- - -.INCLUDE : settings.mk -.INCLUDE : $(PRJ)$/makefile.pmk -# --- Files ------------------------------------- - -SLOFILES=\ - $(SLO)$/configregistry.obj \ - $(SLO)$/cfgregistrykey.obj \ - -# --- Targets ---------------------------------- - -.INCLUDE : target.mk - |