blob: 7da20b0d35f1e9a1865c28b2cdbd3ac13e21a3b9 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SOT_STORAGE_HXX
#define _SOT_STORAGE_HXX
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Reference.h>
#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_H_
#include <com/sun/star/io/XInputStream.hpp>
#endif
#include <com/sun/star/embed/XStorage.hpp>
#include <sot/object.hxx>
#include <sot/factory.hxx>
#ifndef _TOOLS_STREAM_HXX
#include <tools/stream.hxx>
#endif
#ifndef _TOOLS_ERRCODE_HXX
#include <tools/errcode.hxx>
#endif
#include "sot/sotdllapi.h"
#define STORAGE_FAILIFTHERE 0x02
#define STORAGE_TRANSACTED 0x04
#define STORAGE_PRIORITY 0x08
#define STORAGE_DELETEONRELEASE 0x10
#define STORAGE_CONVERT 0x20
#define STORAGE_UNPACKED_MODE 0x40
#define STORAGE_DISKSPANNED_MODE 0x80
#define STORAGE_CREATE_UNPACKED 0x44
typedef short StorageMode;
class SvStorage;
namespace binfilter
{
class SvStorage;
}
/*************************************************************************
*************************************************************************/
class SotStorage;
class BaseStorageStream;
class SOT_DLLPUBLIC SotStorageStream : virtual public SotObject, public SvStream
{
friend class SotStorage;
friend class ImpStream;
BaseStorageStream * pOwnStm;// Zeiger auf den eigenen Stream
protected:
virtual sal_uLong GetData( void* pData, sal_uLong nSize );
virtual sal_uLong PutData( const void* pData, sal_uLong nSize );
virtual sal_uLong SeekPos( sal_uLong nPos );
virtual void FlushData();
~SotStorageStream();
public:
SotStorageStream( const String &,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorageStream( BaseStorageStream *pStm );
SotStorageStream();
SO2_DECL_BASIC_CLASS_DLL(SotStorageStream,SOTDATA())
SO2_DECL_INVARIANT()
using SvStream::SyncSvStream;
virtual void SyncSvStream();
void SyncSysStream() { SvStream::SyncSysStream(); }
virtual void ResetError();
virtual void SetSize( sal_uLong nNewSize );
sal_uInt32 GetSize() const;
sal_Bool CopyTo( SotStorageStream * pDestStm );
virtual sal_Bool Commit();
virtual sal_Bool Revert();
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 );
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
GetXInputStream() const;
};
#ifndef SOT_DECL_SOTSTORAGESTREAM_DEFINED
#define SOT_DECL_SOTSTORAGESTREAM_DEFINED
SO2_DECL_REF(SotStorageStream)
#endif
SO2_IMPL_REF(SotStorageStream)
namespace ucbhelper
{
class Content;
}
class SvStorageInfoList;
class BaseStorage;
class UNOStorageHolder;
class SOT_DLLPUBLIC SotStorage : virtual public SotObject
{
friend class SotStorageStream;
friend class SvStorage;
friend class ::binfilter::SvStorage;
BaseStorage * m_pTmpStg; // Temp-Storage fuer Transacted, nur auf diesem schreiben! ??? Useless ???
BaseStorage * m_pOwnStg; // Zielstorage
SvStream * m_pStorStm; // nur fuer SDSTORAGES
sal_uLong m_nError;
String m_aName; // Name des Storage
sal_Bool m_bIsRoot:1, // z.B.: File-Storage
m_bDelStm:1;
ByteString m_aKey; // aKey.Len != 0 -> Verschluesselung
long m_nVersion;
protected:
~SotStorage();
void CreateStorage( sal_Bool bUCBStorage, StreamMode, StorageMode );
public:
SotStorage( const String &,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorage( sal_Bool bUCBStorage, const String &,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorage( const ::ucbhelper::Content& rContent, const String &,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorage( BaseStorage * );
SotStorage( SvStream & rStm );
SotStorage( sal_Bool bUCBStorage, SvStream & rStm );
SotStorage( SvStream * pStm, sal_Bool bDelete );
SotStorage();
SO2_DECL_BASIC_CLASS_DLL(SotStorage,SOTDATA())
SO2_DECL_INVARIANT()
SvMemoryStream * CreateMemoryStream();
const SvStream * GetSvStream();
static sal_Bool IsStorageFile( const String & rFileName );
static sal_Bool IsStorageFile( SvStream* pStream );
virtual const String & GetName() const;
virtual sal_Bool Validate();
void SetKey( const ByteString& rKey );
const ByteString & 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;
}
virtual void ResetError();
sal_Bool IsRoot() const { return m_bIsRoot; }
void SignAsRoot( sal_Bool b = sal_True ) { m_bIsRoot = b; }
void SetDeleteStream( sal_Bool bDelete ) { m_bDelStm = bDelete; }
// eigener Datenbereich
virtual void SetClass( const SvGlobalName & rClass,
sal_uLong bOriginalClipFormat,
const String & rUserTypeName );
virtual void SetConvertClass( const SvGlobalName & rConvertClass,
sal_uLong bOriginalClipFormat,
const String & rUserTypeName );
virtual SvGlobalName GetClassName();// Typ der Daten im Storage
virtual sal_uLong GetFormat();
virtual String GetUserName();
virtual sal_Bool ShouldConvert();
void SetName( const String& rName );
// Liste aller Elemente
virtual void FillInfoList( SvStorageInfoList * ) const;
virtual sal_Bool CopyTo( SotStorage * pDestStg );
virtual sal_Bool Commit();
virtual sal_Bool Revert();
/* Element Methoden */
// Stream mit Verbindung zu Storage erzeugen,
// in etwa eine Parent-Child Beziehung
SotStorageStream * OpenSotStream( const String & rEleName,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorageStream * OpenEncryptedSotStream( const String & rEleName, const ByteString& rKey,
StreamMode = STREAM_STD_READWRITE,
StorageMode = 0 );
SotStorage * OpenSotStorage( const String & rEleName,
StreamMode = STREAM_STD_READWRITE,
StorageMode = STORAGE_TRANSACTED );
SotStorage * OpenUCBStorage( const String & rEleName,
StreamMode = STREAM_STD_READWRITE,
StorageMode = STORAGE_TRANSACTED );
SotStorage * OpenOLEStorage( const String & rEleName,
StreamMode = STREAM_STD_READWRITE,
StorageMode = STORAGE_TRANSACTED );
// Abfrage auf Storage oder Stream
virtual sal_Bool IsStream( const String & rEleName ) const;
virtual sal_Bool IsStorage( const String & rEleName ) const;
virtual sal_Bool IsContained( const String & rEleName ) const;
// Element loeschen
virtual sal_Bool Remove( const String & rEleName );
// Elementnamen aendern
virtual sal_Bool Rename( const String & rEleName,
const String & rNewName );
virtual sal_Bool CopyTo( const String & rEleName, SotStorage * pDest,
const String & rNewName );
virtual sal_Bool MoveTo( const String & rEleName, SotStorage * pDest,
const String & rNewName );
SvStream* GetTargetSvStream() 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 );
sal_Bool IsOLEStorage() const;
static sal_Bool IsOLEStorage( const String & rFileName );
static sal_Bool IsOLEStorage( SvStream* pStream );
// this is temporary HACK, _MUST_ be removed before release
::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetUNOAPIDuplicate( const String& rEleName, sal_Int32 nUNOStorageMode );
void RemoveUNOStorageHolder( UNOStorageHolder* pHolder );
static SotStorage* OpenOLEStorage( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage,
const String& 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
SO2_DECL_REF(SotStorage)
#endif
SO2_IMPL_REF(SotStorage)
#define SvStorage SotStorage
#define SvStorageRef SotStorageRef
#define SvStorageStream SotStorageStream
#define SvStorageStreamRef SotStorageStreamRef
#endif // _SVSTOR_HXX