Files
libreoffice/unotools/inc/unotools/ucblockbytes.hxx

223 lines
8.4 KiB
C++
Raw Normal View History

2008-03-20 14:29:52 +00:00
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2008-03-20 14:29:52 +00:00
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
2008-03-20 14:29:52 +00:00
*
* OpenOffice.org - a multi-platform office productivity suite
2008-03-20 14:29:52 +00:00
*
* This file is part of OpenOffice.org.
2008-03-20 14:29:52 +00:00
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
2008-03-20 14:29:52 +00:00
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
2008-03-20 14:29:52 +00:00
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
2008-03-20 14:29:52 +00:00
*
************************************************************************/
2000-09-27 11:27:08 +00:00
#ifndef _UNTOOLS_UCBLOCKBYTES_HXX
#define _UNTOOLS_UCBLOCKBYTES_HXX
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/Sequence.hxx>
2000-09-27 11:27:08 +00:00
#include <com/sun/star/ucb/XContent.hpp>
2001-06-25 09:12:25 +00:00
#include <com/sun/star/beans/PropertyValue.hpp>
#include "unotools/unotoolsdllapi.h"
2000-09-27 11:27:08 +00:00
2010-10-10 21:29:08 -05:00
#include <osl/thread.hxx>
2000-09-27 11:27:08 +00:00
#include <vos/conditn.hxx>
#include <vos/mutex.hxx>
#include <tools/stream.hxx>
#include <tools/link.hxx>
2000-10-05 16:02:26 +00:00
#include <tools/errcode.hxx>
#include <tools/datetime.hxx>
2000-09-27 11:27:08 +00:00
namespace com
{
namespace sun
{
namespace star
{
namespace task
{
class XInteractionHandler;
2001-07-17 15:24:00 +00:00
}
namespace io
{
class XStream;
class XInputStream;
class XOutputStream;
class XSeekable;
}
namespace ucb
{
class XContent;
}
namespace beans
{
struct PropertyValue;
}
2001-07-17 15:24:00 +00:00
}
}
}
2000-10-13 08:31:37 +00:00
namespace utl
{
2000-10-23 14:16:53 +00:00
SV_DECL_REF( UcbLockBytes )
2000-10-13 08:31:37 +00:00
class UcbLockBytesHandler : public SvRefBase
2000-09-27 11:27:08 +00:00
{
sal_Bool m_bActive;
2000-09-27 11:27:08 +00:00
public:
enum LoadHandlerItem
{
DATA_AVAILABLE,
DONE,
CANCEL
};
UcbLockBytesHandler()
: m_bActive( sal_True )
{}
virtual void Handle( LoadHandlerItem nWhich, UcbLockBytesRef xLockBytes ) = 0;
void Activate( BOOL bActivate = sal_True ) { m_bActive = bActivate; }
sal_Bool IsActive() const { return m_bActive; }
2000-09-27 11:27:08 +00:00
};
SV_DECL_IMPL_REF( UcbLockBytesHandler )
2000-09-27 11:27:08 +00:00
#define NS_UNO ::com::sun::star::uno
#define NS_IO ::com::sun::star::io
#define NS_UCB ::com::sun::star::ucb
2001-06-25 09:12:25 +00:00
#define NS_BEANS ::com::sun::star::beans
#define NS_TASK ::com::sun::star::task
2000-09-27 11:27:08 +00:00
class UNOTOOLS_DLLPUBLIC UcbLockBytes : public virtual SvLockBytes
2000-09-27 11:27:08 +00:00
{
vos::OCondition m_aInitialized;
vos::OCondition m_aTerminated;
vos::OMutex m_aMutex;
String m_aContentType;
String m_aRealURL;
DateTime m_aExpireDate;
2000-10-30 12:16:36 +00:00
NS_UNO::Reference < NS_IO::XInputStream > m_xInputStream;
NS_UNO::Reference < NS_IO::XOutputStream > m_xOutputStream;
NS_UNO::Reference < NS_IO::XSeekable > m_xSeekable;
2002-08-15 14:34:27 +00:00
void* m_pCommandThread; // is alive only for compatibility reasons
UcbLockBytesHandlerRef m_xHandler;
2000-09-27 11:27:08 +00:00
sal_uInt32 m_nRead;
sal_uInt32 m_nSize;
2000-10-05 16:02:26 +00:00
ErrCode m_nError;
sal_Bool m_bTerminated : 1;
sal_Bool m_bDontClose : 1;
sal_Bool m_bStreamValid : 1;
2000-09-27 11:27:08 +00:00
DECL_LINK( DataAvailHdl, void * );
2000-11-02 09:24:49 +00:00
UcbLockBytes( UcbLockBytesHandler* pHandler=NULL );
2000-09-27 11:27:08 +00:00
protected:
virtual ~UcbLockBytes (void);
public:
2001-06-25 09:12:25 +00:00
// properties: Referer, PostMimeType
2001-07-18 08:59:36 +00:00
static UcbLockBytesRef CreateLockBytes( const NS_UNO::Reference < NS_UCB::XContent >& xContent,
const ::rtl::OUString& rReferer,
const ::rtl::OUString& rMediaType,
2001-07-18 08:59:36 +00:00
const NS_UNO::Reference < NS_IO::XInputStream >& xPostData,
2001-07-18 08:07:28 +00:00
const NS_UNO::Reference < NS_TASK::XInteractionHandler >& xInter,
UcbLockBytesHandler* pHandler=0 );
2001-06-25 09:12:25 +00:00
2001-07-18 08:59:36 +00:00
static UcbLockBytesRef CreateLockBytes( const NS_UNO::Reference < NS_UCB::XContent >& xContent,
2001-06-25 09:12:25 +00:00
const NS_UNO::Sequence < NS_BEANS::PropertyValue >& rProps,
StreamMode eMode,
2001-07-18 08:59:36 +00:00
const NS_UNO::Reference < NS_TASK::XInteractionHandler >& xInter,
UcbLockBytesHandler* pHandler=0 );
2000-09-27 11:27:08 +00:00
2001-07-18 08:59:36 +00:00
static UcbLockBytesRef CreateInputLockBytes( const NS_UNO::Reference < NS_IO::XInputStream >& xContent );
static UcbLockBytesRef CreateLockBytes( const NS_UNO::Reference < NS_IO::XStream >& xContent );
2000-09-27 11:27:08 +00:00
// SvLockBytes
virtual void SetSynchronMode (BOOL bSynchron);
virtual ErrCode ReadAt ( ULONG nPos, void *pBuffer, ULONG nCount, ULONG *pRead) const;
virtual ErrCode WriteAt ( ULONG, const void*, ULONG, ULONG *pWritten);
virtual ErrCode Flush (void) const;
virtual ErrCode SetSize (ULONG);
virtual ErrCode Stat ( SvLockBytesStat *pStat, SvLockBytesStatFlag) const;
2000-10-05 16:02:26 +00:00
void SetError( ErrCode nError )
{ m_nError = nError; }
ErrCode GetError() const
{ return m_nError; }
2002-08-15 14:34:27 +00:00
void Cancel(); // is alive only for compatibility reasons
2000-09-27 11:27:08 +00:00
// the following properties are available when and after the first DataAvailable callback has been executed
String GetContentType() const;
String GetRealURL() const;
DateTime GetExpireDate() const;
2001-06-26 13:43:56 +00:00
// calling this method delegates the responsibility to call closeinput to the caller!
NS_UNO::Reference < NS_IO::XInputStream > getInputStream();
NS_UNO::Reference < NS_IO::XStream > getStream();
2001-06-26 13:43:56 +00:00
#if _SOLAR__PRIVATE
sal_Bool setInputStream_Impl( const NS_UNO::Reference < NS_IO::XInputStream > &rxInputStream,
sal_Bool bSetXSeekable = sal_True );
2000-10-30 12:16:36 +00:00
sal_Bool setStream_Impl( const NS_UNO::Reference < NS_IO::XStream > &rxStream );
2000-09-27 11:27:08 +00:00
void terminate_Impl (void);
NS_UNO::Reference < NS_IO::XInputStream > getInputStream_Impl() const
{
vos::OGuard aGuard( SAL_CONST_CAST(UcbLockBytes*, this)->m_aMutex );
return m_xInputStream;
}
2000-11-02 09:24:49 +00:00
NS_UNO::Reference < NS_IO::XOutputStream > getOutputStream_Impl() const
{
vos::OGuard aGuard( SAL_CONST_CAST(UcbLockBytes*, this)->m_aMutex );
return m_xOutputStream;
}
NS_UNO::Reference < NS_IO::XSeekable > getSeekable_Impl() const
{
vos::OGuard aGuard( SAL_CONST_CAST(UcbLockBytes*, this)->m_aMutex );
return m_xSeekable;
}
2000-09-27 11:27:08 +00:00
sal_Bool hasInputStream_Impl() const
{
vos::OGuard aGuard( SAL_CONST_CAST(UcbLockBytes*, this)->m_aMutex );
return m_xInputStream.is();
}
void setDontClose_Impl()
{ m_bDontClose = sal_True; }
void SetContentType_Impl( const String& rType ) { m_aContentType = rType; }
void SetRealURL_Impl( const String& rURL ) { m_aRealURL = rURL; }
void SetExpireDate_Impl( const DateTime& rDateTime ) { m_aExpireDate = rDateTime; }
void SetStreamValid_Impl();
#endif
2000-10-13 08:31:37 +00:00
};
2000-09-27 11:27:08 +00:00
SV_IMPL_REF( UcbLockBytes );
}
2000-09-27 11:27:08 +00:00
#endif