1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DBAUI_INTERACTION_HXX_
25 #define _DBAUI_INTERACTION_HXX_
26 
27 #ifndef _CPPUHELPER_IMPLBASE2_HXX_
28 #include <cppuhelper/implbase2.hxx>
29 #endif
30 
31 #include "moduledbu.hxx"
32 #include "apitools.hxx"
33 
34 /** === begin UNO includes === **/
35 #include <com/sun/star/lang/XServiceInfo.hpp>
36 #include <com/sun/star/task/XInteractionHandler2.hpp>
37 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
38 #include <com/sun/star/ucb/AuthenticationRequest.hpp>
39 #include <com/sun/star/sdb/ParametersRequest.hpp>
40 #include <com/sun/star/sdb/DocumentSaveRequest.hpp>
41 /** === end UNO includes === **/
42 
43 namespace dbtools
44 {
45 	class SQLExceptionInfo;
46 }
47 
48 //.........................................................................
49 namespace dbaui
50 {
51 //.........................................................................
52 
53 	//=========================================================================
54 	//= BasicInteractionHandler
55 	//=========================================================================
56 	typedef ::cppu::WeakImplHelper2	<	::com::sun::star::lang::XServiceInfo
57 									,	::com::sun::star::task::XInteractionHandler2
58 									>	BasicInteractionHandler_Base;
59 	/** implements an <type scope="com.sun.star.task">XInteractionHandler</type> for
60 		database related interaction requests.
61 		<p/>
62 		Supported interaction requests by now (specified by an exception: The appropriate exception
63 		has to be returned by the getRequest method of the object implementing the
64 		<type scope="com.sun.star.task">XInteractionRequest</type> interface.
65 			<ul>
66 				<li><b><type scope="com.sun.star.sdbc">SQLException</type></b>: requests to display a
67 					standard error dialog for the (maybe chained) exception given</li>
68 			</ul>
69 	*/
70 	class BasicInteractionHandler
71 				:public BasicInteractionHandler_Base
72 	{
73 		const OModuleClient m_aModuleClient;
74 		const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
75 				            m_xORB;
76         const bool          m_bFallbackToGeneric;
77 
78     public:
79 		BasicInteractionHandler(
80             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_rORB,
81             const bool i_bFallbackToGeneric
82         );
83 
84         // XInteractionHandler2
85         virtual ::sal_Bool SAL_CALL handleInteractionRequest( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw (::com::sun::star::uno::RuntimeException);
86 
87 	    // XInteractionHandler
88 		virtual void SAL_CALL handle( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& Request ) throw(::com::sun::star::uno::RuntimeException);
89 
90 	protected:
91         sal_Bool
92                 impl_handle_throw( const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& i_Request );
93 
94 		/// handle SQLExceptions (and derived classes)
95 		void	implHandle(
96 					const ::dbtools::SQLExceptionInfo& _rSqlInfo,
97 					const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >& _rContinuations);
98 
99 		/// handle parameter requests
100 		void	implHandle(
101 					const ::com::sun::star::sdb::ParametersRequest& _rParamRequest,
102 					const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >& _rContinuations);
103 
104 		/// handle document save requests
105 		void	implHandle(
106 					const ::com::sun::star::sdb::DocumentSaveRequest& _rParamRequest,
107 					const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >& _rContinuations);
108 
109         /// handles requests which are not SDB-specific
110         bool    implHandleUnknown(
111                     const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& _rxRequest );
112 
113 		/// known continuation types
114 		enum Continuation
115 		{
116 			APPROVE,
117 			DISAPPROVE,
118 			RETRY,
119 			ABORT,
120 			SUPPLY_PARAMETERS,
121 			SUPPLY_DOCUMENTSAVE
122 		};
123 		/** check if a given continuation sequence contains a given continuation type<p/>
124 			@return		the index within <arg>_rContinuations</arg> of the first occurrence of a continuation
125 						of the requested type, -1 of no such continuation exists
126 		*/
127 		sal_Int32 getContinuation(
128 			Continuation _eCont,
129 			const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > >& _rContinuations);
130 	};
131 
132 	//=========================================================================
133 	//= SQLExceptionInteractionHandler
134 	//=========================================================================
135     class SQLExceptionInteractionHandler : public BasicInteractionHandler
136     {
137     public:
SQLExceptionInteractionHandler(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & i_rORB)138         SQLExceptionInteractionHandler(
139                 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_rORB
140             )
141             :BasicInteractionHandler( i_rORB, false )
142         {
143         }
144 
145         // XServiceInfo
146 		DECLARE_SERVICE_INFO_STATIC();
147     };
148 
149 	//=========================================================================
150 	//= SQLExceptionInteractionHandler
151 	//=========================================================================
152     /** an implementation for the legacy css.sdb.InteractionHandler
153 
154         css.sdb.InteractionHandler is deprecated, as it does not only handle database related interactions,
155         but also delegates all kind of unknown requests to a css.task.InteractionHandler.
156 
157         In today's architecture, there's only one central css.task.InteractionHandler, which is to be used
158         for all requests. Depending on configuration information, it decides which handler implementation
159         to delegate a request to.
160 
161         SQLExceptionInteractionHandler is the delegatee which handles only database related interactions.
162         LegacyInteractionHandler is the version which first checks for a database related interaction, and
163         forwards everything else to the css.task.InteractionHandler.
164     */
165     class LegacyInteractionHandler : public BasicInteractionHandler
166     {
167     public:
LegacyInteractionHandler(const::com::sun::star::uno::Reference<::com::sun::star::lang::XMultiServiceFactory> & i_rORB)168         LegacyInteractionHandler(
169                 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& i_rORB
170             )
171             :BasicInteractionHandler( i_rORB, true )
172         {
173         }
174 
175         // XServiceInfo
176 		DECLARE_SERVICE_INFO_STATIC();
177     };
178 
179 //.........................................................................
180 }	// namespace dbaui
181 //.........................................................................
182 
183 #endif // _DBAUI_INTERACTION_HXX_
184 
185