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 _STG_HXX 25 #define _STG_HXX 26 27 #include <com/sun/star/uno/Any.h> 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 34 #ifndef _COM_SUN_STAR_UCB_XCOMMANDENVIRONMENT_H_ 35 #include <com/sun/star/ucb/XCommandEnvironment.hpp> 36 #endif 37 38 #ifndef _COM_SUN_STAR_EMBED_XSTORAGE_H_ 39 #include <com/sun/star/embed/XStorage.hpp> 40 #endif 41 42 43 #include <tools/rtti.hxx> 44 #ifndef _TOOLS_STREAM_HXX //autogen 45 #include <tools/stream.hxx> 46 #endif 47 #ifndef _TOOLS_GLOBNAME_HXX //autogen 48 #include <tools/globname.hxx> 49 #endif 50 #include "sot/sotdllapi.h" 51 52 #include <list> 53 class UNOStorageHolder; 54 typedef ::std::list< UNOStorageHolder* > UNOStorageHolderList; 55 56 class Storage; 57 class StorageStream; 58 class StgIo; 59 class StgDirEntry; 60 class StgStrm; 61 class SvGlobalName; 62 struct ClsId 63 { 64 sal_Int32 n1; 65 sal_Int16 n2, n3; 66 sal_uInt8 n4, n5, n6, n7, n8, n9, n10, n11; 67 }; 68 69 class SOT_DLLPUBLIC StorageBase : public SvRefBase 70 { 71 protected: 72 sal_uLong m_nError; // error code 73 StreamMode m_nMode; // open mode 74 sal_Bool m_bAutoCommit; 75 StorageBase(); 76 virtual ~StorageBase(); 77 public: 78 TYPEINFO(); 79 virtual const SvStream* GetSvStream() const = 0; 80 virtual sal_Bool Validate( sal_Bool=sal_False ) const = 0; 81 virtual sal_Bool ValidateMode( StreamMode ) const = 0; 82 void ResetError() const; 83 void SetError( sal_uLong ) const; 84 sal_uLong GetError() const; Good() const85 sal_Bool Good() const { return sal_Bool( m_nError == SVSTREAM_OK ); } GetMode() const86 StreamMode GetMode() const { return m_nMode; } SetAutoCommit(sal_Bool bSet)87 void SetAutoCommit( sal_Bool bSet ) 88 { m_bAutoCommit = bSet; } 89 }; 90 91 class BaseStorageStream : public StorageBase 92 { 93 public: 94 TYPEINFO(); 95 virtual sal_uLong Read( void * pData, sal_uLong nSize ) = 0; 96 virtual sal_uLong Write( const void* pData, sal_uLong nSize ) = 0; 97 virtual sal_uLong Seek( sal_uLong nPos ) = 0; 98 virtual sal_uLong Tell() = 0; 99 virtual void Flush() = 0; 100 virtual sal_Bool SetSize( sal_uLong nNewSize ) = 0; 101 virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ) = 0; 102 virtual sal_Bool Commit() = 0; 103 virtual sal_Bool Revert() = 0; 104 virtual sal_Bool Equals( const BaseStorageStream& rStream ) const = 0; 105 }; 106 107 class SvStorageInfoList; 108 class BaseStorage : public StorageBase 109 { 110 public: 111 TYPEINFO(); 112 virtual const String& GetName() const = 0; 113 virtual sal_Bool IsRoot() const = 0; 114 virtual void SetClassId( const ClsId& ) = 0; 115 virtual const ClsId& GetClassId() const = 0; 116 virtual void SetDirty() = 0; 117 virtual void SetClass( const SvGlobalName & rClass, 118 sal_uLong nOriginalClipFormat, 119 const String & rUserTypeName ) = 0; 120 virtual void SetConvertClass( const SvGlobalName & rConvertClass, 121 sal_uLong nOriginalClipFormat, 122 const String & rUserTypeName ) = 0; 123 virtual SvGlobalName GetClassName() = 0; 124 virtual sal_uLong GetFormat() = 0; 125 virtual String GetUserName() = 0; 126 virtual sal_Bool ShouldConvert() = 0; 127 virtual void FillInfoList( SvStorageInfoList* ) const = 0; 128 virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const = 0; 129 virtual sal_Bool Commit() = 0; 130 virtual sal_Bool Revert() = 0; 131 virtual BaseStorageStream* OpenStream( const String & rEleName, 132 StreamMode = STREAM_STD_READWRITE, 133 sal_Bool bDirect = sal_True, const ByteString* pKey=0 ) = 0; 134 virtual BaseStorage* OpenStorage( const String & rEleName, 135 StreamMode = STREAM_STD_READWRITE, 136 sal_Bool bDirect = sal_False ) = 0; 137 virtual BaseStorage* OpenUCBStorage( const String & rEleName, 138 StreamMode = STREAM_STD_READWRITE, 139 sal_Bool bDirect = sal_False ) = 0; 140 virtual BaseStorage* OpenOLEStorage( const String & rEleName, 141 StreamMode = STREAM_STD_READWRITE, 142 sal_Bool bDirect = sal_False ) = 0; 143 virtual sal_Bool IsStream( const String& rEleName ) const = 0; 144 virtual sal_Bool IsStorage( const String& rEleName ) const = 0; 145 virtual sal_Bool IsContained( const String& rEleName ) const = 0; 146 virtual sal_Bool Remove( const String & rEleName ) = 0; 147 virtual sal_Bool Rename( const String & rEleName, const String & rNewName ) = 0; 148 virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ) = 0; 149 virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ) = 0; 150 virtual sal_Bool ValidateFAT() = 0; 151 virtual sal_Bool Equals( const BaseStorage& rStream ) const = 0; 152 }; 153 154 class OLEStorageBase 155 { 156 protected: 157 StreamMode& nStreamMode; // open mode 158 StgIo* pIo; // I/O subsystem 159 StgDirEntry* pEntry; // the dir entry 160 OLEStorageBase( StgIo*, StgDirEntry*, StreamMode& ); 161 ~OLEStorageBase(); 162 sal_Bool Validate_Impl( sal_Bool=sal_False ) const; 163 sal_Bool ValidateMode_Impl( StreamMode, StgDirEntry* p = NULL ) const ; 164 const SvStream* GetSvStream_Impl() const; 165 public: 166 }; 167 168 class StorageStream : public BaseStorageStream, public OLEStorageBase 169 { 170 //friend class Storage; 171 sal_uLong nPos; // current position 172 protected: 173 ~StorageStream(); 174 public: 175 TYPEINFO(); 176 StorageStream( StgIo*, StgDirEntry*, StreamMode ); 177 virtual sal_uLong Read( void * pData, sal_uLong nSize ); 178 virtual sal_uLong Write( const void* pData, sal_uLong nSize ); 179 virtual sal_uLong Seek( sal_uLong nPos ); Tell()180 virtual sal_uLong Tell() { return nPos; } 181 virtual void Flush(); 182 virtual sal_Bool SetSize( sal_uLong nNewSize ); 183 virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ); 184 virtual sal_Bool Commit(); 185 virtual sal_Bool Revert(); 186 virtual sal_Bool Validate( sal_Bool=sal_False ) const; 187 virtual sal_Bool ValidateMode( StreamMode ) const; 188 sal_Bool ValidateMode( StreamMode, StgDirEntry* p ) const; 189 const SvStream* GetSvStream() const; 190 virtual sal_Bool Equals( const BaseStorageStream& rStream ) const; 191 }; 192 193 class UCBStorageStream; 194 195 class SOT_DLLPUBLIC Storage : public BaseStorage, public OLEStorageBase 196 { 197 String aName; 198 sal_Bool bIsRoot; 199 void Init( sal_Bool bCreate ); 200 Storage( StgIo*, StgDirEntry*, StreamMode ); 201 protected: 202 ~Storage(); 203 public: 204 TYPEINFO(); 205 Storage( const String &, StreamMode = STREAM_STD_READWRITE, sal_Bool bDirect = sal_True ); 206 Storage( SvStream& rStrm, sal_Bool bDirect = sal_True ); 207 Storage( UCBStorageStream& rStrm, sal_Bool bDirect = sal_True ); 208 209 static sal_Bool IsStorageFile( const String & rFileName ); 210 static sal_Bool IsStorageFile( SvStream* ); 211 212 virtual const String& GetName() const; IsRoot() const213 virtual sal_Bool IsRoot() const { return bIsRoot; } 214 virtual void SetClassId( const ClsId& ); 215 virtual const ClsId& GetClassId() const; 216 virtual void SetDirty(); 217 virtual void SetClass( const SvGlobalName & rClass, 218 sal_uLong nOriginalClipFormat, 219 const String & rUserTypeName ); 220 virtual void SetConvertClass( const SvGlobalName & rConvertClass, 221 sal_uLong nOriginalClipFormat, 222 const String & rUserTypeName ); 223 virtual SvGlobalName GetClassName(); 224 virtual sal_uLong GetFormat(); 225 virtual String GetUserName(); 226 virtual sal_Bool ShouldConvert(); 227 virtual void FillInfoList( SvStorageInfoList* ) const; 228 virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const; 229 virtual sal_Bool Commit(); 230 virtual sal_Bool Revert(); 231 virtual BaseStorageStream* OpenStream( const String & rEleName, 232 StreamMode = STREAM_STD_READWRITE, 233 sal_Bool bDirect = sal_True, const ByteString* pKey=0 ); 234 virtual BaseStorage* OpenStorage( const String & rEleName, 235 StreamMode = STREAM_STD_READWRITE, 236 sal_Bool bDirect = sal_False ); 237 virtual BaseStorage* OpenUCBStorage( const String & rEleName, 238 StreamMode = STREAM_STD_READWRITE, 239 sal_Bool bDirect = sal_False ); 240 virtual BaseStorage* OpenOLEStorage( const String & rEleName, 241 StreamMode = STREAM_STD_READWRITE, 242 sal_Bool bDirect = sal_False ); 243 virtual sal_Bool IsStream( const String& rEleName ) const; 244 virtual sal_Bool IsStorage( const String& rEleName ) const; 245 virtual sal_Bool IsContained( const String& rEleName ) const; 246 virtual sal_Bool Remove( const String & rEleName ); 247 virtual sal_Bool Rename( const String & rEleName, const String & rNewName ); 248 virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); 249 virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); 250 virtual sal_Bool ValidateFAT(); 251 virtual sal_Bool Validate( sal_Bool=sal_False ) const; 252 virtual sal_Bool ValidateMode( StreamMode ) const; 253 sal_Bool ValidateMode( StreamMode, StgDirEntry* p ) const; 254 virtual const SvStream* GetSvStream() const; 255 virtual sal_Bool Equals( const BaseStorage& rStream ) const; 256 }; 257 258 class UCBStorageStream_Impl; 259 class UCBStorageStream : public BaseStorageStream 260 { 261 friend class UCBStorage; 262 263 UCBStorageStream_Impl* 264 pImp; 265 protected: 266 ~UCBStorageStream(); 267 public: 268 TYPEINFO(); 269 UCBStorageStream( const String& rName, StreamMode nMode, sal_Bool bDirect, const ByteString* pKey=0 ); 270 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 ); 271 UCBStorageStream( UCBStorageStream_Impl* ); 272 273 virtual sal_uLong Read( void * pData, sal_uLong nSize ); 274 virtual sal_uLong Write( const void* pData, sal_uLong nSize ); 275 virtual sal_uLong Seek( sal_uLong nPos ); 276 virtual sal_uLong Tell(); 277 virtual void Flush(); 278 virtual sal_Bool SetSize( sal_uLong nNewSize ); 279 virtual sal_Bool CopyTo( BaseStorageStream * pDestStm ); 280 virtual sal_Bool Commit(); 281 virtual sal_Bool Revert(); 282 virtual sal_Bool Validate( sal_Bool=sal_False ) const; 283 virtual sal_Bool ValidateMode( StreamMode ) const; 284 const SvStream* GetSvStream() const; 285 virtual sal_Bool Equals( const BaseStorageStream& rStream ) const; 286 sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); 287 sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); 288 289 SvStream* GetModifySvStream(); 290 291 ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetXInputStream() const; 292 }; 293 294 namespace ucbhelper 295 { 296 class Content; 297 } 298 299 class UCBStorage_Impl; 300 struct UCBStorageElement_Impl; 301 class SOT_DLLPUBLIC UCBStorage : public BaseStorage 302 { 303 UCBStorage_Impl* pImp; 304 305 protected: 306 ~UCBStorage(); 307 public: 308 static sal_Bool IsStorageFile( SvStream* ); 309 static sal_Bool IsStorageFile( const String& rName ); 310 static sal_Bool IsDiskSpannedFile( SvStream* ); 311 static String GetLinkedFile( SvStream& ); 312 static String CreateLinkFile( const String& rName ); 313 314 UCBStorage( const ::ucbhelper::Content& rContent, const String& rName, StreamMode nMode, sal_Bool bDirect = sal_True, sal_Bool bIsRoot = sal_True ); 315 UCBStorage( const String& rName, 316 StreamMode nMode, 317 sal_Bool bDirect = sal_True, 318 sal_Bool bIsRoot = sal_True ); 319 320 UCBStorage( const String& rName, 321 StreamMode nMode, 322 sal_Bool bDirect, 323 sal_Bool bIsRoot, 324 sal_Bool bIsRepair, 325 ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XProgressHandler > 326 xProgressHandler ); 327 328 UCBStorage( UCBStorage_Impl* ); 329 UCBStorage( SvStream& rStrm, sal_Bool bDirect = sal_True ); 330 331 TYPEINFO(); 332 virtual const String& GetName() const; 333 virtual sal_Bool IsRoot() const; 334 virtual void SetClassId( const ClsId& ); 335 virtual const ClsId& GetClassId() const; 336 virtual void SetDirty(); 337 virtual void SetClass( const SvGlobalName & rClass, 338 sal_uLong nOriginalClipFormat, 339 const String & rUserTypeName ); 340 virtual void SetConvertClass( const SvGlobalName & rConvertClass, 341 sal_uLong nOriginalClipFormat, 342 const String & rUserTypeName ); 343 virtual SvGlobalName GetClassName(); 344 virtual sal_uLong GetFormat(); 345 virtual String GetUserName(); 346 virtual sal_Bool ShouldConvert(); 347 virtual void FillInfoList( SvStorageInfoList* ) const; 348 virtual sal_Bool CopyTo( BaseStorage* pDestStg ) const; 349 virtual sal_Bool Commit(); 350 virtual sal_Bool Revert(); 351 virtual BaseStorageStream* OpenStream( const String & rEleName, 352 StreamMode = STREAM_STD_READWRITE, 353 sal_Bool bDirect = sal_True, const ByteString* pKey=0 ); 354 virtual BaseStorage* OpenStorage( const String & rEleName, 355 StreamMode = STREAM_STD_READWRITE, 356 sal_Bool bDirect = sal_False ); 357 virtual BaseStorage* OpenUCBStorage( const String & rEleName, 358 StreamMode = STREAM_STD_READWRITE, 359 sal_Bool bDirect = sal_False ); 360 virtual BaseStorage* OpenOLEStorage( const String & rEleName, 361 StreamMode = STREAM_STD_READWRITE, 362 sal_Bool bDirect = sal_False ); 363 virtual sal_Bool IsStream( const String& rEleName ) const; 364 virtual sal_Bool IsStorage( const String& rEleName ) const; 365 virtual sal_Bool IsContained( const String& rEleName ) const; 366 virtual sal_Bool Remove( const String & rEleName ); 367 virtual sal_Bool Rename( const String & rEleName, const String & rNewName ); 368 virtual sal_Bool CopyTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); 369 virtual sal_Bool MoveTo( const String & rEleName, BaseStorage * pDest, const String & rNewName ); 370 virtual sal_Bool ValidateFAT(); 371 virtual sal_Bool Validate( sal_Bool=sal_False ) const; 372 virtual sal_Bool ValidateMode( StreamMode ) const; 373 virtual const SvStream* GetSvStream() const; 374 virtual sal_Bool Equals( const BaseStorage& rStream ) const; 375 sal_Bool SetProperty( const String& rName, const ::com::sun::star::uno::Any& rValue ); 376 sal_Bool GetProperty( const String& rName, ::com::sun::star::uno::Any& rValue ); 377 sal_Bool GetProperty( const String& rEleName, const String& rName, ::com::sun::star::uno::Any& rValue ); 378 379 // HACK to avoid incompatible build, can be done since this feature is only for development 380 // should be removed before release 381 UNOStorageHolderList* GetUNOStorageHolderList(); 382 383 //#if _SOLAR__PRIVATE 384 UCBStorageElement_Impl* FindElement_Impl( const String& rName ) const; 385 sal_Bool CopyStorageElement_Impl( UCBStorageElement_Impl& rElement, 386 BaseStorage* pDest, const String& rNew ) const; 387 BaseStorage* OpenStorage_Impl( const String & rEleName, 388 StreamMode, sal_Bool bDirect, sal_Bool bForceUCBStorage ); 389 //#endif 390 391 }; 392 393 394 #endif 395