summaryrefslogtreecommitdiff
path: root/cppuhelper/source/propertysetmixin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cppuhelper/source/propertysetmixin.cxx')
-rw-r--r--cppuhelper/source/propertysetmixin.cxx1431
1 files changed, 0 insertions, 1431 deletions
diff --git a/cppuhelper/source/propertysetmixin.cxx b/cppuhelper/source/propertysetmixin.cxx
deleted file mode 100644
index bee27129e..000000000
--- a/cppuhelper/source/propertysetmixin.cxx
+++ /dev/null
@@ -1,1431 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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_cppuhelper.hxx"
-
-#include "sal/config.h"
-
-#include "cppuhelper/propertysetmixin.hxx"
-
-#include "com/sun/star/beans/Property.hpp"
-#include "com/sun/star/beans/PropertyChangeEvent.hpp"
-#include "com/sun/star/beans/PropertyAttribute.hpp"
-#include "com/sun/star/beans/PropertyValue.hpp"
-#include "com/sun/star/beans/PropertyVetoException.hpp"
-#include "com/sun/star/beans/UnknownPropertyException.hpp"
-#include "com/sun/star/beans/XFastPropertySet.hpp"
-#include "com/sun/star/beans/XPropertyAccess.hpp"
-#include "com/sun/star/beans/XPropertyChangeListener.hpp"
-#include "com/sun/star/beans/XPropertySet.hpp"
-#include "com/sun/star/beans/XPropertySetInfo.hpp"
-#include "com/sun/star/beans/XVetoableChangeListener.hpp"
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
-#include "com/sun/star/lang/DisposedException.hpp"
-#include "com/sun/star/lang/EventObject.hpp"
-#include "com/sun/star/lang/IllegalAccessException.hpp"
-#include "com/sun/star/lang/IllegalArgumentException.hpp"
-#include "com/sun/star/lang/WrappedTargetException.hpp"
-#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
-#include "com/sun/star/lang/XComponent.hpp"
-#include "com/sun/star/lang/XMultiComponentFactory.hpp"
-#include "com/sun/star/reflection/XCompoundTypeDescription.hpp"
-#include "com/sun/star/reflection/XIdlClass.hpp"
-#include "com/sun/star/reflection/XIdlField2.hpp"
-#include "com/sun/star/reflection/XIdlReflection.hpp"
-#include "com/sun/star/reflection/XIndirectTypeDescription.hpp"
-#include "com/sun/star/reflection/XInterfaceAttributeTypeDescription2.hpp"
-#include "com/sun/star/reflection/XInterfaceMemberTypeDescription.hpp"
-#include "com/sun/star/reflection/XInterfaceTypeDescription2.hpp"
-#include "com/sun/star/reflection/XStructTypeDescription.hpp"
-#include "com/sun/star/reflection/XTypeDescription.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/DeploymentException.hpp"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/Type.hxx"
-#include "com/sun/star/uno/TypeClass.hpp"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/diagnose.h"
-#include "osl/mutex.hxx"
-#include "rtl/ref.hxx"
-#include "rtl/string.h"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-#include "salhelper/simplereferenceobject.hxx"
-
-#include <algorithm>
-#include <map>
-#include <new>
-#include <set>
-#include <vector>
-
-using cppu::PropertySetMixinImpl;
-
-namespace css = com::sun::star;
-
-namespace {
-
-template< typename T > struct AutoDispose {
- AutoDispose() {}
-
- ~AutoDispose() {
- try {
- dispose();
- } catch (...) {}
- }
-
- void dispose() {
- css::uno::Reference< css::lang::XComponent > comp(
- ifc, css::uno::UNO_QUERY);
- if (comp.is()) {
- comp->dispose();
- }
- ifc.clear();
- }
-
- css::uno::Reference< T > ifc;
-
-private:
- AutoDispose(AutoDispose &); // not defined
- void operator =(AutoDispose); // not defined
-};
-
-struct PropertyData {
- explicit PropertyData(
- css::beans::Property const & theProperty, bool thePresent):
- property(theProperty), present(thePresent) {}
-
- css::beans::Property property;
- bool present;
-};
-
-struct Data: public salhelper::SimpleReferenceObject {
- typedef std::map< rtl::OUString, PropertyData > PropertyMap;
-
- PropertyMap properties;
-
- PropertyMap::const_iterator get(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name) const;
-
-protected:
- void initProperties(
- css::uno::Reference< css::reflection::XTypeDescription > const & type,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- std::vector< rtl::OUString > * handleNames)
- {
- TypeSet seen;
- initProperties(type, absentOptional, handleNames, &seen);
- }
-
-private:
- typedef std::set< rtl::OUString > TypeSet;
-
- void initProperties(
- css::uno::Reference< css::reflection::XTypeDescription > const & type,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- std::vector< rtl::OUString > * handleNames, TypeSet * seen);
-
- static css::uno::Reference< css::reflection::XTypeDescription >
- resolveTypedefs(
- css::uno::Reference< css::reflection::XTypeDescription > const & type);
-};
-
-Data::PropertyMap::const_iterator Data::get(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name) const
-{
- PropertyMap::const_iterator i(properties.find(name));
- if (i == properties.end() || !i->second.present) {
- throw css::beans::UnknownPropertyException(name, object);
- }
- return i;
-}
-
-void Data::initProperties(
- css::uno::Reference< css::reflection::XTypeDescription > const & type,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- std::vector< rtl::OUString > * handleNames, TypeSet * seen)
-{
- css::uno::Reference< css::reflection::XInterfaceTypeDescription2 > ifc(
- resolveTypedefs(type), css::uno::UNO_QUERY_THROW);
- if (seen->insert(ifc->getName()).second) {
- css::uno::Sequence<
- css::uno::Reference< css::reflection::XTypeDescription > > bases(
- ifc->getBaseTypes());
- for (sal_Int32 i = 0; i < bases.getLength(); ++i) {
- initProperties(bases[i], absentOptional, handleNames, seen);
- }
- css::uno::Sequence<
- css::uno::Reference<
- css::reflection::XInterfaceMemberTypeDescription > > members(
- ifc->getMembers());
- rtl::OUString const * absentBegin = absentOptional.getConstArray();
- rtl::OUString const * absentEnd =
- absentBegin + absentOptional.getLength();
- for (sal_Int32 i = 0; i < members.getLength(); ++i) {
- if (members[i]->getTypeClass()
- == css::uno::TypeClass_INTERFACE_ATTRIBUTE)
- {
- css::uno::Reference<
- css::reflection::XInterfaceAttributeTypeDescription2 > attr(
- members[i], css::uno::UNO_QUERY_THROW);
- sal_Int16 attrAttribs = 0;
- if (attr->isBound()) {
- attrAttribs |= css::beans::PropertyAttribute::BOUND;
- }
- bool setUnknown = false;
- if (attr->isReadOnly()) {
- attrAttribs |= css::beans::PropertyAttribute::READONLY;
- setUnknown = true;
- }
- css::uno::Sequence<
- css::uno::Reference<
- css::reflection::XCompoundTypeDescription > > excs(
- attr->getGetExceptions());
- bool getUnknown = false;
- //XXX Special interpretation of getter/setter exceptions only
- // works if the specified exceptions are of the exact type, not
- // of a supertype:
- for (sal_Int32 j = 0; j < excs.getLength(); ++j) {
- if (excs[j]->getName().equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.UnknownPropertyException")))
- {
- getUnknown = true;
- break;
- }
- }
- excs = attr->getSetExceptions();
- for (sal_Int32 j = 0; j < excs.getLength(); ++j) {
- if (excs[j]->getName().equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.UnknownPropertyException")))
- {
- setUnknown = true;
- } else if (excs[j]->getName().equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans."
- "PropertyVetoException")))
- {
- attrAttribs
- |= css::beans::PropertyAttribute::CONSTRAINED;
- }
- }
- if (getUnknown && setUnknown) {
- attrAttribs |= css::beans::PropertyAttribute::OPTIONAL;
- }
- css::uno::Reference< css::reflection::XTypeDescription > t(
- attr->getType());
- for (;;)
- {
- t = resolveTypedefs(t);
- sal_Int16 n;
- if (t->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.Ambiguous<")))
- {
- n = css::beans::PropertyAttribute::MAYBEAMBIGUOUS;
- } else if (t->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.Defaulted<")))
- {
- n = css::beans::PropertyAttribute::MAYBEDEFAULT;
- } else if (t->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.Optional<")))
- {
- n = css::beans::PropertyAttribute::MAYBEVOID;
- } else {
- break;
- }
- if ((attrAttribs & n) != 0) {
- break;
- }
- attrAttribs |= n;
- css::uno::Sequence<
- css::uno::Reference< css::reflection::XTypeDescription > >
- args(
- css::uno::Reference<
- css::reflection::XStructTypeDescription >(
- t,
- css::uno::UNO_QUERY_THROW)->getTypeArguments());
- if (args.getLength() != 1) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "inconsistent UNO type registry")),
- css::uno::Reference< css::uno::XInterface >());
- }
- t = args[0];
- }
- std::vector< rtl::OUString >::size_type handles
- = handleNames->size();
- if (handles > SAL_MAX_INT32) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "interface type has too many attributes")),
- css::uno::Reference< css::uno::XInterface >());
- }
- rtl::OUString name(members[i]->getMemberName());
- if (!properties.insert(
- PropertyMap::value_type(
- name,
- PropertyData(
- css::beans::Property(
- name, static_cast< sal_Int32 >(handles),
- css::uno::Type(
- t->getTypeClass(), t->getName()),
- attrAttribs),
- (std::find(absentBegin, absentEnd, name)
- == absentEnd)))).
- second)
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "inconsistent UNO type registry")),
- css::uno::Reference< css::uno::XInterface >());
- }
- handleNames->push_back(name);
- }
- }
- }
-}
-
-css::uno::Reference< css::reflection::XTypeDescription > Data::resolveTypedefs(
- css::uno::Reference< css::reflection::XTypeDescription > const & type)
-{
- css::uno::Reference< css::reflection::XTypeDescription > t(type);
- while (t->getTypeClass() == css::uno::TypeClass_TYPEDEF) {
- t = css::uno::Reference< css::reflection::XIndirectTypeDescription >(
- t, css::uno::UNO_QUERY_THROW)->getReferencedType();
- }
- return t;
-}
-
-class Info: public cppu::WeakImplHelper1< css::beans::XPropertySetInfo > {
-public:
- explicit Info(Data * data): m_data(data) {}
-
- virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties()
- throw (css::uno::RuntimeException);
-
- virtual css::beans::Property SAL_CALL getPropertyByName(
- rtl::OUString const & name)
- throw (
- css::beans::UnknownPropertyException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL hasPropertyByName(rtl::OUString const & name)
- throw (css::uno::RuntimeException);
-
-private:
- rtl::Reference< Data > m_data;
-};
-
-css::uno::Sequence< css::beans::Property > Info::getProperties()
- throw (css::uno::RuntimeException)
-{
- try {
- OSL_ASSERT(m_data->properties.size() <= SAL_MAX_INT32);
- css::uno::Sequence< css::beans::Property > s(
- static_cast< sal_Int32 >(m_data->properties.size()));
- sal_Int32 n = 0;
- for (Data::PropertyMap::iterator i(m_data->properties.begin());
- i != m_data->properties.end(); ++i)
- {
- if (i->second.present) {
- s[n++] = i->second.property;
- }
- }
- s.realloc(n);
- return s;
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- }
-}
-
-css::beans::Property Info::getPropertyByName(rtl::OUString const & name)
- throw (css::beans::UnknownPropertyException, css::uno::RuntimeException)
-{
- return m_data->get(static_cast< cppu::OWeakObject * >(this), name)->
- second.property;
-}
-
-sal_Bool Info::hasPropertyByName(rtl::OUString const & name)
- throw (css::uno::RuntimeException)
-{
- Data::PropertyMap::iterator i(m_data->properties.find(name));
- return i != m_data->properties.end() && i->second.present;
-}
-
-typedef
-std::multiset< css::uno::Reference< css::beans::XPropertyChangeListener > >
-BoundListenerBag;
-
-}
-
-class PropertySetMixinImpl::BoundListeners::Impl {
-public:
- BoundListenerBag specificListeners;
- BoundListenerBag unspecificListeners;
- css::beans::PropertyChangeEvent event;
-};
-
-PropertySetMixinImpl::BoundListeners::BoundListeners(): m_impl(new Impl) {}
-
-PropertySetMixinImpl::BoundListeners::~BoundListeners() {
- delete m_impl;
-}
-
-void PropertySetMixinImpl::BoundListeners::notify() const {
- for (BoundListenerBag::const_iterator i(m_impl->specificListeners.begin());
- i != m_impl->specificListeners.end(); ++i)
- {
- try {
- (*i)->propertyChange(m_impl->event);
- } catch (css::lang::DisposedException &) {}
- }
- for (BoundListenerBag::const_iterator i(
- m_impl->unspecificListeners.begin());
- i != m_impl->unspecificListeners.end(); ++i)
- {
- try {
- (*i)->propertyChange(m_impl->event);
- } catch (css::lang::DisposedException &) {}
- }
-}
-
-class PropertySetMixinImpl::Impl: public Data {
-public:
- Impl(
- css::uno::Reference< css::uno::XComponentContext > const & context,
- Implements theImplements,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- css::uno::Type const & type);
-
- rtl::OUString translateHandle(
- css::uno::Reference< css::uno::XInterface > const & object,
- sal_Int32 handle) const;
-
- void setProperty(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name, css::uno::Any const & value,
- bool isAmbiguous, bool isDefaulted, sal_Int16 illegalArgumentPosition)
- const;
-
- css::uno::Any getProperty(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name, css::beans::PropertyState * state) const;
-
- PropertySetMixinImpl::Implements implements;
- css::uno::Sequence< rtl::OUString > handleMap;
-
- typedef std::map< rtl::OUString, BoundListenerBag > BoundListenerMap;
-
- typedef
- std::multiset< css::uno::Reference< css::beans::XVetoableChangeListener > >
- VetoListenerBag;
-
- typedef std::map< rtl::OUString, VetoListenerBag > VetoListenerMap;
-
- mutable osl::Mutex mutex;
- BoundListenerMap boundListeners;
- VetoListenerMap vetoListeners;
- bool disposed;
-
-private:
- css::uno::Reference< css::reflection::XIdlClass > getReflection(
- rtl::OUString const & typeName) const;
-
- static css::uno::Any wrapValue(
- css::uno::Reference< css::uno::XInterface > const & object,
- css::uno::Any const & value,
- css::uno::Reference< css::reflection::XIdlClass > const & type,
- bool wrapAmbiguous, bool isAmbiguous, bool wrapDefaulted,
- bool isDefaulted, bool wrapOptional);
-
- css::uno::Reference< css::uno::XComponentContext > const & m_context;
- css::uno::Sequence< rtl::OUString > m_absentOptional;
- css::uno::Type m_type;
- css::uno::Reference< css::reflection::XIdlClass > m_idlClass;
-};
-
-PropertySetMixinImpl::Impl::Impl(
- css::uno::Reference< css::uno::XComponentContext > const & context,
- Implements theImplements,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- css::uno::Type const & type):
- implements(theImplements), disposed(false), m_context(context),
- m_absentOptional(absentOptional), m_type(type)
-{
- OSL_ASSERT(
- context.is()
- && ((implements
- & ~(IMPLEMENTS_PROPERTY_SET | IMPLEMENTS_FAST_PROPERTY_SET
- | IMPLEMENTS_PROPERTY_ACCESS))
- == 0));
- m_idlClass = getReflection(m_type.getTypeName());
- css::uno::Reference< css::reflection::XTypeDescription > ifc;
- try {
- ifc = css::uno::Reference< css::reflection::XTypeDescription >(
- css::uno::Reference< css::container::XHierarchicalNameAccess >(
- m_context->getValueByName(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "/singletons/com.sun.star.reflection."
- "theTypeDescriptionManager"))),
- css::uno::UNO_QUERY_THROW)->getByHierarchicalName(
- m_type.getTypeName()),
- css::uno::UNO_QUERY_THROW);
- } catch (css::container::NoSuchElementException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- css::uno::Reference< css::uno::XInterface >());
- }
- std::vector< rtl::OUString > handleNames;
- initProperties(ifc, m_absentOptional, &handleNames);
- std::vector< rtl::OUString >::size_type size = handleNames.size();
- OSL_ASSERT(size <= SAL_MAX_INT32);
- handleMap.realloc(static_cast< sal_Int32 >(size));
- std::copy(handleNames.begin(), handleNames.end(), handleMap.getArray());
-}
-
-rtl::OUString PropertySetMixinImpl::Impl::translateHandle(
- css::uno::Reference< css::uno::XInterface > const & object,
- sal_Int32 handle) const
-{
- if (handle < 0 || handle >= handleMap.getLength()) {
- throw css::beans::UnknownPropertyException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad handle "))
- + rtl::OUString::valueOf(handle)),
- object);
- }
- return handleMap[handle];
-}
-
-void PropertySetMixinImpl::Impl::setProperty(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name, css::uno::Any const & value, bool isAmbiguous,
- bool isDefaulted, sal_Int16 illegalArgumentPosition) const
-{
- PropertyMap::const_iterator i(properties.find(name));
- if (i == properties.end()) {
- throw css::beans::UnknownPropertyException(name, object);
- }
- if ((isAmbiguous
- && ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEAMBIGUOUS)
- == 0))
- || (isDefaulted
- && ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEDEFAULT)
- == 0)))
- {
- throw css::lang::IllegalArgumentException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "flagging as ambiguous/defaulted non-ambiguous/defaulted"
- " property "))
- + name),
- object, illegalArgumentPosition);
- }
- css::uno::Reference< css::reflection::XIdlField2 > f(
- m_idlClass->getField(name), css::uno::UNO_QUERY_THROW);
- css::uno::Any o(object->queryInterface(m_type));
- css::uno::Any v(
- wrapValue(
- object, value,
- (css::uno::Reference< css::reflection::XIdlField2 >(
- m_idlClass->getField(name), css::uno::UNO_QUERY_THROW)->
- getType()),
- ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEAMBIGUOUS)
- != 0),
- isAmbiguous,
- ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEDEFAULT)
- != 0),
- isDefaulted,
- ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEVOID)
- != 0)));
- try {
- f->set(o, v);
- } catch (css::lang::IllegalArgumentException & e) {
- if (e.ArgumentPosition == 1) {
- throw css::lang::IllegalArgumentException(
- e.Message, object, illegalArgumentPosition);
- } else {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalArgumentException: "))
- + e.Message),
- object);
- }
- } catch (css::lang::IllegalAccessException &) {
- //TODO Clarify whether PropertyVetoException is the correct exception
- // to throw when trying to set a read-only property:
- throw css::beans::PropertyVetoException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("cannot set read-only property "))
- + name),
- object);
- } catch (css::lang::WrappedTargetRuntimeException & e) {
- //FIXME A WrappedTargetRuntimeException from XIdlField2.get is not
- // guaranteed to originate directly within XIdlField2.get (and thus have
- // the expected semantics); it might also be passed through from lower
- // layers.
- if (e.TargetException.isExtractableTo(
- getCppuType(
- static_cast< css::beans::UnknownPropertyException * >(0)))
- && ((i->second.property.Attributes
- & css::beans::PropertyAttribute::OPTIONAL)
- != 0))
- {
- throw css::beans::UnknownPropertyException(name, object);
- } else if (e.TargetException.isExtractableTo(
- getCppuType(
- static_cast< css::beans::PropertyVetoException * >(
- 0)))
- && ((i->second.property.Attributes
- & css::beans::PropertyAttribute::CONSTRAINED)
- != 0))
- {
- throw css::beans::PropertyVetoException(name, object);
- } else {
- throw css::lang::WrappedTargetException(
- e.Message, object, e.TargetException);
- }
- }
-}
-
-css::uno::Any PropertySetMixinImpl::Impl::getProperty(
- css::uno::Reference< css::uno::XInterface > const & object,
- rtl::OUString const & name, css::beans::PropertyState * state) const
-{
- PropertyMap::const_iterator i(properties.find(name));
- if (i == properties.end()) {
- throw css::beans::UnknownPropertyException(name, object);
- }
- css::uno::Reference< css::reflection::XIdlField2 > field(
- m_idlClass->getField(name), css::uno::UNO_QUERY_THROW);
- css::uno::Any value;
- try {
- value = field->get(object->queryInterface(m_type));
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected com.sun.star.lang.IllegalArgumentException: "))
- + e.Message),
- object);
- } catch (css::lang::WrappedTargetRuntimeException & e) {
- //FIXME A WrappedTargetRuntimeException from XIdlField2.get is not
- // guaranteed to originate directly within XIdlField2.get (and thus have
- // the expected semantics); it might also be passed through from lower
- // layers.
- if (e.TargetException.isExtractableTo(
- getCppuType(
- static_cast< css::beans::UnknownPropertyException * >(0)))
- && ((i->second.property.Attributes
- & css::beans::PropertyAttribute::OPTIONAL)
- != 0))
- {
- throw css::beans::UnknownPropertyException(name, object);
- } else {
- throw css::lang::WrappedTargetException(
- e.Message, object, e.TargetException);
- }
- }
- bool undoAmbiguous
- = ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEAMBIGUOUS)
- != 0);
- bool undoDefaulted
- = ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEDEFAULT)
- != 0);
- bool undoOptional
- = ((i->second.property.Attributes
- & css::beans::PropertyAttribute::MAYBEVOID)
- != 0);
- bool isAmbiguous = false;
- bool isDefaulted = false;
- while (undoAmbiguous || undoDefaulted || undoOptional) {
- if (undoAmbiguous
- && value.getValueTypeName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.beans.Ambiguous<")))
- {
- css::uno::Reference< css::reflection::XIdlClass > ambiguous(
- getReflection(value.getValueTypeName()));
- try {
- if (!(css::uno::Reference< css::reflection::XIdlField2 >(
- ambiguous->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsAmbiguous"))),
- css::uno::UNO_QUERY_THROW)->get(value)
- >>= isAmbiguous))
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected type of"
- " com.sun.star.beans.Ambiguous IsAmbiguous"
- " member")),
- object);
- }
- value = css::uno::Reference< css::reflection::XIdlField2 >(
- ambiguous->getField(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW)->get(value);
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected com.sun.star.lang."
- "IllegalArgumentException: "))
- + e.Message),
- object);
- }
- undoAmbiguous = false;
- } else if (undoDefaulted
- && value.getValueTypeName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.Defaulted<")))
- {
- css::uno::Reference< css::reflection::XIdlClass > defaulted(
- getReflection(value.getValueTypeName()));
- try {
-
- if (!(css::uno::Reference< css::reflection::XIdlField2 >(
- defaulted->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsDefaulted"))),
- css::uno::UNO_QUERY_THROW)->get(value)
- >>= isDefaulted))
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected type of"
- " com.sun.star.beans.Defaulted IsDefaulted"
- " member")),
- object);
- }
- value = css::uno::Reference< css::reflection::XIdlField2 >(
- defaulted->getField(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW)->get(value);
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected com.sun.star.lang."
- "IllegalArgumentException: "))
- + e.Message),
- object);
- }
- undoDefaulted = false;
- } else if (undoOptional
- && value.getValueTypeName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.beans.Optional<")))
- {
- css::uno::Reference< css::reflection::XIdlClass > optional(
- getReflection(value.getValueTypeName()));
- try {
- bool present = false;
- if (!(css::uno::Reference< css::reflection::XIdlField2 >(
- optional->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsPresent"))),
- css::uno::UNO_QUERY_THROW)->get(value)
- >>= present))
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected type of com.sun.star.beans.Optional"
- " IsPresent member")),
- object);
- }
- if (!present) {
- value.clear();
- break;
- }
- value = css::uno::Reference< css::reflection::XIdlField2 >(
- optional->getField(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW)->get(value);
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected com.sun.star.lang."
- "IllegalArgumentException: "))
- + e.Message),
- object);
- }
- undoOptional = false;
- } else {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected type of attribute "))
- + name),
- object);
- }
- }
- if (state != 0) {
- //XXX If isAmbiguous && isDefaulted, arbitrarily choose AMBIGUOUS_VALUE
- // over DEFAULT_VALUE:
- *state = isAmbiguous
- ? css::beans::PropertyState_AMBIGUOUS_VALUE
- : isDefaulted
- ? css::beans::PropertyState_DEFAULT_VALUE
- : css::beans::PropertyState_DIRECT_VALUE;
- }
- return value;
-}
-
-css::uno::Reference< css::reflection::XIdlClass >
-PropertySetMixinImpl::Impl::getReflection(rtl::OUString const & typeName) const
-{
- css::uno::Reference< css::lang::XMultiComponentFactory > factory(
- m_context->getServiceManager(), css::uno::UNO_QUERY_THROW);
- AutoDispose< css::reflection::XIdlReflection > refl;
- try {
- refl.ifc = css::uno::Reference< css::reflection::XIdlReflection >(
- factory->createInstanceWithContext(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.reflection.CoreReflection")),
- m_context),
- css::uno::UNO_QUERY_THROW);
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::uno::Exception & e) {
- throw css::uno::DeploymentException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "component context fails to supply service"
- " com.sun.star.reflection.CoreReflection: "))
- + e.Message),
- m_context);
- }
- css::uno::Reference< css::reflection::XIdlClass > idlClass(
- refl.ifc->forName(typeName), css::uno::UNO_QUERY_THROW);
- refl.dispose();
- return idlClass;
-}
-
-css::uno::Any PropertySetMixinImpl::Impl::wrapValue(
- css::uno::Reference< css::uno::XInterface > const & object,
- css::uno::Any const & value,
- css::uno::Reference< css::reflection::XIdlClass > const & type,
- bool wrapAmbiguous, bool isAmbiguous, bool wrapDefaulted, bool isDefaulted,
- bool wrapOptional)
-{
- OSL_ASSERT(
- (wrapAmbiguous || !isAmbiguous) && (wrapDefaulted || !isDefaulted));
- if (wrapAmbiguous
- && type->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.beans.Ambiguous<")))
- {
- css::uno::Any strct;
- type->createObject(strct);
- try {
- css::uno::Reference< css::reflection::XIdlField2 > field(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW);
- field->set(
- strct,
- wrapValue(
- object, value, field->getType(), false, false,
- wrapDefaulted, isDefaulted, wrapOptional));
- css::uno::Reference< css::reflection::XIdlField2 >(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsAmbiguous"))),
- css::uno::UNO_QUERY_THROW)->set(
- strct, css::uno::makeAny(isAmbiguous));
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalArgumentException: "))
- + e.Message),
- object);
- } catch (css::lang::IllegalAccessException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalAccessException: "))
- + e.Message),
- object);
- }
- return strct;
- } else if (wrapDefaulted
- && type->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.beans.Defaulted<")))
- {
- css::uno::Any strct;
- type->createObject(strct);
- try {
- css::uno::Reference< css::reflection::XIdlField2 > field(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW);
- field->set(
- strct,
- wrapValue(
- object, value, field->getType(), wrapAmbiguous, isAmbiguous,
- false, false, wrapOptional));
- css::uno::Reference< css::reflection::XIdlField2 >(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsDefaulted"))),
- css::uno::UNO_QUERY_THROW)->set(
- strct, css::uno::makeAny(isDefaulted));
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalArgumentException: "))
- + e.Message),
- object);
- } catch (css::lang::IllegalAccessException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalAccessException: "))
- + e.Message),
- object);
- }
- return strct;
- } else if (wrapOptional
- && type->getName().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.beans.Optional<")))
- {
- css::uno::Any strct;
- type->createObject(strct);
- bool present = value.hasValue();
- try {
- css::uno::Reference< css::reflection::XIdlField2 >(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IsPresent"))),
- css::uno::UNO_QUERY_THROW)->set(
- strct, css::uno::makeAny(present));
- if (present) {
- css::uno::Reference< css::reflection::XIdlField2 > field(
- type->getField(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("Value"))),
- css::uno::UNO_QUERY_THROW);
- field->set(
- strct,
- wrapValue(
- object, value, field->getType(), wrapAmbiguous,
- isAmbiguous, wrapDefaulted, isDefaulted, false));
- }
- } catch (css::lang::IllegalArgumentException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalArgumentException: "))
- + e.Message),
- object);
- } catch (css::lang::IllegalAccessException & e) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected"
- " com.sun.star.lang.IllegalAccessException: "))
- + e.Message),
- object);
- }
- return strct;
- } else {
- if (wrapAmbiguous || wrapDefaulted || wrapOptional) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "unexpected type of attribute")),
- object);
- }
- return value;
- }
-}
-
-PropertySetMixinImpl::PropertySetMixinImpl(
- css::uno::Reference< css::uno::XComponentContext > const & context,
- Implements implements,
- css::uno::Sequence< rtl::OUString > const & absentOptional,
- css::uno::Type const & type)
-{
- m_impl = new Impl(context, implements, absentOptional, type);
- m_impl->acquire();
-}
-
-PropertySetMixinImpl::~PropertySetMixinImpl() {
- m_impl->release();
-}
-
-void PropertySetMixinImpl::checkUnknown(rtl::OUString const & propertyName) {
- if (propertyName.getLength() != 0) {
- m_impl->get(
- static_cast< css::beans::XPropertySet * >(this), propertyName);
- }
-}
-
-void PropertySetMixinImpl::prepareSet(
- rtl::OUString const & propertyName, css::uno::Any const & oldValue,
- css::uno::Any const & newValue, BoundListeners * boundListeners)
-{
- Impl::PropertyMap::const_iterator it(m_impl->properties.find(propertyName));
- OSL_ASSERT(it != m_impl->properties.end());
- Impl::VetoListenerBag specificVeto;
- Impl::VetoListenerBag unspecificVeto;
- {
- osl::MutexGuard g(m_impl->mutex);
- if (m_impl->disposed) {
- throw css::lang::DisposedException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("disposed")),
- static_cast< css::beans::XPropertySet * >(this));
- }
- if ((it->second.property.Attributes
- & css::beans::PropertyAttribute::CONSTRAINED)
- != 0)
- {
- Impl::VetoListenerMap::const_iterator i(
- m_impl->vetoListeners.find(propertyName));
- if (i != m_impl->vetoListeners.end()) {
- specificVeto = i->second;
- }
- i = m_impl->vetoListeners.find(rtl::OUString());
- if (i != m_impl->vetoListeners.end()) {
- unspecificVeto = i->second;
- }
- }
- if ((it->second.property.Attributes
- & css::beans::PropertyAttribute::BOUND)
- != 0)
- {
- OSL_ASSERT(boundListeners != 0);
- Impl::BoundListenerMap::const_iterator i(
- m_impl->boundListeners.find(propertyName));
- if (i != m_impl->boundListeners.end()) {
- boundListeners->m_impl->specificListeners = i->second;
- }
- i = m_impl->boundListeners.find(rtl::OUString());
- if (i != m_impl->boundListeners.end()) {
- boundListeners->m_impl->unspecificListeners = i->second;
- }
- }
- }
- if ((it->second.property.Attributes
- & css::beans::PropertyAttribute::CONSTRAINED)
- != 0)
- {
- css::beans::PropertyChangeEvent event(
- static_cast< css::beans::XPropertySet * >(this), propertyName,
- false, it->second.property.Handle, oldValue, newValue);
- for (Impl::VetoListenerBag::iterator i(specificVeto.begin());
- i != specificVeto.end(); ++i)
- {
- try {
- (*i)->vetoableChange(event);
- } catch (css::lang::DisposedException &) {}
- }
- for (Impl::VetoListenerBag::iterator i(unspecificVeto.begin());
- i != unspecificVeto.end(); ++i)
- {
- try {
- (*i)->vetoableChange(event);
- } catch (css::lang::DisposedException &) {}
- }
- }
- if ((it->second.property.Attributes & css::beans::PropertyAttribute::BOUND)
- != 0)
- {
- OSL_ASSERT(boundListeners != 0);
- boundListeners->m_impl->event = css::beans::PropertyChangeEvent(
- static_cast< css::beans::XPropertySet * >(this), propertyName,
- false, it->second.property.Handle, oldValue, newValue);
- }
-}
-
-void PropertySetMixinImpl::dispose() {
- Impl::BoundListenerMap boundListeners;
- Impl::VetoListenerMap vetoListeners;
- {
- osl::MutexGuard g(m_impl->mutex);
- boundListeners.swap(m_impl->boundListeners);
- vetoListeners.swap(m_impl->vetoListeners);
- m_impl->disposed = true;
- }
- css::lang::EventObject event(
- static_cast< css::beans::XPropertySet * >(this));
- for (Impl::BoundListenerMap::iterator i(boundListeners.begin());
- i != boundListeners.end(); ++i)
- {
- for (BoundListenerBag::iterator j(i->second.begin());
- j != i->second.end(); ++j)
- {
- (*j)->disposing(event);
- }
- }
- for (Impl::VetoListenerMap::iterator i(vetoListeners.begin());
- i != vetoListeners.end(); ++i)
- {
- for (Impl::VetoListenerBag::iterator j(i->second.begin());
- j != i->second.end(); ++j)
- {
- (*j)->disposing(event);
- }
- }
-}
-
-css::uno::Any PropertySetMixinImpl::queryInterface(css::uno::Type const & type)
- throw (css::uno::RuntimeException)
-{
- if (((m_impl->implements & IMPLEMENTS_PROPERTY_SET) != 0
- && type == css::beans::XPropertySet::static_type()))
- {
- css::uno::Reference< css::uno::XInterface > ifc(
- static_cast< css::beans::XPropertySet * >(this));
- return css::uno::Any(&ifc, type);
- } else if ((m_impl->implements & IMPLEMENTS_FAST_PROPERTY_SET) != 0
- && type == css::beans::XFastPropertySet::static_type())
- {
- css::uno::Reference< css::uno::XInterface > ifc(
- static_cast< css::beans::XFastPropertySet * >(this));
- return css::uno::Any(&ifc, type);
- } else if ((m_impl->implements & IMPLEMENTS_PROPERTY_ACCESS) != 0
- && type == css::beans::XPropertyAccess::static_type())
- {
- css::uno::Reference< css::uno::XInterface > ifc(
- static_cast< css::beans::XPropertyAccess * >(this));
- return css::uno::Any(&ifc, type);
- } else {
- return css::uno::Any();
- }
-}
-
-css::uno::Reference< css::beans::XPropertySetInfo >
-PropertySetMixinImpl::getPropertySetInfo() throw (css::uno::RuntimeException) {
- try {
- return new Info(m_impl);
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::setPropertyValue(
- rtl::OUString const & propertyName, css::uno::Any const & value)
- throw (
- css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
- css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- try {
- m_impl->setProperty(
- static_cast< css::beans::XPropertySet * >(this), propertyName,
- value, false, false, 1);
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-css::uno::Any PropertySetMixinImpl::getPropertyValue(
- rtl::OUString const & propertyName)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- try {
- return m_impl->getProperty(
- static_cast< css::beans::XPropertySet * >(this), propertyName, 0);
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::addPropertyChangeListener(
- rtl::OUString const & propertyName,
- css::uno::Reference< css::beans::XPropertyChangeListener > const & listener)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- css::uno::Reference< css::beans::XPropertyChangeListener >(
- listener, css::uno::UNO_QUERY_THROW); // reject NULL listener
- checkUnknown(propertyName);
- try {
- bool disposed;
- {
- osl::MutexGuard g(m_impl->mutex);
- disposed = m_impl->disposed;
- if (!disposed) {
- m_impl->boundListeners[propertyName].insert(listener);
- }
- }
- if (disposed) {
- listener->disposing(
- css::lang::EventObject(
- static_cast< css::beans::XPropertySet * >(this)));
- }
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::removePropertyChangeListener(
- rtl::OUString const & propertyName,
- css::uno::Reference< css::beans::XPropertyChangeListener > const & listener)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- OSL_ASSERT(listener.is());
- checkUnknown(propertyName);
- try {
- osl::MutexGuard g(m_impl->mutex);
- Impl::BoundListenerMap::iterator i(
- m_impl->boundListeners.find(propertyName));
- if (i != m_impl->boundListeners.end()) {
- BoundListenerBag::iterator j(i->second.find(listener));
- if (j != i->second.end()) {
- i->second.erase(j);
- }
- }
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::addVetoableChangeListener(
- rtl::OUString const & propertyName,
- css::uno::Reference< css::beans::XVetoableChangeListener > const & listener)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- css::uno::Reference< css::beans::XVetoableChangeListener >(
- listener, css::uno::UNO_QUERY_THROW); // reject NULL listener
- checkUnknown(propertyName);
- try {
- bool disposed;
- {
- osl::MutexGuard g(m_impl->mutex);
- disposed = m_impl->disposed;
- if (!disposed) {
- m_impl->vetoListeners[propertyName].insert(listener);
- }
- }
- if (disposed) {
- listener->disposing(
- css::lang::EventObject(
- static_cast< css::beans::XPropertySet * >(this)));
- }
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::removeVetoableChangeListener(
- rtl::OUString const & propertyName,
- css::uno::Reference< css::beans::XVetoableChangeListener > const & listener)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- OSL_ASSERT(listener.is());
- checkUnknown(propertyName);
- try {
- osl::MutexGuard g(m_impl->mutex);
- Impl::VetoListenerMap::iterator i(
- m_impl->vetoListeners.find(propertyName));
- if (i != m_impl->vetoListeners.end()) {
- Impl::VetoListenerBag::iterator j(i->second.find(listener));
- if (j != i->second.end()) {
- i->second.erase(j);
- }
- }
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::setFastPropertyValue(
- sal_Int32 handle, css::uno::Any const & value)
- throw (
- css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
- css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- try {
- m_impl->setProperty(
- static_cast< css::beans::XPropertySet * >(this),
- m_impl->translateHandle(
- static_cast< css::beans::XPropertySet * >(this), handle),
- value, false, false, 1);
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-css::uno::Any PropertySetMixinImpl::getFastPropertyValue(sal_Int32 handle)
- throw (
- css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- try {
- return m_impl->getProperty(
- static_cast< css::beans::XPropertySet * >(this),
- m_impl->translateHandle(
- static_cast< css::beans::XPropertySet * >(this), handle),
- 0);
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-css::uno::Sequence< css::beans::PropertyValue >
-PropertySetMixinImpl::getPropertyValues() throw (css::uno::RuntimeException) {
- try {
- css::uno::Sequence< css::beans::PropertyValue > s(
- m_impl->handleMap.getLength());
- sal_Int32 n = 0;
- for (sal_Int32 i = 0; i < m_impl->handleMap.getLength(); ++i) {
- try {
- s[n].Value = m_impl->getProperty(
- static_cast< css::beans::XPropertySet * >(this),
- m_impl->handleMap[i], &s[n].State);
- } catch (css::beans::UnknownPropertyException &) {
- continue;
- } catch (css::lang::WrappedTargetException & e) {
- throw css::lang::WrappedTargetRuntimeException(
- e.Message, static_cast< css::beans::XPropertySet * >(this),
- e.TargetException);
- }
- s[n].Name = m_impl->handleMap[i];
- s[n].Handle = i;
- ++n;
- }
- s.realloc(n);
- return s;
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-void PropertySetMixinImpl::setPropertyValues(
- css::uno::Sequence< css::beans::PropertyValue > const & props)
- throw (
- css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
- css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
- css::uno::RuntimeException)
-{
- try {
- for (sal_Int32 i = 0; i < props.getLength(); ++i) {
- if (props[i].Handle != -1
- && (props[i].Name
- != m_impl->translateHandle(
- static_cast< css::beans::XPropertySet * >(this),
- props[i].Handle)))
- {
- throw css::beans::UnknownPropertyException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("name "))
- + props[i].Name
- + rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(" does not match handle "))
- + rtl::OUString::valueOf(props[i].Handle)),
- static_cast< css::beans::XPropertySet * >(this));
- }
- m_impl->setProperty(
- static_cast< css::beans::XPropertySet * >(this), props[i].Name,
- props[i].Value,
- props[i].State == css::beans::PropertyState_AMBIGUOUS_VALUE,
- props[i].State == css::beans::PropertyState_DEFAULT_VALUE, 0);
- }
- } catch (std::bad_alloc &) {
- //TODO OutOfMemoryException:
- throw css::uno::RuntimeException(
- rtl::OUString(), static_cast< css::beans::XPropertySet * >(this));
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */