summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-04-01 14:08:04 +0200
committerStephan Bergmann <sbergman@redhat.com>2015-04-01 14:26:26 +0200
commit7bcf64c29a0f5d3d2d60fe98afadab6e48dbe8b3 (patch)
treedd7791b6390b8587e81b79dda2547eb6a67db34a
parentf14e4cffcc757a4fcf1875d638ef8df4acd5bc27 (diff)
Add isReadOnly() support to simplified configuration access
[API CHANGE]: extends the css.configuration.XReadWriteAccess in an incompatible way, but that is unpublished, has been commented as "still unpublished and unstable," and was specifically introduced for internal use by the simplified configuration access, so should not affect 3rd party code. Change-Id: I99ce045f5bd8c598e689d46fb0d3626dfaa6d0a0
-rw-r--r--comphelper/source/misc/configuration.cxx13
-rw-r--r--configmgr/source/readwriteaccess.cxx13
-rw-r--r--include/comphelper/configuration.hxx25
-rw-r--r--offapi/com/sun/star/configuration/XReadWriteAccess.idl4
4 files changed, 53 insertions, 2 deletions
diff --git a/comphelper/source/misc/configuration.cxx b/comphelper/source/misc/configuration.cxx
index 7468c5592c62..371a515faf81 100644
--- a/comphelper/source/misc/configuration.cxx
+++ b/comphelper/source/misc/configuration.cxx
@@ -12,6 +12,7 @@
#include <cassert>
#include <memory>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/configuration/ReadOnlyAccess.hpp>
#include <com/sun/star/configuration/ReadWriteAccess.hpp>
#include <com/sun/star/configuration/XReadWriteAccess.hpp>
@@ -116,11 +117,21 @@ comphelper::detail::ConfigurationWrapper::get(
comphelper::detail::ConfigurationWrapper::ConfigurationWrapper(
css::uno::Reference< css::uno::XComponentContext > const & context):
context_(context),
- access_(css::configuration::ReadOnlyAccess::create(context, "*"))
+ access_(css::configuration::ReadWriteAccess::create(context, "*"))
{}
comphelper::detail::ConfigurationWrapper::~ConfigurationWrapper() {}
+bool comphelper::detail::ConfigurationWrapper::isReadOnly(OUString const & path)
+ const
+{
+css::beans::Property SB(access_->getPropertyByHierarchicalName(path));
+ return
+ (access_->getPropertyByHierarchicalName(path).Attributes
+ & css::beans::PropertyAttribute::READONLY)
+ != 0;
+}
+
css::uno::Any comphelper::detail::ConfigurationWrapper::getPropertyValue(
OUString const & path) const
{
diff --git a/configmgr/source/readwriteaccess.cxx b/configmgr/source/readwriteaccess.cxx
index e503d9d556fe..19f0eb4a09b9 100644
--- a/configmgr/source/readwriteaccess.cxx
+++ b/configmgr/source/readwriteaccess.cxx
@@ -104,6 +104,19 @@ private:
throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
{ return getRoot()->getPendingChanges(); }
+ css::beans::Property SAL_CALL getPropertyByHierarchicalName(
+ OUString const & aHierarchicalName)
+ throw (
+ css::beans::UnknownPropertyException, css::uno::RuntimeException,
+ std::exception)
+ SAL_OVERRIDE
+ { return getRoot()->getPropertyByHierarchicalName(aHierarchicalName); }
+
+ sal_Bool SAL_CALL hasPropertyByHierarchicalName(
+ OUString const & aHierarchicalName)
+ throw (css::uno::RuntimeException, std::exception) SAL_OVERRIDE
+ { return getRoot()->hasPropertyByHierarchicalName(aHierarchicalName); }
+
rtl::Reference< RootAccess > getRoot();
css::uno::Reference< css::uno::XComponentContext > context_;
diff --git a/include/comphelper/configuration.hxx b/include/comphelper/configuration.hxx
index 2a0a593cf255..d4630c74ae64 100644
--- a/include/comphelper/configuration.hxx
+++ b/include/comphelper/configuration.hxx
@@ -93,6 +93,8 @@ public:
SAL_DLLPRIVATE ~ConfigurationWrapper();
+ bool isReadOnly(OUString const & path) const;
+
com::sun::star::uno::Any getPropertyValue(OUString const & path) const;
void setPropertyValue(
@@ -136,7 +138,11 @@ private:
context_;
com::sun::star::uno::Reference<
- com::sun::star::container::XHierarchicalNameAccess > access_;
+ com::sun::star::configuration::XReadWriteAccess > access_;
+ // should really be an css.configuration.ReadOnlyAccess (with added
+ // css.beans.XHierarchicalPropertySetInfo), but then
+ // configmgr::Access::asProperty() would report all properties as
+ // READONLY, so isReadOnly() would not work
};
/// @internal
@@ -187,6 +193,15 @@ private:
/// each given configuration property.
template< typename T, typename U > struct ConfigurationProperty
{
+ /// Get the read-only status of the given (non-localized) configuration
+ /// property.
+ static bool isReadOnly(
+ css::uno::Reference<css::uno::XComponentContext> const & context
+ = comphelper::getProcessComponentContext())
+ {
+ return detail::ConfigurationWrapper::get(context).isReadOnly(T::path());
+ }
+
/// Get the value of the given (non-localized) configuration property.
///
/// For nillable properties, U is of type boost::optional<U'>.
@@ -231,6 +246,14 @@ private:
/// to access each given localized configuration property.
template< typename T, typename U > struct ConfigurationLocalizedProperty
{
+ /// Get the read-only status of the given localized configuration property.
+ static bool isReadOnly(
+ css::uno::Reference<css::uno::XComponentContext> const & context
+ = comphelper::getProcessComponentContext())
+ {
+ return detail::ConfigurationWrapper::get(context).isReadOnly(T::path());
+ }
+
/// Get the value of the given localized configuration property, for the
/// locale currently set at the
/// com.sun.star.configuration.theDefaultProvider.
diff --git a/offapi/com/sun/star/configuration/XReadWriteAccess.idl b/offapi/com/sun/star/configuration/XReadWriteAccess.idl
index b9c47327e370..9e3f95cbaa1f 100644
--- a/offapi/com/sun/star/configuration/XReadWriteAccess.idl
+++ b/offapi/com/sun/star/configuration/XReadWriteAccess.idl
@@ -10,6 +10,7 @@
#ifndef _COM_SUN_STAR_CONFIGURATION_XREADWRITEACCESS_IDL
#define _COM_SUN_STAR_CONFIGURATION_XREADWRITEACCESS_IDL
+#include <com/sun/star/beans/XHierarchicalPropertySetInfo.idl>
#include <com/sun/star/container/XHierarchicalNameReplace.idl>
#include <com/sun/star/util/XChangesBatch.idl>
@@ -25,6 +26,9 @@ interface XReadWriteAccess {
interface com::sun::star::container::XHierarchicalNameReplace;
interface com::sun::star::util::XChangesBatch;
+
+ // @since LibreOffice 4.5
+ interface com::sun::star::beans::XHierarchicalPropertySetInfo;
};
}; }; }; };