diff options
author | Kurt Zenker <kz@openoffice.org> | 2004-10-04 20:08:31 +0000 |
---|---|---|
committer | Kurt Zenker <kz@openoffice.org> | 2004-10-04 20:08:31 +0000 |
commit | 205ad3957342ec96995118d04bb1d70bcbd56d7a (patch) | |
tree | 41f426d15ea9e7edb48899ae24a9edf0c080b043 | |
parent | 413df9c430d73db0e13c292a43f8bb94570d1a74 (diff) |
INTEGRATION: CWS mav09 (1.6.28); FILE MERGED
2004/09/17 00:04:41 mav 1.6.28.14: RESYNC: (1.9-1.12); FILE MERGED
2004/09/02 12:01:52 mav 1.6.28.13: #i27773# allow to copy element to the same storage
2004/08/25 11:48:40 mav 1.6.28.12: #i27773# substorage must also implement XTransactionBroadcaster
2004/08/25 11:41:04 mav 1.6.28.11: #i27773# substorage must also implement XTransactionBroadcaster
2004/08/09 19:17:23 mav 1.6.28.10: RESYNC: (1.8-1.9); FILE MERGED
2004/08/06 09:55:46 mav 1.6.28.9: #i26216# handle empty storages in a special way
2004/08/05 11:18:46 mav 1.6.28.8: #i26216# allow to commit empty folders
2004/07/15 10:55:44 mav 1.6.28.7: #i27773# notification about corruption
2004/07/08 15:57:09 mav 1.6.28.6: RESYNC: (1.7-1.8); FILE MERGED
2004/07/05 09:45:57 mav 1.6.28.5: #i27773# wrap the original exception
2004/06/21 08:46:23 mav 1.6.28.4: #i30400# do not ignore target name
2004/05/17 17:47:24 mav 1.6.28.3: RESYNC: (1.6-1.7); FILE MERGED
2004/05/16 17:33:59 mba 1.6.28.2: #i27773#: problems when opening storage several times in different modes
2004/05/10 08:04:27 mba 1.6.28.1: #i27773#: typo in property name
-rw-r--r-- | package/source/xstor/xstorage.cxx | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/package/source/xstor/xstorage.cxx b/package/source/xstor/xstorage.cxx index 9bb8092a2..3931bdbf8 100644 --- a/package/source/xstor/xstorage.cxx +++ b/package/source/xstor/xstorage.cxx @@ -2,9 +2,9 @@ * * $RCSfile: xstorage.cxx,v $ * - * $Revision: 1.12 $ + * $Revision: 1.13 $ * - * last change: $Author: kz $ $Date: 2004-08-31 12:45:26 $ + * last change: $Author: kz $ $Date: 2004-10-04 21:08:31 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -66,6 +66,9 @@ #ifndef _COM_SUN_STAR_EMBED_ELEMENTMODES_HPP_ #include <com/sun/star/embed/ElementModes.hpp> #endif +#ifndef _COM_SUN_STAR_EMBED_USEBACKUPEXCEPTION_HPP_ +#include <com/sun/star/embed/UseBackupException.hpp> +#endif #ifndef _COM_SUN_STAR_UCB_XPROGRESSHANDLER_HPP_ #include <com/sun/star/ucb/XProgressHandler.hpp> @@ -286,6 +289,7 @@ OStorage_Impl::OStorage_Impl( uno::Reference< io::XStream > xStream, , m_xFactory( xFactory ) , m_xStream( xStream ) , m_xProperties( xProperties ) +, m_bHasCommonPassword( sal_False ) , m_pParent( NULL ) , m_bControlMediaType( sal_False ) { @@ -320,6 +324,7 @@ OStorage_Impl::OStorage_Impl( OStorage_Impl* pParent, , m_xPackageFolder( xPackageFolder ) , m_xPackage( xPackage ) , m_xFactory( xFactory ) +, m_bHasCommonPassword( sal_False ) , m_pParent( pParent ) // can be empty in case of temporary readonly substorages , m_bControlMediaType( sal_False ) { @@ -762,6 +767,16 @@ void OStorage_Impl::Commit() { ::osl::MutexGuard aGuard( m_rMutexRef->GetMutex() ); + if ( !m_bListCreated ) + { + // nothing was changed, but a new empty storage must be marked as commited one + ReadContents(); + if ( !m_bIsRoot && !m_aChildrenList.size() ) + m_bCommited = sal_True; + + return; + } + // if storage is commited it should have a valid Package representation OSL_ENSURE( m_xPackageFolder.is(), "The package representation should exist!\n" ); if ( !m_xPackageFolder.is() ) @@ -936,7 +951,23 @@ void OStorage_Impl::Commit() if ( !xChangesBatch.is() ) throw uno::RuntimeException(); // TODO - xChangesBatch->commitChanges(); + try + { + xChangesBatch->commitChanges(); + } + catch( lang::WrappedTargetException& r ) + { + // the wrapped UseBackupException means that the target medium can be corrupted + embed::UseBackupException aException; + if ( r.TargetException >>= aException ) + { + m_xStream = uno::Reference< io::XStream >(); + m_xInputStream = uno::Reference< io::XInputStream >(); + throw aException; + } + + throw; + } } else if ( !m_bCommited ) { @@ -1624,6 +1655,7 @@ uno::Any SAL_CALL OStorage::queryInterface( const uno::Type& rType ) , static_cast<lang::XTypeProvider*> ( this ) , static_cast<embed::XStorage*> ( this ) , static_cast<embed::XTransactedObject*> ( this ) + , static_cast<embed::XTransactionBroadcaster*> ( this ) , static_cast<util::XModifiable*> ( this ) , static_cast<container::XNameAccess*> ( this ) , static_cast<container::XElementAccess*> ( this ) @@ -1682,6 +1714,7 @@ uno::Sequence< uno::Type > SAL_CALL OStorage::getTypes() ( ::getCppuType( ( const uno::Reference< lang::XTypeProvider >* )NULL ) , ::getCppuType( ( const uno::Reference< embed::XStorage >* )NULL ) , ::getCppuType( ( const uno::Reference< embed::XTransactedObject >* )NULL ) + , ::getCppuType( ( const uno::Reference< embed::XTransactionBroadcaster >* )NULL ) , ::getCppuType( ( const uno::Reference< util::XModifiable >* )NULL ) // , ::getCppuType( ( const uno::Reference< container::XNameAccess >* )NULL ) // , ::getCppuType( ( const uno::Reference< lang::XComponent >* )NULL ) @@ -2185,8 +2218,8 @@ void SAL_CALL OStorage::copyElementTo( const ::rtl::OUString& aElementName, if ( !m_pImpl ) throw lang::DisposedException(); - if ( !aElementName.getLength() || !aNewName.getLength() - || !xDest.is() || xDest == uno::Reference< uno::XInterface >( static_cast< OWeakObject* >( this ), uno::UNO_QUERY ) ) + if ( !aElementName.getLength() || !aNewName.getLength() || !xDest.is() ) + // || xDest == uno::Reference< uno::XInterface >( static_cast< OWeakObject* >( this ), uno::UNO_QUERY ) ) throw lang::IllegalArgumentException(); SotElement_Impl* pElement = m_pImpl->FindElement( aElementName ); @@ -2290,9 +2323,6 @@ void SAL_CALL OStorage::commit() if ( m_pData->m_bReadOnlyWrap ) throw io::IOException(); // TODO: access_denied - if ( !m_pImpl->m_bListCreated ) - return; // nothing was changed - try { BroadcastTransaction( STOR_MESS_PRECOMMIT ); m_pImpl->Commit(); // the root storage initiates the storing to source |