/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #ifndef INCLUDED_SOT_STORAGE_HXX #define INCLUDED_SOT_STORAGE_HXX #include #include #include #include #include #include #include #include #include #include #define STORAGE_TRANSACTED 0x04 #define STORAGE_DISKSPANNED_MODE 0x80 #define STORAGE_CREATE_UNPACKED 0x44 typedef short StorageMode; class SvStorage; /************************************************************************* *************************************************************************/ class SotStorage; class BaseStorageStream; class SOT_DLLPUBLIC SotStorageStream : virtual public SotObject, public SvStream { friend class SotStorage; BaseStorageStream * pOwnStm; // pointer to the own stream protected: virtual sal_uLong GetData( void* pData, sal_uLong nSize ) SAL_OVERRIDE; virtual sal_uLong PutData( const void* pData, sal_uLong nSize ) SAL_OVERRIDE; virtual sal_uInt64 SeekPos(sal_uInt64 nPos) SAL_OVERRIDE; virtual void FlushData() SAL_OVERRIDE; virtual ~SotStorageStream(); public: SotStorageStream( const OUString &, StreamMode = STREAM_STD_READWRITE, StorageMode = 0 ); SotStorageStream( BaseStorageStream *pStm ); SotStorageStream(); private: static SotFactory ** GetFactoryAdress() { return &(SOTDATA()->pSotStorageStreamFactory); } public: static void * CreateInstance( SotObject ** = NULL ); static SotFactory * ClassFactory(); virtual const SotFactory * GetSvFactory() const SAL_OVERRIDE; virtual void * Cast( const SotFactory * ) SAL_OVERRIDE; virtual void ResetError() SAL_OVERRIDE; virtual void SetSize( sal_uInt64 nNewSize ) SAL_OVERRIDE; sal_uInt32 GetSize() const; bool CopyTo( SotStorageStream * pDestStm ); bool Commit(); bool SetProperty( const OUString& rName, const ::com::sun::star::uno::Any& rValue ); virtual sal_uInt64 remainingSize() SAL_OVERRIDE; }; #ifndef SOT_DECL_SOTSTORAGESTREAM_DEFINED #define SOT_DECL_SOTSTORAGESTREAM_DEFINED typedef tools::SvRef SotStorageStreamRef; #endif namespace ucbhelper { class Content; } class BaseStorage; class UNOStorageHolder; class SOT_DLLPUBLIC SotStorage : virtual public SotObject { friend class SotStorageStream; friend class SvStorage; BaseStorage * m_pOwnStg; // target storage SvStream * m_pStorStm; // only for SDSTORAGES sal_uLong m_nError; OUString m_aName; // name of the storage bool m_bIsRoot; // e.g.: File Storage bool m_bDelStm; OString m_aKey; // aKey.Len != 0 -> encryption long m_nVersion; protected: virtual ~SotStorage(); void CreateStorage( bool bUCBStorage, StreamMode, StorageMode ); public: SotStorage( const OUString &, StreamMode = STREAM_STD_READWRITE, StorageMode = 0 ); SotStorage( bool bUCBStorage, const OUString &, StreamMode = STREAM_STD_READWRITE, StorageMode = 0 ); SotStorage( BaseStorage * ); SotStorage( SvStream & rStm ); SotStorage( bool bUCBStorage, SvStream & rStm ); SotStorage( SvStream * pStm, bool bDelete ); SotStorage(); private: static SotFactory ** GetFactoryAdress() { return &(SOTDATA()->pSotStorageFactory); } public: static void * CreateInstance( SotObject ** = NULL ); static SotFactory * ClassFactory(); virtual const SotFactory * GetSvFactory() const SAL_OVERRIDE; virtual void * Cast( const SotFactory * ) SAL_OVERRIDE; SvMemoryStream * CreateMemoryStream(); static bool IsStorageFile( const OUString & rFileName ); static bool IsStorageFile( SvStream* pStream ); const OUString& GetName() const; bool Validate(); const OString& GetKey() const { return m_aKey;} void SetVersion( long nVers ) { m_nVersion = nVers; } long GetVersion() const { return m_nVersion; } sal_uLong GetErrorCode() const { return m_nError; } sal_uLong GetError() const { return ERRCODE_TOERROR(m_nError); } void SetError( sal_uLong nErrorCode ) { if( m_nError == SVSTREAM_OK ) m_nError = nErrorCode; } bool IsRoot() const { return m_bIsRoot; } void SignAsRoot( bool b = true ) { m_bIsRoot = b; } void SetDeleteStream( bool bDelete ) { m_bDelStm = bDelete; } // own data sector void SetClass( const SvGlobalName & rClass, sal_uLong bOriginalClipFormat, const OUString & rUserTypeName ); SvGlobalName GetClassName(); // type of data in the storage sal_uLong GetFormat(); OUString GetUserName(); // list of all elements void FillInfoList( SvStorageInfoList * ) const; bool CopyTo( SotStorage * pDestStg ); bool Commit(); // create stream with connection to Storage, // more or less a Parent-Child relationship SotStorageStream * OpenSotStream( const OUString & rEleName, StreamMode = STREAM_STD_READWRITE, StorageMode = 0 ); SotStorage * OpenSotStorage( const OUString & rEleName, StreamMode = STREAM_STD_READWRITE, bool transacted = true ); // query whether Storage or Stream bool IsStream( const OUString & rEleName ) const; bool IsStorage( const OUString & rEleName ) const; bool IsContained( const OUString & rEleName ) const; // remove element bool Remove( const OUString & rEleName ); bool CopyTo( const OUString & rEleName, SotStorage * pDest, const OUString & rNewName ); bool IsOLEStorage() const; static bool IsOLEStorage( const OUString & rFileName ); static bool IsOLEStorage( SvStream* pStream ); static SotStorage* OpenOLEStorage( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage, const OUString& rEleName, StreamMode = STREAM_STD_READWRITE ); static sal_Int32 GetFormatID( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ); static sal_Int32 GetVersion( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ); }; #ifndef SOT_DECL_SOTSTORAGE_DEFINED #define SOT_DECL_SOTSTORAGE_DEFINED typedef tools::SvRef SotStorageRef; #endif #define SvStorage SotStorage #define SvStorageRef SotStorageRef #define SvStorageStream SotStorageStream #define SvStorageStreamRef SotStorageStreamRef #endif // _SVSTOR_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */