office-gobmx/ucb/source/ucp/tdoc/tdoc_stgelems.hxx
Rüdiger Timm 3643010b87 INTEGRATION: CWS changefileheader (1.5.184); FILE MERGED
2008/03/31 15:30:28 rt 1.5.184.1: #i87441# Change license header to LPGL v3.
2008-04-10 14:31:51 +00:00

545 lines
23 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: tdoc_stgelems.hxx,v $
* $Revision: 1.6 $
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef INCLUDED_TDOC_STGELEMS_HXX
#define INCLUDED_TDOC_STGELEMS_HXX
#include <memory>
#include "osl/mutex.hxx"
#include "rtl/ref.hxx"
#include "cppuhelper/implbase2.hxx"
#include "cppuhelper/implbase5.hxx"
#include "com/sun/star/embed/XStorage.hpp"
#include "com/sun/star/embed/XTransactedObject.hpp"
#include "com/sun/star/io/XOutputStream.hpp"
#include "com/sun/star/io/XStream.hpp"
#include "com/sun/star/io/XTruncate.hpp"
#include "com/sun/star/lang/XComponent.hpp"
#include "tdoc_storage.hxx"
namespace tdoc_ucp {
struct MutexHolder
{
osl::Mutex m_aMutex;
};
//=======================================================================
class ParentStorageHolder : public MutexHolder
{
public:
ParentStorageHolder(
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xParentStorage,
const rtl::OUString & rUri );
bool isParentARootStorage() const
{ return m_bParentIsRootStorage; }
com::sun::star::uno::Reference< com::sun::star::embed::XStorage >
getParentStorage() const
{ return m_xParentStorage; }
void setParentStorage( const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xStg )
{ osl::MutexGuard aGuard( m_aMutex ); m_xParentStorage = xStg; }
private:
com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > m_xParentStorage;
bool m_bParentIsRootStorage;
};
//=======================================================================
typedef
cppu::WeakImplHelper2<
com::sun::star::embed::XStorage,
com::sun::star::embed::XTransactedObject > StorageUNOBase;
class Storage : public StorageUNOBase, public ParentStorageHolder
{
public:
Storage(
const com::sun::star::uno::Reference<
com::sun::star::lang::XMultiServiceFactory > & xSMgr,
const rtl::Reference< StorageElementFactory > & xFactory,
const rtl::OUString & rUri,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xParentStorage,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xStorageToWrap );
virtual ~Storage();
bool isDocumentStorage() const { return m_bIsDocumentStorage; }
// XInterface
virtual com::sun::star::uno::Any SAL_CALL queryInterface(
const com::sun::star::uno::Type& aType )
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL acquire()
throw ();
virtual void SAL_CALL release()
throw ();
// XTypeProvider (implemnented by base, but needs to be overridden for
// delegating to aggregate)
virtual com::sun::star::uno::Sequence< com::sun::star::uno::Type > SAL_CALL
getTypes()
throw ( com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
getImplementationId()
throw ( com::sun::star::uno::RuntimeException );
// XComponent ( one of XStorage bases )
virtual void SAL_CALL
dispose()
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
addEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener > & xListener )
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
removeEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener >& aListener )
throw ( com::sun::star::uno::RuntimeException );
// XNameAccess ( one of XStorage bases )
virtual com::sun::star::uno::Any SAL_CALL
getByName( const rtl::OUString& aName )
throw ( com::sun::star::container::NoSuchElementException,
com::sun::star::lang::WrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
getElementNames()
throw ( com::sun::star::uno::RuntimeException );
virtual sal_Bool SAL_CALL
hasByName( const rtl::OUString& aName )
throw ( com::sun::star::uno::RuntimeException );
// XElementAccess (base of XNameAccess)
virtual com::sun::star::uno::Type SAL_CALL
getElementType()
throw ( com::sun::star::uno::RuntimeException );
virtual sal_Bool SAL_CALL
hasElements()
throw ( com::sun::star::uno::RuntimeException );
// XStorage
virtual void SAL_CALL
copyToStorage( const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage >& xDest )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference< com::sun::star::io::XStream > SAL_CALL
openStreamElement( const ::rtl::OUString& aStreamName,
sal_Int32 nOpenMode )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::packages::WrongPasswordException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference< com::sun::star::io::XStream > SAL_CALL
openEncryptedStreamElement( const ::rtl::OUString& aStreamName,
sal_Int32 nOpenMode,
const ::rtl::OUString& aPassword )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::packages::NoEncryptionException,
com::sun::star::packages::WrongPasswordException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference< com::sun::star::embed::XStorage > SAL_CALL
openStorageElement( const ::rtl::OUString& aStorName,
sal_Int32 nOpenMode )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference< com::sun::star::io::XStream > SAL_CALL
cloneStreamElement( const ::rtl::OUString& aStreamName )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::packages::WrongPasswordException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference< com::sun::star::io::XStream > SAL_CALL
cloneEncryptedStreamElement( const ::rtl::OUString& aStreamName,
const ::rtl::OUString& aPassword )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::packages::NoEncryptionException,
com::sun::star::packages::WrongPasswordException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
copyLastCommitTo( const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage >& xTargetStorage )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
copyStorageElementLastCommitTo( const ::rtl::OUString& aStorName,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > &
xTargetStorage )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual sal_Bool SAL_CALL
isStreamElement( const ::rtl::OUString& aElementName )
throw ( com::sun::star::container::NoSuchElementException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::embed::InvalidStorageException,
com::sun::star::uno::RuntimeException );
virtual sal_Bool SAL_CALL
isStorageElement( const ::rtl::OUString& aElementName )
throw ( com::sun::star::container::NoSuchElementException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::embed::InvalidStorageException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
removeElement( const ::rtl::OUString& aElementName )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::container::NoSuchElementException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
renameElement( const ::rtl::OUString& aEleName,
const ::rtl::OUString& aNewName )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::container::NoSuchElementException,
com::sun::star::container::ElementExistException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
copyElementTo( const ::rtl::OUString& aElementName,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage >& xDest,
const ::rtl::OUString& aNewName )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::container::NoSuchElementException,
com::sun::star::container::ElementExistException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
moveElementTo( const ::rtl::OUString& aElementName,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage >& xDest,
const ::rtl::OUString& rNewName )
throw ( com::sun::star::embed::InvalidStorageException,
com::sun::star::lang::IllegalArgumentException,
com::sun::star::container::NoSuchElementException,
com::sun::star::container::ElementExistException,
com::sun::star::io::IOException,
com::sun::star::embed::StorageWrappedTargetException,
com::sun::star::uno::RuntimeException );
// XTransactedObject
virtual void SAL_CALL commit()
throw ( com::sun::star::io::IOException,
com::sun::star::lang::WrappedTargetException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL revert()
throw ( com::sun::star::io::IOException,
com::sun::star::lang::WrappedTargetException,
com::sun::star::uno::RuntimeException );
private:
Storage( const rtl::Reference< Storage > & rFactory ); // n.i.
rtl::Reference< StorageElementFactory > m_xFactory;
com::sun::star::uno::Reference<
com::sun::star::uno::XAggregation > m_xAggProxy;
com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > m_xWrappedStorage;
com::sun::star::uno::Reference<
com::sun::star::embed::XTransactedObject > m_xWrappedTransObj;
com::sun::star::uno::Reference<
com::sun::star::lang::XComponent > m_xWrappedComponent;
com::sun::star::uno::Reference<
com::sun::star::lang::XTypeProvider > m_xWrappedTypeProv;
bool m_bIsDocumentStorage;
StorageElementFactory::StorageMap::iterator m_aContainerIt;
friend class StorageElementFactory;
friend class std::auto_ptr< Storage >;
};
//=======================================================================
typedef
cppu::WeakImplHelper2<
com::sun::star::io::XOutputStream,
com::sun::star::lang::XComponent > OutputStreamUNOBase;
class OutputStream : public OutputStreamUNOBase, public ParentStorageHolder
{
public:
OutputStream(
const com::sun::star::uno::Reference<
com::sun::star::lang::XMultiServiceFactory > & xSMgr,
const rtl::OUString & rUri,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xParentStorage,
const com::sun::star::uno::Reference<
com::sun::star::io::XOutputStream > & xStreamToWrap );
virtual ~OutputStream();
// XInterface
virtual com::sun::star::uno::Any SAL_CALL
queryInterface( const com::sun::star::uno::Type& aType )
throw ( com::sun::star::uno::RuntimeException );
// XTypeProvider (implemnented by base, but needs to be overridden for
// delegating to aggregate)
virtual com::sun::star::uno::Sequence< com::sun::star::uno::Type > SAL_CALL
getTypes()
throw ( com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
getImplementationId()
throw ( com::sun::star::uno::RuntimeException );
// XOutputStream
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 );
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 );
// Note: We need to intercept this one.
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 );
// XComponent
// Note: We need to intercept this one.
virtual void SAL_CALL
dispose()
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
addEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener >& xListener )
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
removeEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener >& aListener )
throw ( com::sun::star::uno::RuntimeException );
private:
com::sun::star::uno::Reference<
com::sun::star::uno::XAggregation > m_xAggProxy;
com::sun::star::uno::Reference<
com::sun::star::io::XOutputStream > m_xWrappedStream;
com::sun::star::uno::Reference<
com::sun::star::lang::XComponent > m_xWrappedComponent;
com::sun::star::uno::Reference<
com::sun::star::lang::XTypeProvider > m_xWrappedTypeProv;
};
//=======================================================================
typedef cppu::WeakImplHelper5< com::sun::star::io::XStream,
com::sun::star::io::XOutputStream,
com::sun::star::io::XTruncate,
com::sun::star::io::XInputStream,
com::sun::star::lang::XComponent >
StreamUNOBase;
class Stream : public StreamUNOBase, public ParentStorageHolder
{
public:
Stream(
const com::sun::star::uno::Reference<
com::sun::star::lang::XMultiServiceFactory > & xSMgr,
const rtl::OUString & rUri,
const com::sun::star::uno::Reference<
com::sun::star::embed::XStorage > & xParentStorage,
const com::sun::star::uno::Reference<
com::sun::star::io::XStream > & xStreamToWrap );
virtual ~Stream();
// XInterface
virtual com::sun::star::uno::Any SAL_CALL
queryInterface( const com::sun::star::uno::Type& aType )
throw ( com::sun::star::uno::RuntimeException );
// XTypeProvider (implemnented by base, but needs to be overridden for
// delegating to aggregate)
virtual com::sun::star::uno::Sequence< com::sun::star::uno::Type > SAL_CALL
getTypes()
throw ( com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL
getImplementationId()
throw ( com::sun::star::uno::RuntimeException );
// XStream
virtual com::sun::star::uno::Reference<
com::sun::star::io::XInputStream > SAL_CALL
getInputStream()
throw( com::sun::star::uno::RuntimeException );
virtual com::sun::star::uno::Reference<
com::sun::star::io::XOutputStream > SAL_CALL
getOutputStream()
throw( com::sun::star::uno::RuntimeException );
// XOutputStream
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 );
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 );
virtual void SAL_CALL
closeOutput()
throw( com::sun::star::io::NotConnectedException,
com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
// XTruncate
virtual void SAL_CALL
truncate()
throw( com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
// XInputStream
virtual sal_Int32 SAL_CALL
readBytes( com::sun::star::uno::Sequence< sal_Int8 >& aData,
sal_Int32 nBytesToRead )
throw( com::sun::star::io::NotConnectedException,
com::sun::star::io::BufferSizeExceededException,
com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
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);
virtual void SAL_CALL
skipBytes( sal_Int32 nBytesToSkip )
throw( com::sun::star::io::NotConnectedException,
com::sun::star::io::BufferSizeExceededException,
com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
virtual sal_Int32 SAL_CALL
available()
throw( com::sun::star::io::NotConnectedException,
com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
closeInput()
throw( com::sun::star::io::NotConnectedException,
com::sun::star::io::IOException,
com::sun::star::uno::RuntimeException );
// XComponent
// Note: We need to intercept this one.
virtual void SAL_CALL
dispose()
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
addEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener >& xListener )
throw ( com::sun::star::uno::RuntimeException );
virtual void SAL_CALL
removeEventListener( const com::sun::star::uno::Reference<
com::sun::star::lang::XEventListener >& aListener )
throw ( com::sun::star::uno::RuntimeException );
private:
void commitChanges()
throw( com::sun::star::io::IOException );
com::sun::star::uno::Reference<
com::sun::star::uno::XAggregation > m_xAggProxy;
com::sun::star::uno::Reference<
com::sun::star::io::XStream > m_xWrappedStream;
com::sun::star::uno::Reference<
com::sun::star::io::XOutputStream > m_xWrappedOutputStream;
com::sun::star::uno::Reference<
com::sun::star::io::XTruncate > m_xWrappedTruncate;
com::sun::star::uno::Reference<
com::sun::star::io::XInputStream > m_xWrappedInputStream;
com::sun::star::uno::Reference<
com::sun::star::lang::XComponent > m_xWrappedComponent;
com::sun::star::uno::Reference<
com::sun::star::lang::XTypeProvider > m_xWrappedTypeProv;
};
} // namespace tdoc_ucp
#endif /* !INCLUDED_TDOC_STGELEMS_HXX */