summaryrefslogtreecommitdiff
path: root/sot/inc/sot/stg.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'sot/inc/sot/stg.hxx')
-rw-r--r--sot/inc/sot/stg.hxx398
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