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 _OCONNECTIONPOINTHELPER_HXX
25 #define _OCONNECTIONPOINTHELPER_HXX
26 
27 //______________________________________________________________________________________________________________
28 //	includes of other projects
29 //______________________________________________________________________________________________________________
30 
31 #include <com/sun/star/lang/XConnectionPointContainer.hpp>
32 #include <com/sun/star/lang/XConnectionPoint.hpp>
33 #include <cppuhelper/weak.hxx>
34 #include <cppuhelper/propshlp.hxx>
35 
36 //______________________________________________________________________________________________________________
37 //	includes of my own project
38 //______________________________________________________________________________________________________________
39 #include "OConnectionPointContainerHelper.hxx"
40 
41 //______________________________________________________________________________________________________________
42 //	namespaces
43 //______________________________________________________________________________________________________________
44 
45 namespace unocontrols{
46 
47 #define	UNO3_ANY										::com::sun::star::uno::Any
48 #define	UNO3_SEQUENCE									::com::sun::star::uno::Sequence
49 #define	UNO3_TYPE										::com::sun::star::uno::Type
50 #define	UNO3_REFERENCE									::com::sun::star::uno::Reference
51 #define	UNO3_XCONNECTIONPOINTCONTAINER					::com::sun::star::lang::XConnectionPointContainer
52 #define	UNO3_XCONNECTIONPOINT							::com::sun::star::lang::XConnectionPoint
53 #define	UNO3_MUTEX										::osl::Mutex
54 #define	UNO3_RUNTIMEEXCEPTION							::com::sun::star::uno::RuntimeException
55 #define	UNO3_XINTERFACE									::com::sun::star::uno::XInterface
56 #define	UNO3_OMULTITYPEINTERFACECONTAINERHELPER			::cppu::OMultiTypeInterfaceContainerHelper
57 #define	UNO3_LISTENEREXISTEXCEPTION						::com::sun::star::lang::ListenerExistException
58 #define	UNO3_INVALIDLISTENEREXCEPTION					::com::sun::star::lang::InvalidListenerException
59 #define	UNO3_WEAKREFERENCE								::com::sun::star::uno::WeakReference
60 #define	UNO3_OWEAKOBJECT								::cppu::OWeakObject
61 #define	UNO3_OCONNECTIONPOINTCONTAINERHELPER			OConnectionPointContainerHelper
62 
63 //______________________________________________________________________________________________________________
64 //	defines
65 //______________________________________________________________________________________________________________
66 
67 //______________________________________________________________________________________________________________
68 //	class declaration OConnectionPointHelper
69 //______________________________________________________________________________________________________________
70 
71 class OConnectionPointHelper	:	public	UNO3_XCONNECTIONPOINT
72 								,	public	UNO3_OWEAKOBJECT
73 {
74 
75 //______________________________________________________________________________________________________________
76 //	public methods
77 //______________________________________________________________________________________________________________
78 
79 public:
80 
81 	//__________________________________________________________________________________________________________
82 	//	construct/destruct
83 	//__________________________________________________________________________________________________________
84 
85 	/**_________________________________________________________________________________________________________
86 		@short
87 		@descr
88 
89 		@seealso
90 
91 		@param
92 
93 		@return
94 
95 		@onerror
96 	*/
97 
98 	OConnectionPointHelper(	UNO3_MUTEX&				  				aMutex						,
99 							UNO3_OCONNECTIONPOINTCONTAINERHELPER*	pContainerImplementation	,
100 							UNO3_TYPE				  				aType						);
101 
102 	/**_________________________________________________________________________________________________________
103 		@short
104 		@descr
105 
106 		@seealso
107 
108 		@param
109 
110 		@return
111 
112 		@onerror
113 	*/
114 
115 	virtual	~OConnectionPointHelper();
116 
117 	//________________________________________________________________________________________________________
118 	//	XInterface
119 	//________________________________________________________________________________________________________
120 
121 	/**_______________________________________________________________________________________________________
122 		@short		give answer, if interface is supported
123 		@descr		The interfaces are searched by type.
124 
125 		@seealso	XInterface
126 
127 		@param      "rType" is the type of searched interface.
128 
129 		@return		Any		information about found interface
130 
131 		@onerror	A RuntimeException is thrown.
132 	*/
133 
134 	virtual UNO3_ANY SAL_CALL queryInterface( const UNO3_TYPE& aType ) throw( UNO3_RUNTIMEEXCEPTION );
135 
136 	/**_______________________________________________________________________________________________________
137 		@short		increment refcount
138 		@descr		-
139 
140 		@seealso	XInterface
141 		@seealso	release()
142 
143 		@param		-
144 
145 		@return		-
146 
147 		@onerror	A RuntimeException is thrown.
148 	*/
149 
150     virtual void SAL_CALL acquire() throw();
151 
152 	/**_______________________________________________________________________________________________________
153 		@short		decrement refcount
154 		@descr		-
155 
156 		@seealso	XInterface
157 		@seealso	acquire()
158 
159 		@param		-
160 
161 		@return		-
162 
163 		@onerror	A RuntimeException is thrown.
164 	*/
165 
166     virtual void SAL_CALL release() throw();
167 
168 	//__________________________________________________________________________________________________________
169 	//	XConnectionPoint
170 	//__________________________________________________________________________________________________________
171 
172 	/**_________________________________________________________________________________________________________
173 		@short
174 		@descr
175 
176 		@seealso
177 
178 		@param
179 
180 		@return
181 
182 		@onerror
183 	*/
184 
185     virtual UNO3_TYPE SAL_CALL getConnectionType() throw( UNO3_RUNTIMEEXCEPTION );
186 
187 	/**_________________________________________________________________________________________________________
188 		@short
189 		@descr
190 
191 		@seealso
192 
193 		@param
194 
195 		@return
196 
197 		@onerror
198 	*/
199 
200     virtual UNO3_REFERENCE< UNO3_XCONNECTIONPOINTCONTAINER > SAL_CALL getConnectionPointContainer() throw( UNO3_RUNTIMEEXCEPTION );
201 
202 	/**_________________________________________________________________________________________________________
203 		@short
204 		@descr
205 
206 		@seealso
207 
208 		@param
209 
210 		@return
211 
212 		@onerror
213 	*/
214 
215     virtual void SAL_CALL advise( const UNO3_REFERENCE< UNO3_XINTERFACE >& xListener ) throw(	UNO3_LISTENEREXISTEXCEPTION		,
216 																								UNO3_INVALIDLISTENEREXCEPTION	,
217 																								UNO3_RUNTIMEEXCEPTION			);
218 
219 	/**_________________________________________________________________________________________________________
220 		@short
221 		@descr
222 
223 		@seealso
224 
225 		@param
226 
227 		@return
228 
229 		@onerror
230 	*/
231 
232     virtual void SAL_CALL unadvise( const UNO3_REFERENCE< UNO3_XINTERFACE >& xListener ) throw( UNO3_RUNTIMEEXCEPTION );
233 
234 	/**_________________________________________________________________________________________________________
235 		@short
236 		@descr
237 
238 		@seealso
239 
240 		@param
241 
242 		@return
243 
244 		@onerror
245 	*/
246 
247     virtual UNO3_SEQUENCE< UNO3_REFERENCE< UNO3_XINTERFACE > > SAL_CALL getConnections() throw( UNO3_RUNTIMEEXCEPTION );
248 
249 //______________________________________________________________________________________________________________
250 //	private methods
251 //______________________________________________________________________________________________________________
252 
253 private:
254 
255 	/**_________________________________________________________________________________________________________
256 		@short
257 		@descr
258 
259 		@seealso
260 
261 		@param
262 
263 		@return
264 
265 		@onerror
266 	*/
267 
268 	sal_Bool impl_LockContainer();
269 
270 	/**_________________________________________________________________________________________________________
271 		@short
272 		@descr
273 
274 		@seealso
275 
276 		@param
277 
278 		@return
279 
280 		@onerror
281 	*/
282 
283 	void impl_UnlockContainer();
284 
285 //______________________________________________________________________________________________________________
286 //	private variables
287 //______________________________________________________________________________________________________________
288 
289 private:
290 
291 	UNO3_MUTEX&												m_aSharedMutex				;
292 	UNO3_WEAKREFERENCE< UNO3_XCONNECTIONPOINTCONTAINER >	m_oContainerWeakReference	;	// Reference to container-class!. Don't use Reference<...>
293 																							// It is a ring-reference => and must be a wekreference!
294 	UNO3_OCONNECTIONPOINTCONTAINERHELPER*					m_pContainerImplementation	;
295 	UNO3_TYPE												m_aInterfaceType			;
296 	UNO3_REFERENCE< UNO3_XINTERFACE >						m_xLock						;
297 
298 };	// class OConnectionPointHelper
299 
300 }	// namespace unocontrols
301 
302 #endif	// #ifndef _OCONNECTIONPOINTHELPER_HXX
303