summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2013-12-12 18:50:18 +0100
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2013-12-12 19:48:25 +0100
commit629706f24dcc9b4654f1d717a31d584769137a53 (patch)
tree69864ed60ab40cf7ef0c328f927344a1376bdd40 /writerfilter
parent3c95f901d5f30919b339695ddac94bf5a67aa9a9 (diff)
writerfilter: refactor code to fill document grab bag
There were several chunks of identical code to add attributes to the document grab bag. I have refactored the common code to a method. Change-Id: Ia1de75280a7725ab9703b08b1b08e7a7d1e0a8f2
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx186
-rw-r--r--writerfilter/source/filter/WriterFilter.hxx3
2 files changed, 60 insertions, 129 deletions
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
index 708b9f7283a0..2854088a0d20 100644
--- a/writerfilter/source/filter/ImportFilter.cxx
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -119,140 +119,30 @@ sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDes
pDocument->resolve(*pStream);
- // Adding the saved Theme DOM to the document's grab bag
- try
- {
- uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
- if (xDocProps.is())
- {
- uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
+ // Adding some properties to the document's grab bag for interoperability purposes:
+ uno::Sequence<beans::PropertyValue> aGrabBagProperties(6);
- const OUString aGrabBagPropName = "InteropGrabBag";
- if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
- {
- uno::Sequence<beans::PropertyValue> aGrabBag;
-
- // We want to keep the previous items
- xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
- sal_Int32 length = aGrabBag.getLength();
- aGrabBag.realloc(length+1);
+ // Adding the saved Theme DOM
+ aGrabBagProperties[0].Name = "OOXTheme";
+ aGrabBagProperties[0].Value = uno::makeAny( pDocument->getThemeDom() );
- uno::Reference<xml::dom::XDocument> aThemeDom = pDocument->getThemeDom();
+ // Adding the saved custom xml DOM
+ aGrabBagProperties[1].Name = "OOXCustomXml";
+ aGrabBagProperties[1].Value = uno::makeAny( pDocument->getCustomXmlDomList() );
+ aGrabBagProperties[2].Name = "OOXCustomXmlProps";
+ aGrabBagProperties[2].Value = uno::makeAny( pDocument->getCustomXmlDomPropsList() );
- beans::PropertyValue* pValue = aGrabBag.getArray();
- pValue[length].Name = "OOXTheme";
- pValue[length].Value = uno::makeAny( aThemeDom );
+ // Adding the saved ActiveX DOM
+ aGrabBagProperties[3].Name = "OOXActiveX";
+ aGrabBagProperties[3].Value = uno::makeAny( pDocument->getActiveXDomList() );
+ aGrabBagProperties[4].Name = "OOXActiveXBin";
+ aGrabBagProperties[4].Value = uno::makeAny( pDocument->getActiveXBinList() );
- xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
- }
- }
- }
- catch(const uno::Exception&)
- {
- SAL_WARN("writerfilter","Failed to save theme dom to documents grab bag");
- }
+ // Adding the saved w:themeFontLang setting
+ aGrabBagProperties[5].Name = "ThemeFontLangProps";
+ aGrabBagProperties[5].Value = uno::makeAny( aDomainMapper->GetThemeFontLangProperties() );
- // Adding the saved custom xml DOM to the document's grab bag
- try
- {
- uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
- if (xDocProps.is())
- {
- uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
-
- const OUString aGrabBagPropName = "InteropGrabBag";
- if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
- {
- uno::Sequence<beans::PropertyValue> aGrabBag;
-
- // We want to keep the previous items
- xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
- sal_Int32 length = aGrabBag.getLength();
- aGrabBag.realloc(length+2);
-
- beans::PropertyValue* pValue = aGrabBag.getArray();
- pValue[length].Name = "OOXCustomXml";
- pValue[length].Value = uno::makeAny( pDocument->getCustomXmlDomList() );
-
- pValue[length+1].Name = "OOXCustomXmlProps";
- pValue[length+1].Value = uno::makeAny( pDocument->getCustomXmlDomPropsList() );
-
- xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
-
-
- }
- }
- }
- catch(const uno::Exception&)
- {
- SAL_WARN("writerfilter","Failed to save custom xml dom to documents grab bag");
- }
-
- // Adding the saved ActiveX DOM to the document's grab bag
- try
- {
- uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
- if (xDocProps.is())
- {
- uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
-
- const OUString aGrabBagPropName = "InteropGrabBag";
- if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
- {
- uno::Sequence<beans::PropertyValue> aGrabBag;
-
- // We want to keep the previous items
- xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
- sal_Int32 length = aGrabBag.getLength();
- aGrabBag.realloc(length+2);
-
- beans::PropertyValue* pValue = aGrabBag.getArray();
- pValue[length].Name = "OOXActiveX";
- pValue[length].Value = uno::makeAny( pDocument->getActiveXDomList() );
-
- pValue[length+1].Name = "OOXActiveXBin";
- pValue[length+1].Value = uno::makeAny( pDocument->getActiveXBinList() );
-
- xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
- }
- }
- }
- catch(const uno::Exception&)
- {
- SAL_WARN("writerfilter","Failed to save ActiveX dom to documents grab bag");
- }
-
- // Adding the saved w:themeFontLang setting to the document's grab bag
- if ( aDomainMapper->GetThemeFontLangProperties().hasElements() )
- try
- {
- uno::Reference<beans::XPropertySet> xDocProps( m_xDstDoc, uno::UNO_QUERY );
- if (xDocProps.is())
- {
- uno::Reference< beans::XPropertySetInfo > xPropsInfo = xDocProps->getPropertySetInfo();
-
- const OUString aGrabBagPropName = "InteropGrabBag";
- if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
- {
- uno::Sequence< beans::PropertyValue > aGrabBag;
-
- // We want to keep the previous items
- xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
- sal_Int32 length = aGrabBag.getLength();
- aGrabBag.realloc( length+1 );
-
- beans::PropertyValue* pValue = aGrabBag.getArray();
- pValue[length].Name = "ThemeFontLangProps";
- pValue[length].Value = uno::makeAny( aDomainMapper->GetThemeFontLangProperties() );
-
- xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
- }
- }
- }
- catch(const uno::Exception&)
- {
- SAL_WARN("writerfilter","Failed to save themeFontLang properties to documents grab bag");
- }
+ putPropertiesToDocumentGrabBag( aGrabBagProperties );
writerfilter::ooxml::OOXMLStream::Pointer_t pVBAProjectStream(writerfilter::ooxml::OOXMLDocumentFactory::createStream( pDocStream, writerfilter::ooxml::OOXMLStream::VBAPROJECT ));
oox::StorageRef xVbaPrjStrg( new ::oox::ole::OleStorage( m_xContext, pVBAProjectStream->getDocumentStream(), false ) );
@@ -393,4 +283,42 @@ uno::Sequence< OUString > WriterFilter::getSupportedServiceNames( ) throw (uno:
return WriterFilter_getSupportedServiceNames();
}
+void WriterFilter::putPropertiesToDocumentGrabBag( const uno::Sequence< beans::PropertyValue >& aProperties )
+{
+ try
+ {
+ uno::Reference<beans::XPropertySet> xDocProps(m_xDstDoc, uno::UNO_QUERY);
+ if( xDocProps.is() )
+ {
+ uno::Reference<beans::XPropertySetInfo> xPropsInfo = xDocProps->getPropertySetInfo();
+
+ const OUString aGrabBagPropName = "InteropGrabBag";
+ if( xPropsInfo.is() && xPropsInfo->hasPropertyByName( aGrabBagPropName ) )
+ {
+ // get existing grab bag
+ uno::Sequence<beans::PropertyValue> aGrabBag;
+ xDocProps->getPropertyValue( aGrabBagPropName ) >>= aGrabBag;
+ sal_Int32 length = aGrabBag.getLength();
+
+ // update grab bag size to contain the new items
+ aGrabBag.realloc( length + aProperties.getLength() );
+
+ // put the new items
+ for( sal_Int32 i=0; i < aProperties.getLength(); ++i )
+ {
+ aGrabBag[length + i].Name = aProperties[i].Name;
+ aGrabBag[length + i].Value = aProperties[i].Value;
+ }
+
+ // put it back to the document
+ xDocProps->setPropertyValue( aGrabBagPropName, uno::Any( aGrabBag ) );
+ }
+ }
+ }
+ catch(const uno::Exception&)
+ {
+ SAL_WARN("writerfilter","Failed to save documents grab bag");
+ }
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/filter/WriterFilter.hxx b/writerfilter/source/filter/WriterFilter.hxx
index d34de2ca2d85..6b8738fe7ef3 100644
--- a/writerfilter/source/filter/WriterFilter.hxx
+++ b/writerfilter/source/filter/WriterFilter.hxx
@@ -77,6 +77,9 @@ public:
virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames()
throw (::com::sun::star::uno::RuntimeException);
+private:
+ void putPropertiesToDocumentGrabBag( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProperties );
+
};