xref: /AOO41X/main/package/source/xstor/xstorage.hxx (revision f319bb99b6b251a37b98027a84e8048ce3778b1f)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef __XSTORAGE_HXX_
25 #define __XSTORAGE_HXX_
26 
27 #include <com/sun/star/uno/Sequence.hxx>
28 #include <com/sun/star/embed/XStorage2.hpp>
29 #include <com/sun/star/embed/XOptimizedStorage.hpp>
30 #include <com/sun/star/embed/XHierarchicalStorageAccess2.hpp>
31 #include <com/sun/star/embed/XStorageRawAccess.hpp>
32 #include <com/sun/star/embed/XTransactedObject.hpp>
33 #include <com/sun/star/embed/XTransactionBroadcaster.hpp>
34 #include <com/sun/star/embed/XClassifiedObject.hpp>
35 #include <com/sun/star/embed/XEncryptionProtectedStorage.hpp>
36 #include <com/sun/star/embed/XRelationshipAccess.hpp>
37 #include <com/sun/star/util/XModifiable.hpp>
38 #include <com/sun/star/container/XNameAccess.hpp>
39 #include <com/sun/star/container/XNameContainer.hpp>
40 #include <com/sun/star/util/XCloseable.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/beans/PropertyValue.hpp>
43 #include <com/sun/star/beans/StringPair.hpp>
44 #include <com/sun/star/io/XStream.hpp>
45 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
46 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
47 #include <com/sun/star/lang/XTypeProvider.hpp>
48 #include <com/sun/star/lang/XComponent.hpp>
49 #include <com/sun/star/packages/NoEncryptionException.hpp>
50 #include <com/sun/star/logging/XSimpleLogRing.hpp>
51 
52 #include <cppuhelper/weak.hxx>
53 #include <cppuhelper/interfacecontainer.h>
54 #include <comphelper/sequenceashashmap.hxx>
55 
56 #include "mutexholder.hxx"
57 
58 #define RELINFO_NO_INIT             1
59 #define RELINFO_READ                2
60 #define RELINFO_CHANGED             3
61 #define RELINFO_CHANGED_STREAM      4
62 #define RELINFO_CHANGED_STREAM_READ 5
63 #define RELINFO_BROKEN              6
64 #define RELINFO_CHANGED_BROKEN      7
65 
66 #define STOR_MESS_PRECOMMIT 1
67 #define STOR_MESS_COMMITED  2
68 #define STOR_MESS_PREREVERT 3
69 #define STOR_MESS_REVERTED  4
70 
71 namespace cppu
72 {
73     class OTypeCollection;
74 }
75 
76 //================================================
77 // a common implementation for an entry
78 
79 struct StorInternalData_Impl;
80 struct OStorage_Impl;
81 struct OWriteStream_Impl;
82 
83 struct SotElement_Impl
84 {
85     ::rtl::OUString             m_aName;
86     ::rtl::OUString             m_aOriginalName;
87     sal_Bool                    m_bIsRemoved;
88     sal_Bool                    m_bIsInserted;
89     sal_Bool                    m_bIsStorage;
90 
91     OStorage_Impl*              m_pStorage;
92     OWriteStream_Impl*          m_pStream;
93 
94 public:
95                                 SotElement_Impl( const ::rtl::OUString& rName, sal_Bool bStor, sal_Bool bNew );
96                                 ~SotElement_Impl();
97 };
98 
99 #include <list>
100 typedef ::std::list< SotElement_Impl* > SotElementList_Impl;
101 
102 //=========================================================================
103 // Main storage implementation
104 
105 class OStorage;
106 
107 struct StorageHolder_Impl
108 {
109     OStorage* m_pPointer;
110     ::com::sun::star::uno::WeakReference< ::com::sun::star::embed::XStorage > m_xWeakRef;
111 
StorageHolder_ImplStorageHolder_Impl112     StorageHolder_Impl( OStorage* pStorage )
113     : m_pPointer( pStorage )
114     , m_xWeakRef( ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >(
115                                                 (::com::sun::star::embed::XStorage*)pStorage ) )
116     {
117     }
118 
StorageHolder_ImplStorageHolder_Impl119     StorageHolder_Impl( const StorageHolder_Impl& aSH )
120     : m_pPointer( aSH.m_pPointer )
121     , m_xWeakRef( aSH.m_xWeakRef )
122     {
123     }
124 };
125 
126 typedef ::std::list< StorageHolder_Impl > OStorageList_Impl;
127 
128 class SwitchablePersistenceStream;
129 struct OStorage_Impl
130 {
131     SotMutexHolderRef           m_rMutexRef;
132 
133     OStorage*                   m_pAntiImpl;         // only valid if external references exists
134     OStorageList_Impl           m_aReadOnlyWrapList; // only valid if readonly external reference exists
135 
136     sal_Int32                   m_nStorageMode; // open mode ( read/write/trunc/nocreate )
137     sal_Bool                    m_bIsModified;  // only modified elements will be sent to the original content
138     sal_Bool                    m_bBroadcastModified;  // will be set if notification is required
139     sal_Bool                    m_bCommited;    // sending the streams is coordinated by the root storage of the package
140 
141     sal_Bool                    m_bIsRoot;      // marks this storage as root storages that manages all commits and reverts
142     sal_Bool                    m_bListCreated;
143 
144 
145     SotElementList_Impl                         m_aChildrenList;
146     SotElementList_Impl                         m_aDeletedList;
147 
148     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xPackageFolder;
149     ::com::sun::star::uno::Reference< ::com::sun::star::logging::XSimpleLogRing >  m_xLogRing;
150 
151     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > m_xPackage;
152     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >  m_xFactory;
153 
154     // valid only for root storage
155     ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xInputStream; // ??? may be stored in properties
156     ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > m_xStream; // ??? may be stored in properties
157     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_xProperties;
158     sal_Bool m_bHasCommonEncryptionData;
159     ::comphelper::SequenceAsHashMap m_aCommonEncryptionData;
160 
161     // must be empty in case of root storage
162     OStorage_Impl* m_pParent;
163 
164     sal_Bool        m_bControlMediaType;
165     ::rtl::OUString m_aMediaType;
166     sal_Bool        m_bMTFallbackUsed;
167 
168     sal_Bool        m_bControlVersion;
169     ::rtl::OUString m_aVersion;
170 
171     SwitchablePersistenceStream* m_pSwitchStream;
172 
173     sal_Int32 m_nStorageType; // the mode in wich the storage is used
174 
175     // the _rels substorage that is handled in a special way in embed::StorageFormats::OFOPXML
176     SotElement_Impl* m_pRelStorElement;
177     ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > m_xRelStorage;
178     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > m_aRelInfo;
179     ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xNewRelInfoStream;
180     sal_Int16 m_nRelInfoStatus;
181 
182     //////////////////////////////////////////
183     // Constructors
184 
185     OStorage_Impl(  ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream,
186                     sal_Int32 nMode,
187                     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > xProperties,
188                     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory,
189                     sal_Int32 nStorageType );
190 
191     OStorage_Impl(  ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > xStream,
192                     sal_Int32 nMode,
193                     ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > xProperties,
194                     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory,
195                     sal_Int32 nStorageType );
196 
197     // constructor for a substorage
198     OStorage_Impl(  OStorage_Impl* pParent,
199                     sal_Int32 nMode,
200                     ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > xPackageFolder,
201                     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > xPackage,
202                     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory,
203                     sal_Int32 nStorageType );
204 
205     ~OStorage_Impl();
206 
207     void AddLog( const ::rtl::OUString& aMessage );
208 
209     void SetReadOnlyWrap( OStorage& aStorage );
210     void RemoveReadOnlyWrap( OStorage& aStorage );
211 
212     void OpenOwnPackage();
213     void ReadContents();
214     void ReadRelInfoIfNecessary();
215 
216     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > GetServiceFactory();
217     SotElementList_Impl& GetChildrenList();
218     void GetStorageProperties();
219 
220     ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > GetAllRelationshipsIfAny();
221     void CopyLastCommitTo( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewStor );
222     void CopyLastCommitTo( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewStor,
223                             const ::rtl::OUString& aPass );
224 
225     void InsertIntoPackageFolder(
226             const ::rtl::OUString& aName,
227             const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xParentPackageFolder );
228 
229     void Commit();
230     void Revert();
231 
232     ::comphelper::SequenceAsHashMap GetCommonRootEncryptionData() throw ( ::com::sun::star::packages::NoEncryptionException );
233 
234     void CopyToStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xDest,
235                         sal_Bool bDirect );
236     void CopyStorageElement( SotElement_Impl* pElement,
237                             ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > xDest,
238                             ::rtl::OUString aName,
239                             sal_Bool bDirect );
240 
241     void SetModified( sal_Bool bModified );
242 
243     SotElement_Impl* FindElement( const ::rtl::OUString& rName );
244 
245 
246     SotElement_Impl* InsertStream( ::rtl::OUString aName, sal_Bool bEncr );
247     SotElement_Impl* InsertRawStream( ::rtl::OUString aName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream );
248 
249     OStorage_Impl* CreateNewStorageImpl( sal_Int32 nStorageMode );
250     SotElement_Impl* InsertStorage( ::rtl::OUString aName, sal_Int32 nStorageMode );
251     SotElement_Impl* InsertElement( ::rtl::OUString aName, sal_Bool bIsStorage );
252 
253     void OpenSubStorage( SotElement_Impl* pElement, sal_Int32 nStorageMode );
254     void OpenSubStream( SotElement_Impl* pElement );
255 
256     ::com::sun::star::uno::Sequence< ::rtl::OUString > GetElementNames();
257 
258     void RemoveElement( SotElement_Impl* pElement );
259     void ClearElement( SotElement_Impl* pElement );
260     void DisposeChildren();
261 
262     void CloneStreamElement(
263                     const ::rtl::OUString& aStreamName,
264                     sal_Bool bPassProvided,
265                     const ::comphelper::SequenceAsHashMap& aEncryptionData,
266                     ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xTargetStream )
267         throw ( ::com::sun::star::embed::InvalidStorageException,
268                 ::com::sun::star::lang::IllegalArgumentException,
269                 ::com::sun::star::packages::WrongPasswordException,
270                 ::com::sun::star::io::IOException,
271                 ::com::sun::star::embed::StorageWrappedTargetException,
272                 ::com::sun::star::uno::RuntimeException );
273 
274     void RemoveStreamRelInfo( const ::rtl::OUString& aOriginalName );
275     void CreateRelStorage();
276     void CommitStreamRelInfo( SotElement_Impl* pStreamElement );
277     ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetRelInfoStreamForName( const ::rtl::OUString& aName );
278     void CommitRelInfo( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xNewPackageFolder );
279 
280     static void completeStorageStreamCopy_Impl(
281         const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xSource,
282         const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xDest,
283         sal_Int32 nStorageType,
284         const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > >& aRelInfo );
285 
286 };
287 
288 
289 class OStorage  : public ::com::sun::star::lang::XTypeProvider
290                 , public ::com::sun::star::embed::XStorage2
291                 , public ::com::sun::star::embed::XStorageRawAccess
292                 , public ::com::sun::star::embed::XTransactedObject
293                 , public ::com::sun::star::embed::XTransactionBroadcaster
294                 , public ::com::sun::star::util::XModifiable
295                 // , public ::com::sun::star::container::XNameAccess
296                 // , public ::com::sun::star::lang::XComponent
297                 , public ::com::sun::star::embed::XEncryptionProtectedStorage
298                 , public ::com::sun::star::beans::XPropertySet
299                 , public ::com::sun::star::embed::XOptimizedStorage
300                 , public ::com::sun::star::embed::XRelationshipAccess
301                 , public ::com::sun::star::embed::XHierarchicalStorageAccess2
302                 , public ::cppu::OWeakObject
303 {
304     OStorage_Impl*  m_pImpl;
305     StorInternalData_Impl* m_pData;
306 
307 protected:
308 
309     void Commit_Impl();
310 
311     SotElement_Impl* OpenStreamElement_Impl( const ::rtl::OUString& aStreamName, sal_Int32 nOpenMode, sal_Bool bEncr );
312 
313     void BroadcastModifiedIfNecessary();
314 
315     void BroadcastTransaction( sal_Int8 nMessage );
316 
317     void MakeLinkToSubComponent_Impl(
318                     const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xComponent );
319 
320 public:
321 
322     OStorage(   ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream,
323                 sal_Int32 nMode,
324                 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > xProperties,
325                 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory,
326                 sal_Int32 nStorageType );
327 
328     OStorage(   ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > xStream,
329                 sal_Int32 nMode,
330                 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > xProperties,
331                 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory,
332                 sal_Int32 nStorageType );
333 
334     OStorage(   OStorage_Impl* pImpl, sal_Bool bReadOnlyWrap );
335 
336     virtual ~OStorage();
337 
338     void SAL_CALL InternalDispose( sal_Bool bNotifyImpl );
339 
340     void ChildIsDisposed( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xChild );
341 
GetRefCount_Impl()342     sal_Int32 GetRefCount_Impl() { return m_refCount; }
343 
344     //____________________________________________________________________________________________________
345     //  XInterface
346     //____________________________________________________________________________________________________
347 
348     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& rType )
349         throw( ::com::sun::star::uno::RuntimeException );
350 
351     virtual void SAL_CALL acquire() throw();
352 
353     virtual void SAL_CALL release() throw();
354 
355     //____________________________________________________________________________________________________
356     //  XTypeProvider
357     //____________________________________________________________________________________________________
358 
359     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes()
360         throw( ::com::sun::star::uno::RuntimeException );
361 
362     virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
363         throw( ::com::sun::star::uno::RuntimeException );
364 
365     //____________________________________________________________________________________________________
366     //  XStorage
367     //____________________________________________________________________________________________________
368 
369     virtual void SAL_CALL copyToStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xDest )
370         throw ( ::com::sun::star::embed::InvalidStorageException,
371                 ::com::sun::star::lang::IllegalArgumentException,
372                 ::com::sun::star::io::IOException,
373                 ::com::sun::star::embed::StorageWrappedTargetException,
374                 ::com::sun::star::uno::RuntimeException );
375 
376     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL openStreamElement(
377             const ::rtl::OUString& aStreamName, sal_Int32 nOpenMode )
378         throw ( ::com::sun::star::embed::InvalidStorageException,
379                 ::com::sun::star::lang::IllegalArgumentException,
380                 ::com::sun::star::packages::WrongPasswordException,
381                 ::com::sun::star::io::IOException,
382                 ::com::sun::star::embed::StorageWrappedTargetException,
383                 ::com::sun::star::uno::RuntimeException );
384 
385     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL openEncryptedStreamElement(
386             const ::rtl::OUString& aStreamName, sal_Int32 nOpenMode, const ::rtl::OUString& aPass )
387         throw ( ::com::sun::star::embed::InvalidStorageException,
388                 ::com::sun::star::lang::IllegalArgumentException,
389                 ::com::sun::star::packages::NoEncryptionException,
390                 ::com::sun::star::packages::WrongPasswordException,
391                 ::com::sun::star::io::IOException,
392                 ::com::sun::star::embed::StorageWrappedTargetException,
393                 ::com::sun::star::uno::RuntimeException );
394 
395     virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > SAL_CALL openStorageElement(
396             const ::rtl::OUString& aStorName, sal_Int32 nStorageMode )
397         throw ( ::com::sun::star::embed::InvalidStorageException,
398                 ::com::sun::star::lang::IllegalArgumentException,
399                 ::com::sun::star::io::IOException,
400                 ::com::sun::star::embed::StorageWrappedTargetException,
401                 ::com::sun::star::uno::RuntimeException );
402 
403     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL cloneStreamElement(
404             const ::rtl::OUString& aStreamName )
405         throw ( ::com::sun::star::embed::InvalidStorageException,
406                 ::com::sun::star::lang::IllegalArgumentException,
407                 ::com::sun::star::packages::WrongPasswordException,
408                 ::com::sun::star::io::IOException,
409                 ::com::sun::star::embed::StorageWrappedTargetException,
410                 ::com::sun::star::uno::RuntimeException );
411 
412     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL cloneEncryptedStreamElement(
413             const ::rtl::OUString& aStreamName, const ::rtl::OUString& aPass )
414         throw ( ::com::sun::star::embed::InvalidStorageException,
415                 ::com::sun::star::lang::IllegalArgumentException,
416                 ::com::sun::star::packages::NoEncryptionException,
417                 ::com::sun::star::packages::WrongPasswordException,
418                 ::com::sun::star::io::IOException,
419                 ::com::sun::star::embed::StorageWrappedTargetException,
420                 ::com::sun::star::uno::RuntimeException );
421 
422     virtual void SAL_CALL copyLastCommitTo(
423             const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xTargetStorage )
424         throw ( ::com::sun::star::embed::InvalidStorageException,
425                 ::com::sun::star::lang::IllegalArgumentException,
426                 ::com::sun::star::io::IOException,
427                 ::com::sun::star::embed::StorageWrappedTargetException,
428                 ::com::sun::star::uno::RuntimeException );
429 
430     virtual void SAL_CALL copyStorageElementLastCommitTo(
431             const ::rtl::OUString& aStorName,
432             const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xTargetStorage )
433         throw ( ::com::sun::star::embed::InvalidStorageException,
434                 ::com::sun::star::lang::IllegalArgumentException,
435                 ::com::sun::star::io::IOException,
436                 ::com::sun::star::embed::StorageWrappedTargetException,
437                 ::com::sun::star::uno::RuntimeException );
438 
439     virtual sal_Bool SAL_CALL isStreamElement( const ::rtl::OUString& aElementName )
440         throw ( ::com::sun::star::container::NoSuchElementException,
441                 ::com::sun::star::lang::IllegalArgumentException,
442                 ::com::sun::star::embed::InvalidStorageException,
443                 ::com::sun::star::uno::RuntimeException );
444 
445     virtual sal_Bool SAL_CALL isStorageElement( const ::rtl::OUString& aElementName )
446         throw ( ::com::sun::star::container::NoSuchElementException,
447                 ::com::sun::star::lang::IllegalArgumentException,
448                 ::com::sun::star::embed::InvalidStorageException,
449                 ::com::sun::star::uno::RuntimeException );
450 
451     virtual void SAL_CALL removeElement( const ::rtl::OUString& aElementName )
452         throw ( ::com::sun::star::embed::InvalidStorageException,
453                 ::com::sun::star::lang::IllegalArgumentException,
454                 ::com::sun::star::container::NoSuchElementException,
455                 ::com::sun::star::io::IOException,
456                 ::com::sun::star::embed::StorageWrappedTargetException,
457                 ::com::sun::star::uno::RuntimeException );
458 
459     virtual void SAL_CALL renameElement( const ::rtl::OUString& rEleName, const ::rtl::OUString& rNewName )
460         throw ( ::com::sun::star::embed::InvalidStorageException,
461                 ::com::sun::star::lang::IllegalArgumentException,
462                 ::com::sun::star::container::NoSuchElementException,
463                 ::com::sun::star::container::ElementExistException,
464                 ::com::sun::star::io::IOException,
465                 ::com::sun::star::embed::StorageWrappedTargetException,
466                 ::com::sun::star::uno::RuntimeException );
467 
468     virtual void SAL_CALL copyElementTo(    const ::rtl::OUString& aElementName,
469                                         const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xDest,
470                                         const ::rtl::OUString& aNewName )
471         throw ( ::com::sun::star::embed::InvalidStorageException,
472                 ::com::sun::star::lang::IllegalArgumentException,
473                 ::com::sun::star::container::NoSuchElementException,
474                 ::com::sun::star::container::ElementExistException,
475                 ::com::sun::star::io::IOException,
476                 ::com::sun::star::embed::StorageWrappedTargetException,
477                 ::com::sun::star::uno::RuntimeException );
478 
479     virtual void SAL_CALL moveElementTo(    const ::rtl::OUString& aElementName,
480                                         const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xDest,
481                                         const ::rtl::OUString& rNewName )
482         throw ( ::com::sun::star::embed::InvalidStorageException,
483                 ::com::sun::star::lang::IllegalArgumentException,
484                 ::com::sun::star::container::NoSuchElementException,
485                 ::com::sun::star::container::ElementExistException,
486                 ::com::sun::star::io::IOException,
487                 ::com::sun::star::embed::StorageWrappedTargetException,
488                 ::com::sun::star::uno::RuntimeException );
489 
490     //____________________________________________________________________________________________________
491     //  XStorage2
492     //____________________________________________________________________________________________________
493 
494     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL openEncryptedStream( const ::rtl::OUString& sStreamName, ::sal_Int32 nOpenMode, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData )
495         throw ( ::com::sun::star::embed::InvalidStorageException,
496                 ::com::sun::star::lang::IllegalArgumentException,
497                 ::com::sun::star::packages::NoEncryptionException,
498                 ::com::sun::star::packages::WrongPasswordException,
499                 ::com::sun::star::io::IOException,
500                 ::com::sun::star::embed::StorageWrappedTargetException,
501                 ::com::sun::star::uno::RuntimeException);
502 
503     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > SAL_CALL cloneEncryptedStream( const ::rtl::OUString& sStreamName, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData )
504         throw ( ::com::sun::star::embed::InvalidStorageException,
505                 ::com::sun::star::lang::IllegalArgumentException,
506                 ::com::sun::star::packages::NoEncryptionException,
507                 ::com::sun::star::packages::WrongPasswordException,
508                 ::com::sun::star::io::IOException,
509                 ::com::sun::star::embed::StorageWrappedTargetException,
510                 ::com::sun::star::uno::RuntimeException);
511 
512     //____________________________________________________________________________________________________
513     //  XStorageRawAccess
514     //____________________________________________________________________________________________________
515 
516     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getPlainRawStreamElement(
517             const ::rtl::OUString& sStreamName )
518         throw ( ::com::sun::star::embed::InvalidStorageException,
519                 ::com::sun::star::lang::IllegalArgumentException,
520                 ::com::sun::star::container::NoSuchElementException,
521                 ::com::sun::star::io::IOException,
522                 ::com::sun::star::embed::StorageWrappedTargetException,
523                 ::com::sun::star::uno::RuntimeException );
524 
525     virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getRawEncrStreamElement(
526             const ::rtl::OUString& sStreamName )
527         throw ( ::com::sun::star::embed::InvalidStorageException,
528                 ::com::sun::star::lang::IllegalArgumentException,
529                 ::com::sun::star::packages::NoEncryptionException,
530                 ::com::sun::star::container::NoSuchElementException,
531                 ::com::sun::star::io::IOException,
532                 ::com::sun::star::embed::StorageWrappedTargetException,
533                 ::com::sun::star::uno::RuntimeException );
534 
535     virtual void SAL_CALL insertRawEncrStreamElement( const ::rtl::OUString& aStreamName,
536                                 const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream )
537         throw ( ::com::sun::star::embed::InvalidStorageException,
538                 ::com::sun::star::lang::IllegalArgumentException,
539                 ::com::sun::star::packages::NoRawFormatException,
540                 ::com::sun::star::container::ElementExistException,
541                 ::com::sun::star::io::IOException,
542                 ::com::sun::star::embed::StorageWrappedTargetException,
543                 ::com::sun::star::uno::RuntimeException);
544 
545     //____________________________________________________________________________________________________
546     // XTransactedObject
547     //____________________________________________________________________________________________________
548 
549     virtual void SAL_CALL commit()
550         throw ( ::com::sun::star::io::IOException,
551                 ::com::sun::star::embed::StorageWrappedTargetException,
552                 ::com::sun::star::uno::RuntimeException );
553 
554     virtual void SAL_CALL revert()
555         throw ( ::com::sun::star::io::IOException,
556                 ::com::sun::star::embed::StorageWrappedTargetException,
557                 ::com::sun::star::uno::RuntimeException );
558 
559     //____________________________________________________________________________________________________
560     // XTransactionBroadcaster
561     //____________________________________________________________________________________________________
562 
563     virtual void SAL_CALL addTransactionListener(
564             const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XTransactionListener >& aListener )
565         throw ( ::com::sun::star::uno::RuntimeException );
566 
567     virtual void SAL_CALL removeTransactionListener(
568             const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XTransactionListener >& aListener )
569         throw ( ::com::sun::star::uno::RuntimeException );
570 
571     //____________________________________________________________________________________________________
572     //  XModifiable
573     //____________________________________________________________________________________________________
574 
575     virtual sal_Bool SAL_CALL isModified()
576         throw ( ::com::sun::star::uno::RuntimeException );
577 
578     virtual void SAL_CALL setModified( sal_Bool bModified )
579         throw ( ::com::sun::star::beans::PropertyVetoException,
580                 ::com::sun::star::uno::RuntimeException );
581 
582     virtual void SAL_CALL addModifyListener(
583             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
584         throw ( ::com::sun::star::uno::RuntimeException );
585 
586     virtual void SAL_CALL removeModifyListener(
587             const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
588         throw ( ::com::sun::star::uno::RuntimeException );
589 
590     //____________________________________________________________________________________________________
591     //  XNameAccess
592     //____________________________________________________________________________________________________
593 
594     virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
595         throw ( ::com::sun::star::container::NoSuchElementException,
596                 ::com::sun::star::lang::WrappedTargetException,
597                 ::com::sun::star::uno::RuntimeException );
598 
599     virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
600         throw ( ::com::sun::star::uno::RuntimeException );
601 
602     virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
603         throw ( ::com::sun::star::uno::RuntimeException );
604 
605     virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
606         throw ( ::com::sun::star::uno::RuntimeException );
607 
608     virtual sal_Bool SAL_CALL hasElements()
609         throw ( ::com::sun::star::uno::RuntimeException );
610 
611     //____________________________________________________________________________________________________
612     //  XComponent
613     //____________________________________________________________________________________________________
614 
615     virtual void SAL_CALL dispose()
616         throw ( ::com::sun::star::uno::RuntimeException );
617 
618     virtual void SAL_CALL addEventListener(
619             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener )
620         throw ( ::com::sun::star::uno::RuntimeException );
621 
622     virtual void SAL_CALL removeEventListener(
623             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener )
624         throw ( ::com::sun::star::uno::RuntimeException );
625 
626     //____________________________________________________________________________________________________
627     //  XEncryptionProtectedSource
628     //____________________________________________________________________________________________________
629 
630     virtual void SAL_CALL setEncryptionPassword( const ::rtl::OUString& aPass )
631         throw ( ::com::sun::star::uno::RuntimeException,
632                 ::com::sun::star::io::IOException );
633 
634     virtual void SAL_CALL removeEncryption()
635         throw ( ::com::sun::star::uno::RuntimeException,
636                 ::com::sun::star::io::IOException );
637 
638     //____________________________________________________________________________________________________
639     //  XEncryptionProtectedSource2
640     //____________________________________________________________________________________________________
641 
642     virtual void SAL_CALL setEncryptionData(
643             const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData )
644         throw ( ::com::sun::star::io::IOException,
645                 ::com::sun::star::uno::RuntimeException );
646 
647     //____________________________________________________________________________________________________
648     //  XEncryptionProtectedStorage
649     //____________________________________________________________________________________________________
650 
651     virtual void SAL_CALL setEncryptionAlgorithms( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aAlgorithms ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
652 
653     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > SAL_CALL getEncryptionAlgorithms() throw (::com::sun::star::uno::RuntimeException);
654 
655     //____________________________________________________________________________________________________
656     //  XPropertySet
657     //____________________________________________________________________________________________________
658 
659     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo()
660         throw ( ::com::sun::star::uno::RuntimeException );
661 
662     virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue )
663         throw ( ::com::sun::star::beans::UnknownPropertyException,
664                 ::com::sun::star::beans::PropertyVetoException,
665                 ::com::sun::star::lang::IllegalArgumentException,
666                 ::com::sun::star::lang::WrappedTargetException,
667                 ::com::sun::star::uno::RuntimeException );
668 
669     virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const ::rtl::OUString& PropertyName )
670         throw ( ::com::sun::star::beans::UnknownPropertyException,
671                 ::com::sun::star::lang::WrappedTargetException,
672                 ::com::sun::star::uno::RuntimeException );
673 
674     virtual void SAL_CALL addPropertyChangeListener(
675             const ::rtl::OUString& aPropertyName,
676             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener )
677         throw ( ::com::sun::star::beans::UnknownPropertyException,
678                 ::com::sun::star::lang::WrappedTargetException,
679                 ::com::sun::star::uno::RuntimeException );
680 
681     virtual void SAL_CALL removePropertyChangeListener(
682             const ::rtl::OUString& aPropertyName,
683             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener )
684         throw ( ::com::sun::star::beans::UnknownPropertyException,
685                 ::com::sun::star::lang::WrappedTargetException,
686                 ::com::sun::star::uno::RuntimeException );
687 
688     virtual void SAL_CALL addVetoableChangeListener(
689             const ::rtl::OUString& PropertyName,
690             const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener )
691         throw ( ::com::sun::star::beans::UnknownPropertyException,
692                 ::com::sun::star::lang::WrappedTargetException,
693                 ::com::sun::star::uno::RuntimeException );
694 
695     virtual void SAL_CALL removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener )
696         throw ( ::com::sun::star::beans::UnknownPropertyException,
697                 ::com::sun::star::lang::WrappedTargetException,
698                 ::com::sun::star::uno::RuntimeException );
699 
700     //____________________________________________________________________________________________________
701     //  XOptimizedStorage
702     //____________________________________________________________________________________________________
703     virtual void SAL_CALL insertRawNonEncrStreamElementDirect( const ::rtl::OUString& sStreamName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream )
704         throw ( ::com::sun::star::embed::InvalidStorageException,
705                 ::com::sun::star::lang::IllegalArgumentException,
706                 ::com::sun::star::packages::NoRawFormatException,
707                 ::com::sun::star::container::ElementExistException,
708                 ::com::sun::star::io::IOException,
709                 ::com::sun::star::embed::StorageWrappedTargetException,
710                 ::com::sun::star::uno::RuntimeException );
711 
712     virtual void SAL_CALL insertStreamElementDirect( const ::rtl::OUString& sStreamName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInStream, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps )
713         throw ( ::com::sun::star::embed::InvalidStorageException,
714                 ::com::sun::star::lang::IllegalArgumentException,
715                 ::com::sun::star::container::ElementExistException,
716                 ::com::sun::star::io::IOException,
717                 ::com::sun::star::embed::StorageWrappedTargetException,
718                 ::com::sun::star::uno::RuntimeException );
719 
720     virtual void SAL_CALL copyElementDirectlyTo( const ::rtl::OUString& sSourceName, const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XOptimizedStorage >& xTargetStorage, const ::rtl::OUString& sTargetName )
721         throw ( ::com::sun::star::embed::InvalidStorageException,
722                 ::com::sun::star::lang::IllegalArgumentException,
723                 ::com::sun::star::container::NoSuchElementException,
724                 ::com::sun::star::container::ElementExistException,
725                 ::com::sun::star::io::IOException,
726                 ::com::sun::star::embed::StorageWrappedTargetException,
727                 ::com::sun::star::uno::RuntimeException );
728 
729     virtual void SAL_CALL writeAndAttachToStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xStream )
730         throw ( ::com::sun::star::embed::InvalidStorageException,
731                 ::com::sun::star::lang::IllegalArgumentException,
732                 ::com::sun::star::io::IOException,
733                 ::com::sun::star::embed::StorageWrappedTargetException,
734                 ::com::sun::star::uno::RuntimeException );
735 
736     virtual void SAL_CALL attachToURL( const ::rtl::OUString& sURL, sal_Bool bReadOnly )
737         throw ( ::com::sun::star::embed::InvalidStorageException,
738                 ::com::sun::star::lang::IllegalArgumentException,
739                 ::com::sun::star::io::IOException,
740                 ::com::sun::star::embed::StorageWrappedTargetException,
741                 ::com::sun::star::uno::RuntimeException );
742 
743     virtual ::com::sun::star::uno::Any SAL_CALL getElementPropertyValue( const ::rtl::OUString& sElementName, const ::rtl::OUString& sPropertyName )
744         throw ( ::com::sun::star::embed::InvalidStorageException,
745                 ::com::sun::star::lang::IllegalArgumentException,
746                 ::com::sun::star::container::NoSuchElementException,
747                 ::com::sun::star::io::IOException,
748                 ::com::sun::star::beans::UnknownPropertyException,
749                 ::com::sun::star::beans::PropertyVetoException,
750                 ::com::sun::star::embed::StorageWrappedTargetException,
751                 ::com::sun::star::uno::RuntimeException);
752 
753     virtual void SAL_CALL copyStreamElementData( const ::rtl::OUString& sStreamName, const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& xTargetStream )
754         throw ( ::com::sun::star::embed::InvalidStorageException,
755                 ::com::sun::star::lang::IllegalArgumentException,
756                 ::com::sun::star::packages::WrongPasswordException,
757                 ::com::sun::star::io::IOException,
758                 ::com::sun::star::embed::StorageWrappedTargetException,
759                 ::com::sun::star::uno::RuntimeException );
760 
761     //____________________________________________________________________________________________________
762     // XRelationshipAccess
763     //____________________________________________________________________________________________________
764 
765     virtual ::sal_Bool SAL_CALL hasByID( const ::rtl::OUString& sID )
766         throw ( ::com::sun::star::io::IOException,
767                 ::com::sun::star::uno::RuntimeException);
768 
769     virtual ::rtl::OUString SAL_CALL getTargetByID( const ::rtl::OUString& sID )
770         throw ( ::com::sun::star::container::NoSuchElementException,
771                 ::com::sun::star::io::IOException,
772                 ::com::sun::star::uno::RuntimeException);
773 
774     virtual ::rtl::OUString SAL_CALL getTypeByID( const ::rtl::OUString& sID )
775         throw ( ::com::sun::star::container::NoSuchElementException,
776                 ::com::sun::star::io::IOException,
777                 ::com::sun::star::uno::RuntimeException);
778 
779     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > SAL_CALL getRelationshipByID( const ::rtl::OUString& sID )
780         throw ( ::com::sun::star::container::NoSuchElementException,
781                 ::com::sun::star::io::IOException,
782                 ::com::sun::star::uno::RuntimeException);
783 
784     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > SAL_CALL getRelationshipsByType( const ::rtl::OUString& sType )
785         throw ( ::com::sun::star::io::IOException,
786                 ::com::sun::star::uno::RuntimeException);
787 
788     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair > > SAL_CALL getAllRelationships(  )
789         throw ( ::com::sun::star::io::IOException,
790                 ::com::sun::star::uno::RuntimeException);
791 
792     virtual void SAL_CALL insertRelationshipByID( const ::rtl::OUString& sID, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair >& aEntry, ::sal_Bool bReplace )
793         throw ( ::com::sun::star::container::ElementExistException,
794                 ::com::sun::star::io::IOException,
795                 ::com::sun::star::uno::RuntimeException);
796 
797     virtual void SAL_CALL removeRelationshipByID( const ::rtl::OUString& sID )
798         throw ( ::com::sun::star::container::NoSuchElementException,
799                 ::com::sun::star::io::IOException,
800                 ::com::sun::star::uno::RuntimeException);
801 
802     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 )
803         throw ( ::com::sun::star::container::ElementExistException,
804                 ::com::sun::star::io::IOException,
805                 ::com::sun::star::uno::RuntimeException);
806 
807     virtual void SAL_CALL clearRelationships(  )
808         throw ( ::com::sun::star::io::IOException,
809                 ::com::sun::star::uno::RuntimeException);
810 
811     //____________________________________________________________________________________________________
812     // XHierarchicalStorageAccess
813     //____________________________________________________________________________________________________
814 
815     virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XExtendedStorageStream > SAL_CALL openStreamElementByHierarchicalName( const ::rtl::OUString& sStreamPath, ::sal_Int32 nOpenMode )
816         throw ( ::com::sun::star::embed::InvalidStorageException,
817                 ::com::sun::star::lang::IllegalArgumentException,
818                 ::com::sun::star::packages::WrongPasswordException,
819                 ::com::sun::star::io::IOException,
820                 ::com::sun::star::embed::StorageWrappedTargetException,
821                 ::com::sun::star::uno::RuntimeException);
822 
823     virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XExtendedStorageStream > SAL_CALL openEncryptedStreamElementByHierarchicalName( const ::rtl::OUString& sStreamName, ::sal_Int32 nOpenMode, const ::rtl::OUString& sPassword )
824         throw ( ::com::sun::star::embed::InvalidStorageException,
825                 ::com::sun::star::lang::IllegalArgumentException,
826                 ::com::sun::star::packages::NoEncryptionException,
827                 ::com::sun::star::packages::WrongPasswordException,
828                 ::com::sun::star::io::IOException,
829                 ::com::sun::star::embed::StorageWrappedTargetException,
830                 ::com::sun::star::uno::RuntimeException);
831 
832     virtual void SAL_CALL removeStreamElementByHierarchicalName( const ::rtl::OUString& sElementPath )
833         throw ( ::com::sun::star::embed::InvalidStorageException,
834                 ::com::sun::star::lang::IllegalArgumentException,
835                 ::com::sun::star::container::NoSuchElementException,
836                 ::com::sun::star::io::IOException,
837                 ::com::sun::star::embed::StorageWrappedTargetException,
838                 ::com::sun::star::uno::RuntimeException);
839 
840     //____________________________________________________________________________________________________
841     // XHierarchicalStorageAccess2
842     //____________________________________________________________________________________________________
843 
844     virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XExtendedStorageStream > SAL_CALL openEncryptedStreamByHierarchicalName( const ::rtl::OUString& sStreamName, ::sal_Int32 nOpenMode, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData )
845         throw ( ::com::sun::star::embed::InvalidStorageException,
846                 ::com::sun::star::lang::IllegalArgumentException,
847                 ::com::sun::star::packages::NoEncryptionException,
848                 ::com::sun::star::packages::WrongPasswordException,
849                 ::com::sun::star::io::IOException,
850                 ::com::sun::star::embed::StorageWrappedTargetException,
851                 ::com::sun::star::uno::RuntimeException );
852 };
853 
854 
855 #endif
856 
857