24#include <com/sun/star/beans/XPropertySet.hpp>
25#include <com/sun/star/container/XNameContainer.hpp>
26#include <com/sun/star/xml/sax/Writer.hpp>
27#include <com/sun/star/uno/Sequence.hxx>
28#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
29#include <com/sun/star/drawing/LineDash.hpp>
30#include <com/sun/star/awt/Gradient.hpp>
31#include <com/sun/star/awt/XBitmap.hpp>
32#include <com/sun/star/drawing/Hatch.hpp>
33#include <com/sun/star/embed/ElementModes.hpp>
37#include <rtl/ustrbuf.hxx>
48#include <com/sun/star/embed/XTransactedObject.hpp>
68using com::sun::star::embed::XTransactedObject;
72class SvxXMLTableEntryExporter
75 explicit SvxXMLTableEntryExporter(
SvXMLExport& rExport ) : mrExport( rExport ) {}
76 virtual ~SvxXMLTableEntryExporter();
78 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue ) = 0;
84class SvxXMLColorEntryExporter :
public SvxXMLTableEntryExporter
87 explicit SvxXMLColorEntryExporter(
SvXMLExport& rExport );
89 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
92class SvxXMLLineEndEntryExporter :
public SvxXMLTableEntryExporter
95 explicit SvxXMLLineEndEntryExporter(
SvXMLExport& rExport );
97 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
102class SvxXMLDashEntryExporter :
public SvxXMLTableEntryExporter
105 explicit SvxXMLDashEntryExporter(
SvXMLExport& rExport );
107 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
113class SvxXMLHatchEntryExporter :
public SvxXMLTableEntryExporter
116 explicit SvxXMLHatchEntryExporter(
SvXMLExport& rExport );
118 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
123class SvxXMLGradientEntryExporter :
public SvxXMLTableEntryExporter
126 explicit SvxXMLGradientEntryExporter(
SvXMLExport& rExport );
128 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
133class SvxXMLBitmapEntryExporter :
public SvxXMLTableEntryExporter
136 explicit SvxXMLBitmapEntryExporter(
SvXMLExport& rExport );
138 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
144 const css::uno::Reference< css::uno::XComponentContext >& rContext,
145 const uno::Reference<xml::sax::XDocumentHandler> & rHandler,
146 const uno::Reference<container::XNameContainer >& xTable,
147 uno::Reference<document::XGraphicStorageHandler>
const & xGraphicStorageHandler)
166 uno::Reference< beans::XPropertySet > xProps( xOut, uno::UNO_QUERY );
169 OSL_FAIL(
"Missing stream metadata interface" );
175 xProps->setPropertyValue(
"MediaType",
uno::Any( OUString(
"text/xml" ) ) );
178 xProps->setPropertyValue(
"UseCommonStoragePasswordEncryption",
uno::Any(
true ) );
179 }
catch (
const uno::Exception & )
187 const uno::Reference < embed::XStorage >& xSubStorage )
189 uno::Reference < io::XStream >
xStream = xSubStorage->openStreamElement(
191 embed::ElementModes::WRITE );
194 *xOut =
xStream->getOutputStream();
198 const OUString& rURL,
199 const uno::Reference<container::XNameContainer >& xTable,
200 const uno::Reference<embed::XStorage >& xStorage,
204 std::unique_ptr<SfxMedium> pMedium;
208 bool bToStorage = aURLObj.
GetProtocol() == INetProtocol::NotValid;
216 uno::Reference< uno::XComponentContext> xContext( ::comphelper::getProcessComponentContext() );
218 uno::Reference< xml::sax::XWriter > xWriter = xml::sax::Writer::create( xContext );
220 uno::Reference < io::XStream >
xStream;
221 uno::Reference < io::XOutputStream > xOut;
222 uno::Reference<embed::XStorage > xSubStorage;
223 uno::Reference<XGraphicStorageHandler> xGraphicStorageHandler;
224 const sal_Int32 eCreate = embed::ElementModes::WRITE | embed::ElementModes::TRUNCATE;
226 if( !bToStorage || !xStorage.is() )
232 pMedium.reset(
new SfxMedium( rURL, StreamMode::WRITE | StreamMode::TRUNC ));
234 SvStream* pStream = pMedium->GetOutStream();
237 OSL_FAIL(
"no output stream!" );
246 OUString aPath = rURL;
251 xSubStorage = xStorage->openStorageElement( aPath, eCreate );
252 }
catch (uno::Exception &) {
253 OSL_FAIL(
"no output storage!" );
261 xStream = xStorage->openStreamElement( aPath, eCreate );
265 xOut =
xStream->getOutputStream();
266 }
catch (uno::Exception &) {
267 OSL_FAIL(
"no output stream!" );
275 if( !xOut.is() && xSubStorage.is() )
280 xWriter->setOutputStream( xOut );
281 if( xGraphicHelper.is() )
282 xGraphicStorageHandler = xGraphicHelper.get();
286 bRet = xExporter->exportTable();
289 xGraphicHelper->dispose();
290 xGraphicHelper.clear();
292 if( xSubStorage.is() )
294 uno::Reference< XTransactedObject > xTrans( xSubStorage, UNO_QUERY );
298 xSubStorage->dispose();
301 catch( uno::Exception& )
324 while( USHRT_MAX !=
nPos )
335 char const* pEleName;
337 std::unique_ptr<SvxXMLTableEntryExporter> pExporter;
341 pExporter.reset(
new SvxXMLColorEntryExporter(*
this));
342 pEleName =
"color-table";
346 pExporter.reset(
new SvxXMLLineEndEntryExporter(*
this));
347 pEleName =
"marker-table";
351 pExporter.reset(
new SvxXMLDashEntryExporter(*
this));
352 pEleName =
"dash-table";
356 pExporter.reset(
new SvxXMLHatchEntryExporter(*
this));
357 pEleName =
"hatch-table";
361 pExporter.reset(
new SvxXMLGradientEntryExporter(*
this));
362 pEleName =
"gradient-table";
366 pExporter.reset(
new SvxXMLBitmapEntryExporter(*
this));
367 pEleName =
"bitmap-table";
371 OSL_FAIL(
"unknown type for export");
380 for(
const OUString& rName : aNames )
382 aAny =
mxTable->getByName( rName );
383 pExporter->exportEntry( rName, aAny );
406SvxXMLTableEntryExporter::~SvxXMLTableEntryExporter()
411SvxXMLColorEntryExporter::SvxXMLColorEntryExporter(
SvXMLExport& rExport )
412: SvxXMLTableEntryExporter( rExport )
416void SvxXMLColorEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
418 mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_NAME, rStrName );
420 sal_Int32 nColor = 0;
425 mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_COLOR, aOut.makeStringAndClear() );
431SvxXMLLineEndEntryExporter::SvxXMLLineEndEntryExporter(
SvXMLExport& rExport )
432: SvxXMLTableEntryExporter( rExport ), maMarkerStyle( rExport )
436void SvxXMLLineEndEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
438 maMarkerStyle.exportXML( rStrName, rValue );
442SvxXMLDashEntryExporter::SvxXMLDashEntryExporter(
SvXMLExport& rExport )
443: SvxXMLTableEntryExporter( rExport ), maDashStyle( rExport )
447void SvxXMLDashEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
449 maDashStyle.exportXML( rStrName, rValue );
453SvxXMLHatchEntryExporter::SvxXMLHatchEntryExporter(
SvXMLExport& rExport )
454: SvxXMLTableEntryExporter( rExport ), maHatchStyle( rExport )
458void SvxXMLHatchEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
460 maHatchStyle.exportXML( rStrName, rValue );
464SvxXMLGradientEntryExporter::SvxXMLGradientEntryExporter(
SvXMLExport& rExport )
465: SvxXMLTableEntryExporter( rExport ), maGradientStyle( rExport )
469void SvxXMLGradientEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
471 maGradientStyle.exportXML( rStrName, rValue );
475SvxXMLBitmapEntryExporter::SvxXMLBitmapEntryExporter(
SvXMLExport& rExport )
476: SvxXMLTableEntryExporter( rExport )
480void SvxXMLBitmapEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
INetProtocol GetProtocol() const
const SvXMLNamespaceMap & GetNamespaceMap() const
SvXMLNamespaceMap & GetNamespaceMap_()
void addChaffWhenEncryptedStorage()
const css::uno::Reference< css::xml::sax::XDocumentHandler > & GetDocHandler() const
comphelper::AttributeList & GetAttrList()
void SetGraphicStorageHandler(css::uno::Reference< css::document::XGraphicStorageHandler > const &rxGraphicStorageHandler)
static rtl::Reference< SvXMLGraphicHelper > Create(const css::uno::Reference< css::embed::XStorage > &rXMLStorage, SvXMLGraphicHelperMode eCreateMode)
sal_uInt16 GetFirstKey() const
sal_uInt16 GetNextKey(sal_uInt16 nOldKey) const
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
const css::uno::Reference< css::container::XNameContainer > & mxTable
static bool save(const OUString &rURL, const css::uno::Reference< css::container::XNameContainer > &xTable, const css::uno::Reference< css::embed::XStorage > &xStorage, OUString *pOptName)
SvxXMLXTableExportComponent(const css::uno::Reference< css::uno::XComponentContext > &xContext, const css::uno::Reference< css::xml::sax::XDocumentHandler > &xHandler, const css::uno::Reference< css::container::XNameContainer > &xTable, css::uno::Reference< css::document::XGraphicStorageHandler > const &xGraphicStorageHandler)
virtual void ExportAutoStyles_() override
virtual void ExportMasterStyles_() override
virtual ~SvxXMLXTableExportComponent() override
virtual void ExportContent_() override
bool exportTable() noexcept
void AddAttribute(const OUString &sName, const OUString &sValue)
static css::uno::Reference< css::embed::XStorage > GetStorageFromURL(const OUString &aURL, sal_Int32 nStorageMode, const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
css::uno::Type const & get()
static bool convertColor(sal_Int32 &rColor, std::u16string_view rValue)
#define TOOLS_WARN_EXCEPTION(area, stream)
XMLOFF_DLLPUBLIC void exportXML(OUString const &rStrName, css::uno::Any const &rValue, SvXMLExport &rExport)
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
constexpr sal_uInt16 XML_NAMESPACE_DRAW
constexpr sal_uInt16 XML_NAMESPACE_XLINK
constexpr sal_uInt16 XML_NAMESPACE_SVG
constexpr sal_uInt16 XML_NAMESPACE_OFFICE
constexpr sal_uInt16 XML_NAMESPACE_OOO
static void initializeStreamMetadata(const uno::Reference< uno::XInterface > &xOut)
static void createStorageStream(uno::Reference< io::XOutputStream > *xOut, rtl::Reference< SvXMLGraphicHelper > &rxGraphicHelper, const uno::Reference< embed::XStorage > &xSubStorage)