Branch libreoffice-5-0-4
[LibreOffice.git] / package / source / xstor / owriteablestream.hxx
blob2a5b1cf8def967ecbfd01b1476effbe16598a455
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
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/packages/NoEncryptionException.hpp>
30 #include <com/sun/star/lang/XEventListener.hpp>
31 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
32 #include <com/sun/star/lang/XComponent.hpp>
33 #include <com/sun/star/embed/XEncryptionProtectedSource2.hpp>
34 #include <com/sun/star/embed/XStorage.hpp>
35 #include <com/sun/star/embed/XRelationshipAccess.hpp>
36 #include <com/sun/star/embed/XExtendedStorageStream.hpp>
37 #include <com/sun/star/embed/XTransactedObject.hpp>
38 #include <com/sun/star/embed/XTransactionBroadcaster.hpp>
39 #include <com/sun/star/container/XNameContainer.hpp>
40 #include <com/sun/star/beans/StringPair.hpp>
41 #include <com/sun/star/logging/XSimpleLogRing.hpp>
43 #include <cppuhelper/implbase1.hxx>
44 #include <cppuhelper/weak.hxx>
45 #include <cppuhelper/interfacecontainer.h>
47 #include <comphelper/sequenceashashmap.hxx>
49 #include <list>
50 #include <memory>
52 #include "ocompinstream.hxx"
53 #include "mutexholder.hxx"
55 namespace com { namespace sun { namespace star { namespace uno {
56 class XComponentContext;
57 } } } }
59 struct PreCreationStruct
61 SotMutexHolderRef m_rMutexRef;
63 PreCreationStruct()
64 : m_rMutexRef( new SotMutexHolder )
69 namespace package {
70 bool PackageEncryptionDatasEqual( const ::comphelper::SequenceAsHashMap& aHash1, const ::comphelper::SequenceAsHashMap& aHash2 );
73 struct WSInternalData_Impl;
75 typedef ::std::list< OInputCompStream* > InputStreamsList_Impl;
77 struct OStorage_Impl;
78 class OWriteStream;
80 struct OWriteStream_Impl : public PreCreationStruct
82 friend struct OStorage_Impl;
83 friend class OWriteStream;
84 friend class OInputCompStream;
86 OWriteStream* m_pAntiImpl;
87 OUString m_aTempURL;
89 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > m_xCacheStream;
90 ::com::sun::star::uno::Reference< ::com::sun::star::io::XSeekable > m_xCacheSeek;
92 InputStreamsList_Impl m_aInputStreamsList;
94 bool m_bHasDataToFlush; // only modified elements will be sent to the original content
95 bool m_bFlushed; // sending the streams is coordinated by the root storage of the package
97 ::com::sun::star::uno::Reference< ::com::sun::star::packages::XDataSinkEncrSupport > m_xPackageStream;
98 ::com::sun::star::uno::Reference< ::com::sun::star::logging::XSimpleLogRing > m_xLogRing;
100 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
102 OStorage_Impl* m_pParent;
104 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aProps;
106 bool m_bForceEncrypted;
108 bool m_bUseCommonEncryption;
109 bool m_bHasCachedEncryptionData;
110 ::comphelper::SequenceAsHashMap m_aEncryptionData;
112 bool m_bCompressedSetExplicit;
114 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > m_xPackage;
116 bool m_bHasInsertedStreamOptimization;
118 sal_Int32 m_nStorageType;
120 // Relations info related data, stored in *.rels file in OFOPXML format
121 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xOrigRelInfoStream;
122 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > m_aOrigRelInfo;
123 bool m_bOrigRelInfoBroken;
125 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > m_aNewRelInfo;
126 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xNewRelInfoStream;
127 sal_Int16 m_nRelInfoStatus;
128 sal_Int32 m_nRelId;
130 private:
131 OUString GetFilledTempFileIfNo( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xStream );
132 OUString FillTempGetFileName();
133 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetTempFileAsStream();
134 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetTempFileAsInputStream();
136 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetStream_Impl( sal_Int32 nStreamMode,
137 bool bHierarchyAccess );
139 ::comphelper::SequenceAsHashMap GetCommonRootEncryptionData() throw ( ::com::sun::star::packages::NoEncryptionException );
141 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > ReadPackageStreamProperties();
142 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > InsertOwnProps(
143 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps,
144 bool bUseCommonEncryption );
146 public:
147 OWriteStream_Impl(
148 OStorage_Impl* pParent,
149 const ::com::sun::star::uno::Reference< ::com::sun::star::packages::XDataSinkEncrSupport >& xPackageStream,
150 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory >& xPackage,
151 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext,
152 bool bForceEncrypted,
153 sal_Int32 nStorageType,
154 bool bDefaultCompress,
155 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xRelInfoStream =
156 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >() );
158 ~OWriteStream_Impl();
160 void CleanCacheStream();
162 void AddLog( const OUString& aMessage );
164 bool UsesCommonEncryption_Impl() { return m_bUseCommonEncryption; }
165 bool HasTempFile_Impl() const { return ( m_aTempURL.getLength() != 0 ); }
166 bool IsTransacted();
168 bool HasWriteOwner_Impl() const { return ( m_pAntiImpl != NULL ); }
170 void InsertIntoPackageFolder(
171 const OUString& aName,
172 const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xParentPackageFolder );
174 void SetToBeCommited() { m_bFlushed = true; }
176 bool HasCachedEncryptionData() { return m_bHasCachedEncryptionData; }
177 ::comphelper::SequenceAsHashMap& GetCachedEncryptionData() { return m_aEncryptionData; }
179 bool IsModified() { return m_bHasDataToFlush || m_bFlushed; }
181 bool IsEncrypted();
182 void SetDecrypted();
183 void SetEncrypted( const ::comphelper::SequenceAsHashMap& aEncryptionData );
185 void DisposeWrappers();
187 void InsertStreamDirectly(
188 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream,
189 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps );
191 void Commit();
192 void Revert();
194 void Free( bool bMust ); // allows to try to disconnect from the temporary stream
195 // in case bMust is set to sal_True the method
196 // will throw exception in case the file is still busy
198 void SetModified(); // can be done only by parent storage after renaming
200 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetStreamProperties();
202 ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > GetAllRelationshipsIfAny();
204 void CopyInternallyTo_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xDestStream,
205 const ::comphelper::SequenceAsHashMap& aEncryptionData );
206 void CopyInternallyTo_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xDestStream );
208 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetStream(
209 sal_Int32 nStreamMode,
210 const ::comphelper::SequenceAsHashMap& aEncryptionData,
211 bool bHierarchyAccess );
213 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetStream(
214 sal_Int32 nStreamMode,
215 bool bHierarchyAccess );
217 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetRawInStream();
218 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetPlainRawInStream();
220 void InputStreamDisposed( OInputCompStream* pStream );
222 void CreateReadonlyCopyBasedOnData(
223 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xDataToCopy,
224 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps,
225 bool bUseCommonEncryption,
226 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xTargetStream );
228 void GetCopyOfLastCommit( ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xTargetStream );
229 void GetCopyOfLastCommit(
230 ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xTargetStream,
231 const ::comphelper::SequenceAsHashMap& aEncryptionData );
233 void CommitStreamRelInfo(
234 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xRelStorage,
235 const OUString& aOrigStreamName,
236 const OUString& aNewStreamName );
238 void ReadRelInfoIfNecessary();
240 sal_Int32 GetNewRelId() { return m_nRelId ++; }
243 class OWriteStream : ::com::sun::star::lang::XTypeProvider
244 , public ::com::sun::star::io::XInputStream
245 , public ::com::sun::star::io::XOutputStream
246 , public ::com::sun::star::embed::XExtendedStorageStream
247 , public ::com::sun::star::io::XSeekable
248 , public ::com::sun::star::io::XTruncate
249 , public ::com::sun::star::embed::XEncryptionProtectedSource2
250 , public ::com::sun::star::embed::XRelationshipAccess
251 , public ::com::sun::star::embed::XTransactedObject
252 , public ::com::sun::star::embed::XTransactionBroadcaster
253 , public ::com::sun::star::beans::XPropertySet
254 , public ::cppu::OWeakObject
256 friend struct OWriteStream_Impl;
258 protected:
259 ::com::sun::star::uno::Reference < ::com::sun::star::io::XInputStream > m_xInStream;
260 ::com::sun::star::uno::Reference < ::com::sun::star::io::XOutputStream > m_xOutStream;
261 ::com::sun::star::uno::Reference < ::com::sun::star::io::XSeekable > m_xSeekable;
263 OWriteStream_Impl* m_pImpl;
264 std::unique_ptr<WSInternalData_Impl> m_pData;
266 bool m_bInStreamDisconnected;
267 bool m_bInitOnDemand;
268 sal_Int64 m_nInitPosition;
270 bool m_bTransacted;
272 OWriteStream( OWriteStream_Impl* pImpl, bool bTransacted );
273 OWriteStream( OWriteStream_Impl* pImpl, ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > xStream, bool bTransacted );
275 void CloseOutput_Impl();
277 void CopyToStreamInternally_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xStream );
279 void ModifyParentUnlockMutex_Impl( ::osl::ResettableMutexGuard& aGuard );
281 void BroadcastTransaction( sal_Int8 nMessage );
283 public:
285 virtual ~OWriteStream();
287 void CheckInitOnDemand();
288 void DeInit();
290 // XInterface
291 virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType )
292 throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
293 virtual void SAL_CALL acquire() throw() SAL_OVERRIDE;
294 virtual void SAL_CALL release() throw() SAL_OVERRIDE;
296 // XTypeProvider
297 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
298 throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
299 virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
300 throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
302 // XInputStream
303 virtual sal_Int32 SAL_CALL readBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nBytesToRead )
304 throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
305 virtual sal_Int32 SAL_CALL readSomeBytes( ::com::sun::star::uno::Sequence< sal_Int8 >& aData, sal_Int32 nMaxBytesToRead ) throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
306 virtual void SAL_CALL skipBytes( sal_Int32 nBytesToSkip )
307 throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
308 virtual sal_Int32 SAL_CALL available( )
309 throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
310 virtual void SAL_CALL closeInput( )
311 throw(::com::sun::star::io::NotConnectedException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
313 // XOutputStream
314 virtual void SAL_CALL writeBytes( const ::com::sun::star::uno::Sequence< sal_Int8 >& aData ) throw (::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
315 virtual void SAL_CALL flush( ) throw (::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
316 virtual void SAL_CALL closeOutput( ) throw (::com::sun::star::io::NotConnectedException, ::com::sun::star::io::BufferSizeExceededException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
318 //XSeekable
319 virtual void SAL_CALL seek( sal_Int64 location ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
320 virtual sal_Int64 SAL_CALL getPosition() throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
321 virtual sal_Int64 SAL_CALL getLength() throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
323 //XStream
324 virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getInputStream( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
325 virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > SAL_CALL getOutputStream( ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
327 // XTruncate
328 virtual void SAL_CALL truncate() throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
330 //XComponent
331 virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
332 virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
333 virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
335 //XEncryptionProtectedSource
336 virtual void SAL_CALL setEncryptionPassword( const OUString& aPass )
337 throw ( ::com::sun::star::uno::RuntimeException,
338 ::com::sun::star::io::IOException, std::exception ) SAL_OVERRIDE;
339 virtual void SAL_CALL removeEncryption()
340 throw ( ::com::sun::star::uno::RuntimeException,
341 ::com::sun::star::io::IOException, std::exception ) SAL_OVERRIDE;
343 //XEncryptionProtectedSource2
344 virtual void SAL_CALL setEncryptionData( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
345 virtual sal_Bool SAL_CALL hasEncryptionData() throw (::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
347 //XRelationshipAccess
348 virtual sal_Bool SAL_CALL hasByID( const OUString& sID ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
349 virtual OUString SAL_CALL getTargetByID( const OUString& sID ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
350 virtual OUString SAL_CALL getTypeByID( const OUString& sID ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
351 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > SAL_CALL getRelationshipByID( const OUString& sID ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
352 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > SAL_CALL getRelationshipsByType( const OUString& sType ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
353 virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > SAL_CALL getAllRelationships( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
354 virtual void SAL_CALL insertRelationshipByID( const OUString& sID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair >& aEntry, sal_Bool bReplace ) throw (::com::sun::star::container::ElementExistException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
355 virtual void SAL_CALL removeRelationshipByID( const OUString& sID ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
356 virtual void SAL_CALL insertRelationships( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > >& aEntries, sal_Bool bReplace ) throw (::com::sun::star::container::ElementExistException, ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
357 virtual void SAL_CALL clearRelationships( ) throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
359 //XPropertySet
360 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() throw ( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
361 virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
362 virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
363 virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
364 virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
365 virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
366 virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw ( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
368 // XTransactedObject
369 virtual void SAL_CALL commit()
370 throw ( ::com::sun::star::io::IOException,
371 ::com::sun::star::embed::StorageWrappedTargetException,
372 ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
373 virtual void SAL_CALL revert()
374 throw ( ::com::sun::star::io::IOException,
375 ::com::sun::star::embed::StorageWrappedTargetException,
376 ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
378 // XTransactionBroadcaster
379 virtual void SAL_CALL addTransactionListener(
380 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XTransactionListener >& aListener )
381 throw ( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
382 virtual void SAL_CALL removeTransactionListener(
383 const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XTransactionListener >& aListener )
384 throw ( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE;
388 #endif
390 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */