DBA Data[Home] [Help]

PACKAGE BODY: APPS.XDP_ADAPTER_CORE

Source


1 PACKAGE BODY XDP_ADAPTER_CORE AS
2 /* $Header: XDPACORB.pls 120.1 2005/06/08 23:34:53 appldev  $ */
3 
4 
5 Function IsOperationValid(p_Operation in varchar2,
6 			  p_CurrentAdapterStatus in varchar2) return boolean;
7 
8 Procedure TalkToAdapter(p_ChannelName in varchar2,
9 			p_Command in varchar2,
10 			p_Timeout OUT NOCOPY number);
11 
12 Procedure ReceiveAck(p_ChannelName in varchar2,
13 		     p_Status OUT NOCOPY varchar2,
14 		     p_ErrorMessage OUT NOCOPY varchar2,
15 		     p_Timeout OUT NOCOPY number);
16 
17 Procedure SendSync( p_ChannelName in varchar2,
18 		    p_CleanupPipe in varchar2 default 'Y')
19 is
20 
21 begin
22 	if p_CleanupPipe = 'Y' then
23 		XDP_ADAPTER_CORE_PIPE.CleanupPipe(p_ChannelName => SendSync.p_ChannelName,
24 						p_Cleanreturn => 'Y');
25 	end if;
26 
27 	SendControlCommand(p_ChannelName => SendSync.p_ChannelName,
28 			   p_Operation => 'SYNC');
29 
30 end SendSync;
31 
32 Procedure SendResponse(p_ChannelName in varchar2,
33 		       p_Status in varchar2,
34 		       p_Message in varchar2)
35 
36 is
37  RespXML varchar2(4000);
38 begin
39 
40  RespXML := XDP_ADAPTER_CORE_XML.ConstructRespXML(p_Status => SendResponse.p_Status,
41 						 p_RespData => SendResponse.p_Message);
42 
43  SendMessage(p_ChannelName => SendResponse.p_ChannelName, p_Command => RespXML);
44 
45 end SendResponse;
46 
47 
48 Procedure SendAck(p_ChannelName in varchar2)
49 
50 is
51  AckXML varchar2(4000);
52 begin
53  AckXML := XDP_ADAPTER_CORE_XML.ConstructRespXML(p_Status => 'ACK',
54 						 p_RespData => NULL);
55 
56  SendMessage(p_ChannelName => SendAck.p_ChannelName, p_Command => AckXML);
57 
58 end SendAck;
59 
60 
61 
62 Procedure SendControlCommand(	p_ChannelName in varchar2,
63 				p_Operation in varchar2,
64 				p_OpData in varchar2 default null)
65 is
66  ControlCommandXML varchar2(4000);
67 begin
68 
69 	ControlCommandXML :=
70 		XDP_ADAPTER_CORE_XML.ConstructControlXML
71 			(p_Operation => SendControlCommand.p_Operation,
72 			 p_OpData => SendControlCommand.p_OpData);
73 
74 	TalkToAdapter (	p_ChannelName => SendControlCommand.p_ChannelName,
75 			p_Command => ControlCommandXML);
76 
77 end SendControlCommand;
78 
79 
80 Procedure SendControlCommand(	p_ChannelName in varchar2,
81 				p_Operation in varchar2,
82 				p_OpData in varchar2 default null,
83 				p_Timeout OUT NOCOPY number)
84 is
85  ControlCommandXML varchar2(4000);
86 
87 begin
88 
89 	ControlCommandXML :=
90 		XDP_ADAPTER_CORE_XML.ConstructControlXML
91 			(p_Operation => SendControlCommand.p_Operation,
92 			 p_OpData => SendControlCommand.p_OpData);
93 
94 	TalkToAdapter(	p_ChannelName => SendControlCommand.p_ChannelName,
95 			p_Command => ControlCommandXML,
96 			p_Timeout => SendControlCommand.p_Timeout);
97 
98 end SendControlCommand;
99 
100 Procedure ProcessControlCommand(p_ChannelName in varchar2,
101 				p_Operation in varchar2,
102 				p_OpData in varchar2 default null,
103 				p_Status OUT NOCOPY varchar2,
104 				p_ErrorMessage OUT NOCOPY varchar2)
105 is
106  l_Timeout number;
107  l_ReturnChannel varchar2(40);
108  l_RespXML varchar2(4000);
109 begin
110 
111 	XDP_ADAPTER_CORE_PIPE.CleanupPipe(p_ChannelName => p_ChannelName);
112 
113 	-- dbms_output.put_line('In ProcessControlCommand');
114 	-- dbms_output.put_line('Before SendControlCommand, p_ChannelName:' || p_ChannelName);
115 
116 	SendControlCommand(p_ChannelName => ProcessControlCommand.p_ChannelName,
117 			   p_Operation => ProcessControlCommand.p_Operation,
118 			   p_OpData => ProcessControlCommand.p_OpData,
119 			   p_Timeout => l_Timeout);
120 
121 	l_ReturnChannel := XDP_ADAPTER_CORE_PIPE.GetReturnChannelName
122 				(p_ChannelName => ProcessControlCommand.p_ChannelName);
123 
124 	-- dbms_output.put_line('After SendControlCommand, l_ReturnChannel:' || l_ReturnChannel);
125 	-- dbms_output.put_line('After SendControlCommand, Message timeout: ' || l_Timeout);
126 	-- dbms_output.put_line('Before WaitForMessage');
127 
128 	WaitForMessage(p_ChannelName => l_ReturnChannel,
129 		       p_Timeout => l_Timeout,
130 		       p_ResponseMessage => l_RespXML);
131 
132 	-- dbms_output.put_line('After WaitForMessage, p_ResponseMessage:'||l_RespXML);
133 	-- dbms_output.put_line('Before SendAck');
134 
135 	SendAck(p_ChannelName => ProcessControlCommand.p_ChannelName);
136 
137 	p_Status := XDP_ADAPTER_CORE_XML.DecodeMessage(p_WhattoDecode => 'STATUS',
138 							p_XMLMessage => l_RespXML);
139 
140 	p_ErrorMessage := XDP_ADAPTER_CORE_XML.DecodeMessage(p_WhattoDecode => 'DATA',
141 							p_XMLMessage => l_RespXML);
142 
143 	if (p_Operation <> XDP_ADAPTER.pv_opStop)  and
144 	   (p_Status <> pv_AdapterResponseFailure) then
145 			SendSync(p_ChannelName => ProcessControlCommand.p_ChannelName,
146 			 	 p_CleanupPipe => 'N');
147 	end if;
148 exception
149 when e_ReceiveTimedOut then
150 p_Status := pv_ProcessCommandTimedout;
151 p_ErrorMessage := 'Waiting for response, timed out';
152 
153 when others then
154 p_Status := pv_ProcessCommandError;
155 p_ErrorMessage := 'Waiting for response, errored out';
156 
157 end ProcessControlCommand;
158 
159 Procedure TalkToAdapter(p_ChannelName in varchar2,
160 			p_Command in varchar2)
161 is
162  l_dummynum number;
163 begin
164  TalkToAdapter(p_ChannelName => TalkToAdapter.p_ChannelName,
165 		p_Command => TalkToAdapter.p_Command,
166 		p_Timeout => l_dummynum);
167 
168 end TalkToAdapter;
169 
170 
171 Procedure TalkToAdapter(p_ChannelName in varchar2,
172 			p_Command in varchar2,
173 			p_Timeout OUT NOCOPY number)
174 is
175 
176  ReturnChannelName varchar2(40);
177  Status varchar2(40);
178  ErrorMessage varchar2(2000);
179 
180 begin
181 	SendMessage(p_ChannelName => TalkToAdapter.p_ChannelName,
182 		    p_Command => TalkToAdapter.p_Command);
183 
184 	ReturnChannelName := XDP_ADAPTER_CORE_PIPE.GetReturnChannelName
185 				(p_ChannelName => TalkToAdapter.p_ChannelName);
186 
187 	ReceiveAck(p_ChannelName => ReturnChannelName,
188 		   p_Status => Status,
189 		   p_ErrorMessage => ErrorMessage,
190 		   p_Timeout=> p_Timeout);
191 
192 	-- if Status = 'WARNING' then
193 	-- 	raise e_AdapterWarningException;
194 	-- elsif Status = 'ERROR' then
195 	-- 	raise e_AdapterErrorException;
196 	-- end if;
197 
198 end TalkToAdapter;
199 
200 
201 Procedure SendApplicationMessage(p_ChannelName in varchar2,
202 				 p_Command in varchar2,
203 				 p_Response in varchar2)
204 is
205  ApplXML varchar2(4000);
206 begin
207 	ApplXML := XDP_ADAPTER_CORE_XML.ConstructSendXML(
208 				p_Command => SendApplicationMessage.p_Command,
209 				p_Response => SendApplicationMessage.p_Response);
210 
211 	TalkToAdapter(p_ChannelName => SendApplicationMessage.p_ChannelName,
212 		      p_Command => ApplXML);
213 
214 end SendApplicationMessage;
215 
216 
217 Procedure SendMessage(	p_ChannelName in varchar2,
218 			p_Command in varchar2)
219 is
220 begin
221 
222 	XDP_ADAPTER_CORE_PIPE.SendPipedMessage(p_ChannelName => SendMessage.p_ChannelName,
223 			  		     p_Message => SendMessage.p_Command);
224 
225 end SendMessage;
226 
227 
228 Procedure ReceiveAck(p_ChannelName in varchar2,
229 		     p_Status OUT NOCOPY varchar2,
230 		     p_ErrorMessage OUT NOCOPY varchar2)
231 is
232  l_dummynum number;
233 begin
234 	ReceiveAck(p_ChannelName => ReceiveAck.p_ChannelName,
235 		   p_Status => ReceiveAck.p_Status,
236 		   p_ErrorMessage => ReceiveAck.p_ErrorMessage,
237 		    p_Timeout=> l_dummynum);
238 
239 end ReceiveAck;
240 
241 Procedure ReceiveAck(p_ChannelName in varchar2,
242 		     p_Status OUT NOCOPY varchar2,
243 		     p_ErrorMessage OUT NOCOPY varchar2,
244 		     p_Timeout OUT NOCOPY number)
245 is
246  ReturnCode number := 0;
247 
248  PipedMessage varchar2(4000);
249  l_Timeout varchar2(20);
250 begin
251 
252 	XDP_ADAPTER_CORE_PIPE.ReceivePipedMessage(p_ChannelName => ReceiveAck.p_ChannelName,
253 						p_Timeout => NULL,
254 					    	p_ErrorCode => ReturnCode,
255 					    	p_Message => PipedMessage);
256 
257 	if ReturnCode = 0  then
258 		if PipedMessage is not null then
259 
260 			p_Status := XDP_ADAPTER_CORE_XML.DecodeMessage
261 						(p_WhattoDecode => 'STATUS',
262 						 p_XMLMessage => PipedMessage);
263 
264 			p_ErrorMessage  := XDP_ADAPTER_CORE_XML.DecodeMessage
265 						(p_WhattoDecode => 'DATA',
266 						 p_XMLMessage => PipedMessage);
267 
268 			l_Timeout  := XDP_ADAPTER_CORE_XML.DecodeMessage
269 						(p_WhattoDecode => 'TIMEOUT',
270 						 p_XMLMessage => PipedMessage);
271 
272 			if l_Timeout is not null then
273 				p_Timeout := to_number(l_Timeout);
274 			else
275 				p_Timeout := pv_DefTimeout;
276 			end if;
277 
278 		else
279 			raise e_ReceiveOtherError;
280 			-- p_Status := 'WARNING';
281 			-- p_ErrorMessage := 'Nuthin to Unpack';
282 		end if;
283 	elsif ReturnCode = pv_DBMSPipeTimeoutError then
284 		raise e_ReceiveTimedOut;
285 	else
286 		raise e_ReceiveOtherError;
287 	end if;
288 
289 end ReceiveAck;
290 
291 
292 Procedure WaitForMessage(p_ChannelName  in varchar2,
293 			 p_Timeout in number,
294 			 p_ResponseMessage OUT NOCOPY varchar2)
295 is
296  ReturnCode number := 0;
297 begin
298 
299 	XDP_ADAPTER_CORE_PIPE.ReceivePipedMessage
300 			(p_ChannelName => WaitForMessage.p_ChannelName,
301 			 p_Timeout => WaitForMessage.p_Timeout,
302 			 p_ErrorCode => ReturnCode,
303 			 p_Message => p_ResponseMessage);
304 
305 	if ReturnCode <> 0 then
306 		if ReturnCode = pv_DBMSPipeTimeoutError then
307 			raise e_ReceiveTimedOut;
308 		else
309 			raise e_ReceiveOtherError;
310 		end if;
311 	end if;
312 end WaitForMessage;
313 
314 
315 Function VerifyAdapterOperation(p_ChannelName in varchar2,
316 				p_Operation in varchar2,
317 				p_CurrentStatus OUT NOCOPY varchar2)  return boolean
318 is
319  l_isValid boolean := false;
320 begin
321  p_CurrentStatus := XDP_ADAPTER_CORE_DB.GetCurrentAdapterStatus
322 				(VerifyAdapterOperation.p_ChannelName);
323 
324  if (IsOperationValid(VerifyAdapterOperation.p_Operation, p_CurrentStatus) ) then
325 	l_isValid := true;
326  end if;
327 
328  return (l_isValid);
329 
330 end VerifyAdapterOperation;
331 
332 
333 Function IsOperationValid(p_Operation in varchar2,
334 			  p_CurrentAdapterStatus in varchar2) return boolean
335 is
336  l_isValid boolean := false;
337 begin
338  if p_Operation = XDP_ADAPTER.pv_opStartup then
339 --	if p_CurrentAdapterStatus = XDP_ADAPTER.pv_statusStopped then
340 
341 	if p_CurrentAdapterStatus in (XDP_ADAPTER.pv_statusStopped,
342 					XDP_ADAPTER.pv_statusStoppedError,
343 					XDP_ADAPTER.pv_statusTerminated,
344 					XDP_ADAPTER.pv_statusDeactivated,
345 					XDP_ADAPTER.pv_statusDeactivatedSystem) then
346 		l_isValid := true;
347 	else
348 		l_isValid := false;
349 	end if;
350 
351  elsif p_Operation = XDP_ADAPTER.pv_opStop then
352 	if p_CurrentAdapterStatus not in (XDP_ADAPTER.pv_statusStopped,
353 					XDP_ADAPTER.pv_StatusStoppedError,
354 					XDP_ADAPTER.pv_StatusTerminated,
355 				    	XDP_ADAPTER.pv_statusNotAvailable,
356 					XDP_ADAPTER.pv_statusDeactivated,
357 					XDP_ADAPTER.pv_statusDeactivatedSystem) then
358 		l_isValid := true;
359 	else
360 		l_isValid := false;
361 	end if;
362 
363  elsif p_Operation = XDP_ADAPTER.pv_opConnect then
364 	if p_CurrentAdapterStatus in (XDP_ADAPTER.pv_statusDisconnected,
365 					XDP_ADAPTER.pv_statusSessionLost) then
366 		l_isValid := true;
367 	else
368 		l_isValid := false;
369         end if;
370 
371  elsif p_Operation = XDP_ADAPTER.pv_opDisconnect then
372 	if p_CurrentAdapterStatus in (XDP_ADAPTER.pv_statusRunning,
373 					XDP_ADAPTER.pv_statusSuspended) then
374 		l_isValid := true;
375 	else
376 		l_isValid := false;
377 	end if;
378 
379  elsif p_Operation = XDP_ADAPTER.pv_opSuspend then
380 	if p_CurrentAdapterStatus = XDP_ADAPTER.pv_statusRunning then
381 		l_isValid := true;
382 	else
383 		l_isValid := false;
384 	end if;
385 
386  elsif p_Operation = XDP_ADAPTER.pv_opResume then
387 	if p_CurrentAdapterStatus = XDP_ADAPTER.pv_statusSuspended then
388 		l_isValid := true;
389 	else
390 		l_isValid := false;
391 	end if;
392 
393  elsif p_Operation = XDP_ADAPTER.pv_opVerify then
394 	if p_CurrentAdapterStatus not in (XDP_ADAPTER.pv_statusStopped,
395 					XDP_ADAPTER.pv_StatusStoppedError,
396 					XDP_ADAPTER.pv_StatusTerminated,
397 				    	XDP_ADAPTER.pv_statusNotAvailable,
398 					XDP_ADAPTER.pv_statusDeactivated,
399 					XDP_ADAPTER.pv_statusDeactivatedSystem) then
400 		l_isValid := true;
401 	else
402 		l_isValid := false;
403 	end if;
404 
405  elsif p_Operation = XDP_ADAPTER.pv_opUpdate then
406 	if p_CurrentAdapterStatus in (XDP_ADAPTER.pv_statusStopped,
407 				XDP_ADAPTER.pv_StatusStoppedError,
408 				XDP_ADAPTER.pv_StatusTerminated,
409 				XDP_ADAPTER.pv_statusNotAvailable,
410 				XDP_ADAPTER.pv_statusDeactivated,
411 				XDP_ADAPTER.pv_statusDeactivatedSystem) then
412 		l_isValid := true;
413 	else
414 		l_isValid := false;
415 	end if;
416 
417  elsif p_Operation = XDP_ADAPTER.pv_opDelete then
418 	if p_CurrentAdapterStatus in (XDP_ADAPTER.pv_statusStopped,
419 				XDP_ADAPTER.pv_StatusStoppedError,
420 				XDP_ADAPTER.pv_StatusTerminated,
421 				XDP_ADAPTER.pv_statusNotAvailable,
422 				XDP_ADAPTER.pv_statusDeactivated,
423 				XDP_ADAPTER.pv_statusDeactivatedSystem) then
424 		l_isValid := true;
425 	else
426 		l_isValid := false;
427 	end if;
428 
429  elsif p_Operation = XDP_ADAPTER.pv_opGeneric then
430 	-- Generic operation
431 	if p_CurrentAdapterStatus = XDP_ADAPTER.pv_statusRunning then
432 		l_isValid := true;
433 	else
434 		l_isValid := false;
435 	end if;
436 
437  else
438 	l_isValid := false;
439 
440  end if;
441 
442  return (l_isValid);
443 
444 end IsOperationValid;
445 
446 
447 Function ShouldAdapterConnect(p_ChannelName in varchar2) return varchar2
448 is
449 
450 begin
451 
452  if ( XDP_ADAPTER_CORE_DB.IsChannelCOD(p_ChannelName) = 'N') then
453       return('Y');
454  elsif (XDP_ADAPTER_CORE_DB.PeekIntoFeWaitQueue(p_ChannelName) = 'Y') then
455       return('Y');
456  else
457       return( 'N');
458  end if;
459 
460 end ShouldAdapterConnect;
461 
462 
463 Procedure NotifyAdapterTerminateFailure (p_AdapterName in VARCHAR2,
464 			p_NotifRecipient IN VARCHAR2 DEFAULT NULL)
465 is
466  l_NotifID number;
467  l_NotifRecipient varchar2(80);
468 begin
469 
470  if ( p_notifRecipient is NULL ) then
471  	l_NotifRecipient := xdp_utilities.GetSystemErrNotifRecipient;
472  else
473 	l_NotifRecipient := p_NotifRecipient;
474  end if;
475 
476  l_NotifID := wf_notification.Send(role => l_NotifRecipient,
477 			msg_type => xdp_utilities.pv_ErrorNotifItemType,
478                         msg_name => XDP_ADAPTER_CORE.pv_AdapterTermFailure,
479                         due_date =>sysdate);
480 
481  wf_notification.SetAttrText( nid    => l_NotifID,
482                               aname  => 'ADAPTER_NAME',
483                               avalue => p_AdapterName );
484 
485 end NotifyAdapterTerminateFailure;
486 
487 Procedure NotifyAdapterSysDeactivation (p_AdapterName in VARCHAR2,
488 			p_NotifRecipient IN VARCHAR2 DEFAULT NULL)
489 is
490  l_NotifID number;
491  l_NotifRecipient varchar2(80);
492 begin
493 
494  if ( p_notifRecipient is NULL ) then
495  	l_NotifRecipient := xdp_utilities.GetSystemErrNotifRecipient;
496  else
497 	l_NotifRecipient := p_NotifRecipient;
498  end if;
499 
500  l_NotifID := wf_notification.Send(role => l_NotifRecipient,
501 			msg_type => xdp_utilities.pv_ErrorNotifItemType,
502                         msg_name => XDP_ADAPTER_CORE.pv_AdapterSysDeactivated,
503                         due_date =>sysdate);
504 
505  wf_notification.SetAttrText( nid    => l_NotifID,
506                               aname  => 'ADAPTER_NAME',
507                               avalue => p_AdapterName );
508 
509 end NotifyAdapterSysDeactivation;
510 
511 end XDP_ADAPTER_CORE;