diff options
Diffstat (limited to 'sot/inc/sot/stg.hxx')
-rw-r--r-- | sot/inc/sot/stg.hxx | 398 |
1 files changed, 398 insertions, 0 deletions
diff --git a/sot/inc/sot/stg.hxx b/sot/inc/sot/stg.hxx new file mode 100644 index 000000000000..b4f13b8d2660 --- /dev/null +++ b/sot/inc/sot/stg.hxx @@ -0,0 +1,398 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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 _STG_HXX +#define _STG_HXX + +#include <com/sun/star/uno/Any.h> +#include <com/sun/star/uno/Reference.h> + +#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_H_ +#include <com/sun/star/io/XInputStream.hpp> +#endif + +#ifndef _COM_SUN_STAR_UCB_XCOMMANDENVIRONMENT_H_ +#include <com/sun/star/ucb/XCommandEnvironment.hpp> +#endif + +#ifndef _COM_SUN_STAR_EMBED_XSTORAGE_H_ +#include <com/sun/star/embed/XStorage.hpp> +#endif + + +#include <tools/rtti.hxx> +#ifndef _TOOLS_STREAM_HXX //autogen +#include <tools/stream.hxx> +#endif +#ifndef _TOOLS_GLOBNAME_HXX //autogen +#include <tools/globname.hxx> +#endif +#include "sot/sotdllapi.h" + +#include <list> +class UNOStorageHolder; +typedef ::std::list< UNOStorageHolder* > UNOStorageHolderList; + +class Storage; +class StorageStream; +class StgIo; +class StgDirEntry; +class StgStrm; +class SvGlobalName; +struct ClsId +{ + sal_Int32 n1; + sal_Int16 n2, n3; + sal_uInt8 n4, n5, n6, n7, n8, n9, n10, n11; +}; + +class SOT_DLLPUBLIC StorageBase : public SvRefBase +{ +protected: + sal_uIntPtr m_nError; // error code + StreamMode m_nMode; // open mode + sal_Bool m_bAutoCommit; + StorageBase(); + virtual ~StorageBase(); +public: + TYPEINFO(); + virtual const SvStream* GetSvStream() const = 0; + virtual sal_Bool Validate( sal_Bool=sal_False ) const = 0; + virtual sal_Bool ValidateMode( StreamMode ) const = 0; + void ResetError() const; + void SetError( sal_uIntPtr ) const; + sal_uIntPtr GetError() const; + sal_Bool Good() const { return sal_Bool( m_nError == SVSTREAM_OK ); } + StreamMode GetMode() const { return m_nMode; } + void SetAutoCommit( sal_Bool bSet ) + { m_bAutoCommit = bSet; } +}; + +class BaseStorageStream : public StorageBase +{ +public: + TYPEINFO(); + virtual sal_uIntPtr Read( void * pData, sal_uIntPtr nSize ) = 0; + virtual sal_uIntPtr Write( const void* pData, sal_uIntPtr nSize ) = 0; + virtual sal_uIntPtr Seek( sal_uIntPtr nPos ) = 0; + virtual sal_uIntPtr Tell() = 0; + virtual void Flush() = 0; + virtual sal_Bool SetSize( sal_uIntPtr nNewSize ) = 0; + virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ) = 0; + virtual sal_Bool Commit() = 0; + virtual sal_Bool Revert() = 0; + virtual sal_Bool Equals( const BaseStorageStream& rStream ) const = 0; +}; + +class SvStorageInfoList; +class BaseStorage : public StorageBase +{ +public: + TYPEINFO(); + virtual const String& GetName() const = 0; + virtual sal_Bool IsRoot() const = 0; + virtual void SetClassId( const ClsId& ) = 0; + virtual const ClsId& GetClassId() const = 0; + virtual void SetDirty() = 0; + virtual void SetClass( const SvGlobalName & rClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ) = 0; + virtual void SetConvertClass( const SvGlobalName & rConvertClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ) = 0; + virtual SvGlobalName GetClassName() = 0; + virtual sal_uIntPtr GetFormat() = 0; + virtual String GetUserName() = 0; + virtual sal_Bool ShouldConvert() = 0; + virtual void FillInfoList( SvStorageInfoList* ) const = 0; + virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const = 0; + virtual sal_Bool Commit() = 0; + virtual sal_Bool Revert() = 0; + virtual BaseStorageStream* OpenStream( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_True, const ByteString* pKey=0 ) = 0; + virtual BaseStorage* OpenStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ) = 0; + virtual BaseStorage* OpenUCBStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ) = 0; + virtual BaseStorage* OpenOLEStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ) = 0; + virtual sal_Bool IsStream( const String& rEleName ) const = 0; + virtual sal_Bool IsStorage( const String& rEleName ) const = 0; + virtual sal_Bool IsContained( const String& rEleName ) const = 0; + virtual sal_Bool Remove( const String & rEleName ) = 0; + virtual sal_Bool Rename( const String & rEleName, const String & rNewName ) = 0; + virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ) = 0; + virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ) = 0; + virtual sal_Bool ValidateFAT() = 0; + virtual sal_Bool Equals( const BaseStorage& rStream ) const = 0; +}; + +class OLEStorageBase +{ +protected: + StreamMode& nStreamMode; // open mode + StgIo* pIo; // I/O subsystem + StgDirEntry* pEntry; // the dir entry + OLEStorageBase( StgIo*, StgDirEntry*, StreamMode& ); + ~OLEStorageBase(); + sal_Bool Validate_Impl( sal_Bool=sal_False ) const; + sal_Bool ValidateMode_Impl( StreamMode, StgDirEntry* p = NULL ) const ; + const SvStream* GetSvStream_Impl() const; +public: +}; + +class StorageStream : public BaseStorageStream, public OLEStorageBase +{ +//friend class Storage; + sal_uIntPtr nPos; // current position +protected: + ~StorageStream(); +public: + TYPEINFO(); + StorageStream( StgIo*, StgDirEntry*, StreamMode ); + virtual sal_uIntPtr Read( void * pData, sal_uIntPtr nSize ); + virtual sal_uIntPtr Write( const void* pData, sal_uIntPtr nSize ); + virtual sal_uIntPtr Seek( sal_uIntPtr nPos ); + virtual sal_uIntPtr Tell() { return nPos; } + virtual void Flush(); + virtual sal_Bool SetSize( sal_uIntPtr nNewSize ); + virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ); + virtual sal_Bool Commit(); + virtual sal_Bool Revert(); + virtual sal_Bool Validate( sal_Bool=sal_False ) const; + virtual sal_Bool ValidateMode( StreamMode ) const; + sal_Bool ValidateMode( StreamMode, StgDirEntry* p ) const; + const SvStream* GetSvStream() const; + virtual sal_Bool Equals( const BaseStorageStream& rStream ) const; +}; + +class UCBStorageStream; + +class SOT_DLLPUBLIC Storage : public BaseStorage, public OLEStorageBase +{ + String aName; + sal_Bool bIsRoot; + void Init( sal_Bool bCreate ); + Storage( StgIo*, StgDirEntry*, StreamMode ); +protected: + ~Storage(); +public: + TYPEINFO(); + Storage( const String &, StreamMode = STREAM_STD_READWRITE, sal_Bool bDirect = sal_True ); + Storage( SvStream& rStrm, sal_Bool bDirect = sal_True ); + Storage( UCBStorageStream& rStrm, sal_Bool bDirect = sal_True ); + + static sal_Bool IsStorageFile( const String & rFileName ); + static sal_Bool IsStorageFile( SvStream* ); + + virtual const String& GetName() const; + virtual sal_Bool IsRoot() const { return bIsRoot; } + virtual void SetClassId( const ClsId& ); + virtual const ClsId& GetClassId() const; + virtual void SetDirty(); + virtual void SetClass( const SvGlobalName & rClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ); + virtual void SetConvertClass( const SvGlobalName & rConvertClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ); + virtual SvGlobalName GetClassName(); + virtual sal_uIntPtr GetFormat(); + virtual String GetUserName(); + virtual sal_Bool ShouldConvert(); + virtual void FillInfoList( SvStorageInfoList* ) const; + virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const; + virtual sal_Bool Commit(); + virtual sal_Bool Revert(); + virtual BaseStorageStream* OpenStream( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_True, const ByteString* pKey=0 ); + virtual BaseStorage* OpenStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual BaseStorage* OpenUCBStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual BaseStorage* OpenOLEStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual sal_Bool IsStream( const String& rEleName ) const; + virtual sal_Bool IsStorage( const String& rEleName ) const; + virtual sal_Bool IsContained( const String& rEleName ) const; + virtual sal_Bool Remove( const String & rEleName ); + virtual sal_Bool Rename( const String & rEleName, const String & rNewName ); + virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); + virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); + virtual sal_Bool ValidateFAT(); + virtual sal_Bool Validate( sal_Bool=sal_False ) const; + virtual sal_Bool ValidateMode( StreamMode ) const; + sal_Bool ValidateMode( StreamMode, StgDirEntry* p ) const; + virtual const SvStream* GetSvStream() const; + virtual sal_Bool Equals( const BaseStorage& rStream ) const; +}; + +class UCBStorageStream_Impl; +class UCBStorageStream : public BaseStorageStream +{ +friend class UCBStorage; + + UCBStorageStream_Impl* + pImp; +protected: + ~UCBStorageStream(); +public: + TYPEINFO(); + UCBStorageStream( const String& rName, StreamMode nMode, sal_Bool bDirect, const ByteString* pKey=0 ); + UCBStorageStream( const String& rName, StreamMode nMode, sal_Bool bDirect, const ByteString* pKey, sal_Bool bRepair, ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XProgressHandler > xProgress ); + UCBStorageStream( UCBStorageStream_Impl* ); + + virtual sal_uIntPtr Read( void * pData, sal_uIntPtr nSize ); + virtual sal_uIntPtr Write( const void* pData, sal_uIntPtr nSize ); + virtual sal_uIntPtr Seek( sal_uIntPtr nPos ); + virtual sal_uIntPtr Tell(); + virtual void Flush(); + virtual sal_Bool SetSize( sal_uIntPtr nNewSize ); + virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ); + virtual sal_Bool Commit(); + virtual sal_Bool Revert(); + virtual sal_Bool Validate( sal_Bool=sal_False ) const; + virtual sal_Bool ValidateMode( StreamMode ) const; + const SvStream* GetSvStream() const; + virtual sal_Bool Equals( const BaseStorageStream& rStream ) const; + sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); + sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); + + SvStream* GetModifySvStream(); + + ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetXInputStream() const; +}; + +namespace ucbhelper +{ + class Content; +} + +class UCBStorage_Impl; +struct UCBStorageElement_Impl; +class SOT_DLLPUBLIC UCBStorage : public BaseStorage +{ + UCBStorage_Impl* pImp; + +protected: + ~UCBStorage(); +public: + static sal_Bool IsStorageFile( SvStream* ); + static sal_Bool IsStorageFile( const String& rName ); + static sal_Bool IsDiskSpannedFile( SvStream* ); + static String GetLinkedFile( SvStream& ); + static String CreateLinkFile( const String& rName ); + + UCBStorage( const ::ucbhelper::Content& rContent, const String& rName, StreamMode nMode, sal_Bool bDirect = sal_True, sal_Bool bIsRoot = sal_True ); + UCBStorage( const String& rName, + StreamMode nMode, + sal_Bool bDirect = sal_True, + sal_Bool bIsRoot = sal_True ); + + UCBStorage( const String& rName, + StreamMode nMode, + sal_Bool bDirect, + sal_Bool bIsRoot, + sal_Bool bIsRepair, + ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XProgressHandler > + xProgressHandler ); + + UCBStorage( UCBStorage_Impl* ); + UCBStorage( SvStream& rStrm, sal_Bool bDirect = sal_True ); + + TYPEINFO(); + virtual const String& GetName() const; + virtual sal_Bool IsRoot() const; + virtual void SetClassId( const ClsId& ); + virtual const ClsId& GetClassId() const; + virtual void SetDirty(); + virtual void SetClass( const SvGlobalName & rClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ); + virtual void SetConvertClass( const SvGlobalName & rConvertClass, + sal_uIntPtr nOriginalClipFormat, + const String & rUserTypeName ); + virtual SvGlobalName GetClassName(); + virtual sal_uIntPtr GetFormat(); + virtual String GetUserName(); + virtual sal_Bool ShouldConvert(); + virtual void FillInfoList( SvStorageInfoList* ) const; + virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const; + virtual sal_Bool Commit(); + virtual sal_Bool Revert(); + virtual BaseStorageStream* OpenStream( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_True, const ByteString* pKey=0 ); + virtual BaseStorage* OpenStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual BaseStorage* OpenUCBStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual BaseStorage* OpenOLEStorage( const String & rEleName, + StreamMode = STREAM_STD_READWRITE, + sal_Bool bDirect = sal_False ); + virtual sal_Bool IsStream( const String& rEleName ) const; + virtual sal_Bool IsStorage( const String& rEleName ) const; + virtual sal_Bool IsContained( const String& rEleName ) const; + virtual sal_Bool Remove( const String & rEleName ); + virtual sal_Bool Rename( const String & rEleName, const String & rNewName ); + virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); + virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); + virtual sal_Bool ValidateFAT(); + virtual sal_Bool Validate( sal_Bool=sal_False ) const; + virtual sal_Bool ValidateMode( StreamMode ) const; + virtual const SvStream* GetSvStream() const; + virtual sal_Bool Equals( const BaseStorage& rStream ) const; + sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); + sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); + sal_Bool GetProperty( const String& rEleName, const String& rName, ::com::sun::star::uno::Any& rValue ); + + // HACK to avoid incompatible build, can be done since this feature is only for development + // should be removed before release + UNOStorageHolderList* GetUNOStorageHolderList(); + +//#if _SOLAR__PRIVATE + UCBStorageElement_Impl* FindElement_Impl( const String& rName ) const; + sal_Bool CopyStorageElement_Impl( UCBStorageElement_Impl& rElement, + BaseStorage* pDest, const String& rNew ) const; + BaseStorage* OpenStorage_Impl( const String & rEleName, + StreamMode, sal_Bool bDirect, sal_Bool bForceUCBStorage ); +//#endif + +}; + + +#endif |