blob: f534d8869ebf9b6482e78d2bafb4cbb569077fcd [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_ucbhelper.hxx"
/**************************************************************************
TODO
**************************************************************************
*************************************************************************/
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
#include <com/sun/star/ucb/XContentProvider.hpp>
#include <com/sun/star/ucb/XContentProviderManager.hpp>
#include <osl/mutex.hxx>
#include <ucbhelper/commandenvironmentproxy.hxx>
using namespace com::sun::star::lang;
using namespace com::sun::star::task;
using namespace com::sun::star::ucb;
using namespace com::sun::star::uno;
using namespace rtl;
namespace ucbhelper
{
//=========================================================================
//=========================================================================
//
// struct CommandEnvironmentProxy_Impl.
//
//=========================================================================
//=========================================================================
struct CommandEnvironmentProxy_Impl
{
osl::Mutex m_aMutex;
Reference< XCommandEnvironment > m_xEnv;
Reference< XInteractionHandler > m_xInteractionHandler;
Reference< XProgressHandler > m_xProgressHandler;
sal_Bool m_bGotInteractionHandler;
sal_Bool m_bGotProgressHandler;
CommandEnvironmentProxy_Impl(
const Reference< XCommandEnvironment >& rxEnv )
: m_xEnv( rxEnv ), m_bGotInteractionHandler( sal_False ),
m_bGotProgressHandler( sal_False ) {}
};
//=========================================================================
//=========================================================================
//
// CommandEnvironmentProxy Implementation.
//
//=========================================================================
//=========================================================================
CommandEnvironmentProxy::CommandEnvironmentProxy(
const Reference< XCommandEnvironment >& rxEnv )
{
m_pImpl = new CommandEnvironmentProxy_Impl( rxEnv );
}
//=========================================================================
// virtual
CommandEnvironmentProxy::~CommandEnvironmentProxy()
{
delete m_pImpl;
}
//=========================================================================
//
// XInterface methods
//
//=========================================================================
XINTERFACE_IMPL_2( CommandEnvironmentProxy,
XTypeProvider,
XCommandEnvironment );
//=========================================================================
//
// XTypeProvider methods
//
//=========================================================================
XTYPEPROVIDER_IMPL_2( CommandEnvironmentProxy,
XTypeProvider,
XCommandEnvironment );
//=========================================================================
//
// XCommandEnvironemnt methods.
//
//=========================================================================
// virtual
Reference< XInteractionHandler > SAL_CALL
CommandEnvironmentProxy::getInteractionHandler()
throw ( RuntimeException )
{
if ( m_pImpl->m_xEnv.is() )
{
if ( !m_pImpl->m_bGotInteractionHandler )
{
osl::MutexGuard aGuard( m_pImpl->m_aMutex );
if ( !m_pImpl->m_bGotInteractionHandler )
{
m_pImpl->m_xInteractionHandler
= m_pImpl->m_xEnv->getInteractionHandler();
m_pImpl->m_bGotInteractionHandler = sal_True;
}
}
}
return m_pImpl->m_xInteractionHandler;
}
//=========================================================================
// virtual
Reference< XProgressHandler > SAL_CALL
CommandEnvironmentProxy::getProgressHandler()
throw ( RuntimeException )
{
if ( m_pImpl->m_xEnv.is() )
{
if ( !m_pImpl->m_bGotProgressHandler )
{
osl::MutexGuard aGuard( m_pImpl->m_aMutex );
if ( !m_pImpl->m_bGotProgressHandler )
{
m_pImpl->m_xProgressHandler
= m_pImpl->m_xEnv->getProgressHandler();
m_pImpl->m_bGotProgressHandler = sal_True;
}
}
}
return m_pImpl->m_xProgressHandler;
}
} /* namespace ucbhelper */