diff options
Diffstat (limited to 'ucbhelper/inc/ucbhelper/interceptedinteraction.hxx')
-rw-r--r-- | ucbhelper/inc/ucbhelper/interceptedinteraction.hxx | 334 |
1 files changed, 0 insertions, 334 deletions
diff --git a/ucbhelper/inc/ucbhelper/interceptedinteraction.hxx b/ucbhelper/inc/ucbhelper/interceptedinteraction.hxx deleted file mode 100644 index 8c9b52239ad6..000000000000 --- a/ucbhelper/inc/ucbhelper/interceptedinteraction.hxx +++ /dev/null @@ -1,334 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#ifndef _UCBHELPER_INTERCEPTEDINTERACTION_HXX_ -#define _UCBHELPER_INTERCEPTEDINTERACTION_HXX_ - -#include <vector> - -#include <com/sun/star/task/XInteractionHandler.hpp> - -#include <com/sun/star/task/XInteractionRequest.hpp> -#include <cppuhelper/implbase1.hxx> -#include "ucbhelper/ucbhelperdllapi.h" - - -namespace ucbhelper{ - - -/** @short it wraps any other interaction handler and intercept - its handle() requests. - - @descr This class can be used as: - - instance if special interactions must be supressed - only - - or as base class if interactions must be modified. - */ -class UCBHELPER_DLLPUBLIC InterceptedInteraction : public ::cppu::WeakImplHelper1< ::com::sun::star::task::XInteractionHandler > -{ - //------------------------------------------- - // types - public: - - struct InterceptedRequest - { - //----------------------------------- - /** @short marks an Handle as invalid. - */ - static const sal_Int32 INVALID_HANDLE = -1; - - //----------------------------------- - /** @short contains the interaction request, which should be intercepted. */ - ::com::sun::star::uno::Any Request; - - //----------------------------------- - /** @short specify the fix continuation, which must be selected, if the - interaction could be intercepted successfully. - */ - ::com::sun::star::uno::Type Continuation; - - //----------------------------------- - /** @short specify, if both interactions must have the same type - or can be derived from. - - @descr Interaction base on exceptions - and exceptions are real types. - So they can be checked in its type. These parameter "MatchExact" - influence the type-check in the following way: - TRUE => the exception will be intercepted only - if it supports exactly the same type ... - or - FALSE => derived exceptions will be intercepted too. - - @attention This parameter does not influence the check of the continuation - type! The continuation must be matched exactly everytimes ... - */ - sal_Bool MatchExact; - - //----------------------------------- - /** @short its an unique identifier, which must be managed by the outside code. - - @descr If there is a derived class, which overwrites the InterceptedInteraction::intercepted() - method, it will be called with a reference to an InterceptedRequest struct. - Then it can use the handle to react without checking the request type again. - */ - sal_Int32 Handle; - - //----------------------------------- - /** @short default ctor. - - @descr Such constructed object cant be used realy. - Might it will crash if its used! - Dont forget to initialize all(!) members ... - */ - InterceptedRequest() - { - MatchExact = sal_False; - Handle = INVALID_HANDLE; - } - - //----------------------------------- - /** @short initialize this instance. - - @param nHandle - used to identify every intercepted request - - @param aRequest - must contain an exception object, which can be checked - in its uno-type against the later handled interaction. - - @param aContinuation - must contain a continuation object, which is used - in its uno-type to locate the same continuation - inside the list of possible ones. - - @param bMatchExact - influence the type check of the interception request. - Its not used to check the continuation! - */ - InterceptedRequest( sal_Int32 nHandle , - const ::com::sun::star::uno::Any& aRequest , - const ::com::sun::star::uno::Type& aContinuation, - sal_Bool bMatchExact ) - { - Handle = nHandle; - Request = aRequest; - Continuation = aContinuation; - MatchExact = bMatchExact; - } - }; - - //--------------------------------------- - /** @short represent the different states, which can occure - as result of an interception. - - @see impl_interceptRequest() - */ - enum EInterceptionState - { - /** none of the specified interceptions match the incoming request */ - E_NOT_INTERCEPTED, - /** the request could be intercepted - but the specified continuation could not be located. - Thats normaly an error of the programmer. May be the interaction request does not use - the right set of continuations ... or the interception list contains the wrong continuation. */ - E_NO_CONTINUATION_FOUND, - /** the request could be intercepted and the specified continuation could be selected successfully. */ - E_INTERCEPTED - }; - - //------------------------------------------- - // member - protected: - - //--------------------------------------- - /** @short reference to the intercepted interaction handler. - - @descr NULL is allowed for this member! - All interaction will be aborted then ... - expecting th handle() was overwritten by - a derived class. - */ - ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler > m_xInterceptedHandler; - - //--------------------------------------- - /** @short these list contains the requests, which should be intercepted. - */ - ::std::vector< InterceptedRequest > m_lInterceptions; - - //------------------------------------------- - // native interface - public: - - //--------------------------------------- - /** @short initialize a new instance with default values. - */ - InterceptedInteraction(); - - //--------------------------------------- - /** @short initialize a new instance with real values. - - @param xInterceptedHandler - the outside interaction handler, which should - be intercepted here. - - @param lInterceptions - the list of intercepted requests. - */ - InterceptedInteraction(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xInterceptedHandler, - const ::std::vector< InterceptedRequest >& lInterceptions ); - - //--------------------------------------- - /** @short initialize a new instance with the interaction handler, - which should be intercepted. - - @attention If such interaction handler isnt set here, - all incoming requests will be aborted ... - if the right continuation is available! - - @param xInterceptedHandler - the outside interaction handler, which should - be intercepted here. - */ - void setInterceptedHandler(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionHandler >& xInterceptedHandler); - - //--------------------------------------- - /** @short set a new list of intercepted interactions. - - @attention If the interface method handle() will be overwritten by - a derived class, the functionality behind these static list - cant be used. - - @param lInterceptions - the list of intercepted requests. - */ - void setInterceptions(const ::std::vector< InterceptedRequest >& lInterceptions); - - //--------------------------------------- - /** @short extract a requested continuation from te list of available ones. - - @param lContinuations - the list of available continuations. - - @param aType - is used to locate the right continuation, - by checking its interface type. - - @return A valid reference to the continuation, if it could be located ... - or an empty reference otherwise. - */ - static ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > extractContinuation( - const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >& lContinuations, - const ::com::sun::star::uno::Type& aType ); - - //------------------------------------------- - // useable for derived classes - protected: - - //--------------------------------------- - /** @short can be overwritten by a derived class to handle interceptions - outside. - - @descr This base implementation checks, if the request could be intercepted - successfully. Then this method intercepted() is called. - The default implementation returns "NOT_INTERCEPTED" everytimes. - So the method impl_interceptRequest() uses the right continuation automaticly. - - If this method was overwritten and something different "NO_INTERCEPTED" - is returned, the method impl_interceptRequest() will return immediately with - the result, which is returned by this intercepted() method. - Then the continuations must be selected inside the intercepted() call! - - @param rRequest - it points to the intercepted request (means the item of the - set interception list). e.g. its "Handle" member can be used - to identify it and react very easy, without the need to check the - type of the exception ... - - @param xOrgRequest - points to the original interaction, which was intercepted. - It provides access to the exception and the list of possible - continuations. - - @return The result of this operation. - Note: If E_NOT_INTERCEPTED is returned the default handling of the base class - will be used automaticly for this request! - */ - virtual EInterceptionState intercepted(const InterceptedRequest& rRequest , - const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& xOrgRequest); - - //------------------------------------------- - // uno interface - public: - - //--------------------------------------- - /** @short implements the default handling of this class .... - or can be overwritten by any derived class. - - @descr If no further class is derived from this one - -> the default implementation is used. Then the - internal list of requests is used to handle different - interactions automaticly. - (see impl_interceptRequest()) - - If this method was overwritten by a derived implementation - -> the new implementation has to do everything by itself. - Of course it can access all members/helpers and work with it. - But the default implementation isnt used automaticly then. - - @param xRequest - the interaction request, which should be intercepted. - */ - virtual void SAL_CALL handle(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& xRequest) - throw(::com::sun::star::uno::RuntimeException); - - //------------------------------------------- - // helper - private: - - //--------------------------------------- - /** @short implements the default handling: - - intercept or forward to internal handler. - */ - UCBHELPER_DLLPRIVATE void impl_handleDefault(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& xRequest); - - //--------------------------------------- - /** @short implements the interception of requests. - - @descr The incoming request will be analyzed, if it match - any request of the m_lIntercepions list. - If an interception could be found, its continuation will be - searched and selected. - - The method return the state of that operation. - But it doesnt call the intercepted and here set - interaction handler. That has to be done in the outside method. - - @param xRequest - the interaction request, which should be intercepted. - - @return A identifier, which inidicates if the request was intercepted, - the continuation was found and selected ... or not. - */ - UCBHELPER_DLLPRIVATE EInterceptionState impl_interceptRequest(const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& xRequest); -}; - -} // namespace ucbhelper - -#endif // _UCBHELPER_INTERCEPTEDINTERACTION_HXX_ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |