diff options
Diffstat (limited to 'framework/source/dispatch/servicehandler.cxx')
-rw-r--r-- | framework/source/dispatch/servicehandler.cxx | 354 |
1 files changed, 0 insertions, 354 deletions
diff --git a/framework/source/dispatch/servicehandler.cxx b/framework/source/dispatch/servicehandler.cxx deleted file mode 100644 index 60f796e54d..0000000000 --- a/framework/source/dispatch/servicehandler.cxx +++ /dev/null @@ -1,354 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * 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. - * - * 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). - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_framework.hxx" - -//_________________________________________________________________________________________________________________ -// my own includes -//_________________________________________________________________________________________________________________ -#include <dispatch/servicehandler.hxx> -#include <threadhelp/readguard.hxx> -#include <general.h> -#include <services.h> - -//_________________________________________________________________________________________________________________ -// interface includes -//_________________________________________________________________________________________________________________ -#include <com/sun/star/frame/DispatchResultState.hpp> -#include <com/sun/star/task/XJobExecutor.hpp> - -//_________________________________________________________________________________________________________________ -// includes of other projects -//_________________________________________________________________________________________________________________ - -#include <vcl/svapp.hxx> - -//_________________________________________________________________________________________________________________ -// namespace -//_________________________________________________________________________________________________________________ - -namespace framework{ - -//_________________________________________________________________________________________________________________ -// non exported const -//_________________________________________________________________________________________________________________ - -#define PROTOCOL_VALUE "service:" -#define PROTOCOL_LENGTH 8 - -//_________________________________________________________________________________________________________________ -// non exported definitions -//_________________________________________________________________________________________________________________ - -//_________________________________________________________________________________________________________________ -// declarations -//_________________________________________________________________________________________________________________ - -//_________________________________________________________________________________________________________________ -// XInterface, XTypeProvider, XServiceInfo - -DEFINE_XINTERFACE_5(ServiceHandler , - OWeakObject , - DIRECT_INTERFACE(css::lang::XTypeProvider ), - DIRECT_INTERFACE(css::lang::XServiceInfo ), - DIRECT_INTERFACE(css::frame::XDispatchProvider ), - DIRECT_INTERFACE(css::frame::XNotifyingDispatch), - DIRECT_INTERFACE(css::frame::XDispatch )) - -DEFINE_XTYPEPROVIDER_5(ServiceHandler , - css::lang::XTypeProvider , - css::lang::XServiceInfo , - css::frame::XDispatchProvider , - css::frame::XNotifyingDispatch, - css::frame::XDispatch ) - -DEFINE_XSERVICEINFO_MULTISERVICE(ServiceHandler , - ::cppu::OWeakObject , - SERVICENAME_PROTOCOLHANDLER , - IMPLEMENTATIONNAME_SERVICEHANDLER) - -DEFINE_INIT_SERVICE(ServiceHandler, - { - /*Attention - I think we don't need any mutex or lock here ... because we are called by our own static method impl_createInstance() - to create a new instance of this class by our own supported service factory. - see macro DEFINE_XSERVICEINFO_MULTISERVICE and "impl_initService()" for further informations! - */ - } - ) - -//_________________________________________________________________________________________________________________ - -/** - @short standard ctor - @descr These initialize a new instance of ths class with needed informations for work. - - @param xFactory - reference to uno servicemanager for creation of new services - - @modified 02.05.2002 08:16, as96863 -*/ -ServiceHandler::ServiceHandler( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory ) - // Init baseclasses first - : ThreadHelpBase( &Application::GetSolarMutex() ) - , OWeakObject ( ) - // Init member - , m_xFactory ( xFactory ) -{ -} - -//_________________________________________________________________________________________________________________ - -/** - @short standard dtor - @descr - - - @modified 02.05.2002 08:16, as96863 -*/ -ServiceHandler::~ServiceHandler() -{ - m_xFactory = NULL; -} - -//_________________________________________________________________________________________________________________ - -/** - @short decide if this dispatch implementation can be used for requested URL or not - @descr A protocol handler is registerd for an URL pattern inside configuration and will - be asked by the generic dispatch mechanism inside framework, if he can handle this - special URL wich match his registration. He can agree by returning of a valid dispatch - instance or disagree by returning <NULL/>. - We don't create new dispatch instances here realy - we return THIS as result to handle it - at the same implementation. - - @modified 02.05.2002 15:25, as96863 -*/ -css::uno::Reference< css::frame::XDispatch > SAL_CALL ServiceHandler::queryDispatch( const css::util::URL& aURL , - const ::rtl::OUString& /*sTarget*/ , - sal_Int32 /*nFlags*/ ) throw( css::uno::RuntimeException ) -{ - css::uno::Reference< css::frame::XDispatch > xDispatcher; - if (aURL.Complete.compareToAscii(PROTOCOL_VALUE,PROTOCOL_LENGTH)==0) - xDispatcher = this; - return xDispatcher; -} - -//_________________________________________________________________________________________________________________ - -/** - @short do the same like dispatch() but for multiple requests at the same time - @descr - - - @modified 02.05.2002 15:27, as96863 -*/ -css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL ServiceHandler::queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) throw( css::uno::RuntimeException ) -{ - sal_Int32 nCount = lDescriptor.getLength(); - css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > lDispatcher( nCount ); - for( sal_Int32 i=0; i<nCount; ++i ) - { - lDispatcher[i] = this->queryDispatch( - lDescriptor[i].FeatureURL, - lDescriptor[i].FrameName, - lDescriptor[i].SearchFlags); - } - return lDispatcher; -} - -//_________________________________________________________________________________________________________________ - -/** - @short dispatch URL with arguments - @descr We use threadsafe internal method to do so. It returns a state value - but we ignore it. - Because we doesn't support status listener notifications here. - - @param aURL - uno URL which should be executed - @param lArguments - list of optional arguments for this request - - @modified 02.05.2002 08:19, as96863 -*/ -void SAL_CALL ServiceHandler::dispatch( const css::util::URL& aURL , - const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) throw( css::uno::RuntimeException ) -{ - // dispatch() is an [oneway] call ... and may our user release his reference to us immediatly. - // So we should hold us self alive till this call ends. - css::uno::Reference< css::frame::XNotifyingDispatch > xSelfHold(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); - implts_dispatch(aURL,lArguments); - // No notification for status listener! -} - -//_________________________________________________________________________________________________________________ - -/** - @short dispatch with guaranteed notifications about success - @descr We use threadsafe internal method to do so. Return state of this function will be used - for notification if an optional listener is given. - - @param aURL - uno URL which should be executed - @param lArguments - list of optional arguments for this request - @param xListener - optional listener for state events - - @modified 30.04.2002 14:49, as96863 -*/ -void SAL_CALL ServiceHandler::dispatchWithNotification( const css::util::URL& aURL , - const css::uno::Sequence< css::beans::PropertyValue >& lArguments, - const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw( css::uno::RuntimeException ) -{ - // This class was designed to die by reference. And if user release his reference to us immediatly after calling this method - // we can run into some problems. So we hold us self alive till this method ends. - // Another reason: We can use this reference as source of sending event at the end too. - css::uno::Reference< css::frame::XNotifyingDispatch > xThis(static_cast< ::cppu::OWeakObject* >(this), css::uno::UNO_QUERY); - - css::uno::Reference< css::uno::XInterface > xService = implts_dispatch(aURL,lArguments); - if (xListener.is()) - { - css::frame::DispatchResultEvent aEvent; - if (xService.is()) - aEvent.State = css::frame::DispatchResultState::SUCCESS; - else - aEvent.State = css::frame::DispatchResultState::FAILURE; - aEvent.Result <<= xService; // may NULL for state=FAILED! - aEvent.Source = xThis; - - xListener->dispatchFinished( aEvent ); - } -} - -//_________________________________________________________________________________________________________________ - -/** - @short threadsafe helper for dispatch calls - @descr We support two interfaces for the same process - dispatch URLs. That the reason for this internal - function. It implements the real dispatch operation and returns a state value which inform caller - about success. He can notify listener then by using this return value. - - @param aURL - uno URL which should be executed - @param lArguments - list of optional arguments for this request - - @return <NULL/> if requested service couldn't be created successullfy; - a valid reference otherwise. This return value can be used to indicate, - if dispatch was successfully or not. - - @modified 02.05.2002 10:51, as96863 -*/ -css::uno::Reference< css::uno::XInterface > ServiceHandler::implts_dispatch( const css::util::URL& aURL , - const css::uno::Sequence< css::beans::PropertyValue >& /*lArguments*/ ) throw( css::uno::RuntimeException ) -{ - /* SAFE */ - ReadGuard aReadLock( m_aLock ); - css::uno::Reference< css::lang::XMultiServiceFactory > xFactory = m_xFactory; - aReadLock.unlock(); - /* SAFE */ - - if (!xFactory.is()) - return css::uno::Reference< css::uno::XInterface >(); - - // extract service name and may optional given parameters from given URL - // and use it to create and start the component - ::rtl::OUString sServiceAndArguments = aURL.Complete.copy(PROTOCOL_LENGTH); - ::rtl::OUString sServiceName; - ::rtl::OUString sArguments ; - - sal_Int32 nArgStart = sServiceAndArguments.indexOf('?',0); - if (nArgStart!=-1) - { - sServiceName = sServiceAndArguments.copy(0,nArgStart); - ++nArgStart; // ignore '?'! - sArguments = sServiceAndArguments.copy(nArgStart); - } - else - { - sServiceName = sServiceAndArguments; - } - - if (!sServiceName.getLength()) - return css::uno::Reference< css::uno::XInterface >(); - - // If a service doesnt support an optional job executor interface - he can't get - // any given parameters! - // Because we can't know if we must call createInstanceWithArguments() or XJobExecutor::trigger() ... - - css::uno::Reference< css::uno::XInterface > xService; - try - { - // => a) a service starts running inside his own ctor and we create it only - xService = xFactory->createInstance(sServiceName); - // or b) he implements the right interface and starts there (may with optional parameters) - css::uno::Reference< css::task::XJobExecutor > xExecuteable(xService, css::uno::UNO_QUERY); - if (xExecuteable.is()) - xExecuteable->trigger(sArguments); - } - // ignore all errors - inclusive runtime errors! - // E.g. a script based service (written in phyton) could not be executed - // because it contains syntax errors, which was detected at runtime ... - catch(const css::uno::Exception&) - { xService.clear(); } - - return xService; -} - -//_________________________________________________________________________________________________________________ - -/** - @short add/remove listener for state events - @descr We use an internal container to hold such registered listener. This container lives if we live. - And if call pas registration as non breakable transaction - we can accept the request without - any explicit lock. Because we share our mutex with this container. - - @param xListener - reference to a valid listener for state events - @param aURL - URL about listener will be informed, if something occurred - - @modified 30.04.2002 14:49, as96863 -*/ -void SAL_CALL ServiceHandler::addStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ , - const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) -{ - // not suported yet -} - -//_________________________________________________________________________________________________________________ - -void SAL_CALL ServiceHandler::removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& /*xListener*/ , - const css::util::URL& /*aURL*/ ) throw( css::uno::RuntimeException ) -{ - // not suported yet -} - -} // namespace framework - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |