1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #ifndef _COMPHELPER_CHAINABLEPROPERTYSET_HXX_ 29 #define _COMPHELPER_CHAINABLEPROPERTYSET_HXX_ 30 31 #include <com/sun/star/beans/XPropertySet.hpp> 32 #include <com/sun/star/beans/XPropertyState.hpp> 33 #include <com/sun/star/beans/XMultiPropertySet.hpp> 34 #include <comphelper/PropertyInfoHash.hxx> 35 #include "comphelper/comphelperdllapi.h" 36 37 namespace comphelper 38 { 39 class ChainablePropertySetInfo; 40 } 41 namespace vos 42 { 43 class IMutex; 44 } 45 /* 46 * A ChainablePropertySet has the following features: 47 * 48 * 1. It implements both the PropertySet and MultiPropertySet interfaces. 49 * 2. It can be 'included' in a MasterPropertySet to seamlessly appear as if 50 * if it's properties were in the master. 51 * 52 * To be used as a base class for PropertySets, the subclass must implement 53 * the 6 protected pure virtual functions. If a mutex is passed to the 54 * constructor, this is locked before any call to _getSingleValue or 55 * _setSingleValue and released after all processing has completed 56 * (including _postSetValues or _postGetValues ) 57 * 58 * The implementations of getPropertyValues/setPropertyValues call 59 * lockMutex and _preGetValues/_preSetValues once before calling 60 * _getSingleValue/_setSingleValue for each property. After each 61 * property has been dealt with, _postGetValues/_postSetValues 62 * are called once. 63 * 64 * Any MasterPropertySet implementations that can include an 65 * implementation of a given ChainablePropertySet must be 66 * declared as a 'friend' in the implementation of the ChainablePropertySet. 67 * 68 */ 69 70 namespace comphelper 71 { 72 class COMPHELPER_DLLPUBLIC ChainablePropertySet : public ::com::sun::star::beans::XPropertySet, 73 public ::com::sun::star::beans::XPropertyState, 74 public ::com::sun::star::beans::XMultiPropertySet 75 { 76 friend class MasterPropertySet; 77 protected: 78 ChainablePropertySetInfo *mpInfo; 79 vos::IMutex *mpMutex; 80 ::com::sun::star::uno::Reference < com::sun::star::beans::XPropertySetInfo > mxInfo; 81 void lockMutex(); 82 void unlockMutex(); 83 84 virtual void _preSetValues () 85 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ) = 0; 86 virtual void _setSingleValue( const comphelper::PropertyInfo & rInfo, const ::com::sun::star::uno::Any &rValue ) 87 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ) = 0; 88 virtual void _postSetValues () 89 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ) = 0; 90 91 virtual void _preGetValues () 92 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ) = 0; 93 virtual void _getSingleValue( const comphelper::PropertyInfo & rInfo, ::com::sun::star::uno::Any & rValue ) 94 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException ) = 0; 95 virtual void _postGetValues () 96 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ) = 0; 97 98 virtual void _preGetPropertyState () 99 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ); 100 virtual void _getPropertyState( const comphelper::PropertyInfo& rInfo, ::com::sun::star::beans::PropertyState& rState ) 101 throw(::com::sun::star::beans::UnknownPropertyException ); 102 virtual void _postGetPropertyState () 103 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ); 104 105 virtual void _setPropertyToDefault( const comphelper::PropertyInfo& rEntry ) 106 throw(::com::sun::star::beans::UnknownPropertyException ); 107 virtual ::com::sun::star::uno::Any _getPropertyDefault( const comphelper::PropertyInfo& rEntry ) 108 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException ); 109 110 public: 111 ChainablePropertySet( comphelper::ChainablePropertySetInfo* pInfo, vos::IMutex *pMutex = NULL ) 112 throw(); 113 virtual ~ChainablePropertySet() 114 throw(); 115 116 // XPropertySet 117 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) 118 throw(::com::sun::star::uno::RuntimeException); 119 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) 120 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 121 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName ) 122 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 123 virtual void SAL_CALL addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) 124 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 125 virtual void SAL_CALL removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) 126 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 127 virtual void SAL_CALL addVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) 128 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 129 virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) 130 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 131 132 // XMultiPropertySet 133 virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ) 134 throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 135 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyValues( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ) 136 throw(::com::sun::star::uno::RuntimeException); 137 virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) 138 throw(::com::sun::star::uno::RuntimeException); 139 virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) 140 throw(::com::sun::star::uno::RuntimeException); 141 virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) 142 throw(::com::sun::star::uno::RuntimeException); 143 144 // XPropertyState 145 virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const ::rtl::OUString& PropertyName ) 146 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); 147 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL getPropertyStates( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyName ) 148 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); 149 virtual void SAL_CALL setPropertyToDefault( const ::rtl::OUString& PropertyName ) 150 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); 151 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const ::rtl::OUString& aPropertyName ) 152 throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 153 }; 154 } 155 #endif 156 157