xref: /AOO41X/main/uui/source/iahndl-filter.cxx (revision 859212d11457d0fe6c8750969b32b9412d9ba923)
1*859212d1SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*859212d1SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*859212d1SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*859212d1SAndrew Rist  * distributed with this work for additional information
6*859212d1SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*859212d1SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*859212d1SAndrew Rist  * "License"); you may not use this file except in compliance
9*859212d1SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*859212d1SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*859212d1SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*859212d1SAndrew Rist  * software distributed under the License is distributed on an
15*859212d1SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*859212d1SAndrew Rist  * KIND, either express or implied.  See the License for the
17*859212d1SAndrew Rist  * specific language governing permissions and limitations
18*859212d1SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*859212d1SAndrew Rist  *************************************************************/
21*859212d1SAndrew Rist 
22*859212d1SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "com/sun/star/beans/XPropertyAccess.hpp"
25cdf0e10cSrcweir #include "com/sun/star/container/XContainerQuery.hpp"
26cdf0e10cSrcweir #include "com/sun/star/container/XNameContainer.hpp"
27cdf0e10cSrcweir #include "com/sun/star/document/AmbigousFilterRequest.hpp"
28cdf0e10cSrcweir #include "com/sun/star/document/FilterOptionsRequest.hpp"
29cdf0e10cSrcweir #include "com/sun/star/document/NoSuchFilterRequest.hpp"
30cdf0e10cSrcweir #include "com/sun/star/document/XImporter.hpp"
31cdf0e10cSrcweir #include "com/sun/star/document/XInteractionFilterOptions.hpp"
32cdf0e10cSrcweir #include "com/sun/star/document/XInteractionFilterSelect.hpp"
33cdf0e10cSrcweir #include "com/sun/star/lang/XMultiServiceFactory.hpp"
34cdf0e10cSrcweir #include "com/sun/star/task/XInteractionAbort.hpp"
35cdf0e10cSrcweir #include "com/sun/star/task/XInteractionRequest.hpp"
36cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/XExecutableDialog.hpp"
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include "vos/mutex.hxx"
39cdf0e10cSrcweir #include "comphelper/sequenceashashmap.hxx"
40cdf0e10cSrcweir #include "vcl/svapp.hxx"
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include "getcontinuations.hxx"
43cdf0e10cSrcweir #include "fltdlg.hxx"
44cdf0e10cSrcweir 
45cdf0e10cSrcweir #include "iahndl.hxx"
46cdf0e10cSrcweir 
47cdf0e10cSrcweir using namespace com::sun::star;
48cdf0e10cSrcweir 
49cdf0e10cSrcweir namespace {
50cdf0e10cSrcweir 
51cdf0e10cSrcweir void
executeFilterDialog(Window * pParent,rtl::OUString const & rURL,uui::FilterNameList const & rFilters,rtl::OUString & rFilter)52cdf0e10cSrcweir executeFilterDialog(
53cdf0e10cSrcweir     Window                    * pParent ,
54cdf0e10cSrcweir     rtl::OUString       const & rURL    ,
55cdf0e10cSrcweir     uui::FilterNameList const & rFilters,
56cdf0e10cSrcweir     rtl::OUString             & rFilter )
57cdf0e10cSrcweir        SAL_THROW((uno::RuntimeException))
58cdf0e10cSrcweir {
59cdf0e10cSrcweir     try
60cdf0e10cSrcweir     {
61cdf0e10cSrcweir         vos::OGuard aGuard(Application::GetSolarMutex());
62cdf0e10cSrcweir 
63cdf0e10cSrcweir         std::auto_ptr< ResMgr > xManager(
64cdf0e10cSrcweir             ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
65cdf0e10cSrcweir 
66cdf0e10cSrcweir         std::auto_ptr< uui::FilterDialog > xDialog(
67cdf0e10cSrcweir             new uui::FilterDialog(pParent, xManager.get()));
68cdf0e10cSrcweir 
69cdf0e10cSrcweir         xDialog->SetURL(rURL);
70cdf0e10cSrcweir         xDialog->ChangeFilters(&rFilters);
71cdf0e10cSrcweir 
72cdf0e10cSrcweir         uui::FilterNameListPtr pSelected = rFilters.end();
73cdf0e10cSrcweir         if( xDialog->AskForFilter( pSelected ) )
74cdf0e10cSrcweir         {
75cdf0e10cSrcweir             rFilter = pSelected->sInternal;
76cdf0e10cSrcweir         }
77cdf0e10cSrcweir     }
78cdf0e10cSrcweir     catch (std::bad_alloc const &)
79cdf0e10cSrcweir     {
80cdf0e10cSrcweir         throw uno::RuntimeException(
81cdf0e10cSrcweir             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
82cdf0e10cSrcweir             uno::Reference< uno::XInterface >());
83cdf0e10cSrcweir     }
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir void
handleNoSuchFilterRequest_(Window * pParent,uno::Reference<lang::XMultiServiceFactory> const & xServiceFactory,document::NoSuchFilterRequest const & rRequest,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations)87cdf0e10cSrcweir handleNoSuchFilterRequest_(
88cdf0e10cSrcweir     Window * pParent,
89cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory,
90cdf0e10cSrcweir     document::NoSuchFilterRequest const & rRequest,
91cdf0e10cSrcweir     uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
92cdf0e10cSrcweir             rContinuations )
93cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
94cdf0e10cSrcweir {
95cdf0e10cSrcweir     uno::Reference< task::XInteractionAbort > xAbort;
96cdf0e10cSrcweir     uno::Reference< document::XInteractionFilterSelect > xFilterTransport;
97cdf0e10cSrcweir     getContinuations(rContinuations, &xAbort, &xFilterTransport);
98cdf0e10cSrcweir 
99cdf0e10cSrcweir     // check neccessary ressources - if they don't exist - abort or
100cdf0e10cSrcweir     // break this operation
101cdf0e10cSrcweir     if (!xAbort.is())
102cdf0e10cSrcweir         return;
103cdf0e10cSrcweir 
104cdf0e10cSrcweir     if (!xFilterTransport.is())
105cdf0e10cSrcweir     {
106cdf0e10cSrcweir         xAbort->select();
107cdf0e10cSrcweir         return;
108cdf0e10cSrcweir     }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir     uno::Reference< container::XContainerQuery > xFilterContainer;
111cdf0e10cSrcweir     try
112cdf0e10cSrcweir     {
113cdf0e10cSrcweir         xFilterContainer.set( xServiceFactory->createInstance(
114cdf0e10cSrcweir                                   ::rtl::OUString::createFromAscii(
115cdf0e10cSrcweir                                       "com.sun.star.document.FilterFactory") ),
116cdf0e10cSrcweir                               uno::UNO_QUERY );
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir     catch ( uno::Exception const & )
119cdf0e10cSrcweir     {
120cdf0e10cSrcweir     }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir     if (!xFilterContainer.is())
123cdf0e10cSrcweir     {
124cdf0e10cSrcweir         xAbort->select();
125cdf0e10cSrcweir         return;
126cdf0e10cSrcweir     }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir     uui::FilterNameList lNames;
129cdf0e10cSrcweir 
130cdf0e10cSrcweir     // Note: We look for all filters here which match the following criteria:
131cdf0e10cSrcweir     //          - they are import filters as minimum (of course they can
132cdf0e10cSrcweir     //            support export too)
133cdf0e10cSrcweir     //          - we don't show any filter which are flaged as "don't show it
134cdf0e10cSrcweir     //            at the UI" or "they are not installed"
135cdf0e10cSrcweir     //          - we ignore filters, which have not set any valid
136cdf0e10cSrcweir     //            DocumentService (e.g. our pure graphic filters)
137cdf0e10cSrcweir     //          - we show it sorted by her UIName's
138cdf0e10cSrcweir     //          - We don't use the order flag or prefer default filters.
139cdf0e10cSrcweir     //            (Because this list shows all filters and the user should
140cdf0e10cSrcweir     //            find his filter vry easy by his UIName ...)
141cdf0e10cSrcweir     //          - We use "_query_all" here ... but we filter graphic filters
142cdf0e10cSrcweir     //            out by using DocumentService property later!
143cdf0e10cSrcweir     uno::Reference< container::XEnumeration > xFilters
144cdf0e10cSrcweir         = xFilterContainer->createSubSetEnumerationByQuery(
145cdf0e10cSrcweir             ::rtl::OUString::createFromAscii(
146cdf0e10cSrcweir                 "_query_all:sort_prop=uiname:iflags=1:eflags=143360"));
147cdf0e10cSrcweir     while (xFilters->hasMoreElements())
148cdf0e10cSrcweir     {
149cdf0e10cSrcweir         try
150cdf0e10cSrcweir         {
151cdf0e10cSrcweir             ::comphelper::SequenceAsHashMap lProps(xFilters->nextElement());
152cdf0e10cSrcweir             uui::FilterNamePair             aPair;
153cdf0e10cSrcweir 
154cdf0e10cSrcweir             aPair.sInternal = lProps.getUnpackedValueOrDefault(
155cdf0e10cSrcweir                 rtl::OUString::createFromAscii("Name"), ::rtl::OUString());
156cdf0e10cSrcweir             aPair.sUI       = lProps.getUnpackedValueOrDefault(
157cdf0e10cSrcweir                  rtl::OUString::createFromAscii("UIName"), ::rtl::OUString());
158cdf0e10cSrcweir             if ( (!aPair.sInternal.Len()) || (!aPair.sUI.Len() ) )
159cdf0e10cSrcweir             {
160cdf0e10cSrcweir                continue;
161cdf0e10cSrcweir             }
162cdf0e10cSrcweir             lNames.push_back( aPair );
163cdf0e10cSrcweir         }
164cdf0e10cSrcweir         catch(const uno::RuntimeException&)
165cdf0e10cSrcweir         {
166cdf0e10cSrcweir             throw;
167cdf0e10cSrcweir         }
168cdf0e10cSrcweir         catch(const uno::Exception&)
169cdf0e10cSrcweir         {
170cdf0e10cSrcweir             continue;
171cdf0e10cSrcweir         }
172cdf0e10cSrcweir     }
173cdf0e10cSrcweir 
174cdf0e10cSrcweir     // no list available for showing
175cdf0e10cSrcweir     // -> abort operation
176cdf0e10cSrcweir     if (lNames.size()<1)
177cdf0e10cSrcweir     {
178cdf0e10cSrcweir         xAbort->select();
179cdf0e10cSrcweir         return;
180cdf0e10cSrcweir     }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     // let the user select the right filter
183cdf0e10cSrcweir     rtl::OUString sSelectedFilter;
184cdf0e10cSrcweir     executeFilterDialog( pParent,
185cdf0e10cSrcweir                          rRequest.URL,
186cdf0e10cSrcweir                          lNames,
187cdf0e10cSrcweir                          sSelectedFilter );
188cdf0e10cSrcweir 
189cdf0e10cSrcweir     // If he doesn't select anyone
190cdf0e10cSrcweir     // -> abort operation
191cdf0e10cSrcweir     if (sSelectedFilter.getLength()<1)
192cdf0e10cSrcweir     {
193cdf0e10cSrcweir         xAbort->select();
194cdf0e10cSrcweir         return;
195cdf0e10cSrcweir     }
196cdf0e10cSrcweir 
197cdf0e10cSrcweir     // otherwhise set it for return
198cdf0e10cSrcweir     xFilterTransport->setFilter( sSelectedFilter );
199cdf0e10cSrcweir     xFilterTransport->select();
200cdf0e10cSrcweir }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir void
handleAmbigousFilterRequest_(Window * pParent,uno::Reference<lang::XMultiServiceFactory> const & xServiceFactory,document::AmbigousFilterRequest const & rRequest,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations)203cdf0e10cSrcweir handleAmbigousFilterRequest_(
204cdf0e10cSrcweir     Window * pParent,
205cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory,
206cdf0e10cSrcweir     document::AmbigousFilterRequest const & rRequest,
207cdf0e10cSrcweir     uno::Sequence<
208cdf0e10cSrcweir         uno::Reference<
209cdf0e10cSrcweir             task::XInteractionContinuation > > const & rContinuations)
210cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
211cdf0e10cSrcweir {
212cdf0e10cSrcweir     uno::Reference< task::XInteractionAbort > xAbort;
213cdf0e10cSrcweir     uno::Reference< document::XInteractionFilterSelect > xFilterTransport;
214cdf0e10cSrcweir     getContinuations(rContinuations, &xAbort, &xFilterTransport);
215cdf0e10cSrcweir 
216cdf0e10cSrcweir     uui::FilterNameList lNames;
217cdf0e10cSrcweir 
218cdf0e10cSrcweir     uno::Reference< container::XNameContainer > xFilterContainer;
219cdf0e10cSrcweir     try
220cdf0e10cSrcweir     {
221cdf0e10cSrcweir         xFilterContainer.set( xServiceFactory->createInstance(
222cdf0e10cSrcweir             ::rtl::OUString::createFromAscii(
223cdf0e10cSrcweir                 "com.sun.star.document.FilterFactory") ),
224cdf0e10cSrcweir             uno::UNO_QUERY );
225cdf0e10cSrcweir     }
226cdf0e10cSrcweir     catch ( uno::Exception & )
227cdf0e10cSrcweir     {
228cdf0e10cSrcweir     }
229cdf0e10cSrcweir 
230cdf0e10cSrcweir     if( xFilterContainer.is() )
231cdf0e10cSrcweir     {
232cdf0e10cSrcweir         uno::Any                              aPackedSet    ;
233cdf0e10cSrcweir         uno::Sequence< beans::PropertyValue > lProps        ;
234cdf0e10cSrcweir         sal_Int32                             nStep         ;
235cdf0e10cSrcweir         uui::FilterNamePair                   aPair         ;
236cdf0e10cSrcweir 
237cdf0e10cSrcweir         try
238cdf0e10cSrcweir         {
239cdf0e10cSrcweir             aPackedSet = xFilterContainer->getByName( rRequest.SelectedFilter );
240cdf0e10cSrcweir         }
241cdf0e10cSrcweir         catch(const container::NoSuchElementException&)
242cdf0e10cSrcweir         {
243cdf0e10cSrcweir             aPackedSet.clear();
244cdf0e10cSrcweir         }
245cdf0e10cSrcweir         aPackedSet >>= lProps;
246cdf0e10cSrcweir         for( nStep=0; nStep<lProps.getLength(); ++nStep )
247cdf0e10cSrcweir         {
248cdf0e10cSrcweir             if( lProps[nStep].Name.compareToAscii("UIName") == 0 )
249cdf0e10cSrcweir             {
250cdf0e10cSrcweir                 ::rtl::OUString sTemp;
251cdf0e10cSrcweir                 lProps[nStep].Value >>= sTemp;
252cdf0e10cSrcweir                 aPair.sUI       = sTemp;
253cdf0e10cSrcweir                 aPair.sInternal = rRequest.SelectedFilter;
254cdf0e10cSrcweir                 lNames.push_back( aPair );
255cdf0e10cSrcweir                 break;
256cdf0e10cSrcweir             }
257cdf0e10cSrcweir         }
258cdf0e10cSrcweir 
259cdf0e10cSrcweir         try
260cdf0e10cSrcweir         {
261cdf0e10cSrcweir             aPackedSet = xFilterContainer->getByName( rRequest.DetectedFilter );
262cdf0e10cSrcweir         }
263cdf0e10cSrcweir         catch(const container::NoSuchElementException&)
264cdf0e10cSrcweir         {
265cdf0e10cSrcweir             aPackedSet.clear();
266cdf0e10cSrcweir         }
267cdf0e10cSrcweir         aPackedSet >>= lProps;
268cdf0e10cSrcweir         for( nStep=0; nStep<lProps.getLength(); ++nStep )
269cdf0e10cSrcweir         {
270cdf0e10cSrcweir             if( lProps[nStep].Name.compareToAscii("UIName") == 0 )
271cdf0e10cSrcweir             {
272cdf0e10cSrcweir                 ::rtl::OUString sTemp;
273cdf0e10cSrcweir                 lProps[nStep].Value >>= sTemp;
274cdf0e10cSrcweir                 aPair.sUI       = sTemp;
275cdf0e10cSrcweir                 aPair.sInternal = rRequest.DetectedFilter;
276cdf0e10cSrcweir                 lNames.push_back( aPair );
277cdf0e10cSrcweir                 break;
278cdf0e10cSrcweir             }
279cdf0e10cSrcweir         }
280cdf0e10cSrcweir     }
281cdf0e10cSrcweir 
282cdf0e10cSrcweir     if( xAbort.is() && xFilterTransport.is() )
283cdf0e10cSrcweir     {
284cdf0e10cSrcweir         if( lNames.size() < 1 )
285cdf0e10cSrcweir         {
286cdf0e10cSrcweir             xAbort->select();
287cdf0e10cSrcweir         }
288cdf0e10cSrcweir         else
289cdf0e10cSrcweir         {
290cdf0e10cSrcweir             rtl::OUString sFilter;
291cdf0e10cSrcweir             executeFilterDialog( pParent,
292cdf0e10cSrcweir                                  rRequest.URL,
293cdf0e10cSrcweir                                  lNames,
294cdf0e10cSrcweir                                  sFilter );
295cdf0e10cSrcweir 
296cdf0e10cSrcweir             if( sFilter.getLength() > 0 )
297cdf0e10cSrcweir             {
298cdf0e10cSrcweir                 xFilterTransport->setFilter( sFilter );
299cdf0e10cSrcweir                 xFilterTransport->select();
300cdf0e10cSrcweir             }
301cdf0e10cSrcweir             else
302cdf0e10cSrcweir                 xAbort->select();
303cdf0e10cSrcweir         }
304cdf0e10cSrcweir     }
305cdf0e10cSrcweir }
306cdf0e10cSrcweir 
307cdf0e10cSrcweir void
handleFilterOptionsRequest_(uno::Reference<lang::XMultiServiceFactory> const & xServiceFactory,document::FilterOptionsRequest const & rRequest,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations)308cdf0e10cSrcweir handleFilterOptionsRequest_(
309cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory,
310cdf0e10cSrcweir     document::FilterOptionsRequest const & rRequest,
311cdf0e10cSrcweir     uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
312cdf0e10cSrcweir         rContinuations)
313cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
314cdf0e10cSrcweir {
315cdf0e10cSrcweir     uno::Reference< task::XInteractionAbort > xAbort;
316cdf0e10cSrcweir     uno::Reference< document::XInteractionFilterOptions > xFilterOptions;
317cdf0e10cSrcweir     getContinuations(rContinuations, &xAbort, &xFilterOptions);
318cdf0e10cSrcweir 
319cdf0e10cSrcweir     uno::Reference< container::XNameAccess > xFilterCFG;
320cdf0e10cSrcweir     try
321cdf0e10cSrcweir     {
322cdf0e10cSrcweir         xFilterCFG.set( xServiceFactory->createInstance(
323cdf0e10cSrcweir                             ::rtl::OUString::createFromAscii(
324cdf0e10cSrcweir                                 "com.sun.star.document.FilterFactory" ) ),
325cdf0e10cSrcweir                         uno::UNO_QUERY );
326cdf0e10cSrcweir     }
327cdf0e10cSrcweir     catch ( uno::Exception const & )
328cdf0e10cSrcweir     {
329cdf0e10cSrcweir     }
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     if( xFilterCFG.is() && rRequest.rProperties.getLength() )
332cdf0e10cSrcweir     {
333cdf0e10cSrcweir         try
334cdf0e10cSrcweir         {
335cdf0e10cSrcweir             ::rtl::OUString aFilterName;
336cdf0e10cSrcweir             sal_Int32 nPropCount = rRequest.rProperties.getLength();
337cdf0e10cSrcweir             for( sal_Int32 ind = 0; ind < nPropCount; ++ind )
338cdf0e10cSrcweir             {
339cdf0e10cSrcweir                 rtl::OUString tmp = rRequest.rProperties[ind].Name;
340cdf0e10cSrcweir                 if( rRequest.rProperties[ind].Name.equals(
341cdf0e10cSrcweir                         ::rtl::OUString::createFromAscii("FilterName")) )
342cdf0e10cSrcweir                 {
343cdf0e10cSrcweir                     rRequest.rProperties[ind].Value >>= aFilterName;
344cdf0e10cSrcweir                     break;
345cdf0e10cSrcweir                 }
346cdf0e10cSrcweir             }
347cdf0e10cSrcweir 
348cdf0e10cSrcweir             uno::Sequence < beans::PropertyValue > aProps;
349cdf0e10cSrcweir             if ( xFilterCFG->getByName( aFilterName ) >>= aProps )
350cdf0e10cSrcweir             {
351cdf0e10cSrcweir                 sal_Int32 nPropertyCount = aProps.getLength();
352cdf0e10cSrcweir                 for( sal_Int32 nProperty=0;
353cdf0e10cSrcweir                      nProperty < nPropertyCount;
354cdf0e10cSrcweir                      ++nProperty )
355cdf0e10cSrcweir                     if( aProps[nProperty].Name.equals(
356cdf0e10cSrcweir                             ::rtl::OUString::createFromAscii("UIComponent")) )
357cdf0e10cSrcweir                     {
358cdf0e10cSrcweir                         ::rtl::OUString aServiceName;
359cdf0e10cSrcweir                         aProps[nProperty].Value >>= aServiceName;
360cdf0e10cSrcweir                         if( aServiceName.getLength() )
361cdf0e10cSrcweir                         {
362cdf0e10cSrcweir                             uno::Reference<
363cdf0e10cSrcweir                                 ui::dialogs::XExecutableDialog > xFilterDialog(
364cdf0e10cSrcweir                                     xServiceFactory->createInstance(
365cdf0e10cSrcweir                                         aServiceName ),
366cdf0e10cSrcweir                                     uno::UNO_QUERY );
367cdf0e10cSrcweir                             uno::Reference< beans::XPropertyAccess >
368cdf0e10cSrcweir                                 xFilterProperties( xFilterDialog,
369cdf0e10cSrcweir                                                    uno::UNO_QUERY );
370cdf0e10cSrcweir 
371cdf0e10cSrcweir                             if( xFilterDialog.is() && xFilterProperties.is() )
372cdf0e10cSrcweir                             {
373cdf0e10cSrcweir                                 uno::Reference<
374cdf0e10cSrcweir                                     document::XImporter > xImporter(
375cdf0e10cSrcweir                                         xFilterDialog, uno::UNO_QUERY );
376cdf0e10cSrcweir                                 if( xImporter.is() )
377cdf0e10cSrcweir                                     xImporter->setTargetDocument(
378cdf0e10cSrcweir                                         uno::Reference< lang::XComponent >(
379cdf0e10cSrcweir                                             rRequest.rModel, uno::UNO_QUERY ) );
380cdf0e10cSrcweir 
381cdf0e10cSrcweir                                 xFilterProperties->setPropertyValues(
382cdf0e10cSrcweir                                     rRequest.rProperties );
383cdf0e10cSrcweir 
384cdf0e10cSrcweir                                 if( xFilterDialog->execute() )
385cdf0e10cSrcweir                                 {
386cdf0e10cSrcweir                                     xFilterOptions->setFilterOptions(
387cdf0e10cSrcweir                                         xFilterProperties->getPropertyValues() );
388cdf0e10cSrcweir                                     xFilterOptions->select();
389cdf0e10cSrcweir                                     return;
390cdf0e10cSrcweir                                 }
391cdf0e10cSrcweir                             }
392cdf0e10cSrcweir                         }
393cdf0e10cSrcweir                         break;
394cdf0e10cSrcweir                     }
395cdf0e10cSrcweir             }
396cdf0e10cSrcweir         }
397cdf0e10cSrcweir         catch( container::NoSuchElementException& )
398cdf0e10cSrcweir         {
399cdf0e10cSrcweir             // the filter name is unknown
400cdf0e10cSrcweir         }
401cdf0e10cSrcweir         catch( uno::Exception& )
402cdf0e10cSrcweir         {
403cdf0e10cSrcweir         }
404cdf0e10cSrcweir     }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir     xAbort->select();
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
409cdf0e10cSrcweir } // namespace
410cdf0e10cSrcweir 
411cdf0e10cSrcweir bool
handleNoSuchFilterRequest(uno::Reference<task::XInteractionRequest> const & rRequest)412cdf0e10cSrcweir UUIInteractionHelper::handleNoSuchFilterRequest(
413cdf0e10cSrcweir     uno::Reference< task::XInteractionRequest > const & rRequest)
414cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
415cdf0e10cSrcweir {
416cdf0e10cSrcweir     uno::Any aAnyRequest(rRequest->getRequest());
417cdf0e10cSrcweir 
418cdf0e10cSrcweir     document::NoSuchFilterRequest aNoSuchFilterRequest;
419cdf0e10cSrcweir     if (aAnyRequest >>= aNoSuchFilterRequest)
420cdf0e10cSrcweir     {
421cdf0e10cSrcweir         handleNoSuchFilterRequest_(getParentProperty(),
422cdf0e10cSrcweir                                    m_xServiceFactory,
423cdf0e10cSrcweir                                    aNoSuchFilterRequest,
424cdf0e10cSrcweir                                    rRequest->getContinuations());
425cdf0e10cSrcweir         return true;
426cdf0e10cSrcweir     }
427cdf0e10cSrcweir     return false;
428cdf0e10cSrcweir }
429cdf0e10cSrcweir 
430cdf0e10cSrcweir bool
handleAmbigousFilterRequest(uno::Reference<task::XInteractionRequest> const & rRequest)431cdf0e10cSrcweir UUIInteractionHelper::handleAmbigousFilterRequest(
432cdf0e10cSrcweir     uno::Reference< task::XInteractionRequest > const & rRequest)
433cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
434cdf0e10cSrcweir {
435cdf0e10cSrcweir     uno::Any aAnyRequest(rRequest->getRequest());
436cdf0e10cSrcweir 
437cdf0e10cSrcweir     document::AmbigousFilterRequest aAmbigousFilterRequest;
438cdf0e10cSrcweir     if (aAnyRequest >>= aAmbigousFilterRequest)
439cdf0e10cSrcweir     {
440cdf0e10cSrcweir         handleAmbigousFilterRequest_(getParentProperty(),
441cdf0e10cSrcweir                                      m_xServiceFactory,
442cdf0e10cSrcweir                                      aAmbigousFilterRequest,
443cdf0e10cSrcweir                                      rRequest->getContinuations());
444cdf0e10cSrcweir         return true;
445cdf0e10cSrcweir     }
446cdf0e10cSrcweir     return false;
447cdf0e10cSrcweir }
448cdf0e10cSrcweir 
449cdf0e10cSrcweir bool
handleFilterOptionsRequest(uno::Reference<task::XInteractionRequest> const & rRequest)450cdf0e10cSrcweir UUIInteractionHelper::handleFilterOptionsRequest(
451cdf0e10cSrcweir     uno::Reference< task::XInteractionRequest > const & rRequest)
452cdf0e10cSrcweir     SAL_THROW((uno::RuntimeException))
453cdf0e10cSrcweir {
454cdf0e10cSrcweir     uno::Any aAnyRequest(rRequest->getRequest());
455cdf0e10cSrcweir 
456cdf0e10cSrcweir     document::FilterOptionsRequest aFilterOptionsRequest;
457cdf0e10cSrcweir     if (aAnyRequest >>= aFilterOptionsRequest)
458cdf0e10cSrcweir     {
459cdf0e10cSrcweir         handleFilterOptionsRequest_(m_xServiceFactory,
460cdf0e10cSrcweir                                     aFilterOptionsRequest,
461cdf0e10cSrcweir                                     rRequest->getContinuations());
462cdf0e10cSrcweir         return true;
463cdf0e10cSrcweir     }
464cdf0e10cSrcweir     return false;
465cdf0e10cSrcweir }
466cdf0e10cSrcweir 
467cdf0e10cSrcweir 
468