LibreOffice Module oox (master)  1
propertyset.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
21 
22 #include <com/sun/star/beans/XMultiPropertySet.hpp>
23 #include <com/sun/star/beans/XPropertySet.hpp>
24 #include <osl/diagnose.h>
25 #include <sal/log.hxx>
26 #include <tools/diagnose_ex.h>
28 
29 namespace oox {
30 
31 using namespace ::com::sun::star::beans;
32 using namespace ::com::sun::star::uno;
33 
34 void PropertySet::set( const Reference< XPropertySet >& rxPropSet )
35 {
36  mxPropSet = rxPropSet;
37  mxMultiPropSet.set( mxPropSet, UNO_QUERY );
38  if( mxPropSet.is() ) try
39  {
40  mxPropSetInfo = mxPropSet->getPropertySetInfo();
41  }
42  catch( Exception& )
43  {
44  }
45 }
46 
47 bool PropertySet::hasProperty( sal_Int32 nPropId ) const
48 {
49  if( mxPropSetInfo.is() ) try
50  {
51  const OUString& rPropName = PropertyMap::getPropertyName( nPropId );
52  return mxPropSetInfo->hasPropertyByName( rPropName );
53  }
54  catch( Exception& )
55  {
56  }
57  return false;
58 }
59 
60 // Get properties -------------------------------------------------------------
61 
62 Any PropertySet::getAnyProperty( sal_Int32 nPropId ) const
63 {
64  Any aValue;
65  return implGetPropertyValue( aValue, PropertyMap::getPropertyName( nPropId ) ) ? aValue : Any();
66 }
67 
68 // Set properties -------------------------------------------------------------
69 
70 bool PropertySet::setAnyProperty( sal_Int32 nPropId, const Any& rValue )
71 {
72  return implSetPropertyValue( PropertyMap::getPropertyName( nPropId ), rValue );
73 }
74 
75 void PropertySet::setProperties( const Sequence< OUString >& rPropNames, const Sequence< Any >& rValues )
76 {
77  OSL_ENSURE( rPropNames.getLength() == rValues.getLength(),
78  "PropertySet::setProperties - length of sequences different" );
79 
80  if( mxMultiPropSet.is() ) try
81  {
82  mxMultiPropSet->setPropertyValues( rPropNames, rValues );
83  return;
84  }
85  catch( Exception& )
86  {
87  SAL_WARN( "oox", "PropertySet::setProperties - cannot set all property values, fallback to single mode" );
88  }
89 
90  if( mxPropSet.is() )
91  {
92  const Any* pValue = rValues.getConstArray();
93  for( const OUString& rPropName : rPropNames )
94  implSetPropertyValue( rPropName, *pValue++ );
95  }
96 }
97 
98 void PropertySet::setProperties( const PropertyMap& rPropertyMap )
99 {
100  if( !rPropertyMap.empty() )
101  {
103  Sequence< Any > aValues;
104  rPropertyMap.fillSequences( aPropNames, aValues );
105  setProperties( aPropNames, aValues );
106  }
107 }
108 
109 // private --------------------------------------------------------------------
110 
111 bool PropertySet::implGetPropertyValue( Any& orValue, const OUString& rPropName ) const
112 {
113  if( mxPropSet.is() ) try
114  {
115  orValue = mxPropSet->getPropertyValue( rPropName );
116  return true;
117  }
118  catch( const Exception&)
119  {
120  TOOLS_WARN_EXCEPTION( "oox", "PropertySet::implGetPropertyValue - cannot get property \"" <<
121  rPropName << "\"");
122  }
123  return false;
124 }
125 
126 bool PropertySet::implSetPropertyValue( const OUString& rPropName, const Any& rValue )
127 {
128  if( mxPropSet.is() ) try
129  {
130  mxPropSet->setPropertyValue( rPropName, rValue );
131  return true;
132  }
133  catch( const Exception&)
134  {
135  TOOLS_WARN_EXCEPTION( "oox", "PropertySet::implSetPropertyValue - cannot set property \"" <<
136  rPropName << "\"");
137  }
138  return false;
139 }
140 
141 #ifdef DBG_UTIL
143 {
145 }
146 #endif
147 
148 } // namespace oox
149 
150 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void fillSequences(css::uno::Sequence< OUString > &rNames, css::uno::Sequence< css::uno::Any > &rValues) const
Fills the passed sequences of names and anys with all contained properties.
A helper that maps property identifiers to property values.
Definition: propertymap.hxx:52
css::uno::Any getAnyProperty(sal_Int32 nPropId) const
Gets the specified property from the property set.
Definition: propertyset.cxx:62
static void dump(const css::uno::Reference< css::beans::XPropertySet > &rXPropSet)
bool hasProperty(sal_Int32 nPropId) const
Returns true, if the specified property is supported by the property set.
Definition: propertyset.cxx:47
void setProperties(const css::uno::Sequence< OUString > &rPropNames, const css::uno::Sequence< css::uno::Any > &rValues)
Puts the passed properties into the property set.
bool implGetPropertyValue(css::uno::Any &orValue, const OUString &rPropName) const
Gets the specified property from the property set.
css::uno::Reference< css::beans::XMultiPropertySet > mxMultiPropSet
The optional multi property set interface.
bool setAnyProperty(sal_Int32 nPropId, const css::uno::Any &rValue)
Puts the passed any into the property set.
Definition: propertyset.cxx:70
#define TOOLS_WARN_EXCEPTION(area, stream)
const PropertyStruct aPropNames[]
css::uno::Reference< css::beans::XPropertySet > mxPropSet
The mandatory property set interface.
void set(const css::uno::Reference< css::beans::XPropertySet > &rxPropSet)
Sets the passed UNO property set and releases the old UNO property set.
bool empty() const
static const OUString & getPropertyName(sal_Int32 nPropId)
Returns the name of the passed property identifier.
bool implSetPropertyValue(const OUString &rPropName, const css::uno::Any &rValue)
Puts the passed any into the property set.
#define SAL_WARN(area, stream)
css::uno::Reference< css::beans::XPropertySetInfo > mxPropSetInfo
Property information.