blob: 93103ec7a599cde5b7927d46bdfc6d9e8e551568 [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 _SFXDOCFILE_HXX
#define _SFXDOCFILE_HXX
#include <com/sun/star/io/XSeekable.hpp>
#include "sal/config.h"
#include "sfx2/dllapi.h"
#include "sal/types.h"
#include <com/sun/star/util/RevisionTag.hpp>
#include <com/sun/star/util/DateTime.hpp>
#include <com/sun/star/io/XOutputStream.hpp>
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/ucb/XContent.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <com/sun/star/task/XInteractionHandler.hpp>
#include <com/sun/star/embed/XStorage.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <tools/stream.hxx>
#include <tools/string.hxx>
#include <tools/list.hxx>
#include <svl/lstner.hxx>
#include <tools/globname.hxx>
#include <cppuhelper/weak.hxx>
#include <ucbhelper/content.hxx>
class SvKeyValueIterator;
class SfxObjectFactory;
class SfxFilter;
class SfxMedium_Impl;
class INetURLObject;
class SfxObjectShell;
class SfxFrame;
class Timer;
class SfxItemSet;
class DateTime;
class SvStringsDtor;
#define S2BS(s) ByteString( s, RTL_TEXTENCODING_MS_1252 )
//____________________________________________________________________________________________________________________________________
// defines for namespaces
//____________________________________________________________________________________________________________________________________
#define OUSTRING ::rtl::OUString
#define XMULTISERVICEFACTORY ::com::sun::star::lang::XMultiServiceFactory
#define XSERVICEINFO ::com::sun::star::lang::XServiceInfo
#define OWEAKOBJECT ::cppu::OWeakObject
#define REFERENCE ::com::sun::star::uno::Reference
#define XINTERFACE ::com::sun::star::uno::XInterface
#define EXCEPTION ::com::sun::star::uno::Exception
#define RUNTIMEEXCEPTION ::com::sun::star::uno::RuntimeException
#define ANY ::com::sun::star::uno::Any
class SFX2_DLLPUBLIC SfxMedium : public SvRefBase
{
sal_uInt32 eError;
sal_Bool bDirect:1,
bRoot:1,
bSetFilter:1,
bTriedStorage;
StreamMode nStorOpenMode;
INetURLObject* pURLObj;
String aName;
SvGlobalName aFilterClass;
SvStream* pInStream;
SvStream* pOutStream;
//REMOVE SvStorageRef aStorage;
const SfxFilter* pFilter;
SfxItemSet* pSet;
SfxMedium_Impl* pImp;
String aLogicName;
String aLongName;
sal_Bool bRemote;
sal_Bool m_bIsReadOnly;
com::sun::star::uno::Reference<com::sun::star::io::XInputStream>
m_xInputStreamToLoadFrom;
#if _SOLAR__PRIVATE
SAL_DLLPRIVATE void SetIsRemote_Impl();
SAL_DLLPRIVATE void CloseInStream_Impl();
SAL_DLLPRIVATE sal_Bool CloseOutStream_Impl();
SAL_DLLPRIVATE void CloseStreams_Impl();
DECL_DLLPRIVATE_STATIC_LINK( SfxMedium, UCBHdl_Impl, sal_uInt32 * );
SAL_DLLPRIVATE void SetEncryptionDataToStorage_Impl();
#endif
public:
SvCompatWeakHdl* GetHdl();
SfxMedium();
SfxMedium( const String &rName,
StreamMode nOpenMode,
sal_Bool bDirect=sal_False,
const SfxFilter *pFilter = 0,
SfxItemSet *pSet = 0 );
SfxMedium( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
const String& rBaseURL,
const SfxItemSet* pSet=0,
sal_Bool bRoot = sal_False );
SfxMedium( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
const String& rBaseURL,
const String& rTypeName,
const SfxItemSet* pSet=0,
sal_Bool bRoot = sal_False );
SfxMedium( const SfxMedium &rMedium, sal_Bool bCreateTemporary = sal_False );
SfxMedium( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs );
~SfxMedium();
void UseInteractionHandler( sal_Bool );
::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >
GetInteractionHandler();
void setStreamToLoadFrom(const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xInputStream,sal_Bool bIsReadOnly )
{ m_xInputStreamToLoadFrom = xInputStream; m_bIsReadOnly = bIsReadOnly; }
void SetLoadTargetFrame(SfxFrame* pFrame );
SfxFrame* GetLoadTargetFrame() const;
void SetReferer( const String& rRefer );
const String& GetReferer( ) const;
sal_Bool Exists( sal_Bool bForceSession = sal_True );
void SetFilter(const SfxFilter *pFlt, sal_Bool bResetOrig = sal_False);
const SfxFilter * GetFilter() const { return pFilter; }
const SfxFilter * GetOrigFilter( sal_Bool bNotCurrent = sal_False ) const;
const String& GetOrigURL() const;
SfxItemSet * GetItemSet() const;
void SetItemSet(SfxItemSet *pSet);
void Close();
void CloseAndRelease();
void ReOpen();
void CompleteReOpen();
const String& GetName() const {return aLogicName;}
#if defined SINIX && defined GCC && defined C272
const INetURLObject& GetURLObject();
#else
const INetURLObject& GetURLObject() const;
#endif
void CheckFileDate( const ::com::sun::star::util::DateTime& aInitDate );
sal_Bool DocNeedsFileDateCheck();
::com::sun::star::util::DateTime GetInitFileDate( sal_Bool bIgnoreOldValue );
::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContent > GetContent() const;
const String& GetPhysicalName() const;
void SetTemporary( sal_Bool bTemp );
sal_Bool IsTemporary() const;
sal_Bool IsRemote();
sal_Bool IsOpen() const; // { return aStorage.Is() || pInStream; }
void StartDownload();
void DownLoad( const Link& aLink = Link());
void SetDoneLink( const Link& rLink );
Link GetDoneLink( ) const;
void SetDataAvailableLink( const Link& rLink );
Link GetDataAvailableLink( ) const;
sal_uInt32 GetMIMEAndRedirect( String& );
sal_uInt32 GetErrorCode() const;
sal_uInt32 GetError() const
{ return ERRCODE_TOERROR(GetErrorCode()); }
sal_uInt32 GetLastStorageCreationState();
void SetError( sal_uInt32 nError, const ::rtl::OUString& aLogMessage );
void AddLog( const ::rtl::OUString& aMessage );
void CloseInStream();
sal_Bool CloseOutStream();
sal_Bool IsRoot() const { return bRoot; }
void CloseStorage();
StreamMode GetOpenMode() const { return nStorOpenMode; }
void SetOpenMode( StreamMode nStorOpen, sal_Bool bDirect, sal_Bool bDontClose = sal_False );
sal_Bool IsDirect() const { return bDirect? sal_True: sal_False; }
SvStream* GetInStream();
SvStream* GetOutStream();
sal_Bool Commit();
sal_Bool IsStorage();
sal_Int8 ShowLockedDocumentDialog( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aData, sal_Bool bIsLoading, sal_Bool bOwnLock );
sal_Bool LockOrigFileOnDemand( sal_Bool bLoading, sal_Bool bNoUI );
void UnlockFile( sal_Bool bReleaseLockStream );
::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetStorage( sal_Bool bCreateTempIfNo = sal_True );
::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetOutputStorage();
void ResetError();
sal_Bool UsesCache() const;
void SetUsesCache( sal_Bool );
sal_Bool IsExpired() const;
void SetName( const String& rName, sal_Bool bSetOrigURL = sal_False );
sal_Bool IsAllowedForExternalBrowser() const;
long GetFileVersion() const;
const com::sun::star::uno::Sequence < com::sun::star::util::RevisionTag >&
GetVersionList( bool _bNoReload = false );
sal_Bool IsReadOnly();
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetInputStream();
void CreateTempFile( sal_Bool bReplace = sal_True );
void CreateTempFileNoCopy();
::rtl::OUString SwitchDocumentToTempFile();
sal_Bool SwitchDocumentToFile( ::rtl::OUString aURL );
::rtl::OUString GetCharset();
void SetCharset( ::rtl::OUString );
::rtl::OUString GetBaseURL( bool bForSaving=false );
#if _SOLAR__PRIVATE
SAL_DLLPRIVATE sal_Bool HasStorage_Impl() const;
SAL_DLLPRIVATE void StorageBackup_Impl();
SAL_DLLPRIVATE ::rtl::OUString GetBackup_Impl();
SAL_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetZipStorageToSign_Impl( sal_Bool bReadOnly = sal_True );
SAL_DLLPRIVATE void CloseZipStorage_Impl();
// the storage that will be returned by the medium on GetStorage request
SAL_DLLPRIVATE void SetStorage_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewStorage );
SAL_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > GetInputStream_Impl();
SAL_DLLPRIVATE void CloseAndReleaseStreams_Impl();
SAL_DLLPRIVATE void RefreshName_Impl();
SAL_DLLPRIVATE sal_uInt16 AddVersion_Impl( com::sun::star::util::RevisionTag& rVersion );
SAL_DLLPRIVATE sal_Bool TransferVersionList_Impl( SfxMedium& rMedium );
SAL_DLLPRIVATE sal_Bool SaveVersionList_Impl( sal_Bool bUseXML );
SAL_DLLPRIVATE sal_Bool RemoveVersion_Impl( const ::rtl::OUString& rVersion );
SAL_DLLPRIVATE void SetExpired_Impl( const DateTime& rDateTime );
SAL_DLLPRIVATE SvKeyValueIterator* GetHeaderAttributes_Impl();
SAL_DLLPRIVATE const String& GetPreRedirectedURL() const;
SAL_DLLPRIVATE void SetOrigFilter_Impl( const SfxFilter* pFilter );
// Diese Protokolle liefern MIME Typen
SAL_DLLPRIVATE sal_Bool SupportsMIME_Impl() const;
SAL_DLLPRIVATE void Init_Impl();
SAL_DLLPRIVATE void ForceSynchronStream_Impl( sal_Bool bSynchron );
SAL_DLLPRIVATE void GetLockingStream_Impl();
SAL_DLLPRIVATE void GetMedium_Impl();
SAL_DLLPRIVATE sal_Bool TryDirectTransfer( const ::rtl::OUString& aURL, SfxItemSet& aTargetSet );
SAL_DLLPRIVATE void Transfer_Impl();
SAL_DLLPRIVATE void CreateFileStream();
SAL_DLLPRIVATE void SetUpdatePickList(sal_Bool);
SAL_DLLPRIVATE sal_Bool IsUpdatePickList() const;
//REMOVE void SetStorage_Impl( SvStorage* pStor );
SAL_DLLPRIVATE void SetLongName(const String &rName)
{ aLongName = rName; }
SAL_DLLPRIVATE const String & GetLongName() const { return aLongName; }
SAL_DLLPRIVATE ErrCode CheckOpenMode_Impl( sal_Bool bSilent, sal_Bool bAllowRO = sal_True );
SAL_DLLPRIVATE sal_Bool IsDownloadDone_Impl();
SAL_DLLPRIVATE sal_Bool IsPreview_Impl();
SAL_DLLPRIVATE void ClearBackup_Impl();
SAL_DLLPRIVATE void Done_Impl( ErrCode );
SAL_DLLPRIVATE void DataAvailable_Impl();
SAL_DLLPRIVATE void Cancel_Impl();
SAL_DLLPRIVATE void SetPhysicalName_Impl(const String& rName);
SAL_DLLPRIVATE void CanDisposeStorage_Impl( sal_Bool bDisposeStorage );
SAL_DLLPRIVATE sal_Bool WillDisposeStorageOnClose_Impl();
SAL_DLLPRIVATE void DoBackup_Impl();
SAL_DLLPRIVATE void DoInternalBackup_Impl( const ::ucbhelper::Content& aOriginalContent );
SAL_DLLPRIVATE void DoInternalBackup_Impl( const ::ucbhelper::Content& aOriginalContent,
const String& aPrefix,
const String& aExtension,
const String& aDestDir );
SAL_DLLPRIVATE sal_Bool UseBackupToRestore_Impl( ::ucbhelper::Content& aOriginalContent,
const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xComEnv );
SAL_DLLPRIVATE sal_Bool StorageCommit_Impl();
SAL_DLLPRIVATE sal_Bool TransactedTransferForFS_Impl( const INetURLObject& aSource,
const INetURLObject& aDest,
const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >& xComEnv );
SAL_DLLPRIVATE sal_Bool SignContents_Impl( sal_Bool bScriptingContent, const ::rtl::OUString& aODFVersion, sal_Bool bHasValidDocumentSignature );
// the following two methods must be used and make sence only during saving currently
// TODO/LATER: in future the signature state should be controlled by the medium not by the document
// in this case the methods will be used generally, and might need to be renamed
SAL_DLLPRIVATE sal_uInt16 GetCachedSignatureState_Impl();
SAL_DLLPRIVATE void SetCachedSignatureState_Impl( sal_uInt16 nState );
#endif
static com::sun::star::uno::Sequence < com::sun::star::util::RevisionTag > GetVersionList(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage );
static ::rtl::OUString CreateTempCopyWithExt( const ::rtl::OUString& aURL );
static sal_Bool CallApproveHandler( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xHandler, ::com::sun::star::uno::Any aRequest, sal_Bool bAllowAbort );
static sal_Bool SetWritableForUserOnly( const ::rtl::OUString& aURL );
static sal_uInt32 CreatePasswordToModifyHash( const ::rtl::OUString& aPasswd, sal_Bool bWriter );
};
SV_DECL_IMPL_REF( SfxMedium )
SV_DECL_COMPAT_WEAK( SfxMedium )
#ifndef SFXMEDIUM_LIST
#define SFXMEDIUM_LIST
DECLARE_LIST( SfxMediumList, SfxMedium* )
#endif
#endif