20#ifndef INCLUDED_PACKAGE_SOURCE_XSTOR_OWRITEABLESTREAM_HXX
21#define INCLUDED_PACKAGE_SOURCE_XSTOR_OWRITEABLESTREAM_HXX
23#include <com/sun/star/io/XInputStream.hpp>
24#include <com/sun/star/io/XOutputStream.hpp>
25#include <com/sun/star/io/XStream.hpp>
26#include <com/sun/star/io/XSeekable.hpp>
27#include <com/sun/star/io/XTruncate.hpp>
28#include <com/sun/star/packages/XDataSinkEncrSupport.hpp>
29#include <com/sun/star/lang/XEventListener.hpp>
30#include <com/sun/star/lang/XSingleServiceFactory.hpp>
31#include <com/sun/star/embed/XEncryptionProtectedSource2.hpp>
32#include <com/sun/star/embed/XStorage.hpp>
33#include <com/sun/star/embed/XRelationshipAccess.hpp>
34#include <com/sun/star/embed/XExtendedStorageStream.hpp>
35#include <com/sun/star/embed/XTransactedObject.hpp>
36#include <com/sun/star/embed/XTransactionBroadcaster.hpp>
37#include <com/sun/star/container/XNameContainer.hpp>
38#include <com/sun/star/beans/StringPair.hpp>
56 class XComponentContext;
88 css::uno::Reference< css::uno::XComponentContext >
m_xContext;
92 css::uno::Sequence< css::beans::PropertyValue >
m_aProps;
102 css::uno::Reference< css::lang::XSingleServiceFactory >
m_xPackage;
110 css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > >
m_aOrigRelInfo;
113 css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > >
m_aNewRelInfo;
124 css::uno::Reference< css::io::XStream >
GetStream_Impl( sal_Int32 nStreamMode,
125 bool bHierarchyAccess );
132 const css::uno::Sequence< css::beans::PropertyValue >& aProps,
133 bool bUseCommonEncryption );
138 const css::uno::Reference< css::packages::XDataSinkEncrSupport >& xPackageStream,
139 const css::uno::Reference< css::lang::XSingleServiceFactory >& xPackage,
140 css::uno::Reference< css::uno::XComponentContext > xContext,
141 bool bForceEncrypted,
142 sal_Int32 nStorageType,
143 bool bDefaultCompress,
144 css::uno::Reference< css::io::XInputStream > xRelInfoStream =
145 css::uno::Reference< css::io::XInputStream >() );
158 const OUString& aName,
159 const css::uno::Reference< css::container::XNameContainer >& xParentPackageFolder );
170 void SetEncrypted( const ::comphelper::SequenceAsHashMap& aEncryptionData );
175 const css::uno::Reference< css::io::XInputStream >& xInStream,
176 const css::uno::Sequence< css::beans::PropertyValue >& aProps );
186 const ::comphelper::SequenceAsHashMap& aEncryptionData );
189 css::uno::Reference< css::io::XStream >
GetStream(
190 sal_Int32 nStreamMode,
191 const ::comphelper::SequenceAsHashMap& aEncryptionData,
192 bool bHierarchyAccess );
194 css::uno::Reference< css::io::XStream >
GetStream(
195 sal_Int32 nStreamMode,
196 bool bHierarchyAccess );
204 const css::uno::Reference< css::io::XInputStream >& xDataToCopy,
205 const css::uno::Sequence< css::beans::PropertyValue >& aProps,
206 css::uno::Reference< css::io::XStream >& xTargetStream );
210 css::uno::Reference< css::io::XStream >& xTargetStream,
211 const ::comphelper::SequenceAsHashMap& aEncryptionData );
214 const css::uno::Reference< css::embed::XStorage >& xRelStorage,
215 std::u16string_view aOrigStreamName,
216 std::u16string_view aNewStreamName );
224 ,
public css::io::XInputStream
225 ,
public css::io::XOutputStream
226 ,
public css::embed::XExtendedStorageStream
227 ,
public css::io::XSeekable
228 ,
public css::io::XTruncate
229 ,
public css::embed::XEncryptionProtectedSource2
230 ,
public css::embed::XRelationshipAccess
231 ,
public css::embed::XTransactedObject
232 ,
public css::embed::XTransactionBroadcaster
233 ,
public css::beans::XPropertySet
235 ,
public comphelper::ByteWriter
275 virtual css::uno::Any SAL_CALL
queryInterface(
const css::uno::Type& rType )
override;
276 virtual void SAL_CALL
acquire() noexcept override;
277 virtual
void SAL_CALL
release() noexcept override;
284 virtual sal_Int32 SAL_CALL
readBytes( css::
uno::Sequence<
sal_Int8 >& aData, sal_Int32 nBytesToRead ) override;
285 virtual sal_Int32 SAL_CALL
readSomeBytes( css::
uno::Sequence<
sal_Int8 >& aData, sal_Int32 nMaxBytesToRead ) override;
286 virtual
void SAL_CALL
skipBytes( sal_Int32 nBytesToSkip ) override;
287 virtual sal_Int32 SAL_CALL
available( ) override;
292 virtual
void SAL_CALL
flush( ) override;
296 virtual
void SAL_CALL
seek( sal_Int64 location ) override;
298 virtual sal_Int64 SAL_CALL
getLength() override;
301 virtual css::
uno::Reference< css::io::XInputStream > SAL_CALL
getInputStream( ) override;
302 virtual css::
uno::Reference< css::io::XOutputStream > SAL_CALL
getOutputStream( ) override;
305 virtual
void SAL_CALL
truncate() override;
308 virtual
void SAL_CALL
dispose() override;
309 virtual
void SAL_CALL
addEventListener( const css::
uno::Reference< css::lang::XEventListener >& xListener ) override;
310 virtual
void SAL_CALL
removeEventListener( const css::
uno::Reference< css::lang::XEventListener >& aListener ) override;
317 virtual
void SAL_CALL
setEncryptionData( const css::
uno::Sequence< css::beans::NamedValue >& aEncryptionData ) override;
322 virtual OUString SAL_CALL
getTargetByID( const OUString& sID ) override;
323 virtual OUString SAL_CALL
getTypeByID( const OUString& sID ) override;
334 virtual
void SAL_CALL
setPropertyValue( const OUString& aPropertyName, const css::
uno::Any& aValue ) override;
336 virtual
void SAL_CALL
addPropertyChangeListener( const OUString& aPropertyName, const css::
uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
337 virtual
void SAL_CALL
removePropertyChangeListener( const OUString& aPropertyName, const css::
uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
338 virtual
void SAL_CALL
addVetoableChangeListener( const OUString& PropertyName, const css::
uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
339 virtual
void SAL_CALL
removeVetoableChangeListener( const OUString& PropertyName, const css::
uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
342 virtual
void SAL_CALL
commit() override;
343 virtual
void SAL_CALL
revert() override;
347 const css::
uno::Reference< css::embed::XTransactionListener >& aListener ) override;
349 const css::
uno::Reference< css::embed::XTransactionListener >& aListener ) override;
OWriteStream(OWriteStream_Impl &rImpl, css::uno::Reference< css::io::XStream > const &xStream, bool bTransacted)
void ModifyParentUnlockMutex_Impl(osl::ClearableMutexGuard &aGuard)
virtual sal_Int32 SAL_CALL available() override
virtual sal_Int32 SAL_CALL readSomeBytes(css::uno::Sequence< sal_Int8 > &aData, sal_Int32 nMaxBytesToRead) override
virtual void SAL_CALL addPropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &xListener) override
OWriteStream_Impl * m_pImpl
rtl::Reference< comphelper::RefCountedMutex > m_xSharedMutex
virtual void SAL_CALL revert() override
virtual void SAL_CALL addVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
virtual sal_Int64 SAL_CALL getLength() override
virtual void SAL_CALL writeBytes(const css::uno::Sequence< sal_Int8 > &aData) override
virtual void SAL_CALL setEncryptionPassword(const OUString &aPass) override
virtual void SAL_CALL dispose() override
virtual void SAL_CALL setPropertyValue(const OUString &aPropertyName, const css::uno::Any &aValue) override
virtual sal_Bool SAL_CALL hasEncryptionData() override
virtual css::uno::Sequence< css::beans::StringPair > SAL_CALL getRelationshipByID(const OUString &sID) override
virtual css::uno::Reference< css::io::XOutputStream > SAL_CALL getOutputStream() override
comphelper::OMultiTypeInterfaceContainerHelper2 m_aListenersContainer
bool m_bInStreamDisconnected
virtual void SAL_CALL removeRelationshipByID(const OUString &sID) override
virtual void SAL_CALL addTransactionListener(const css::uno::Reference< css::embed::XTransactionListener > &aListener) override
void CopyToStreamInternally_Impl(const css::uno::Reference< css::io::XStream > &xStream)
virtual void SAL_CALL seek(sal_Int64 location) override
virtual void SAL_CALL insertRelationshipByID(const OUString &sID, const css::uno::Sequence< css::beans::StringPair > &aEntry, sal_Bool bReplace) override
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getInputStream() override
::std::optional< ::cppu::OTypeCollection > m_oTypeCollection
css::uno::Reference< css::io::XSeekable > m_xSeekable
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override
void BroadcastTransaction(sal_Int8 nMessage)
virtual void SAL_CALL truncate() override
virtual sal_Int32 SAL_CALL readBytes(css::uno::Sequence< sal_Int8 > &aData, sal_Int32 nBytesToRead) override
virtual void SAL_CALL release() noexcept override
virtual css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > SAL_CALL getAllRelationships() override
virtual void SAL_CALL removeEncryption() override
sal_Int64 m_nInitPosition
virtual void SAL_CALL commit() override
virtual void SAL_CALL closeOutput() override
virtual void SAL_CALL removeTransactionListener(const css::uno::Reference< css::embed::XTransactionListener > &aListener) override
OWriteStream(OWriteStream_Impl &rImpl, bool bTransacted)
virtual css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > SAL_CALL getRelationshipsByType(const OUString &sType) override
css::uno::Reference< css::io::XOutputStream > m_xOutStream
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
virtual void SAL_CALL acquire() noexcept override
virtual void SAL_CALL removePropertyChangeListener(const OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) override
virtual sal_Int64 SAL_CALL getPosition() override
virtual void SAL_CALL setEncryptionData(const css::uno::Sequence< css::beans::NamedValue > &aEncryptionData) override
virtual OUString SAL_CALL getTypeByID(const OUString &sID) override
virtual void SAL_CALL removeEventListener(const css::uno::Reference< css::lang::XEventListener > &aListener) override
css::uno::Reference< css::io::XInputStream > m_xInStream
virtual sal_Bool SAL_CALL hasByID(const OUString &sID) override
virtual OUString SAL_CALL getTargetByID(const OUString &sID) override
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &PropertyName) override
virtual void SAL_CALL flush() override
virtual void SAL_CALL clearRelationships() override
virtual void SAL_CALL insertRelationships(const css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > &aEntries, sal_Bool bReplace) override
virtual void SAL_CALL skipBytes(sal_Int32 nBytesToSkip) override
virtual ~OWriteStream() override
virtual void SAL_CALL closeInput() override
virtual void SAL_CALL removeVetoableChangeListener(const OUString &PropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) override
virtual void SAL_CALL addEventListener(const css::uno::Reference< css::lang::XEventListener > &xListener) override
bool PackageEncryptionDataLessOrEqual(const ::comphelper::SequenceAsHashMap &aHash1, const ::comphelper::SequenceAsHashMap &aHash2)
css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > m_aNewRelInfo
bool m_bUseCommonEncryption
void CopyInternallyTo_Impl(const css::uno::Reference< css::io::XStream > &xDestStream, const ::comphelper::SequenceAsHashMap &aEncryptionData)
bool HasTempFile_Impl() const
rtl::Reference< comphelper::RefCountedMutex > m_xMutex
css::uno::Reference< css::io::XStream > m_xCacheStream
bool m_bHasCachedEncryptionData
css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > m_aOrigRelInfo
void SetEncrypted(const ::comphelper::SequenceAsHashMap &aEncryptionData)
css::uno::Reference< css::io::XSeekable > m_xCacheSeek
::comphelper::SequenceAsHashMap GetCommonRootEncryptionData()
css::uno::Reference< css::io::XInputStream > m_xNewRelInfoStream
void GetCopyOfLastCommit(css::uno::Reference< css::io::XStream > &xTargetStream)
css::uno::Reference< css::packages::XDataSinkEncrSupport > m_xPackageStream
void GetCopyOfLastCommit(css::uno::Reference< css::io::XStream > &xTargetStream, const ::comphelper::SequenceAsHashMap &aEncryptionData)
::comphelper::SequenceAsHashMap m_aEncryptionData
void ReadRelInfoIfNecessary()
css::uno::Sequence< css::uno::Sequence< css::beans::StringPair > > GetAllRelationshipsIfAny()
void CreateReadonlyCopyBasedOnData(const css::uno::Reference< css::io::XInputStream > &xDataToCopy, const css::uno::Sequence< css::beans::PropertyValue > &aProps, css::uno::Reference< css::io::XStream > &xTargetStream)
bool HasCachedEncryptionData() const
css::uno::Reference< css::io::XInputStream > GetPlainRawInStream()
sal_Int16 m_nRelInfoStatus
bool m_bCompressedSetExplicit
OWriteStream * m_pAntiImpl
css::uno::Reference< css::io::XInputStream > m_xOrigRelInfoStream
css::uno::Reference< css::io::XInputStream > GetTempFileAsInputStream()
void GetFilledTempFileIfNo(const css::uno::Reference< css::io::XInputStream > &xStream)
bool UsesCommonEncryption_Impl() const
std::optional< utl::TempFileFast > m_oTempFile
css::uno::Reference< css::uno::XComponentContext > m_xContext
void CommitStreamRelInfo(const css::uno::Reference< css::embed::XStorage > &xRelStorage, std::u16string_view aOrigStreamName, std::u16string_view aNewStreamName)
bool m_bOrigRelInfoBroken
css::uno::Sequence< css::beans::PropertyValue > const & GetStreamProperties()
OStorage_Impl * m_pParent
css::uno::Reference< css::io::XStream > GetStream(sal_Int32 nStreamMode, const ::comphelper::SequenceAsHashMap &aEncryptionData, bool bHierarchyAccess)
css::uno::Reference< css::io::XInputStream > GetRawInStream()
void InsertIntoPackageFolder(const OUString &aName, const css::uno::Reference< css::container::XNameContainer > &xParentPackageFolder)
css::uno::Sequence< css::beans::PropertyValue > m_aProps
bool HasWriteOwner_Impl() const
void InputStreamDisposed(OInputCompStream *pStream)
void InsertStreamDirectly(const css::uno::Reference< css::io::XInputStream > &xInStream, const css::uno::Sequence< css::beans::PropertyValue > &aProps)
bool m_bHasInsertedStreamOptimization
void CopyInternallyTo_Impl(const css::uno::Reference< css::io::XStream > &xDestStream)
css::uno::Reference< css::lang::XSingleServiceFactory > m_xPackage
css::uno::Reference< css::io::XStream > GetStream_Impl(sal_Int32 nStreamMode, bool bHierarchyAccess)
css::uno::Reference< css::io::XStream > GetTempFileAsStream()
css::uno::Sequence< css::beans::PropertyValue > ReadPackageStreamProperties()
void FillTempGetFileName()
std::vector< OInputCompStream * > m_aInputStreamsVector
::comphelper::SequenceAsHashMap & GetCachedEncryptionData()
css::uno::Sequence< css::beans::PropertyValue > InsertOwnProps(const css::uno::Sequence< css::beans::PropertyValue > &aProps, bool bUseCommonEncryption)
OWriteStream_Impl(OStorage_Impl *pParent, const css::uno::Reference< css::packages::XDataSinkEncrSupport > &xPackageStream, const css::uno::Reference< css::lang::XSingleServiceFactory > &xPackage, css::uno::Reference< css::uno::XComponentContext > xContext, bool bForceEncrypted, sal_Int32 nStorageType, bool bDefaultCompress, css::uno::Reference< css::io::XInputStream > xRelInfoStream=css::uno::Reference< css::io::XInputStream >())