23 #include <com/sun/star/packages/WrongPasswordException.hpp>
24 #include <com/sun/star/packages/zip/ZipIOException.hpp>
25 #include <com/sun/star/embed/ElementModes.hpp>
26 #include <com/sun/star/beans/NamedValue.hpp>
27 #include <com/sun/star/util/MeasureUnit.hpp>
28 #include <com/sun/star/xml/sax/SAXParseException.hpp>
29 #include <com/sun/star/document/XGraphicStorageHandler.hpp>
30 #include <com/sun/star/document/XEmbeddedObjectResolver.hpp>
43 #include <com/sun/star/xml/sax/InputSource.hpp>
44 #include <com/sun/star/beans/PropertyAttribute.hpp>
52 #include <com/sun/star/io/XInputStream.hpp>
60 #include <strings.hxx>
67 using ::com::sun::star::uno::Reference;
82 class RptMLMasterStylesContext_Impl:
90 RptMLMasterStylesContext_Impl( ORptFilter& rImport );
92 RptMLMasterStylesContext_Impl(
const RptMLMasterStylesContext_Impl&) =
delete;
93 RptMLMasterStylesContext_Impl& operator=(
const RptMLMasterStylesContext_Impl&) =
delete;
94 virtual void SAL_CALL endFastElement(sal_Int32 nElement)
override;
99 RptMLMasterStylesContext_Impl::RptMLMasterStylesContext_Impl( ORptFilter& rImport ) :
104 void RptMLMasterStylesContext_Impl::endFastElement(sal_Int32 )
106 FinishStyles(
true );
107 GetImport().FinishStyles();
112 const uno::Reference<XInputStream>& xInputStream,
113 const uno::Reference<XComponent>& xModelComponent,
114 const uno::Reference<XComponentContext> & rContext,
115 const uno::Reference<XFastParser>& rFastParser )
117 OSL_ENSURE(xInputStream.is(),
"input stream missing");
118 OSL_ENSURE(xModelComponent.is(),
"document missing");
119 OSL_ENSURE(rContext.is(),
"factory missing");
122 InputSource aParserInput;
123 aParserInput.aInputStream = xInputStream;
126 SAL_WARN_IF( !rFastParser.is(),
"reportdesign",
"Can't instantiate filter component." );
127 if( !rFastParser.is() )
131 uno::Reference < XImporter > xImporter( rFastParser, UNO_QUERY );
132 xImporter->setTargetDocument( xModelComponent );
137 rFastParser->parseStream( aParserInput );
139 catch (
const SAXParseException&)
144 catch (
const SAXException&)
148 catch (
const packages::zip::ZipIOException&)
169 const uno::Reference< embed::XStorage >& xStorage,
170 const uno::Reference<XComponent>& xModelComponent,
171 const char* pStreamName,
172 const uno::Reference<XComponentContext> & rxContext,
173 const Reference<document::XGraphicStorageHandler> & rxGraphicStorageHandler,
174 const Reference<document::XEmbeddedObjectResolver>& _xEmbeddedObjectResolver,
175 const OUString& _sFilterName
176 ,
const uno::Reference<beans::XPropertySet>& _xProp)
178 OSL_ENSURE( xStorage.is(),
"Need storage!");
179 OSL_ENSURE(
nullptr != pStreamName,
"Please, please, give me a name!");
185 uno::Reference< io::XStream > xDocStream;
190 OUString sStreamName = OUString::createFromAscii(pStreamName);
191 if ( !xStorage->hasByName( sStreamName ) || !xStorage->isStreamElement( sStreamName ) )
198 xDocStream = xStorage->openStreamElement( sStreamName, embed::ElementModes::READ );
200 catch (
const packages::WrongPasswordException&)
204 catch (
const uno::Exception&)
210 if (rxGraphicStorageHandler.is())
212 if( _xEmbeddedObjectResolver.is())
217 uno::Sequence< uno::Any > aFilterCompArgs( nArgs );
218 auto aFilterCompArgsRange = asNonConstRange(aFilterCompArgs);
221 if (rxGraphicStorageHandler.is())
222 aFilterCompArgsRange[nArgs++] <<= rxGraphicStorageHandler;
223 if( _xEmbeddedObjectResolver.is())
224 aFilterCompArgsRange[ nArgs++ ] <<= _xEmbeddedObjectResolver;
226 aFilterCompArgsRange[ nArgs++ ] <<= _xProp;
229 Reference< XFastParser > xFastParser(
230 rxContext->getServiceManager()->createInstanceWithArgumentsAndContext(_sFilterName, aFilterCompArgs, rxContext),
231 uno::UNO_QUERY_THROW );
232 uno::Reference< XInputStream > xInputStream = xDocStream->getInputStream();
245 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
247 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
251 SvXMLImportFlags::SETTINGS ));
258 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
260 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
264 SvXMLImportFlags::AUTOSTYLES | SvXMLImportFlags::CONTENT | SvXMLImportFlags::SCRIPTS | SvXMLImportFlags::FONTDECLS ));
271 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
273 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
277 SvXMLImportFlags::STYLES | SvXMLImportFlags::MASTERSTYLES | SvXMLImportFlags::AUTOSTYLES |
278 SvXMLImportFlags::FONTDECLS ));
285 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
287 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
291 SvXMLImportFlags::META ));
296 :
SvXMLImport(_rxContext, rImplementationName, nImportFlags)
319 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
321 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
324 "com.sun.star.comp.report.OReportFilter",
325 SvXMLImportFlags::ALL ));
348 uno::Reference< embed::XStorage > xStorage;
349 uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier;
351 for(
const PropertyValue& rProp : rDescriptor)
353 if ( rProp.Name ==
"FileName" )
354 rProp.Value >>= sFileName;
355 else if ( rProp.Name ==
"Storage" )
356 rProp.Value >>= xStorage;
357 else if ( rProp.Name ==
"ComponentData" )
359 Sequence< PropertyValue > aComponent;
360 rProp.Value >>= aComponent;
361 const PropertyValue* pComponentIter = aComponent.getConstArray();
362 const PropertyValue* pComponentEnd = pComponentIter + aComponent.getLength();
363 pComponentIter = std::find_if(pComponentIter, pComponentEnd,
364 [](
const PropertyValue& rComponent) {
return rComponent.Name ==
"ActiveConnection"; });
365 if (pComponentIter != pComponentEnd)
367 uno::Reference<sdbc::XConnection> xCon(pComponentIter->Value, uno::UNO_QUERY);
368 xNumberFormatsSupplier = ::dbtools::getNumberFormats(xCon);
373 if ( !sFileName.isEmpty() )
376 sFileName, ( StreamMode::READ | StreamMode::NOCREATE ) );
389 bool bRet = xStorage.is();
394 #if OSL_DEBUG_LEVEL > 1
395 uno::Reference < container::XNameAccess > xAccess( xStorage, uno::UNO_QUERY );
396 uno::Sequence< OUString>
aSeq = xAccess->getElementNames();
397 const OUString* pDebugIter = aSeq.getConstArray();
398 const OUString* pDebugEnd = pDebugIter + aSeq.getLength();
399 for(;pDebugIter != pDebugEnd;++pDebugIter)
405 uno::Reference<document::XGraphicStorageHandler> xGraphicStorageHandler;
406 uno::Reference<document::XEmbeddedObjectResolver> xEmbeddedObjectResolver;
409 uno::Sequence<uno::Any> aArgs{
uno::Any(xStorage) };
410 xGraphicStorageHandler.set(
411 xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
"com.sun.star.comp.Svx.GraphicImportHelper", aArgs, xContext),
414 uno::Reference< lang::XMultiServiceFactory > xReportServiceFactory(
m_xReportDefinition, uno::UNO_QUERY);
415 aArgs.getArray()[0] <<= beans::NamedValue(
"Storage",
uno::Any(xStorage));
416 xEmbeddedObjectResolver.set( xReportServiceFactory->createInstanceWithArguments(
"com.sun.star.document.ImportEmbeddedObjectResolver",aArgs) , uno::UNO_QUERY);
418 static constexpr OUStringLiteral s_sOld =
u"OldFormat";
426 { OUString(), 0, css::uno::Type(), 0, 0 }
431 assert(!sVal.isEmpty());
432 xProp->setPropertyValue(
"BaseURI",
uno::Any(sVal));
433 const OUString
sHierarchicalDocumentName( aDescriptor.getUnpackedValueOrDefault(
"HierarchicalDocumentName",OUString()) );
437 static constexpr OUStringLiteral s_sMeta =
u"meta.xml";
438 static constexpr OUStringLiteral s_sStreamName =
u"StreamName";
439 xProp->setPropertyValue(s_sStreamName,
uno::Any(OUString(s_sMeta)));
444 ,xGraphicStorageHandler
445 ,xEmbeddedObjectResolver
453 xProp->setPropertyValue(s_sOld,
uno::Any(!(xStorage->hasByName(s_sMeta) || xStorage->isStreamElement( s_sMeta ))));
455 catch (
const uno::Exception&)
457 xProp->setPropertyValue(s_sOld,
uno::Any(
true));
462 xProp->setPropertyValue(s_sStreamName,
uno::Any(OUString(
"settings.xml")));
467 ,xGraphicStorageHandler
468 ,xEmbeddedObjectResolver
475 xProp->setPropertyValue(s_sStreamName,
uno::Any(OUString(
"styles.xml")));
480 ,xGraphicStorageHandler
481 ,xEmbeddedObjectResolver
488 xProp->setPropertyValue(s_sStreamName,
uno::Any(OUString(
"content.xml")));
493 ,xGraphicStorageHandler
494 ,xEmbeddedObjectResolver
529 RptXMLDocumentSettingsContext(
SvXMLImport & rImport)
534 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
535 sal_Int32 nElement,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& )
override
553 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
554 sal_Int32 nElement,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& )
override
556 ORptFilter & rImport(static_cast<ORptFilter&>(GetImport()));
561 return rImport.CreateFontDeclsContext();
565 rImport.SetMasterStyles(pStyleContext);
566 return pStyleContext;
570 return rImport.CreateStylesContext(
false);
573 return rImport.CreateStylesContext(true);
583 const uno::Reference<xml::sax::XFastAttributeList> & xAttrList)
608 RptXMLDocumentContentContext(
SvXMLImport & rImport)
613 virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
614 sal_Int32 nElement,
const css::uno::Reference< css::xml::sax::XFastAttributeList >& )
override
616 ORptFilter & rImport(static_cast<ORptFilter&>(GetImport()));
620 return new RptXMLDocumentBodyContext(rImport);
623 return rImport.CreateFontDeclsContext();
626 return rImport.CreateStylesContext(
true);
635 const uno::Reference< xml::sax::XFastAttributeList >& )
646 pContext =
new RptXMLDocumentContentContext(*
this);
649 pContext =
new RptXMLDocumentStylesContext(*
this);
653 pContext =
new RptXMLDocumentSettingsContext(*
this);
668 SetStyles(static_cast<SvXMLStylesContext*>(pContext));
708 OSL_ENSURE(
GetModel().is(),
"model missing; maybe startDocument wasn't called?" );
740 uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
GetModel(), uno::UNO_QUERY_THROW);
748 bool bOldFormat =
true;
752 static constexpr OUStringLiteral s_sOld =
u"OldFormat";
753 if ( xProp->getPropertySetInfo()->hasPropertyByName(s_sOld))
755 xProp->getPropertyValue(s_sOld) >>= bOldFormat;
void SetStyles(SvXMLStylesContext *pStyles)
const Reference< XReportDefinition > & getReportDefinition() const
static const XMLPropertyMapEntry * GetColumnStyleProps()
#define ERRCODE_SFX_WRONGPASSWORD
SvXMLImport & GetImport()
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32, const css::uno::Reference< css::xml::sax::XFastAttributeList > &) override
static const XMLPropertyMapEntry * GetRowStyleProps()
SvXMLNamespaceMap & GetNamespaceMap()
void SetXMLMeasureUnit(sal_Int16 const eXMLMeasureUnit)
constexpr OUStringLiteral SERVICE_STYLESIMPORTER
Reference< XReportDefinition > m_xReportDefinition
virtual void SAL_CALL startDocument() override
void SetFontDecls(XMLFontStylesContext *pFontDecls)
std::shared_ptr< rptui::OReportModel > m_pReportModel
void SetCoreMeasureUnit(sal_Int16 const eCoreMeasureUnit)
virtual ~ORptFilter() noexcept override
rtl::Reference< XMLPropertyHandlerFactory > m_xPropHdlFactory
static const OUString & convertFormula(const OUString &_sFormula)
SvXMLImportContext * CreateFontDeclsContext()
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * reportdesign_XMLOasisContentImporter_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
Imports only content.
SvXMLStylesContext * GetStyles()
SvXMLImportContext * CreateStylesContext(bool bIsAutoStyle)
bool HasShapeImport() const
void Increment(sal_Int32 nInc=1)
#define TOOLS_WARN_EXCEPTION(area, stream)
ORptFilter(const Reference< XComponentContext > &_rxContext, OUString const &rImplementationName, SvXMLImportFlags nImportFlags)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * reportdesign_ORptStylesImportHelper_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
Imports only styles.
virtual void FillPropertySet(const css::uno::Reference< css::beans::XPropertySet > &rPropSet)
virtual void SAL_CALL endDocument() override
static DialogMask HandleError(ErrCode nId, weld::Window *pParent=nullptr, DialogMask nMask=DialogMask::MAX)
void insertFunction(const css::uno::Reference< css::report::XFunction > &_xFunction)
inserts a new function
COMPHELPER_DLLPUBLIC css::uno::Reference< css::beans::XPropertySet > GenericPropertySet_CreateInstance(PropertySetInfo *pInfo)
rtl::Reference< XMLPropertySetMapper > m_xRowStylesPropertySetMapper
ProgressBarHelper * GetProgressBarHelper()
virtual SvXMLImportContext * CreateFastContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList) override
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * reportdesign_ORptImportHelper_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
Imports only settings.
css::uno::Type const & get()
static rtl::Reference< XMLPropertySetMapper > GetCellStylePropertyMap(bool _bOldFormat, bool bForExport)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * reportdesign_OReportFilter_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
#define ERRCODE_IO_BROKENPACKAGE
static std::shared_ptr< rptui::OReportModel > getSdrModel(const css::uno::Reference< css::report::XReportDefinition > &_xReportDefinition)
virtual void SAL_CALL startDocument() override
constexpr OUStringLiteral SERVICE_CONTENTIMPORTER
static vcl::Window * GetFocusWindow()
rtl::Reference< XMLPropertySetMapper > m_xColumnStylesPropertySetMapper
css::uno::Reference< css::embed::XStorage > GetStorage(bool bCreateTempFile=true)
css::uno::Reference< css::uno::XComponentContext > const & GetComponentContext() const
SvXMLImportFlags getImportFlags() const
#define SAL_WARN_IF(condition, area, stream)
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
constexpr sal_uInt16 XML_NAMESPACE_REPORT
static ErrCode ReadThroughComponent(const uno::Reference< XInputStream > &xInputStream, const uno::Reference< XComponent > &xModelComponent, const uno::Reference< XComponentContext > &rContext, const uno::Reference< XFastParser > &rFastParser)
read a component (file + filter version)
#define XML_ELEMENT(prefix, name)
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
const SvXMLUnitConverter & GetMM100UnitConverter() const
#define PROGRESS_BAR_STEP
const css::uno::Reference< css::frame::XModel > & GetModel() const
Sequence< sal_Int8 > aSeq
void SetAutoStyles(SvXMLStylesContext *pAutoStyles)
const SvXMLStyleContext * FindStyleChildContext(XmlStyleFamily nFamily, const OUString &rName, bool bCreateIndex=false) const
const css::uno::Reference< css::beans::XPropertySet > & getImportInfo() const
Reference< XModel > xModel
constexpr OUStringLiteral SERVICE_SETTINGSIMPORTER
TGroupFunctionMap m_aFunctions
bool implImport(const Sequence< PropertyValue > &rDescriptor)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * reportdesign_ORptMetaImportHelper_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
Imports only meta data.
void removeFunction(const OUString &_sFunctionName)
virtual XMLShapeImportHelper * CreateShapeImport() override
SvXMLStylesContext * GetAutoStyles()
SvXMLImportContext * CreateMetaContext(const sal_Int32 nElement)
virtual sal_Bool SAL_CALL filter(const Sequence< PropertyValue > &rDescriptor) override
void FinishStyles(bool bOverwrite)
virtual void SAL_CALL endDocument() override
constexpr OUStringLiteral sHierarchicalDocumentName
rtl::Reference< XMLPropertySetMapper > m_xCellStylesPropertySetMapper
constexpr OUStringLiteral SERVICE_METAIMPORTER