xref: /trunk/main/uui/source/iahndl.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 UUI_IAHNDL_HXX
25 #define UUI_IAHNDL_HXX
26 
27 #include <vector>
28 
29 #include "osl/mutex.hxx"
30 #include "rtl/ustring.hxx"
31 
32 #include "com/sun/star/uno/Reference.hxx"
33 #include "com/sun/star/uno/Sequence.hxx"
34 
35 #include "com/sun/star/beans/Optional.hpp"
36 #include "com/sun/star/task/InteractionClassification.hpp"
37 
38 #include "tools/solar.h" // sal_uInt16
39 #include "tools/errcode.hxx" // ErrCode
40 #include "tools/rc.hxx" // Resource
41 #include "tools/wintypes.hxx" // WinBits
42 
43 namespace com { namespace sun { namespace star {
44     namespace awt {
45         class XWindow;
46     }
47     namespace embed {
48         class XStorage;
49     }
50     namespace lang {
51         class XMultiServiceFactory;
52     }
53     namespace security {
54         struct DocumentSignatureInformation;
55     }
56     namespace task {
57         class FutureDocumentVersionProductUpdateRequest;
58         class XInteractionContinuation;
59         class XInteractionHandler;
60         class XInteractionRequest;
61     }
62     namespace ucb {
63         class NameClashResolveRequest;
64     }
65 } } }
66 
67 #include <hash_map>
68 
69 class Window;
70 
71 //============================================================================
72 struct InteractionHandlerData
73 {
74     /** The UNO service name to use to instantiate the content provider.
75      */
76     rtl::OUString ServiceName;
77 
InteractionHandlerDataInteractionHandlerData78     InteractionHandlerData() {};
InteractionHandlerDataInteractionHandlerData79     InteractionHandlerData(const rtl::OUString & rService)
80     : ServiceName( rService ){}
81 };
82 
83 typedef std::vector< InteractionHandlerData > InteractionHandlerDataList;
84 
85 typedef ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionContinuation > > Continuations;
86 
87 typedef ::std::hash_map< ::rtl::OUString, ::rtl::OUString, ::rtl::OUStringHash >    StringHashMap;
88 
89 //============================================================================
90 class UUIInteractionHelper
91 {
92 private:
93     mutable osl::Mutex                                                                      m_aPropertyMutex;
94             ::com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >  m_xServiceFactory;
95             ::com::sun::star::uno::Sequence< com::sun::star::uno::Any >                     m_aProperties;
96             StringHashMap                                                                   m_aTypedCustomHandlers;
97     UUIInteractionHelper(UUIInteractionHelper &); // not implemented
98     void operator =(UUIInteractionHelper); // not implemented
99 
100 public:
101     UUIInteractionHelper(
102         com::sun::star::uno::Reference<
103             com::sun::star::lang::XMultiServiceFactory > const & rServiceFactory,
104         com::sun::star::uno::Sequence<
105             com::sun::star::uno::Any > const & rArguments)
106         SAL_THROW(());
107     UUIInteractionHelper(
108         com::sun::star::uno::Reference<
109             com::sun::star::lang::XMultiServiceFactory > const & rServiceFactory)
110         SAL_THROW(());
111 
112     ~UUIInteractionHelper() SAL_THROW(());
113 
114     bool
115     handleRequest(
116         com::sun::star::uno::Reference<
117             com::sun::star::task::XInteractionRequest > const & rRequest);
118 
119     com::sun::star::beans::Optional< rtl::OUString >
120     getStringFromRequest(
121         com::sun::star::uno::Reference<
122             com::sun::star::task::XInteractionRequest > const & rRequest);
123 
124     // Helper.
125     static ::rtl::OUString
126     replaceMessageWithArguments(
127         ::rtl::OUString aMessage,
128             std::vector< rtl::OUString > const & rArguments );
129 
130 private:
131     bool
132     handleRequest_impl(
133         com::sun::star::uno::Reference<
134             com::sun::star::task::XInteractionRequest > const & rRequest,
135         bool bObtainErrorStringOnly,
136         bool & bHasErrorString,
137         rtl::OUString & rErrorString);
138 
139     static long
140     handlerequest(void* pHandleData, void* pInteractionHandler);
141 
142     com::sun::star::beans::Optional< rtl::OUString >
143     getStringFromRequest_impl(
144         com::sun::star::uno::Reference<
145             com::sun::star::task::XInteractionRequest > const & rRequest);
146 
147     static long
148     getstringfromrequest(void* pHandleData, void* pInteractionHandler);
149 
150     Window *
151     getParentProperty()
152         SAL_THROW(());
153 
154     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow>
155     getParentXWindow() const
156         SAL_THROW(());
157 
158     rtl::OUString
159     getContextProperty()
160         SAL_THROW(());
161 
162     com::sun::star::uno::Reference< com::sun::star::task::XInteractionHandler >
163     getInteractionHandler();
164 
165     bool    handleTypedHandlerImplementations(
166                 ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest > const &  rRequest
167             );
168 
169     bool
170     tryOtherInteractionHandler(
171         com::sun::star::uno::Reference<
172             com::sun::star::task::XInteractionRequest > const & rRequest);
173 
174     void
175     getInteractionHandlerList(InteractionHandlerDataList &rdataList);
176 
177     static bool
178     isInformationalErrorMessageRequest(
179         com::sun::star::uno::Sequence<
180             com::sun::star::uno::Reference<
181                 com::sun::star::task::XInteractionContinuation > > const &
182             rContinuations);
183 
184     //=====================================================================
185 
186     bool
187     handleInteractiveIOException(
188         com::sun::star::uno::Reference<
189             com::sun::star::task::XInteractionRequest > const & rRequest,
190         bool bObtainErrorStringOnly,
191         bool & bHasErrorString,
192         rtl::OUString & rErrorString);
193 
194     bool
195     handleAuthenticationRequest(
196         com::sun::star::uno::Reference<
197             com::sun::star::task::XInteractionRequest > const & rRequest);
198 
199     bool
200     handleCertificateValidationRequest(
201         com::sun::star::uno::Reference<
202             com::sun::star::task::XInteractionRequest > const & rRequest);
203 
204     void
205     handleNameClashResolveRequest(
206         com::sun::star::ucb::NameClashResolveRequest const & rRequest,
207         com::sun::star::uno::Sequence<
208             com::sun::star::uno::Reference<
209                 com::sun::star::task::XInteractionContinuation > > const &
210                     rContinuations);
211 
212     bool
213     handleMasterPasswordRequest(
214         com::sun::star::uno::Reference<
215             com::sun::star::task::XInteractionRequest > const & rRequest);
216 
217     bool
218     handlePasswordRequest(
219         com::sun::star::uno::Reference<
220             com::sun::star::task::XInteractionRequest > const & rRequest);
221 
222     bool
223     handleCookiesRequest(
224         com::sun::star::uno::Reference<
225             com::sun::star::task::XInteractionRequest > const & rRequest);
226 
227     bool
228     handleNoSuchFilterRequest(
229         com::sun::star::uno::Reference<
230             com::sun::star::task::XInteractionRequest > const & rRequest);
231 
232     bool
233     handleAmbigousFilterRequest(
234         com::sun::star::uno::Reference<
235             com::sun::star::task::XInteractionRequest > const & rRequest);
236 
237     bool
238     handleFilterOptionsRequest(
239         com::sun::star::uno::Reference<
240             com::sun::star::task::XInteractionRequest > const & rRequest);
241 
242     void
243     handleErrorHandlerRequest(
244         com::sun::star::task::InteractionClassification eClassification,
245         ErrCode nErrorCode,
246         std::vector< rtl::OUString > const & rArguments,
247         com::sun::star::uno::Sequence<
248             com::sun::star::uno::Reference<
249                 com::sun::star::task::XInteractionContinuation > > const &
250                     rContinuations,
251         bool bObtainErrorStringOnly,
252         bool & bHasErrorString,
253         rtl::OUString & rErrorString);
254 
255     void
256     handleGenericErrorRequest(
257         sal_Int32 nErrorCode,
258         com::sun::star::uno::Sequence<
259             com::sun::star::uno::Reference<
260                 com::sun::star::task::XInteractionContinuation > > const &
261                     rContinuations,
262         bool bObtainErrorStringOnly,
263         bool & bHasErrorString,
264         rtl::OUString & rErrorString);
265 
266     void
267     handleMacroConfirmRequest(
268         const ::rtl::OUString& aDocumentURL,
269         const ::com::sun::star::uno::Reference<
270             ::com::sun::star::embed::XStorage >& xZipStorage,
271         const ::rtl::OUString& aDocumentVersion,
272         const ::com::sun::star::uno::Sequence<
273             ::com::sun::star::security::DocumentSignatureInformation >
274                 aSignInfo,
275         com::sun::star::uno::Sequence<
276             com::sun::star::uno::Reference<
277                 com::sun::star::task::XInteractionContinuation > > const &
278                     rContinuations);
279 
280     void
281     handleFutureDocumentVersionUpdateRequest(
282         const ::com::sun::star::task::FutureDocumentVersionProductUpdateRequest&
283             _rRequest,
284         com::sun::star::uno::Sequence<
285             com::sun::star::uno::Reference<
286                 com::sun::star::task::XInteractionContinuation > > const &
287                     rContinuations);
288 
289     void
290     handleBrokenPackageRequest(
291         std::vector< rtl::OUString > const & rArguments,
292         ::com::sun::star::uno::Sequence<
293             ::com::sun::star::uno::Reference<
294                 ::com::sun::star::task::XInteractionContinuation > > const &
295                     rContinuations,
296         bool bObtainErrorStringOnly,
297         bool & bHasErrorString,
298         rtl::OUString & rErrorString);
299 
300     bool handleLockedDocumentRequest(
301         com::sun::star::uno::Reference<
302             com::sun::star::task::XInteractionRequest > const & rRequest);
303 
304     bool handleChangedByOthersRequest(
305         com::sun::star::uno::Reference<
306             com::sun::star::task::XInteractionRequest > const & rRequest);
307 
308     bool handleLockFileIgnoreRequest(
309         com::sun::star::uno::Reference<
310             com::sun::star::task::XInteractionRequest > const & rRequest);
311 
312     bool    handleCustomRequest(
313                 const ::com::sun::star::uno::Reference< ::com::sun::star::task::XInteractionRequest >& i_rRequest,
314                 const ::rtl::OUString& i_rServiceName
315             ) const;
316 };
317 
318 class ErrorResource: private Resource
319 {
320 public:
321     inline ErrorResource(ResId & rResId) SAL_THROW(()): Resource(rResId) {}
322 
323     inline ~ErrorResource() SAL_THROW(()) { FreeResource(); }
324 
325     bool getString(ErrCode nErrorCode, rtl::OUString * pString) const
326         SAL_THROW(());
327 };
328 
329 /*
330 class InteractionRequest
331 {
332 public:
333     InteractionRequest(
334         com::sun::star::uno::Reference<
335             com::sun::star::task::XInteractionRequest > const & rRequest)
336     : m_aRequest( rRequest ) {}
337 
338     virtual bool toString( rtl::OUString & rString ) = 0;
339     virtual bool handle( rtl::OUString & rString ) = 0;
340 
341 private:
342     com::sun::star::uno::Reference<
343         com::sun::star::task::XInteractionRequest > m_aRequest;
344 };
345 */
346 
347 #endif // UUI_IAHNDL_HXX
348