blob: fb449fcd63bebb33c0d97f2ec1dc655dc9f8a90c [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.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_ucb.hxx"
#include "osl/mutex.hxx"
#include "com/sun/star/lang/XTypeProvider.hpp"
#include "com/sun/star/task/DocumentPasswordRequest.hpp"
#include "cppuhelper/typeprovider.hxx"
#include "ucbhelper/interactionrequest.hxx"
#include "tdoc_passwordrequest.hxx"
using namespace com::sun::star;
using namespace tdoc_ucp;
namespace tdoc_ucp
{
class InteractionSupplyPassword :
public ucbhelper::InteractionContinuation,
public lang::XTypeProvider,
public task::XInteractionPassword
{
public:
InteractionSupplyPassword( ucbhelper::InteractionRequest * pRequest )
: InteractionContinuation( pRequest ) {}
// XInterface
virtual uno::Any SAL_CALL queryInterface( const uno::Type & rType )
throw ( uno::RuntimeException );
virtual void SAL_CALL acquire()
throw ();
virtual void SAL_CALL release()
throw ();
// XTypeProvider
virtual uno::Sequence< uno::Type > SAL_CALL getTypes()
throw ( uno::RuntimeException );
virtual uno::Sequence< sal_Int8 > SAL_CALL getImplementationId()
throw ( uno::RuntimeException );
// XInteractionContinuation
virtual void SAL_CALL select()
throw ( uno::RuntimeException );
// XInteractionPassword
virtual void SAL_CALL setPassword( const rtl::OUString & aPasswd )
throw ( uno::RuntimeException );
virtual rtl::OUString SAL_CALL getPassword()
throw ( uno::RuntimeException );
private:
osl::Mutex m_aMutex;
rtl::OUString m_aPassword;
};
} // namespace tdoc_ucp
//=========================================================================
//=========================================================================
//
// InteractionSupplyPassword Implementation.
//
//=========================================================================
//=========================================================================
//=========================================================================
//
// XInterface methods.
//
//=========================================================================
// virtual
void SAL_CALL InteractionSupplyPassword::acquire()
throw()
{
OWeakObject::acquire();
}
//=========================================================================
// virtual
void SAL_CALL InteractionSupplyPassword::release()
throw()
{
OWeakObject::release();
}
//=========================================================================
// virtual
uno::Any SAL_CALL
InteractionSupplyPassword::queryInterface( const uno::Type & rType )
throw ( uno::RuntimeException )
{
uno::Any aRet = cppu::queryInterface( rType,
static_cast< lang::XTypeProvider * >( this ),
static_cast< task::XInteractionContinuation * >( this ),
static_cast< task::XInteractionPassword * >( this ) );
return aRet.hasValue()
? aRet : InteractionContinuation::queryInterface( rType );
}
//=========================================================================
//
// XTypeProvider methods.
//
//=========================================================================
// virtual
uno::Sequence< sal_Int8 > SAL_CALL
InteractionSupplyPassword::getImplementationId()
throw( uno::RuntimeException )
{
static cppu::OImplementationId * pId = 0;
if ( !pId )
{
osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
if ( !pId )
{
static cppu::OImplementationId id( sal_False );
pId = &id;
}
}
return (*pId).getImplementationId();
}
//=========================================================================
// virtual
uno::Sequence< uno::Type > SAL_CALL InteractionSupplyPassword::getTypes()
throw( uno::RuntimeException )
{
static cppu::OTypeCollection * pCollection = 0;
if ( !pCollection )
{
osl::Guard< osl::Mutex > aGuard( osl::Mutex::getGlobalMutex() );
if ( !pCollection )
{
static cppu::OTypeCollection collection(
getCppuType( static_cast<
uno::Reference< lang::XTypeProvider > * >( 0 ) ),
getCppuType( static_cast<
uno::Reference< task::XInteractionPassword > * >( 0 ) ) );
pCollection = &collection;
}
}
return (*pCollection).getTypes();
}
//=========================================================================
//
// XInteractionContinuation methods.
//
//=========================================================================
// virtual
void SAL_CALL InteractionSupplyPassword::select()
throw( uno::RuntimeException )
{
recordSelection();
}
//=========================================================================
//
// XInteractionPassword methods.
//
//=========================================================================
// virtual
void SAL_CALL
InteractionSupplyPassword::setPassword( const ::rtl::OUString& aPasswd )
throw ( uno::RuntimeException )
{
osl::MutexGuard aGuard( m_aMutex );
m_aPassword = aPasswd;
}
// virtual
rtl::OUString SAL_CALL InteractionSupplyPassword::getPassword()
throw ( uno::RuntimeException )
{
osl::MutexGuard aGuard( m_aMutex );
return m_aPassword;
}
//=========================================================================
//=========================================================================
//
// DocumentPasswordRequest Implementation.
//
//=========================================================================
//=========================================================================
DocumentPasswordRequest::DocumentPasswordRequest(
task::PasswordRequestMode eMode,
const rtl::OUString & rDocumentName )
{
// Fill request...
task::DocumentPasswordRequest aRequest;
// aRequest.Message = // OUString
// aRequest.Context = // XInterface
aRequest.Classification = task::InteractionClassification_ERROR;
aRequest.Mode = eMode;
aRequest.Name = rDocumentName;
setRequest( uno::makeAny( aRequest ) );
// Fill continuations...
uno::Sequence<
uno::Reference< task::XInteractionContinuation > > aContinuations( 3 );
aContinuations[ 0 ] = new ucbhelper::InteractionAbort( this );
aContinuations[ 1 ] = new ucbhelper::InteractionRetry( this );
aContinuations[ 2 ] = new InteractionSupplyPassword( this );
setContinuations( aContinuations );
}