1*bfd08df8SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*bfd08df8SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*bfd08df8SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*bfd08df8SAndrew Rist  * distributed with this work for additional information
6*bfd08df8SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*bfd08df8SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*bfd08df8SAndrew Rist  * "License"); you may not use this file except in compliance
9*bfd08df8SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*bfd08df8SAndrew Rist  *
11*bfd08df8SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*bfd08df8SAndrew Rist  *
13*bfd08df8SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*bfd08df8SAndrew Rist  * software distributed under the License is distributed on an
15*bfd08df8SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*bfd08df8SAndrew Rist  * KIND, either express or implied.  See the License for the
17*bfd08df8SAndrew Rist  * specific language governing permissions and limitations
18*bfd08df8SAndrew Rist  * under the License.
19*bfd08df8SAndrew Rist  *
20*bfd08df8SAndrew Rist  *************************************************************/
21*bfd08df8SAndrew Rist 
22*bfd08df8SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_embeddedobj.hxx"
26cdf0e10cSrcweir #include <com/sun/star/embed/EmbedStates.hpp>
27cdf0e10cSrcweir #include <cppuhelper/weak.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include "intercept.hxx"
30cdf0e10cSrcweir #include "docholder.hxx"
31cdf0e10cSrcweir #include "commonembobj.hxx"
32cdf0e10cSrcweir 
33cdf0e10cSrcweir using namespace ::com::sun::star;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir #define IUL 6
37cdf0e10cSrcweir 
38cdf0e10cSrcweir 
39cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > Interceptor::m_aInterceptedURL(IUL);
40cdf0e10cSrcweir 
41cdf0e10cSrcweir struct equalOUString
42cdf0e10cSrcweir {
operator ()equalOUString43cdf0e10cSrcweir 	bool operator()(
44cdf0e10cSrcweir 		const rtl::OUString& rKey1,
45cdf0e10cSrcweir 		const rtl::OUString& rKey2 ) const
46cdf0e10cSrcweir 	{
47cdf0e10cSrcweir 		return !!( rKey1 == rKey2 );
48cdf0e10cSrcweir 	}
49cdf0e10cSrcweir };
50cdf0e10cSrcweir 
51cdf0e10cSrcweir 
52cdf0e10cSrcweir struct hashOUString
53cdf0e10cSrcweir {
operator ()hashOUString54cdf0e10cSrcweir 	size_t operator()( const rtl::OUString& rName ) const
55cdf0e10cSrcweir 	{
56cdf0e10cSrcweir 		return rName.hashCode();
57cdf0e10cSrcweir 	}
58cdf0e10cSrcweir };
59cdf0e10cSrcweir 
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 
62cdf0e10cSrcweir class StatusChangeListenerContainer
63cdf0e10cSrcweir 	: public ::cppu::OMultiTypeInterfaceContainerHelperVar<
64cdf0e10cSrcweir rtl::OUString,hashOUString,equalOUString>
65cdf0e10cSrcweir {
66cdf0e10cSrcweir public:
StatusChangeListenerContainer(::osl::Mutex & aMutex)67cdf0e10cSrcweir 	StatusChangeListenerContainer( ::osl::Mutex& aMutex )
68cdf0e10cSrcweir 		:  cppu::OMultiTypeInterfaceContainerHelperVar<
69cdf0e10cSrcweir 	rtl::OUString,hashOUString,equalOUString>(aMutex)
70cdf0e10cSrcweir 	{
71cdf0e10cSrcweir 	}
72cdf0e10cSrcweir };
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 
DisconnectDocHolder()75cdf0e10cSrcweir void Interceptor::DisconnectDocHolder()
76cdf0e10cSrcweir {
77cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
78cdf0e10cSrcweir 	m_pDocHolder = NULL;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir 
81cdf0e10cSrcweir void SAL_CALL
addEventListener(const uno::Reference<lang::XEventListener> & Listener)82cdf0e10cSrcweir Interceptor::addEventListener(
83cdf0e10cSrcweir 	const uno::Reference<lang::XEventListener >& Listener )
84cdf0e10cSrcweir 	throw( uno::RuntimeException )
85cdf0e10cSrcweir {
86cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
87cdf0e10cSrcweir 
88cdf0e10cSrcweir 	if ( ! m_pDisposeEventListeners )
89cdf0e10cSrcweir 		m_pDisposeEventListeners =
90cdf0e10cSrcweir 			new cppu::OInterfaceContainerHelper( m_aMutex );
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 	m_pDisposeEventListeners->addInterface( Listener );
93cdf0e10cSrcweir }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 
96cdf0e10cSrcweir void SAL_CALL
removeEventListener(const uno::Reference<lang::XEventListener> & Listener)97cdf0e10cSrcweir Interceptor::removeEventListener(
98cdf0e10cSrcweir 	const uno::Reference< lang::XEventListener >& Listener )
99cdf0e10cSrcweir 	throw( uno::RuntimeException )
100cdf0e10cSrcweir {
101cdf0e10cSrcweir 	osl::MutexGuard aGuard( m_aMutex );
102cdf0e10cSrcweir 
103cdf0e10cSrcweir 	if ( m_pDisposeEventListeners )
104cdf0e10cSrcweir 		m_pDisposeEventListeners->removeInterface( Listener );
105cdf0e10cSrcweir }
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 
Interceptor(DocumentHolder * pDocHolder)108cdf0e10cSrcweir Interceptor::Interceptor( DocumentHolder* pDocHolder )
109cdf0e10cSrcweir 	: m_pDocHolder( pDocHolder ),
110cdf0e10cSrcweir 	  m_pDisposeEventListeners(0),
111cdf0e10cSrcweir 	  m_pStatCL(0)
112cdf0e10cSrcweir {
113cdf0e10cSrcweir 	m_aInterceptedURL[0] = rtl::OUString(
114cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:Save"));
115cdf0e10cSrcweir 	m_aInterceptedURL[1] = rtl::OUString(
116cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:SaveAll"));
117cdf0e10cSrcweir 	m_aInterceptedURL[2] = rtl::OUString(
118cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:CloseDoc"));
119cdf0e10cSrcweir 	m_aInterceptedURL[3] = rtl::OUString(
120cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:CloseWin"));
121cdf0e10cSrcweir 	m_aInterceptedURL[4] = rtl::OUString(
122cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:CloseFrame"));
123cdf0e10cSrcweir 	m_aInterceptedURL[5] = rtl::OUString(
124cdf0e10cSrcweir 		RTL_CONSTASCII_USTRINGPARAM(".uno:SaveAs"));
125cdf0e10cSrcweir 
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 
~Interceptor()129cdf0e10cSrcweir Interceptor::~Interceptor()
130cdf0e10cSrcweir {
131cdf0e10cSrcweir 	if( m_pDisposeEventListeners )
132cdf0e10cSrcweir 		delete m_pDisposeEventListeners;
133cdf0e10cSrcweir 
134cdf0e10cSrcweir 	if(m_pStatCL)
135cdf0e10cSrcweir 		delete m_pStatCL;
136cdf0e10cSrcweir }
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 
140cdf0e10cSrcweir //XDispatch
141cdf0e10cSrcweir void SAL_CALL
dispatch(const util::URL & URL,const uno::Sequence<beans::PropertyValue> & Arguments)142cdf0e10cSrcweir Interceptor::dispatch(
143cdf0e10cSrcweir 	const util::URL& URL,
144cdf0e10cSrcweir 	const uno::Sequence<
145cdf0e10cSrcweir 	beans::PropertyValue >& Arguments )
146cdf0e10cSrcweir 	throw (uno::RuntimeException)
147cdf0e10cSrcweir {
148cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
149cdf0e10cSrcweir 	if( m_pDocHolder )
150cdf0e10cSrcweir 	{
151cdf0e10cSrcweir 		if(URL.Complete == m_aInterceptedURL[0])
152cdf0e10cSrcweir 			m_pDocHolder->GetEmbedObject()->SaveObject_Impl();
153cdf0e10cSrcweir 		else if(URL.Complete == m_aInterceptedURL[2] ||
154cdf0e10cSrcweir 				URL.Complete == m_aInterceptedURL[3] ||
155cdf0e10cSrcweir 				URL.Complete == m_aInterceptedURL[4])
156cdf0e10cSrcweir 		{
157cdf0e10cSrcweir 			try {
158cdf0e10cSrcweir 				m_pDocHolder->GetEmbedObject()->changeState( embed::EmbedStates::RUNNING );
159cdf0e10cSrcweir 			}
160cdf0e10cSrcweir 			catch( uno::Exception& )
161cdf0e10cSrcweir 			{
162cdf0e10cSrcweir 			}
163cdf0e10cSrcweir 		}
164cdf0e10cSrcweir 		else if ( URL.Complete == m_aInterceptedURL[5] )
165cdf0e10cSrcweir 		{
166cdf0e10cSrcweir 			uno::Sequence< beans::PropertyValue > aNewArgs = Arguments;
167cdf0e10cSrcweir 			sal_Int32 nInd = 0;
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 			while( nInd < aNewArgs.getLength() )
170cdf0e10cSrcweir 			{
171cdf0e10cSrcweir 				if ( aNewArgs[nInd].Name.equalsAscii( "SaveTo" ) )
172cdf0e10cSrcweir 				{
173cdf0e10cSrcweir 					aNewArgs[nInd].Value <<= sal_True;
174cdf0e10cSrcweir 					break;
175cdf0e10cSrcweir 				}
176cdf0e10cSrcweir 				nInd++;
177cdf0e10cSrcweir 			}
178cdf0e10cSrcweir 
179cdf0e10cSrcweir 			if ( nInd == aNewArgs.getLength() )
180cdf0e10cSrcweir 			{
181cdf0e10cSrcweir 				aNewArgs.realloc( nInd + 1 );
182cdf0e10cSrcweir 				aNewArgs[nInd].Name = ::rtl::OUString::createFromAscii( "SaveTo" );
183cdf0e10cSrcweir 				aNewArgs[nInd].Value <<= sal_True;
184cdf0e10cSrcweir 			}
185cdf0e10cSrcweir 
186cdf0e10cSrcweir 			uno::Reference< frame::XDispatch > xDispatch = m_xSlaveDispatchProvider->queryDispatch(
187cdf0e10cSrcweir 				URL, ::rtl::OUString::createFromAscii( "_self" ), 0 );
188cdf0e10cSrcweir 			if ( xDispatch.is() )
189cdf0e10cSrcweir 				xDispatch->dispatch( URL, aNewArgs );
190cdf0e10cSrcweir 		}
191cdf0e10cSrcweir 	}
192cdf0e10cSrcweir }
193cdf0e10cSrcweir 
194cdf0e10cSrcweir void SAL_CALL
addStatusListener(const uno::Reference<frame::XStatusListener> & Control,const util::URL & URL)195cdf0e10cSrcweir Interceptor::addStatusListener(
196cdf0e10cSrcweir 	const uno::Reference<
197cdf0e10cSrcweir 	frame::XStatusListener >& Control,
198cdf0e10cSrcweir 	const util::URL& URL )
199cdf0e10cSrcweir 	throw (
200cdf0e10cSrcweir 		uno::RuntimeException
201cdf0e10cSrcweir 	)
202cdf0e10cSrcweir {
203cdf0e10cSrcweir 	if(!Control.is())
204cdf0e10cSrcweir 		return;
205cdf0e10cSrcweir 
206cdf0e10cSrcweir 	if(URL.Complete == m_aInterceptedURL[0])
207cdf0e10cSrcweir 	{   // Save
208cdf0e10cSrcweir 		frame::FeatureStateEvent aStateEvent;
209cdf0e10cSrcweir 		aStateEvent.FeatureURL.Complete = m_aInterceptedURL[0];
210cdf0e10cSrcweir 		aStateEvent.FeatureDescriptor = rtl::OUString(
211cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM("Update"));
212cdf0e10cSrcweir 		aStateEvent.IsEnabled = sal_True;
213cdf0e10cSrcweir 		aStateEvent.Requery = sal_False;
214cdf0e10cSrcweir 		aStateEvent.State <<= (rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("($1) ")) + m_pDocHolder->GetTitle() );
215cdf0e10cSrcweir 		Control->statusChanged(aStateEvent);
216cdf0e10cSrcweir 
217cdf0e10cSrcweir 		{
218cdf0e10cSrcweir 			osl::MutexGuard aGuard(m_aMutex);
219cdf0e10cSrcweir 			if(!m_pStatCL)
220cdf0e10cSrcweir 				m_pStatCL =
221cdf0e10cSrcweir 					new StatusChangeListenerContainer(m_aMutex);
222cdf0e10cSrcweir 		}
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 		m_pStatCL->addInterface(URL.Complete,Control);
225cdf0e10cSrcweir 		return;
226cdf0e10cSrcweir 	}
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 	sal_Int32 i = 2;
229cdf0e10cSrcweir 	if(URL.Complete == m_aInterceptedURL[i] ||
230cdf0e10cSrcweir 	   URL.Complete == m_aInterceptedURL[++i] ||
231cdf0e10cSrcweir 	   URL.Complete == m_aInterceptedURL[++i] )
232cdf0e10cSrcweir 	{   // Close and return
233cdf0e10cSrcweir 		frame::FeatureStateEvent aStateEvent;
234cdf0e10cSrcweir 		aStateEvent.FeatureURL.Complete = m_aInterceptedURL[i];
235cdf0e10cSrcweir 		aStateEvent.FeatureDescriptor = rtl::OUString(
236cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM("Close and Return"));
237cdf0e10cSrcweir 		aStateEvent.IsEnabled = sal_True;
238cdf0e10cSrcweir 		aStateEvent.Requery = sal_False;
239cdf0e10cSrcweir 		aStateEvent.State <<= (rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("($2) ")) + m_pDocHolder->GetTitle() );
240cdf0e10cSrcweir 		Control->statusChanged(aStateEvent);
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 		{
244cdf0e10cSrcweir 			osl::MutexGuard aGuard(m_aMutex);
245cdf0e10cSrcweir 			if(!m_pStatCL)
246cdf0e10cSrcweir 				m_pStatCL =
247cdf0e10cSrcweir 					new StatusChangeListenerContainer(m_aMutex);
248cdf0e10cSrcweir 		}
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 		m_pStatCL->addInterface(URL.Complete,Control);
251cdf0e10cSrcweir 		return;
252cdf0e10cSrcweir 	}
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 	if(URL.Complete == m_aInterceptedURL[5])
255cdf0e10cSrcweir 	{   // SaveAs
256cdf0e10cSrcweir 		frame::FeatureStateEvent aStateEvent;
257cdf0e10cSrcweir 		aStateEvent.FeatureURL.Complete = m_aInterceptedURL[5];
258cdf0e10cSrcweir 		aStateEvent.FeatureDescriptor = rtl::OUString(
259cdf0e10cSrcweir 			RTL_CONSTASCII_USTRINGPARAM("SaveCopyTo"));
260cdf0e10cSrcweir 		aStateEvent.IsEnabled = sal_True;
261cdf0e10cSrcweir 		aStateEvent.Requery = sal_False;
262cdf0e10cSrcweir 		aStateEvent.State <<= (rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("($3)")));
263cdf0e10cSrcweir 		Control->statusChanged(aStateEvent);
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 		{
266cdf0e10cSrcweir 			osl::MutexGuard aGuard(m_aMutex);
267cdf0e10cSrcweir 			if(!m_pStatCL)
268cdf0e10cSrcweir 				m_pStatCL =
269cdf0e10cSrcweir 					new StatusChangeListenerContainer(m_aMutex);
270cdf0e10cSrcweir 		}
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 		m_pStatCL->addInterface(URL.Complete,Control);
273cdf0e10cSrcweir 		return;
274cdf0e10cSrcweir 	}
275cdf0e10cSrcweir 
276cdf0e10cSrcweir }
277cdf0e10cSrcweir 
278cdf0e10cSrcweir 
279cdf0e10cSrcweir void SAL_CALL
removeStatusListener(const uno::Reference<frame::XStatusListener> & Control,const util::URL & URL)280cdf0e10cSrcweir Interceptor::removeStatusListener(
281cdf0e10cSrcweir 	const uno::Reference<
282cdf0e10cSrcweir 	frame::XStatusListener >& Control,
283cdf0e10cSrcweir 	const util::URL& URL )
284cdf0e10cSrcweir 	throw (
285cdf0e10cSrcweir 		uno::RuntimeException
286cdf0e10cSrcweir 	)
287cdf0e10cSrcweir {
288cdf0e10cSrcweir 	if(!(Control.is() && m_pStatCL))
289cdf0e10cSrcweir 		return;
290cdf0e10cSrcweir 	else {
291cdf0e10cSrcweir 		m_pStatCL->removeInterface(URL.Complete,Control);
292cdf0e10cSrcweir 		return;
293cdf0e10cSrcweir 	}
294cdf0e10cSrcweir }
295cdf0e10cSrcweir 
296cdf0e10cSrcweir 
297cdf0e10cSrcweir //XInterceptorInfo
298cdf0e10cSrcweir uno::Sequence< ::rtl::OUString >
299cdf0e10cSrcweir SAL_CALL
getInterceptedURLs()300cdf0e10cSrcweir Interceptor::getInterceptedURLs(  )
301cdf0e10cSrcweir 	throw (
302cdf0e10cSrcweir 		uno::RuntimeException
303cdf0e10cSrcweir 	)
304cdf0e10cSrcweir {
305cdf0e10cSrcweir 	// now implemented as update
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 	return m_aInterceptedURL;
308cdf0e10cSrcweir }
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 
311cdf0e10cSrcweir // XDispatchProvider
312cdf0e10cSrcweir 
313cdf0e10cSrcweir uno::Reference< frame::XDispatch > SAL_CALL
queryDispatch(const util::URL & URL,const::rtl::OUString & TargetFrameName,sal_Int32 SearchFlags)314cdf0e10cSrcweir Interceptor::queryDispatch(
315cdf0e10cSrcweir 	const util::URL& URL,
316cdf0e10cSrcweir 	const ::rtl::OUString& TargetFrameName,
317cdf0e10cSrcweir 	sal_Int32 SearchFlags )
318cdf0e10cSrcweir 	throw (
319cdf0e10cSrcweir 		uno::RuntimeException
320cdf0e10cSrcweir 	)
321cdf0e10cSrcweir {
322cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
323cdf0e10cSrcweir 	if(URL.Complete == m_aInterceptedURL[0])
324cdf0e10cSrcweir 		return (frame::XDispatch*)this;
325cdf0e10cSrcweir 	else if(URL.Complete == m_aInterceptedURL[1])
326cdf0e10cSrcweir 		return (frame::XDispatch*)0   ;
327cdf0e10cSrcweir 	else if(URL.Complete == m_aInterceptedURL[2])
328cdf0e10cSrcweir 		return (frame::XDispatch*)this;
329cdf0e10cSrcweir 	else if(URL.Complete == m_aInterceptedURL[3])
330cdf0e10cSrcweir 		return (frame::XDispatch*)this;
331cdf0e10cSrcweir 	else if(URL.Complete == m_aInterceptedURL[4])
332cdf0e10cSrcweir 		return (frame::XDispatch*)this;
333cdf0e10cSrcweir 	else if(URL.Complete == m_aInterceptedURL[5])
334cdf0e10cSrcweir 		return (frame::XDispatch*)this;
335cdf0e10cSrcweir 	else {
336cdf0e10cSrcweir 		if(m_xSlaveDispatchProvider.is())
337cdf0e10cSrcweir 			return m_xSlaveDispatchProvider->queryDispatch(
338cdf0e10cSrcweir 				URL,TargetFrameName,SearchFlags);
339cdf0e10cSrcweir 		else
340cdf0e10cSrcweir 			return uno::Reference<frame::XDispatch>(0);
341cdf0e10cSrcweir 	}
342cdf0e10cSrcweir }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir uno::Sequence< uno::Reference< frame::XDispatch > > SAL_CALL
queryDispatches(const uno::Sequence<frame::DispatchDescriptor> & Requests)345cdf0e10cSrcweir Interceptor::queryDispatches(
346cdf0e10cSrcweir 	const uno::Sequence<frame::DispatchDescriptor >& Requests )
347cdf0e10cSrcweir 	throw (
348cdf0e10cSrcweir 		uno::RuntimeException
349cdf0e10cSrcweir 	)
350cdf0e10cSrcweir {
351cdf0e10cSrcweir 	uno::Sequence< uno::Reference< frame::XDispatch > > aRet;
352cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
353cdf0e10cSrcweir 	if(m_xSlaveDispatchProvider.is())
354cdf0e10cSrcweir 		aRet = m_xSlaveDispatchProvider->queryDispatches(Requests);
355cdf0e10cSrcweir 	else
356cdf0e10cSrcweir 		aRet.realloc(Requests.getLength());
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 	for(sal_Int32 i = 0; i < Requests.getLength(); ++i)
359cdf0e10cSrcweir 		if(m_aInterceptedURL[0] == Requests[i].FeatureURL.Complete)
360cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) this;
361cdf0e10cSrcweir 		else if(m_aInterceptedURL[1] == Requests[i].FeatureURL.Complete)
362cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) 0;
363cdf0e10cSrcweir 		else if(m_aInterceptedURL[2] == Requests[i].FeatureURL.Complete)
364cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) this;
365cdf0e10cSrcweir 		else if(m_aInterceptedURL[3] == Requests[i].FeatureURL.Complete)
366cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) this;
367cdf0e10cSrcweir 		else if(m_aInterceptedURL[4] == Requests[i].FeatureURL.Complete)
368cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) this;
369cdf0e10cSrcweir 		else if(m_aInterceptedURL[5] == Requests[i].FeatureURL.Complete)
370cdf0e10cSrcweir 			aRet[i] = (frame::XDispatch*) this;
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 	return aRet;
373cdf0e10cSrcweir }
374cdf0e10cSrcweir 
375cdf0e10cSrcweir 
376cdf0e10cSrcweir 
377cdf0e10cSrcweir //XDispatchProviderInterceptor
378cdf0e10cSrcweir 
379cdf0e10cSrcweir uno::Reference< frame::XDispatchProvider > SAL_CALL
getSlaveDispatchProvider()380cdf0e10cSrcweir Interceptor::getSlaveDispatchProvider(  )
381cdf0e10cSrcweir 	throw (
382cdf0e10cSrcweir 		uno::RuntimeException
383cdf0e10cSrcweir 	)
384cdf0e10cSrcweir {
385cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
386cdf0e10cSrcweir 	return m_xSlaveDispatchProvider;
387cdf0e10cSrcweir }
388cdf0e10cSrcweir 
389cdf0e10cSrcweir void SAL_CALL
setSlaveDispatchProvider(const uno::Reference<frame::XDispatchProvider> & NewDispatchProvider)390cdf0e10cSrcweir Interceptor::setSlaveDispatchProvider(
391cdf0e10cSrcweir 	const uno::Reference< frame::XDispatchProvider >& NewDispatchProvider )
392cdf0e10cSrcweir 	throw (
393cdf0e10cSrcweir 		uno::RuntimeException
394cdf0e10cSrcweir 	)
395cdf0e10cSrcweir {
396cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
397cdf0e10cSrcweir 	m_xSlaveDispatchProvider = NewDispatchProvider;
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 
401cdf0e10cSrcweir uno::Reference< frame::XDispatchProvider > SAL_CALL
getMasterDispatchProvider()402cdf0e10cSrcweir Interceptor::getMasterDispatchProvider(  )
403cdf0e10cSrcweir 	throw (
404cdf0e10cSrcweir 		uno::RuntimeException
405cdf0e10cSrcweir 	)
406cdf0e10cSrcweir {
407cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
408cdf0e10cSrcweir 	return m_xMasterDispatchProvider;
409cdf0e10cSrcweir }
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 
412cdf0e10cSrcweir void SAL_CALL
setMasterDispatchProvider(const uno::Reference<frame::XDispatchProvider> & NewSupplier)413cdf0e10cSrcweir Interceptor::setMasterDispatchProvider(
414cdf0e10cSrcweir 	const uno::Reference< frame::XDispatchProvider >& NewSupplier )
415cdf0e10cSrcweir 	throw (
416cdf0e10cSrcweir 		uno::RuntimeException
417cdf0e10cSrcweir 	)
418cdf0e10cSrcweir {
419cdf0e10cSrcweir 	osl::MutexGuard aGuard(m_aMutex);
420cdf0e10cSrcweir 	m_xMasterDispatchProvider = NewSupplier;
421cdf0e10cSrcweir }
422cdf0e10cSrcweir 
423