2008-03-20 14:29:52 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-11 12:18:26 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2008-03-20 14:29:52 +00:00
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2008-03-20 14:29:52 +00:00
|
|
|
*
|
2008-04-11 12:18:26 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2008-03-20 14:29:52 +00:00
|
|
|
*
|
2008-04-11 12:18:26 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2008-03-20 14:29:52 +00:00
|
|
|
*
|
2008-04-11 12:18:26 +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
|
|
|
*
|
2008-04-11 12:18:26 +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
|
|
|
*
|
2008-04-11 12:18:26 +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>
|
2004-04-21 11:28:18 +00:00
|
|
|
#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>
|
2005-04-13 11:29:03 +00:00
|
|
|
#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>
|
2000-10-16 13:16:35 +00:00
|
|
|
#include <tools/datetime.hxx>
|
2000-09-27 11:27:08 +00:00
|
|
|
|
2001-07-16 08:30:44 +00:00
|
|
|
namespace com
|
|
|
|
{
|
|
|
|
namespace sun
|
|
|
|
{
|
|
|
|
namespace star
|
|
|
|
{
|
|
|
|
namespace task
|
|
|
|
{
|
|
|
|
class XInteractionHandler;
|
2001-07-17 15:24:00 +00:00
|
|
|
}
|
2004-04-21 11:28:18 +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
|
|
|
}
|
|
|
|
}
|
2006-06-19 13:03:21 +00:00
|
|
|
}
|
2001-07-16 08:30:44 +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
|
|
|
|
2000-10-18 12:05:55 +00:00
|
|
|
class UcbLockBytesHandler : public SvRefBase
|
2000-09-27 11:27:08 +00:00
|
|
|
{
|
2000-10-18 12:05:55 +00:00
|
|
|
sal_Bool m_bActive;
|
2000-09-27 11:27:08 +00:00
|
|
|
public:
|
2000-10-18 12:05:55 +00:00
|
|
|
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
|
|
|
};
|
|
|
|
|
2000-10-18 12:05:55 +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
|
2001-07-16 08:30:44 +00:00
|
|
|
#define NS_TASK ::com::sun::star::task
|
2000-09-27 11:27:08 +00:00
|
|
|
|
2005-04-13 11:29:03 +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;
|
2000-10-16 13:16:35 +00:00
|
|
|
|
|
|
|
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
|
2000-10-18 12:05:55 +00:00
|
|
|
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;
|
|
|
|
|
2000-10-16 13:16:35 +00:00
|
|
|
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,
|
2001-09-14 09:34:17 +00:00
|
|
|
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,
|
2001-07-16 08:30:44 +00:00
|
|
|
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,
|
2001-07-16 08:30:44 +00:00
|
|
|
StreamMode eMode,
|
2001-07-18 08:59:36 +00:00
|
|
|
const NS_UNO::Reference < NS_TASK::XInteractionHandler >& xInter,
|
2001-07-16 08:30:44 +00:00
|
|
|
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 );
|
2004-04-21 11:28:18 +00:00
|
|
|
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
|
|
|
|
2000-10-16 13:16:35 +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();
|
2004-04-21 11:28:18 +00:00
|
|
|
NS_UNO::Reference < NS_IO::XStream > getStream();
|
2001-06-26 13:43:56 +00:00
|
|
|
|
2000-12-07 12:25:32 +00:00
|
|
|
#if _SOLAR__PRIVATE
|
2002-04-08 09:27:37 +00:00
|
|
|
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; }
|
|
|
|
|
2000-10-16 13:16:35 +00:00
|
|
|
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 );
|
|
|
|
|
2006-06-19 13:03:21 +00:00
|
|
|
}
|
2000-10-16 13:16:35 +00:00
|
|
|
|
2000-09-27 11:27:08 +00:00
|
|
|
#endif
|