1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef _SOT_STORAGE_HXX 25 #define _SOT_STORAGE_HXX 26 27 #include <com/sun/star/uno/Any.hxx> 28 #include <com/sun/star/uno/Reference.h> 29 30 #ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_H_ 31 #include <com/sun/star/io/XInputStream.hpp> 32 #endif 33 #include <com/sun/star/embed/XStorage.hpp> 34 #include <sot/object.hxx> 35 #include <sot/factory.hxx> 36 #ifndef _TOOLS_STREAM_HXX 37 #include <tools/stream.hxx> 38 #endif 39 #ifndef _TOOLS_ERRCODE_HXX 40 #include <tools/errcode.hxx> 41 #endif 42 #include "sot/sotdllapi.h" 43 44 #define STORAGE_FAILIFTHERE 0x02 45 #define STORAGE_TRANSACTED 0x04 46 #define STORAGE_PRIORITY 0x08 47 #define STORAGE_DELETEONRELEASE 0x10 48 #define STORAGE_CONVERT 0x20 49 #define STORAGE_UNPACKED_MODE 0x40 50 #define STORAGE_DISKSPANNED_MODE 0x80 51 #define STORAGE_CREATE_UNPACKED 0x44 52 typedef short StorageMode; 53 54 class SvStorage; 55 namespace binfilter 56 { 57 class SvStorage; 58 } 59 60 /************************************************************************* 61 *************************************************************************/ 62 class SotStorage; 63 class BaseStorageStream; 64 class SOT_DLLPUBLIC SotStorageStream : virtual public SotObject, public SvStream 65 { 66 friend class SotStorage; 67 friend class ImpStream; 68 BaseStorageStream * pOwnStm;// Zeiger auf den eigenen Stream 69 protected: 70 virtual sal_uLong GetData( void* pData, sal_uLong nSize ); 71 virtual sal_uLong PutData( const void* pData, sal_uLong nSize ); 72 virtual sal_uLong SeekPos( sal_uLong nPos ); 73 virtual void FlushData(); 74 ~SotStorageStream(); 75 public: 76 SotStorageStream( const String &, 77 StreamMode = STREAM_STD_READWRITE, 78 StorageMode = 0 ); 79 SotStorageStream( BaseStorageStream *pStm ); 80 SotStorageStream(); 81 SO2_DECL_BASIC_CLASS_DLL(SotStorageStream,SOTDATA()) 82 SO2_DECL_INVARIANT() 83 84 using SvStream::SyncSvStream; 85 virtual void SyncSvStream(); SyncSysStream()86 void SyncSysStream() { SvStream::SyncSysStream(); } 87 88 virtual void ResetError(); 89 90 virtual void SetSize( sal_uLong nNewSize ); 91 sal_uInt32 GetSize() const; 92 sal_Bool CopyTo( SotStorageStream * pDestStm ); 93 virtual sal_Bool Commit(); 94 virtual sal_Bool Revert(); 95 sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); 96 sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); 97 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > 98 GetXInputStream() const; 99 }; 100 101 #ifndef SOT_DECL_SOTSTORAGESTREAM_DEFINED 102 #define SOT_DECL_SOTSTORAGESTREAM_DEFINED 103 SO2_DECL_REF(SotStorageStream) 104 #endif 105 SO2_IMPL_REF(SotStorageStream) 106 107 namespace ucbhelper 108 { 109 class Content; 110 } 111 112 class SvStorageInfoList; 113 class BaseStorage; 114 class UNOStorageHolder; 115 class SOT_DLLPUBLIC SotStorage : virtual public SotObject 116 { 117 friend class SotStorageStream; 118 friend class SvStorage; 119 friend class ::binfilter::SvStorage; 120 121 BaseStorage * m_pTmpStg; // Temp-Storage fuer Transacted, nur auf diesem schreiben! ??? Useless ??? 122 BaseStorage * m_pOwnStg; // Zielstorage 123 SvStream * m_pStorStm; // nur fuer SDSTORAGES 124 sal_uLong m_nError; 125 String m_aName; // Name des Storage 126 sal_Bool m_bIsRoot:1, // z.B.: File-Storage 127 m_bDelStm:1; 128 ByteString m_aKey; // aKey.Len != 0 -> Verschluesselung 129 long m_nVersion; 130 131 protected: 132 ~SotStorage(); 133 void CreateStorage( sal_Bool bUCBStorage, StreamMode, StorageMode ); 134 public: 135 SotStorage( const String &, 136 StreamMode = STREAM_STD_READWRITE, 137 StorageMode = 0 ); 138 SotStorage( sal_Bool bUCBStorage, const String &, 139 StreamMode = STREAM_STD_READWRITE, 140 StorageMode = 0 ); 141 SotStorage( const ::ucbhelper::Content& rContent, const String &, 142 StreamMode = STREAM_STD_READWRITE, 143 StorageMode = 0 ); 144 SotStorage( BaseStorage * ); 145 SotStorage( SvStream & rStm ); 146 SotStorage( sal_Bool bUCBStorage, SvStream & rStm ); 147 SotStorage( SvStream * pStm, sal_Bool bDelete ); 148 SotStorage(); 149 SO2_DECL_BASIC_CLASS_DLL(SotStorage,SOTDATA()) 150 SO2_DECL_INVARIANT() 151 152 SvMemoryStream * CreateMemoryStream(); 153 const SvStream * GetSvStream(); 154 155 static sal_Bool IsStorageFile( const String & rFileName ); 156 static sal_Bool IsStorageFile( SvStream* pStream ); 157 158 virtual const String & GetName() const; 159 160 virtual sal_Bool Validate(); 161 162 void SetKey( const ByteString& rKey ); GetKey() const163 const ByteString & GetKey() const { return m_aKey; } 164 SetVersion(long nVers)165 void SetVersion( long nVers ) 166 { 167 m_nVersion = nVers; 168 } GetVersion() const169 long GetVersion() const 170 { 171 return m_nVersion; 172 } 173 GetErrorCode() const174 sal_uLong GetErrorCode() const { return m_nError; } GetError() const175 sal_uLong GetError() const { return ERRCODE_TOERROR(m_nError); } SetError(sal_uLong nErrorCode)176 void SetError( sal_uLong nErrorCode ) 177 { 178 if( m_nError == SVSTREAM_OK ) 179 m_nError = nErrorCode; 180 } 181 virtual void ResetError(); 182 IsRoot() const183 sal_Bool IsRoot() const { return m_bIsRoot; } SignAsRoot(sal_Bool b=sal_True)184 void SignAsRoot( sal_Bool b = sal_True ) { m_bIsRoot = b; } SetDeleteStream(sal_Bool bDelete)185 void SetDeleteStream( sal_Bool bDelete ) { m_bDelStm = bDelete; } 186 187 // eigener Datenbereich 188 virtual void SetClass( const SvGlobalName & rClass, 189 sal_uLong bOriginalClipFormat, 190 const String & rUserTypeName ); 191 virtual void SetConvertClass( const SvGlobalName & rConvertClass, 192 sal_uLong bOriginalClipFormat, 193 const String & rUserTypeName ); 194 virtual SvGlobalName GetClassName();// Typ der Daten im Storage 195 virtual sal_uLong GetFormat(); 196 virtual String GetUserName(); 197 virtual sal_Bool ShouldConvert(); 198 void SetName( const String& rName ); 199 200 // Liste aller Elemente 201 virtual void FillInfoList( SvStorageInfoList * ) const; 202 virtual sal_Bool CopyTo( SotStorage * pDestStg ); 203 virtual sal_Bool Commit(); 204 virtual sal_Bool Revert(); 205 206 /* Element Methoden */ 207 // Stream mit Verbindung zu Storage erzeugen, 208 // in etwa eine Parent-Child Beziehung 209 SotStorageStream * OpenSotStream( const String & rEleName, 210 StreamMode = STREAM_STD_READWRITE, 211 StorageMode = 0 ); 212 SotStorageStream * OpenEncryptedSotStream( const String & rEleName, const ByteString& rKey, 213 StreamMode = STREAM_STD_READWRITE, 214 StorageMode = 0 ); 215 SotStorage * OpenSotStorage( const String & rEleName, 216 StreamMode = STREAM_STD_READWRITE, 217 StorageMode = STORAGE_TRANSACTED ); 218 SotStorage * OpenUCBStorage( const String & rEleName, 219 StreamMode = STREAM_STD_READWRITE, 220 StorageMode = STORAGE_TRANSACTED ); 221 SotStorage * OpenOLEStorage( const String & rEleName, 222 StreamMode = STREAM_STD_READWRITE, 223 StorageMode = STORAGE_TRANSACTED ); 224 // Abfrage auf Storage oder Stream 225 virtual sal_Bool IsStream( const String & rEleName ) const; 226 virtual sal_Bool IsStorage( const String & rEleName ) const; 227 virtual sal_Bool IsContained( const String & rEleName ) const; 228 // Element loeschen 229 virtual sal_Bool Remove( const String & rEleName ); 230 // Elementnamen aendern 231 virtual sal_Bool Rename( const String & rEleName, 232 const String & rNewName ); 233 virtual sal_Bool CopyTo( const String & rEleName, SotStorage * pDest, 234 const String & rNewName ); 235 virtual sal_Bool MoveTo( const String & rEleName, SotStorage * pDest, 236 const String & rNewName ); 237 238 SvStream* GetTargetSvStream() const; 239 sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); 240 sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); 241 sal_Bool GetProperty( const String& rEleName, const String& rName, ::com::sun::star::uno::Any& rValue ); 242 sal_Bool IsOLEStorage() const; 243 static sal_Bool IsOLEStorage( const String & rFileName ); 244 static sal_Bool IsOLEStorage( SvStream* pStream ); 245 246 // this is temporary HACK, _MUST_ be removed before release 247 ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > 248 GetUNOAPIDuplicate( const String& rEleName, sal_Int32 nUNOStorageMode ); 249 void RemoveUNOStorageHolder( UNOStorageHolder* pHolder ); 250 251 static SotStorage* OpenOLEStorage( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage, 252 const String& rEleName, StreamMode = STREAM_STD_READWRITE ); 253 static sal_Int32 GetFormatID( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ); 254 static sal_Int32 GetVersion( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >& xStorage ); 255 }; 256 257 #ifndef SOT_DECL_SOTSTORAGE_DEFINED 258 #define SOT_DECL_SOTSTORAGE_DEFINED 259 SO2_DECL_REF(SotStorage) 260 #endif 261 SO2_IMPL_REF(SotStorage) 262 263 #define SvStorage SotStorage 264 #define SvStorageRef SotStorageRef 265 #define SvStorageStream SotStorageStream 266 #define SvStorageStreamRef SotStorageStreamRef 267 268 #endif // _SVSTOR_HXX 269