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 __FRAMEWORK_MACROS_DEBUG_TARGETING_HXX_
25 #define __FRAMEWORK_MACROS_DEBUG_TARGETING_HXX_
26 
27 //*****************************************************************************************************************
28 //	special macros for targeting of frames
29 //*****************************************************************************************************************
30 
31 #ifdef	ENABLE_TARGETINGDEBUG
32 
33 	//_____________________________________________________________________________________________________________
34 	//	includes
35 	//_____________________________________________________________________________________________________________
36 
37 	#ifndef _RTL_STRBUF_HXX_
38 	#include <rtl/strbuf.hxx>
39 	#endif
40 
41 	/*_____________________________________________________________________________________________________________
42 		LOGFILE_TARGETING
43 
44 		For follow macros we need a special log file. If user forget to specify anyone, we must do it for him!
45 	_____________________________________________________________________________________________________________*/
46 
47 	#ifndef	LOGFILE_TARGETING
48 		#define	LOGFILE_TARGETSTEPS		"targetsteps.log"
49 		#define	LOGFILE_TARGETPARAM		"targetparam.log"
50 	#endif
51 
52 	/*_____________________________________________________________________________________________________________
53 		LOG_PARAMETER_FINDFRAME( SSERVICE, SFRAMENAME, STARGETNAME, NSEARCHFLAGS )
54 
55 		Log format for parameter e.g.: Desktop::findFrame( "frame1", 23 ) my name is "desktop"
56 		Log format for steps     e.g.: desktop--
57 
58 		With this macro you can log informations about search parameter of method "findFrame()" of an service.
59 		Use it at beginning of search only!
60 	_____________________________________________________________________________________________________________*/
61 
62 	#define	LOG_PARAMETER_FINDFRAME( SSERVICE, SFRAMENAME, STARGETNAME, NSEARCHFLAGS )							\
63 				/* Use new scope to prevent code against multiple variable defines! */							\
64 				{																								\
65 					::rtl::OStringBuffer sBufferParam(256);														\
66 					::rtl::OStringBuffer sBufferSteps(256);														\
67 					sBufferParam.append( SSERVICE												);				\
68 					sBufferParam.append( "::findFrame( \""										);				\
69 					sBufferParam.append( U2B( STARGETNAME )										);				\
70 					sBufferParam.append( "\", "													);				\
71 					sBufferParam.append( ::rtl::OString::valueOf( sal_Int32( NSEARCHFLAGS ) )	);				\
72 					sBufferParam.append( " ) my name is \""										);				\
73 					sBufferParam.append( U2B( SFRAMENAME )										);				\
74 					sBufferParam.append( "\"\n"													);				\
75 					sBufferSteps.append( U2B( SFRAMENAME )										);				\
76 					sBufferSteps.append( "--"													);				\
77 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBufferParam.makeStringAndClear() )						\
78 					WRITE_LOGFILE( LOGFILE_TARGETSTEPS, sBufferSteps.makeStringAndClear() )						\
79 				}
80 
81 	/*_____________________________________________________________________________________________________________
82 		LOG_PARAMETER_QUERYDISPATCH( SSERVICE, SFRAMENAME, AURL, STARGETNAME, NSEARCHFLAGS )
83 
84 		With this macro you can log informations about search parameter of method "queryDispatch()" of an service.
85 		Use it at beginning of search only!
86 	_____________________________________________________________________________________________________________*/
87 
88 	#define	LOG_PARAMETER_QUERYDISPATCH( SSERVICE, SFRAMENAME, AURL, STARGETNAME, NSEARCHFLAGS )						\
89 				/* Use new scope to prevent code against multiple variable defines! */									\
90 				{																										\
91 					::rtl::OStringBuffer sBuffer(1024);																	\
92 					sBuffer.append( "[ "													);							\
93 					sBuffer.append( U2B( SFRAMENAME )										);							\
94 					sBuffer.append( "] "													);							\
95 					sBuffer.append( SSERVICE												);							\
96 					sBuffer.append( "::queryDispatch( \""									);							\
97 					sBuffer.append( U2B( AURL.Complete )									);							\
98 					sBuffer.append( "\", \""												);							\
99 					sBuffer.append( U2B( STARGETNAME )										);							\
100 					sBuffer.append( "\", "													);							\
101 					sBuffer.append( ::rtl::OString::valueOf( sal_Int32( NSEARCHFLAGS ) )	);							\
102 					sBuffer.append( " )\n"													);							\
103 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBuffer.makeStringAndClear() )									\
104 				}
105 
106 	/*_____________________________________________________________________________________________________________
107 		LOG_PARAMETER_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, SURL, STARGETNAME, NSEARCHFLAGS, SEQPARAMETER )
108 
109 		With this macro you can log informations about search parameter of method "loadComponentFromURL()" of an service.
110 		Use it at beginning of search only!
111 	_____________________________________________________________________________________________________________*/
112 
113 	#define	LOG_PARAMETER_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, SURL, STARGETNAME, NSEARCHFLAGS, SEQPARAMETER )	\
114 				/* Use new scope to prevent code against multiple variable defines! */									\
115 				{																										\
116 					::rtl::OStringBuffer sBuffer(1024);																	\
117 					sBuffer.append( "[ "													);							\
118 					sBuffer.append( U2B( SFRAMENAME )										);							\
119 					sBuffer.append( "] "													);							\
120 					sBuffer.append( SSERVICE												);							\
121 					sBuffer.append( "::loadComponentFromURL( \""							);							\
122 					sBuffer.append( U2B( SURL )												);							\
123 					sBuffer.append( "\", \""												);							\
124 					sBuffer.append( U2B( STARGETNAME )										);							\
125 					sBuffer.append( "\", "													);							\
126 					sBuffer.append( ::rtl::OString::valueOf( sal_Int32( NSEARCHFLAGS ) )	);							\
127 					sBuffer.append( ", "													);							\
128 					sal_Int32 nCount = SEQPARAMETER.getLength();														\
129 					for( sal_Int32 nParameter=0; nParameter<nCount; ++nParameter )										\
130 					{																									\
131 						sBuffer.append( U2B( SEQPARAMETER[nParameter].Name ));											\
132 						if( nParameter<(nCount-1) )																		\
133 						{																								\
134 							sBuffer.append( " | " );																	\
135 						}																								\
136 					}																									\
137 					sBuffer.append( " )\n"													);							\
138 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBuffer.makeStringAndClear() )									\
139 				}
140 
141 	/*_____________________________________________________________________________________________________________
142 		LOG_RESULT_FINDFRAME( SSERVICE, SFRAMENAME, XFRAME )
143 
144 		With this macro you can log informations about search result of "findFrame()".
145 		Use it at the end of this method only!
146 	_____________________________________________________________________________________________________________*/
147 
148 	#define	LOG_RESULT_FINDFRAME( SSERVICE, SFRAMENAME, XFRAME )														\
149 				/* Use new scope to prevent code against multiple variable defines! */									\
150 				{																										\
151 					::rtl::OStringBuffer sBufferParam(256);																\
152 					::rtl::OStringBuffer sBufferSteps(256);																\
153 					sBufferParam.append( SSERVICE				);														\
154 					sBufferParam.append( "::findFrame() at \""	);														\
155 					sBufferParam.append( U2B( SFRAMENAME )		);														\
156 					sBufferParam.append( "\" "					);														\
157 					if( XFRAME.is() == sal_True )																		\
158 					{																									\
159 						sBufferParam.append( "return with valid frame.\n"		);										\
160 						sBufferSteps.append( "OK ["								);										\
161 						sBufferSteps.append( U2B( XFRAME->getName() )			);										\
162 						sBufferSteps.append( "]\n"								);										\
163 					}																									\
164 					else																								\
165 					{																									\
166 						sBufferParam.append( "return with NULL frame!\n");												\
167 						sBufferSteps.append( "??\n"						);												\
168 					}																									\
169 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBufferParam.makeStringAndClear() )								\
170 					WRITE_LOGFILE( LOGFILE_TARGETSTEPS, sBufferSteps.makeStringAndClear() )								\
171 				}
172 
173 	/*_____________________________________________________________________________________________________________
174 		LOG_RESULT_QUERYDISPATCH( SSERVICE, SFRAMENAME, XDISPATCHER )
175 
176 		With this macro you can log informations about search result of "queryDispatch()".
177 		Use it at the end of this method only!
178 	_____________________________________________________________________________________________________________*/
179 
180 	#define	LOG_RESULT_QUERYDISPATCH( SSERVICE, SFRAMENAME, XDISPATCHER )												\
181 				/* Use new scope to prevent code against multiple variable defines! */									\
182 				{																										\
183 					::rtl::OStringBuffer sBuffer(1024);																	\
184 					sBuffer.append( "[ "				);																\
185 					sBuffer.append( U2B( SFRAMENAME )	);																\
186 					sBuffer.append( "] "				);																\
187 					sBuffer.append( SSERVICE			);																\
188 					if( XDISPATCHER.is() == sal_True )																	\
189 					{																									\
190 						sBuffer.append( "::queryDispatch() return with valid dispatcher."	);							\
191 					}																									\
192 					else																								\
193 					{																									\
194 						sBuffer.append( "::queryDispatch() return with NULL dispatcher!"	);							\
195 					}																									\
196 					sBuffer.append( "\n" );																				\
197 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBuffer.makeStringAndClear() )									\
198 				}
199 
200 	/*_____________________________________________________________________________________________________________
201 		LOG_RESULT_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, XCOMPONENT )
202 
203 		With this macro you can log informations about search result of "loadComponentFromURL()".
204 		Use it at the end of this method only!
205 	_____________________________________________________________________________________________________________*/
206 
207 	#define	LOG_RESULT_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, XCOMPONENT )											\
208 				/* Use new scope to prevent code against multiple variable defines! */									\
209 				{																										\
210 					::rtl::OStringBuffer sBuffer(1024);																	\
211 					sBuffer.append( "[ "				);																\
212 					sBuffer.append( U2B( SFRAMENAME )	);																\
213 					sBuffer.append( "] "				);																\
214 					sBuffer.append( SSERVICE			);																\
215 					if( XCOMPONENT.is() == sal_True )																	\
216 					{																									\
217 						sBuffer.append( "::loadComponentFromURL() return with valid component."	);						\
218 					}																									\
219 					else																								\
220 					{																									\
221 						sBuffer.append( "::loadComponentFromURL() return with NULL component!"	);						\
222 					}																									\
223 					sBuffer.append( "\n" );																				\
224 					WRITE_LOGFILE( LOGFILE_TARGETPARAM, sBuffer.makeStringAndClear() )									\
225 				}
226 
227 #else	// #ifdef ENABLE_TARGETINGDEBUG
228 
229 	/*_____________________________________________________________________________________________________________
230 		If right testmode is'nt set - implements these macro empty!
231 	_____________________________________________________________________________________________________________*/
232 
233 	#undef	LOGFILE_TARGETPARAM
234 	#undef	LOGFILE_TARGETSTEPS
235 	#define	LOG_PARAMETER_FINDFRAME( SSERVICE, SFRAMENAME, STARGETNAME, NSEARCHFLAGS )
236 	#define	LOG_PARAMETER_QUERYDISPATCH( SSERVICE, SFRAMENAME, AURL, STARGETNAME, NSEARCHFLAGS )
237 	#define	LOG_PARAMETER_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, SURL, STARGETNAME, NSEARCHFLAGS, SEQPARAMETER )
238 	#define	LOG_RESULT_FINDFRAME( SSERVICE, SFRAMENAME, XFRAME )
239 	#define	LOG_RESULT_QUERYDISPATCH( SSERVICE, SFRAMENAME, XDISPATCHER )
240 	#define	LOG_RESULT_LOADCOMPONENTFROMURL( SSERVICE, SFRAMENAME, XCOMPONENT )
241 
242 #endif	// #ifdef ENABLE_TARGETINGDEBUG
243 
244 //*****************************************************************************************************************
245 //	end of file
246 //*****************************************************************************************************************
247 
248 #endif	// #ifndef __FRAMEWORK_MACROS_DEBUG_TARGETING_HXX_
249