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>
68 using com::sun::star::embed::XTransactedObject;
72 class SvxXMLTableEntryExporter
75 explicit SvxXMLTableEntryExporter(
SvXMLExport& rExport ) : mrExport( rExport ) {}
76 virtual ~SvxXMLTableEntryExporter();
78 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue ) = 0;
84 class SvxXMLColorEntryExporter :
public SvxXMLTableEntryExporter
87 explicit SvxXMLColorEntryExporter(
SvXMLExport& rExport );
89 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
92 class SvxXMLLineEndEntryExporter :
public SvxXMLTableEntryExporter
95 explicit SvxXMLLineEndEntryExporter(
SvXMLExport& rExport );
97 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
102 class SvxXMLDashEntryExporter :
public SvxXMLTableEntryExporter
105 explicit SvxXMLDashEntryExporter(
SvXMLExport& rExport );
107 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
113 class SvxXMLHatchEntryExporter :
public SvxXMLTableEntryExporter
116 explicit SvxXMLHatchEntryExporter(
SvXMLExport& rExport );
118 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
123 class SvxXMLGradientEntryExporter :
public SvxXMLTableEntryExporter
126 explicit SvxXMLGradientEntryExporter(
SvXMLExport& rExport );
128 virtual void exportEntry(
const OUString& rStrName,
const Any& rValue )
override;
133 class 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;
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 );
406 SvxXMLTableEntryExporter::~SvxXMLTableEntryExporter()
411 SvxXMLColorEntryExporter::SvxXMLColorEntryExporter(
SvXMLExport& rExport )
412 : SvxXMLTableEntryExporter( rExport )
416 void 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() );
431 SvxXMLLineEndEntryExporter::SvxXMLLineEndEntryExporter(
SvXMLExport& rExport )
432 : SvxXMLTableEntryExporter( rExport ), maMarkerStyle( rExport )
436 void SvxXMLLineEndEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
438 maMarkerStyle.exportXML( rStrName, rValue );
442 SvxXMLDashEntryExporter::SvxXMLDashEntryExporter(
SvXMLExport& rExport )
443 : SvxXMLTableEntryExporter( rExport ), maDashStyle( rExport )
447 void SvxXMLDashEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
449 maDashStyle.exportXML( rStrName, rValue );
453 SvxXMLHatchEntryExporter::SvxXMLHatchEntryExporter(
SvXMLExport& rExport )
454 : SvxXMLTableEntryExporter( rExport ), maHatchStyle( rExport )
458 void SvxXMLHatchEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
460 maHatchStyle.exportXML( rStrName, rValue );
464 SvxXMLGradientEntryExporter::SvxXMLGradientEntryExporter(
SvXMLExport& rExport )
465 : SvxXMLTableEntryExporter( rExport ), maGradientStyle( rExport )
469 void SvxXMLGradientEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
471 maGradientStyle.exportXML( rStrName, rValue );
475 SvxXMLBitmapEntryExporter::SvxXMLBitmapEntryExporter(
SvXMLExport& rExport )
476 : SvxXMLTableEntryExporter( rExport )
480 void SvxXMLBitmapEntryExporter::exportEntry(
const OUString& rStrName,
const Any& rValue )
virtual void ExportMasterStyles_() override
constexpr sal_uInt16 XML_NAMESPACE_OFFICE
static void createStorageStream(uno::Reference< io::XOutputStream > *xOut, rtl::Reference< SvXMLGraphicHelper > &rxGraphicHelper, const uno::Reference< embed::XStorage > &xSubStorage)
static void initializeStreamMetadata(const uno::Reference< uno::XInterface > &xOut)
static bool save(const OUString &rURL, const css::uno::Reference< css::container::XNameContainer > &xTable, const css::uno::Reference< css::embed::XStorage > &xStorage, OUString *pOptName)
void addChaffWhenEncryptedStorage()
bool exportTable() noexcept
sal_uInt16 GetFirstKey() const
constexpr sal_uInt16 XML_NAMESPACE_XLINK
constexpr sal_uInt16 XML_NAMESPACE_OOO
const css::uno::Reference< css::xml::sax::XDocumentHandler > & GetDocHandler() const
SvXMLAttributeList & GetAttrList()
constexpr sal_uInt16 XML_NAMESPACE_DRAW
XMLOFF_DLLPUBLIC void exportXML(OUString const &rStrName, css::uno::Any const &rValue, SvXMLExport &rExport)
constexpr sal_uInt16 XML_NAMESPACE_SVG
#define TOOLS_WARN_EXCEPTION(area, stream)
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)
static bool convertColor(sal_Int32 &rColor, std::u16string_view rValue)
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 >())
virtual ~SvxXMLXTableExportComponent() override
css::uno::Type const & get()
sal_uInt16 GetNextKey(sal_uInt16 nOldKey) const
const SvXMLNamespaceMap & GetNamespaceMap() const
void SetGraphicStorageHandler(css::uno::Reference< css::document::XGraphicStorageHandler > const &rxGraphicStorageHandler)
virtual void ExportContent_() override
SvXMLNamespaceMap & GetNamespaceMap_()
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
INetProtocol GetProtocol() const
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
Reference< XComponentContext > getProcessComponentContext()
void AddAttribute(const OUString &sName, const OUString &sValue)
static rtl::Reference< SvXMLGraphicHelper > Create(const css::uno::Reference< css::embed::XStorage > &rXMLStorage, SvXMLGraphicHelperMode eCreateMode)
const css::uno::Reference< css::container::XNameContainer > & mxTable
virtual void ExportAutoStyles_() override