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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_ucbhelper.hxx"
26 
27 /**************************************************************************
28 								TODO
29  **************************************************************************
30 
31  *************************************************************************/
32 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
33 #include <com/sun/star/lang/XComponent.hpp>
34 #include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
35 #include <com/sun/star/ucb/XContentProvider.hpp>
36 #include <com/sun/star/ucb/XContentProviderManager.hpp>
37 #include <osl/mutex.hxx>
38 #include <ucbhelper/commandenvironmentproxy.hxx>
39 
40 using namespace com::sun::star::lang;
41 using namespace com::sun::star::task;
42 using namespace com::sun::star::ucb;
43 using namespace com::sun::star::uno;
44 using namespace rtl;
45 
46 namespace ucbhelper
47 {
48 
49 //=========================================================================
50 //=========================================================================
51 //
52 // struct CommandEnvironmentProxy_Impl.
53 //
54 //=========================================================================
55 //=========================================================================
56 
57 struct CommandEnvironmentProxy_Impl
58 {
59 	osl::Mutex 						 m_aMutex;
60 	Reference< XCommandEnvironment > m_xEnv;
61 	Reference< XInteractionHandler > m_xInteractionHandler;
62 	Reference< XProgressHandler >    m_xProgressHandler;
63 	sal_Bool m_bGotInteractionHandler;
64 	sal_Bool m_bGotProgressHandler;
65 
CommandEnvironmentProxy_Implucbhelper::CommandEnvironmentProxy_Impl66 	CommandEnvironmentProxy_Impl(
67 		const Reference< XCommandEnvironment >&	rxEnv )
68 	: m_xEnv( rxEnv ), m_bGotInteractionHandler( sal_False ),
69 	  m_bGotProgressHandler( sal_False ) {}
70 };
71 
72 //=========================================================================
73 //=========================================================================
74 //
75 // CommandEnvironmentProxy Implementation.
76 //
77 //=========================================================================
78 //=========================================================================
79 
CommandEnvironmentProxy(const Reference<XCommandEnvironment> & rxEnv)80 CommandEnvironmentProxy::CommandEnvironmentProxy(
81 						const Reference< XCommandEnvironment >& rxEnv )
82 {
83 	m_pImpl = new CommandEnvironmentProxy_Impl( rxEnv );
84 }
85 
86 //=========================================================================
87 // virtual
~CommandEnvironmentProxy()88 CommandEnvironmentProxy::~CommandEnvironmentProxy()
89 {
90 	delete m_pImpl;
91 }
92 
93 //=========================================================================
94 //
95 // XInterface methods
96 //
97 //=========================================================================
98 
99 XINTERFACE_IMPL_2( CommandEnvironmentProxy,
100 				   XTypeProvider,
101 				   XCommandEnvironment );
102 
103 //=========================================================================
104 //
105 // XTypeProvider methods
106 //
107 //=========================================================================
108 
109 XTYPEPROVIDER_IMPL_2( CommandEnvironmentProxy,
110 					  XTypeProvider,
111 					  XCommandEnvironment );
112 
113 //=========================================================================
114 //
115 // XCommandEnvironemnt methods.
116 //
117 //=========================================================================
118 
119 // virtual
120 Reference< XInteractionHandler > SAL_CALL
getInteractionHandler()121 CommandEnvironmentProxy::getInteractionHandler()
122 	throw ( RuntimeException )
123 {
124 	if ( m_pImpl->m_xEnv.is() )
125 	{
126 		if ( !m_pImpl->m_bGotInteractionHandler )
127 		{
128 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
129 			if ( !m_pImpl->m_bGotInteractionHandler )
130 			{
131 				m_pImpl->m_xInteractionHandler
132 								= m_pImpl->m_xEnv->getInteractionHandler();
133 				m_pImpl->m_bGotInteractionHandler = sal_True;
134 			}
135 		}
136 	}
137 	return m_pImpl->m_xInteractionHandler;
138 }
139 
140 //=========================================================================
141 // virtual
142 Reference< XProgressHandler > SAL_CALL
getProgressHandler()143 CommandEnvironmentProxy::getProgressHandler()
144 	throw ( RuntimeException )
145 {
146 	if ( m_pImpl->m_xEnv.is() )
147 	{
148 		if ( !m_pImpl->m_bGotProgressHandler )
149 		{
150 			osl::MutexGuard aGuard( m_pImpl->m_aMutex );
151 			if ( !m_pImpl->m_bGotProgressHandler )
152 			{
153 				m_pImpl->m_xProgressHandler
154 								= m_pImpl->m_xEnv->getProgressHandler();
155 				m_pImpl->m_bGotProgressHandler = sal_True;
156 			}
157 		}
158 	}
159 	return m_pImpl->m_xProgressHandler;
160 }
161 
162 } /* namespace ucbhelper */
163 
164