User: rt Date: 2008-07-10 15:56:54+0000 Modified: dba/reportdesign/source/filter/xml/xmlfilter.cxx
Log: INTEGRATION: CWS rptfix02 (1.9.18); FILE MERGED 2008/07/01 14:08:37 oj 1.9.18.1: #i91253# handle old version which do not have a meta.xml file File Changes: Directory: /dba/reportdesign/source/filter/xml/ =============================================== File [changed]: xmlfilter.cxx Url: http://dba.openoffice.org/source/browse/dba/reportdesign/source/filter/xml/xmlfilter.cxx?r1=1.9&r2=1.10 Delta lines: +102 -2 --------------------- --- xmlfilter.cxx 2008-06-16 13:38:17+0000 1.9 +++ xmlfilter.cxx 2008-07-10 15:56:51+0000 1.10 @@ -47,6 +47,9 @@ #include <rtl/logfile.hxx> #include <com/sun/star/xml/sax/InputSource.hpp> #include <com/sun/star/xml/sax/XParser.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> + +#include <comphelper/genericpropertyset.hxx> #include <xmloff/ProgressBarHelper.hxx> #include <sfx2/docfile.hxx> #include <com/sun/star/io/XInputStream.hpp> @@ -54,6 +57,7 @@ #include <tools/urlobj.hxx> #include <xmloff/DocumentSettingsContext.hxx> #include <xmloff/xmluconv.hxx> +#include <xmloff/xmlmetai.hxx> #include <com/sun/star/util/XModifiable.hpp> #include <vcl/svapp.hxx> #include <vos/mutex.hxx> @@ -229,7 +233,8 @@ const uno::Reference<XMultiServiceFactory> & rFactory, const Reference< document::XGraphicObjectResolver > & _xGraphicObjectResolver, const Reference<document::XEmbeddedObjectResolver>& _xEmbeddedObjectResolver, - const ::rtl::OUString& _sFilterName) + const ::rtl::OUString& _sFilterName + ,const uno::Reference<beans::XPropertySet>& _xProp) { DBG_ASSERT( xStorage.is(), "Need storage!"); DBG_ASSERT(NULL != pStreamName, "Please, please, give me a name!"); @@ -278,6 +283,8 @@ nArgs++; if( _xEmbeddedObjectResolver.is()) nArgs++; + if ( _xProp.is() ) + nArgs++; uno::Sequence< uno::Any > aFilterCompArgs( nArgs ); @@ -286,6 +293,8 @@ aFilterCompArgs[nArgs++] <<= _xGraphicObjectResolver; if( _xEmbeddedObjectResolver.is()) aFilterCompArgs[ nArgs++ ] <<= _xEmbeddedObjectResolver; + if ( _xProp.is() ) + aFilterCompArgs[ nArgs++ ] <<= _xProp; Reference< xml::sax::XDocumentHandler > xDocHandler( rFactory->createInstanceWithArguments( _sFilterName, aFilterCompArgs ), @@ -360,6 +369,25 @@ return aSupported; } +//--------------------------------------------------------------------- +Reference< XInterface > ORptMetaImportHelper::create(Reference< XComponentContext > const & xContext) +{ + return static_cast< XServiceInfo* >(new ORptFilter(Reference< XMultiServiceFactory >(xContext->getServiceManager(),UNO_QUERY), + IMPORT_META)); +} +//--------------------------------------------------------------------- +::rtl::OUString ORptMetaImportHelper::getImplementationName_Static( ) throw (RuntimeException) +{ + return ::rtl::OUString(SERVICE_METAIMPORTER); +} +//--------------------------------------------------------------------- +Sequence< ::rtl::OUString > ORptMetaImportHelper::getSupportedServiceNames_Static( ) throw(RuntimeException) +{ + Sequence< ::rtl::OUString > aSupported(1); + aSupported[0] = SERVICE_IMPORTFILTER; + return aSupported; +} + // ------------- // - ORptFilter - // ------------- @@ -533,17 +561,49 @@ xEmbeddedObjectResolver.set( xReportServiceFactory->createInstanceWithArguments(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ImportEmbeddedObjectResolver")),aArgs) , uno::UNO_QUERY); } + static const ::rtl::OUString s_sOld(RTL_CONSTASCII_USTRINGPARAM("OldFormat")); + static comphelper::PropertyMapEntry pMap[] = + { + {"OldFormat", 9, 1, &::getCppuType((const sal_Bool*)0) ,PropertyAttribute::BOUND,0}, + { NULL, 0, 0, NULL, 0, 0 } + }; + uno::Reference<beans::XPropertySet> xProp = comphelper::GenericPropertySet_CreateInstance(new comphelper::PropertySetInfo(pMap)); uno::Reference<XComponent> xModel(GetModel(),UNO_QUERY); sal_Int32 nRet = ReadThroughComponent( xStorage ,xModel + ,"meta.xml" + ,"Meta.xml" + ,getServiceFactory() + ,xGraphicObjectResolver + ,xEmbeddedObjectResolver + ,SERVICE_METAIMPORTER + ,xProp + ); + + static const ::rtl::OUString s_sMeta(RTL_CONSTASCII_USTRINGPARAM("meta.xml")); + try + { + xProp->setPropertyValue(s_sOld,uno::makeAny(!(xStorage->hasByName(s_sMeta) || xStorage->isStreamElement( s_sMeta )))); + } + catch(uno::Exception&) + { + xProp->setPropertyValue(s_sOld,uno::makeAny(sal_True)); + } + + if ( nRet == 0 ) + { + nRet = ReadThroughComponent( xStorage + ,xModel ,"settings.xml" ,"Settings.xml" ,getServiceFactory() ,xGraphicObjectResolver ,xEmbeddedObjectResolver ,SERVICE_SETTINGSIMPORTER + ,xProp ); + } if ( nRet == 0 ) nRet = ReadThroughComponent(xStorage ,xModel @@ -552,7 +612,8 @@ ,getServiceFactory() ,xGraphicObjectResolver ,xEmbeddedObjectResolver - ,SERVICE_STYLESIMPORTER ); + ,SERVICE_STYLESIMPORTER + ,xProp); if ( nRet == 0 ) nRet = ReadThroughComponent( xStorage @@ -563,8 +624,10 @@ ,xGraphicObjectResolver ,xEmbeddedObjectResolver ,SERVICE_CONTENTIMPORTER + ,xProp ); + bRet = nRet == 0; if ( bRet ) @@ -645,6 +708,10 @@ SetMasterStyles( pStyleContext ); } break; + case XML_TOK_DOC_META: + GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + pContext = CreateMetaContext( rLocalName,xAttrList ); + break; default: break; } @@ -671,6 +738,7 @@ { XML_NAMESPACE_OOO, XML_REPORT, XML_TOK_DOC_REPORT }, { XML_NAMESPACE_OFFICE, XML_FONT_FACE_DECLS, XML_TOK_DOC_FONTDECLS }, { XML_NAMESPACE_OFFICE, XML_MASTER_STYLES, XML_TOK_DOC_MASTERSTYLES }, + { XML_NAMESPACE_OFFICE, XML_DOCUMENT_META, XML_TOK_DOC_META }, //{ XML_NAMESPACE_OOO, XML_FONT_FACE_DECLS, XML_TOK_DOC_FONTDECLS }, XML_TOKEN_MAP_END }; @@ -1018,5 +1086,37 @@ m_aFunctions.insert(TGroupFunctionMap::value_type(_xFunction->getName(),_xFunction)); } // ----------------------------------------------------------------------------- +SvXMLImportContext* ORptFilter::CreateMetaContext(const ::rtl::OUString& rLocalName,const uno::Reference<xml::sax::XAttributeList>&) +{ + SvXMLImportContext* pContext = NULL; + + if ( (getImportFlags() & IMPORT_META) ) + { + uno::Reference<xml::sax::XDocumentHandler> xDocBuilder( + getServiceFactory()->createInstance(::rtl::OUString::createFromAscii( + "com.sun.star.xml.dom.SAXDocumentBuilder")), + uno::UNO_QUERY_THROW); + uno::Reference<document::XDocumentPropertiesSupplier> xDPS(GetModel(), uno::UNO_QUERY_THROW); + pContext = new SvXMLMetaDocumentContext(*this,XML_NAMESPACE_OFFICE, rLocalName,xDPS->getDocumentProperties(), xDocBuilder); + } + return pContext; +} +// ----------------------------------------------------------------------------- +sal_Bool ORptFilter::isOldFormat() const +{ + sal_Bool bOldFormat = sal_True; + uno::Reference<beans::XPropertySet> xProp = getImportInfo(); + if ( xProp.is() ) + { + const static ::rtl::OUString s_sOld(RTL_CONSTASCII_USTRINGPARAM("OldFormat")); + if ( xProp->getPropertySetInfo()->hasPropertyByName(s_sOld)) + { + xProp->getPropertyValue(s_sOld) >>= bOldFormat; + } + } // if ( xProp.is() ) + return bOldFormat; +} + +// ----------------------------------------------------------------------------- }// rptxml // ----------------------------------------------------------------------------- --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
