122de8995SAndre Fischer /**************************************************************
222de8995SAndre Fischer  *
322de8995SAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
422de8995SAndre Fischer  * or more contributor license agreements.  See the NOTICE file
522de8995SAndre Fischer  * distributed with this work for additional information
622de8995SAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
722de8995SAndre Fischer  * to you under the Apache License, Version 2.0 (the
822de8995SAndre Fischer  * "License"); you may not use this file except in compliance
922de8995SAndre Fischer  * with the License.  You may obtain a copy of the License at
1022de8995SAndre Fischer  *
1122de8995SAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
1222de8995SAndre Fischer  *
1322de8995SAndre Fischer  * Unless required by applicable law or agreed to in writing,
1422de8995SAndre Fischer  * software distributed under the License is distributed on an
1522de8995SAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1622de8995SAndre Fischer  * KIND, either express or implied.  See the License for the
1722de8995SAndre Fischer  * specific language governing permissions and limitations
1822de8995SAndre Fischer  * under the License.
1922de8995SAndre Fischer  *
2022de8995SAndre Fischer  *************************************************************/
2122de8995SAndre Fischer 
2222de8995SAndre Fischer #include "precompiled_framework.hxx"
2322de8995SAndre Fischer 
2422de8995SAndre Fischer #include "services/ContextChangeEventMultiplexer.hxx"
2522de8995SAndre Fischer #include "services.h"
2622de8995SAndre Fischer 
2722de8995SAndre Fischer using ::rtl::OUString;
2822de8995SAndre Fischer 
2922de8995SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
3022de8995SAndre Fischer 
31*7a32b0c8SAndre Fischer using namespace css;
32*7a32b0c8SAndre Fischer using namespace cssu;
33*7a32b0c8SAndre Fischer 
3422de8995SAndre Fischer namespace framework {
3522de8995SAndre Fischer 
3622de8995SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"
3722de8995SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer"
3822de8995SAndre Fischer #define SINGLETON_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexerSigleton"
3922de8995SAndre Fischer 
4022de8995SAndre Fischer 
ContextChangeEventMultiplexer(const cssu::Reference<cssu::XComponentContext> & rxContext)4122de8995SAndre Fischer ContextChangeEventMultiplexer::ContextChangeEventMultiplexer (
42b9e67834SAndre Fischer     const cssu::Reference<cssu::XComponentContext>& rxContext)
4322de8995SAndre Fischer     : ContextChangeEventMultiplexerInterfaceBase(m_aMutex),
4422de8995SAndre Fischer       maListeners()
4522de8995SAndre Fischer {
4622de8995SAndre Fischer     (void)rxContext;
4722de8995SAndre Fischer }
4822de8995SAndre Fischer 
4922de8995SAndre Fischer 
5022de8995SAndre Fischer 
5122de8995SAndre Fischer 
~ContextChangeEventMultiplexer(void)5222de8995SAndre Fischer ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void)
5322de8995SAndre Fischer {
54b9e67834SAndre Fischer }
55b9e67834SAndre Fischer 
56b9e67834SAndre Fischer 
57b9e67834SAndre Fischer 
58b9e67834SAndre Fischer 
disposing(void)59b9e67834SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing (void)
60b9e67834SAndre Fischer {
61b9e67834SAndre Fischer     ListenerMap aListeners;
62b9e67834SAndre Fischer     aListeners.swap(maListeners);
63b9e67834SAndre Fischer 
6495a18594SAndre Fischer     cssu::Reference<cssu::XInterface> xThis (static_cast<XWeak*>(this));
6595a18594SAndre Fischer     css::lang::EventObject aEvent (xThis);
66b9e67834SAndre Fischer     for (ListenerMap::const_iterator iContainer(aListeners.begin()), iEnd(aListeners.end());
67b9e67834SAndre Fischer          iContainer!=iEnd;
68b9e67834SAndre Fischer          ++iContainer)
69b9e67834SAndre Fischer     {
70*7a32b0c8SAndre Fischer         // Unregister from the focus object.
71*7a32b0c8SAndre Fischer         Reference<lang::XComponent> xComponent (iContainer->first, UNO_QUERY);
72*7a32b0c8SAndre Fischer         if (xComponent.is())
73*7a32b0c8SAndre Fischer             xComponent->removeEventListener(this);
74*7a32b0c8SAndre Fischer 
75*7a32b0c8SAndre Fischer         // Tell all listeners that we are being disposed.
76*7a32b0c8SAndre Fischer         const FocusDescriptor& rFocusDescriptor (iContainer->second);
77b9e67834SAndre Fischer         for (ListenerContainer::const_iterator
78*7a32b0c8SAndre Fischer                  iListener(rFocusDescriptor.maListeners.begin()),
79*7a32b0c8SAndre Fischer                  iContainerEnd(rFocusDescriptor.maListeners.end());
80b9e67834SAndre Fischer              iListener!=iContainerEnd;
81b9e67834SAndre Fischer              ++iListener)
82b9e67834SAndre Fischer         {
83b9e67834SAndre Fischer             (*iListener)->disposing(aEvent);
84b9e67834SAndre Fischer         }
85b9e67834SAndre Fischer     }
8622de8995SAndre Fischer }
8722de8995SAndre Fischer 
8822de8995SAndre Fischer 
8922de8995SAndre Fischer 
9022de8995SAndre Fischer 
9122de8995SAndre Fischer // XContextChangeEventMultiplexer
9222de8995SAndre Fischer 
addContextChangeEventListener(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener,const cssu::Reference<cssu::XInterface> & rxEventFocus)9322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener (
9422de8995SAndre Fischer     const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
9522de8995SAndre Fischer     const cssu::Reference<cssu::XInterface>& rxEventFocus)
9622de8995SAndre Fischer     throw(cssu::RuntimeException,cssl::IllegalArgumentException)
9722de8995SAndre Fischer {
9822de8995SAndre Fischer     if ( ! rxListener.is())
9922de8995SAndre Fischer         throw css::lang::IllegalArgumentException(
10022de8995SAndre Fischer             A2S("can not add an empty reference"),
10122de8995SAndre Fischer             static_cast<XWeak*>(this),
10222de8995SAndre Fischer             0);
10322de8995SAndre Fischer 
104*7a32b0c8SAndre Fischer     FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true);
105*7a32b0c8SAndre Fischer     if (pFocusDescriptor != NULL)
10622de8995SAndre Fischer     {
107*7a32b0c8SAndre Fischer         ListenerContainer& rContainer (pFocusDescriptor->maListeners);
10822de8995SAndre Fischer         if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end())
10922de8995SAndre Fischer             rContainer.push_back(rxListener);
11022de8995SAndre Fischer         else
11122de8995SAndre Fischer         {
11222de8995SAndre Fischer             // The listener was added for the same event focus
11322de8995SAndre Fischer             // previously.  That is an error.
11422de8995SAndre Fischer             throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0);
11522de8995SAndre Fischer         }
11622de8995SAndre Fischer     }
11795a18594SAndre Fischer 
11895a18594SAndre Fischer     // Send out an initial event that informs the new listener about
11995a18594SAndre Fischer     // the current context.
120*7a32b0c8SAndre Fischer     if (rxEventFocus.is() && pFocusDescriptor!=NULL)
12195a18594SAndre Fischer     {
12295a18594SAndre Fischer         css::ui::ContextChangeEventObject aEvent (
12395a18594SAndre Fischer             NULL,
124*7a32b0c8SAndre Fischer             pFocusDescriptor->msCurrentApplicationName,
125*7a32b0c8SAndre Fischer             pFocusDescriptor->msCurrentContextName);
12695a18594SAndre Fischer         rxListener->notifyContextChangeEvent(aEvent);
12795a18594SAndre Fischer     }
12822de8995SAndre Fischer }
12922de8995SAndre Fischer 
13022de8995SAndre Fischer 
13122de8995SAndre Fischer 
13222de8995SAndre Fischer 
removeContextChangeEventListener(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener,const cssu::Reference<cssu::XInterface> & rxEventFocus)13322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeContextChangeEventListener (
13422de8995SAndre Fischer     const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
13522de8995SAndre Fischer     const cssu::Reference<cssu::XInterface>& rxEventFocus)
13622de8995SAndre Fischer     throw(cssu::RuntimeException,cssl::IllegalArgumentException)
13722de8995SAndre Fischer {
13822de8995SAndre Fischer     if ( ! rxListener.is())
13995a18594SAndre Fischer         throw cssl::IllegalArgumentException(
14095a18594SAndre Fischer             A2S("can not remove an empty reference"),
14195a18594SAndre Fischer             static_cast<XWeak*>(this), 0);
14222de8995SAndre Fischer 
143*7a32b0c8SAndre Fischer     FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false);
144*7a32b0c8SAndre Fischer     if (pFocusDescriptor != NULL)
14522de8995SAndre Fischer     {
146*7a32b0c8SAndre Fischer         ListenerContainer& rContainer (pFocusDescriptor->maListeners);
14795a18594SAndre Fischer         const ListenerContainer::iterator iListener (
14895a18594SAndre Fischer             ::std::find(rContainer.begin(), rContainer.end(), rxListener));
14922de8995SAndre Fischer         if (iListener != rContainer.end())
150b9e67834SAndre Fischer         {
15122de8995SAndre Fischer             rContainer.erase(iListener);
152b9e67834SAndre Fischer 
153*7a32b0c8SAndre Fischer             // We hold on to the focus descriptor even when the last listener has been removed.
154*7a32b0c8SAndre Fischer             // This allows us to keep track of the current context and send it to new listeners.
155b9e67834SAndre Fischer         }
15622de8995SAndre Fischer     }
15722de8995SAndre Fischer 
15822de8995SAndre Fischer }
15922de8995SAndre Fischer 
16022de8995SAndre Fischer 
16122de8995SAndre Fischer 
16222de8995SAndre Fischer 
removeAllContextChangeEventListeners(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener)16322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeAllContextChangeEventListeners (
16422de8995SAndre Fischer     const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener)
16522de8995SAndre Fischer     throw(cssu::RuntimeException,cssl::IllegalArgumentException)
16622de8995SAndre Fischer {
16722de8995SAndre Fischer     if ( ! rxListener.is())
16895a18594SAndre Fischer         throw cssl::IllegalArgumentException(
16995a18594SAndre Fischer             A2S("can not remove an empty reference"),
17095a18594SAndre Fischer             static_cast<XWeak*>(this), 0);
17122de8995SAndre Fischer 
17222de8995SAndre Fischer     for (ListenerMap::iterator
17322de8995SAndre Fischer              iContainer(maListeners.begin()),
17422de8995SAndre Fischer              iEnd(maListeners.end());
17522de8995SAndre Fischer          iContainer!=iEnd;
17622de8995SAndre Fischer          ++iContainer)
17722de8995SAndre Fischer     {
17895a18594SAndre Fischer         const ListenerContainer::iterator iListener (
17995a18594SAndre Fischer             ::std::find(iContainer->second.maListeners.begin(), iContainer->second.maListeners.end(), rxListener));
18095a18594SAndre Fischer         if (iListener != iContainer->second.maListeners.end())
181b9e67834SAndre Fischer         {
18295a18594SAndre Fischer             iContainer->second.maListeners.erase(iListener);
183b9e67834SAndre Fischer 
184*7a32b0c8SAndre Fischer             // We hold on to the focus descriptor even when the last listener has been removed.
185*7a32b0c8SAndre Fischer             // This allows us to keep track of the current context and send it to new listeners.
186b9e67834SAndre Fischer         }
187b9e67834SAndre Fischer     }
18822de8995SAndre Fischer }
18922de8995SAndre Fischer 
19022de8995SAndre Fischer 
19122de8995SAndre Fischer 
19222de8995SAndre Fischer 
broadcastContextChangeEvent(const css::ui::ContextChangeEventObject & rEventObject,const cssu::Reference<cssu::XInterface> & rxEventFocus)19322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::broadcastContextChangeEvent (
19422de8995SAndre Fischer     const css::ui::ContextChangeEventObject& rEventObject,
19522de8995SAndre Fischer     const cssu::Reference<cssu::XInterface>& rxEventFocus)
19622de8995SAndre Fischer     throw(cssu::RuntimeException)
19722de8995SAndre Fischer {
19895a18594SAndre Fischer     // Remember the current context.
19995a18594SAndre Fischer     if (rxEventFocus.is())
20095a18594SAndre Fischer     {
201*7a32b0c8SAndre Fischer         FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true);
202*7a32b0c8SAndre Fischer         if (pFocusDescriptor != NULL)
20395a18594SAndre Fischer         {
204*7a32b0c8SAndre Fischer             pFocusDescriptor->msCurrentApplicationName = rEventObject.ApplicationName;
205*7a32b0c8SAndre Fischer             pFocusDescriptor->msCurrentContextName = rEventObject.ContextName;
20695a18594SAndre Fischer         }
20795a18594SAndre Fischer     }
20895a18594SAndre Fischer 
20922de8995SAndre Fischer     BroadcastEventToSingleContainer(rEventObject, rxEventFocus);
21022de8995SAndre Fischer     if (rxEventFocus.is())
21122de8995SAndre Fischer         BroadcastEventToSingleContainer(rEventObject, NULL);
21222de8995SAndre Fischer }
21322de8995SAndre Fischer 
21422de8995SAndre Fischer 
21522de8995SAndre Fischer 
21622de8995SAndre Fischer 
BroadcastEventToSingleContainer(const css::ui::ContextChangeEventObject & rEventObject,const cssu::Reference<cssu::XInterface> & rxEventFocus)21722de8995SAndre Fischer void ContextChangeEventMultiplexer::BroadcastEventToSingleContainer (
21822de8995SAndre Fischer     const css::ui::ContextChangeEventObject& rEventObject,
21922de8995SAndre Fischer     const cssu::Reference<cssu::XInterface>& rxEventFocus)
22022de8995SAndre Fischer {
221*7a32b0c8SAndre Fischer     FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false);
222*7a32b0c8SAndre Fischer     if (pFocusDescriptor != NULL)
22322de8995SAndre Fischer     {
22422de8995SAndre Fischer         // Create a copy of the listener container to avoid problems
22522de8995SAndre Fischer         // when one of the called listeners calls add... or remove...
226*7a32b0c8SAndre Fischer         ListenerContainer aContainer (pFocusDescriptor->maListeners);
22722de8995SAndre Fischer         for (ListenerContainer::const_iterator
22822de8995SAndre Fischer                  iListener(aContainer.begin()),
22922de8995SAndre Fischer                  iEnd(aContainer.end());
23022de8995SAndre Fischer              iListener!=iEnd;
23122de8995SAndre Fischer              ++iListener)
23222de8995SAndre Fischer         {
23322de8995SAndre Fischer             (*iListener)->notifyContextChangeEvent(rEventObject);
23422de8995SAndre Fischer         }
23522de8995SAndre Fischer     }
23622de8995SAndre Fischer }
23722de8995SAndre Fischer 
23822de8995SAndre Fischer 
23922de8995SAndre Fischer 
24022de8995SAndre Fischer 
GetFocusDescriptor(const cssu::Reference<cssu::XInterface> & rxEventFocus,const bool bCreateWhenMissing)241*7a32b0c8SAndre Fischer ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::GetFocusDescriptor (
242*7a32b0c8SAndre Fischer     const cssu::Reference<cssu::XInterface>& rxEventFocus,
243*7a32b0c8SAndre Fischer     const bool bCreateWhenMissing)
244*7a32b0c8SAndre Fischer {
245*7a32b0c8SAndre Fischer     ListenerMap::iterator iDescriptor (maListeners.find(rxEventFocus));
246*7a32b0c8SAndre Fischer     if (iDescriptor == maListeners.end() && bCreateWhenMissing)
247*7a32b0c8SAndre Fischer     {
248*7a32b0c8SAndre Fischer         // Listen for the focus being disposed.
249*7a32b0c8SAndre Fischer         Reference<lang::XComponent> xComponent (rxEventFocus, UNO_QUERY);
250*7a32b0c8SAndre Fischer         if (xComponent.is())
251*7a32b0c8SAndre Fischer             xComponent->addEventListener(this);
252*7a32b0c8SAndre Fischer 
253*7a32b0c8SAndre Fischer         // Create a new listener container for the event focus.
254*7a32b0c8SAndre Fischer         iDescriptor = maListeners.insert(
255*7a32b0c8SAndre Fischer             ListenerMap::value_type(
256*7a32b0c8SAndre Fischer                 rxEventFocus,
257*7a32b0c8SAndre Fischer                 FocusDescriptor())).first;
258*7a32b0c8SAndre Fischer     }
259*7a32b0c8SAndre Fischer     if (iDescriptor != maListeners.end())
260*7a32b0c8SAndre Fischer         return &iDescriptor->second;
261*7a32b0c8SAndre Fischer     else
262*7a32b0c8SAndre Fischer         return NULL;
263*7a32b0c8SAndre Fischer }
264*7a32b0c8SAndre Fischer 
265*7a32b0c8SAndre Fischer 
266*7a32b0c8SAndre Fischer 
267*7a32b0c8SAndre Fischer 
26822de8995SAndre Fischer // XSingleComponentFactory
26922de8995SAndre Fischer 
createInstanceWithContext(const cssu::Reference<cssu::XComponentContext> & rxContext)27022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext (
27122de8995SAndre Fischer     const cssu::Reference<cssu::XComponentContext>& rxContext)
27222de8995SAndre Fischer     throw (cssu::Exception, cssu::RuntimeException)
27322de8995SAndre Fischer {
27422de8995SAndre Fischer     (void)rxContext;
27522de8995SAndre Fischer     return cssu::Reference<cssu::XInterface>();
27622de8995SAndre Fischer }
27722de8995SAndre Fischer 
27822de8995SAndre Fischer 
27922de8995SAndre Fischer 
28022de8995SAndre Fischer 
createInstanceWithArgumentsAndContext(const cssu::Sequence<cssu::Any> & rArguments,const cssu::Reference<cssu::XComponentContext> & rxContext)28122de8995SAndre Fischer cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext (
28222de8995SAndre Fischer     const cssu::Sequence<cssu::Any>& rArguments,
28322de8995SAndre Fischer     const cssu::Reference<cssu::XComponentContext>& rxContext)
28422de8995SAndre Fischer     throw (cssu::Exception, cssu::RuntimeException)
28522de8995SAndre Fischer {
28622de8995SAndre Fischer     (void)rArguments;
28722de8995SAndre Fischer     (void)rxContext;
28822de8995SAndre Fischer     return cssu::Reference<cssu::XInterface>();
28922de8995SAndre Fischer }
29022de8995SAndre Fischer 
29122de8995SAndre Fischer 
29222de8995SAndre Fischer 
29322de8995SAndre Fischer 
29422de8995SAndre Fischer // XServiceInfo
29522de8995SAndre Fischer 
getImplementationName(void)29622de8995SAndre Fischer ::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void)
29722de8995SAndre Fischer     throw(cssu::RuntimeException)
29822de8995SAndre Fischer {
29922de8995SAndre Fischer     return impl_getStaticImplementationName();
30022de8995SAndre Fischer }
30122de8995SAndre Fischer 
30222de8995SAndre Fischer 
30322de8995SAndre Fischer 
30422de8995SAndre Fischer 
30522de8995SAndre Fischer 
supportsService(const::rtl::OUString & rsServiceName)30622de8995SAndre Fischer sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService (
30722de8995SAndre Fischer     const ::rtl::OUString& rsServiceName)
30822de8995SAndre Fischer     throw (cssu::RuntimeException)
30922de8995SAndre Fischer {
31022de8995SAndre Fischer     return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0;
31122de8995SAndre Fischer }
31222de8995SAndre Fischer 
31322de8995SAndre Fischer 
31422de8995SAndre Fischer 
31522de8995SAndre Fischer 
getSupportedServiceNames(void)31622de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void)
31722de8995SAndre Fischer     throw (cssu::RuntimeException)
31822de8995SAndre Fischer {
31922de8995SAndre Fischer     return static_GetSupportedServiceNames();
32022de8995SAndre Fischer }
32122de8995SAndre Fischer 
32222de8995SAndre Fischer 
32322de8995SAndre Fischer 
32422de8995SAndre Fischer 
disposing(const css::lang::EventObject & rEvent)325*7a32b0c8SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing (
326*7a32b0c8SAndre Fischer     const css::lang::EventObject& rEvent)
327*7a32b0c8SAndre Fischer     throw (cssu::RuntimeException)
328*7a32b0c8SAndre Fischer {
329*7a32b0c8SAndre Fischer     ListenerMap::iterator iDescriptor (maListeners.find(rEvent.Source));
330*7a32b0c8SAndre Fischer 
331*7a32b0c8SAndre Fischer     if (iDescriptor == maListeners.end())
332*7a32b0c8SAndre Fischer     {
333*7a32b0c8SAndre Fischer         OSL_ASSERT(iDescriptor != maListeners.end());
334*7a32b0c8SAndre Fischer         return;
335*7a32b0c8SAndre Fischer     }
336*7a32b0c8SAndre Fischer 
337*7a32b0c8SAndre Fischer     // Should we notify the remaining listeners?
338*7a32b0c8SAndre Fischer 
339*7a32b0c8SAndre Fischer     maListeners.erase(iDescriptor);
340*7a32b0c8SAndre Fischer }
341*7a32b0c8SAndre Fischer 
342*7a32b0c8SAndre Fischer 
343*7a32b0c8SAndre Fischer 
344*7a32b0c8SAndre Fischer 
34522de8995SAndre Fischer // Local and static methods.
34622de8995SAndre Fischer 
impl_getStaticImplementationName(void)34722de8995SAndre Fischer OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void)
34822de8995SAndre Fischer {
34922de8995SAndre Fischer     return A2S(IMPLEMENTATION_NAME);
35022de8995SAndre Fischer }
35122de8995SAndre Fischer 
35222de8995SAndre Fischer 
35322de8995SAndre Fischer 
35422de8995SAndre Fischer 
static_GetSupportedServiceNames(void)35522de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void)
35622de8995SAndre Fischer {
35722de8995SAndre Fischer     cssu::Sequence<OUString> aServiceNames (2);
35822de8995SAndre Fischer     aServiceNames[0] = A2S(SERVICE_NAME);
35922de8995SAndre Fischer     aServiceNames[1] = A2S(SINGLETON_NAME);
36022de8995SAndre Fischer     return aServiceNames;
36122de8995SAndre Fischer }
36222de8995SAndre Fischer 
36322de8995SAndre Fischer 
36422de8995SAndre Fischer 
36522de8995SAndre Fischer 
impl_createFactory(const cssu::Reference<cssl::XMultiServiceFactory> & rxServiceManager)36622de8995SAndre Fischer cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory (
36722de8995SAndre Fischer     const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager)
36822de8995SAndre Fischer {
36922de8995SAndre Fischer     (void)rxServiceManager;
37022de8995SAndre Fischer     return cppu::createSingleComponentFactory(
37122de8995SAndre Fischer         ContextChangeEventMultiplexer::static_CreateInstance,
37222de8995SAndre Fischer         ContextChangeEventMultiplexer::impl_getStaticImplementationName(),
37322de8995SAndre Fischer         ContextChangeEventMultiplexer::static_GetSupportedServiceNames()
37422de8995SAndre Fischer         );
37522de8995SAndre Fischer }
37622de8995SAndre Fischer 
37722de8995SAndre Fischer 
37822de8995SAndre Fischer 
37922de8995SAndre Fischer 
static_CreateInstance(const cssu::Reference<cssu::XComponentContext> & rxComponentContext)38022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance (
38122de8995SAndre Fischer     const cssu::Reference<cssu::XComponentContext>& rxComponentContext)
38222de8995SAndre Fischer     throw (cssu::Exception)
38322de8995SAndre Fischer {
38422de8995SAndre Fischer     ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext);
38522de8995SAndre Fischer     cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY);
38622de8995SAndre Fischer     return xService;
38722de8995SAndre Fischer }
38822de8995SAndre Fischer 
38922de8995SAndre Fischer }  // end of namespace framework
390