(file) Return to OperationResponseHandler.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2

  1 schuur 1.1 //%2003////////////////////////////////////////////////////////////////////////
  2            //
  3            // Copyright (c) 2000, 2001, 2002  BMC Software, Hewlett-Packard Development
  4            // Company, L. P., IBM Corp., The Open Group, Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.;
  6            // IBM Corp.; EMC Corporation, The Open Group.
  7            //
  8            // Permission is hereby granted, free of charge, to any person obtaining a copy
  9            // of this software and associated documentation files (the "Software"), to
 10            // deal in the Software without restriction, including without limitation the
 11            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 12            // sell copies of the Software, and to permit persons to whom the Software is
 13            // furnished to do so, subject to the following conditions:
 14            // 
 15            // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 16            // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 17            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 18            // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 19            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 20            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 21            // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 22 schuur 1.1 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 23            //
 24            //==============================================================================
 25            //
 26            // Author: Chip Vincent (cvincent@us.ibm.com)
 27            //
 28            // Modified By: Carol Ann Krug Graves, Hewlett-Packard Company
 29            //                  (carolann_graves@hp.com)
 30            //              Dave Rosckes (rosckes@us.ibm.com)
 31            //		Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
 32            //		Adrian Schuur (schuur@de.ibm.com)
 33 se.gupta 1.3 //		Seema Gupta (gseema@in.ibm.com) for PEP135
 34 schuur   1.1 //
 35              //%/////////////////////////////////////////////////////////////////////////////
 36              
 37              #ifndef Pegasus_OperationResponseHandler_h
 38              #define Pegasus_OperationResponseHandler_h
 39              
 40              #include <Pegasus/Common/Config.h>
 41              #include <Pegasus/Server/Linkage.h>
 42              #include <Pegasus/Common/CIMMessage.h>
 43              #include <Pegasus/Common/MessageQueueService.h>
 44              #include <Pegasus/Common/Constants.h>
 45              #include <Pegasus/Common/ContentLanguages.h>  // l10n
 46              
 47              #include <Pegasus/Common/CIMClass.h>
 48              #include <Pegasus/Common/CIMInstance.h>
 49              #include <Pegasus/Common/CIMIndication.h>
 50              #include <Pegasus/Common/CIMValue.h>
 51              
 52              #include <Pegasus/Common/ResponseHandler.h>
 53              #include <Pegasus/Common/Logger.h>
 54              
 55 schuur   1.1 #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
 56              
 57              #include <Pegasus/ProviderManager2/Linkage.h>
 58              
 59              PEGASUS_NAMESPACE_BEGIN
 60              
 61              class PEGASUS_PPM_LINKAGE OperationResponseHandler
 62              {
 63              public:
 64                  OperationResponseHandler(CIMRequestMessage * request, CIMResponseMessage * response)
 65                      : _request(request), _response(response)
 66                  {
 67                  }
 68              
 69                  virtual ~OperationResponseHandler(void)
 70                  {
 71                  }
 72              
 73                  CIMRequestMessage * getRequest(void) const
 74                  {
 75                      return(_request);
 76 schuur   1.1     }
 77              
 78                  CIMResponseMessage * getResponse(void) const
 79                  {
 80                      return(_response);
 81                  }
 82              
 83                  virtual void setStatus(const Uint32 code, const String & message = String::EMPTY)
 84                  {
 85                      _response->cimException = PEGASUS_CIM_EXCEPTION(CIMStatusCode(code), message);
 86                  }
 87              
 88                  virtual void setStatus(const Uint32 code,
 89                  						const ContentLanguages & langs,
 90                  						const String & message = String::EMPTY)
 91                  {
 92                      _response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 93                      						langs,
 94                      						CIMStatusCode(code),
 95                      						 message);
 96                  }
 97 schuur   1.1 
 98              protected:
 99                  CIMRequestMessage * _request;
100                  CIMResponseMessage * _response;
101              
102              };
103              
104              
105              /* ------------------------------------------------------------------------- */
106              /* operation specific response handlers                                      */
107              /* ------------------------------------------------------------------------- */
108              
109              class GetInstanceResponseHandler:  public OperationResponseHandler, public SimpleInstanceResponseHandler
110              {
111              public:
112                  GetInstanceResponseHandler(
113                      CIMGetInstanceRequestMessage * request,
114                      CIMGetInstanceResponseMessage * response)
115                  : OperationResponseHandler(request, response)
116                  {
117                  }
118 schuur   1.1 
119                  virtual void complete()
120                  {
121                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
122                  		    "OperationResponseHandler: complete()");
123              
124                      if(getObjects().size() == 0)
125                      {
126                          // error? provider claims success,
127                          // but did not deliver an instance.
128                          setStatus(CIM_ERR_NOT_FOUND);
129              
130                          return;
131                      }
132              
133                      static_cast<CIMGetInstanceResponseMessage *>(
134                          getResponse())->cimInstance = getObjects()[0];
135              
136              		// l10n
137              		getResponse()->contentLanguages = getLanguages();
138 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
139 schuur   1.1     }
140              };
141              
142              class EnumerateInstancesResponseHandler : public OperationResponseHandler, public SimpleInstanceResponseHandler
143              {
144              public:
145                  EnumerateInstancesResponseHandler(
146                      CIMEnumerateInstancesRequestMessage * request,
147                      CIMEnumerateInstancesResponseMessage * response)
148                  : OperationResponseHandler(request, response)
149                  {
150                  }
151              
152                  virtual void complete()
153                  {
154                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
155                  		    "OperationResponseHandler: complete()");
156              
157                      static_cast<CIMEnumerateInstancesResponseMessage *>(
158                          getResponse())->cimNamedInstances = getObjects();
159              
160 schuur   1.1 		// l10n
161              		getResponse()->contentLanguages = getLanguages();
162 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
163 schuur   1.1     }
164              
165              };
166              
167              class EnumerateInstanceNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
168              {
169              public:
170                  EnumerateInstanceNamesResponseHandler(
171                      CIMEnumerateInstanceNamesRequestMessage * request,
172                      CIMEnumerateInstanceNamesResponseMessage * response)
173                  : OperationResponseHandler(request, response)
174                  {
175                  }
176              
177                  virtual void complete()
178                  {
179                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
180                  		    "OperationResponseHandler: complete()");
181              
182                      static_cast<CIMEnumerateInstanceNamesResponseMessage *>(
183                          getResponse())->instanceNames = getObjects();
184 schuur   1.1 
185              	// l10n
186              	getResponse()->contentLanguages = getLanguages();
187 se.gupta 1.3 	getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
188 schuur   1.1     }
189              
190              };
191              
192              class CreateInstanceResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
193              {
194              public:
195                  CreateInstanceResponseHandler(
196                      CIMCreateInstanceRequestMessage * request,
197                      CIMCreateInstanceResponseMessage * response)
198                  : OperationResponseHandler(request, response)
199                  {
200                  }
201              
202                  virtual void complete()
203                  {
204                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
205                  		    "OperationResponseHandler: complete()");
206              
207                      if(getObjects().size() == 0)
208                      {
209 schuur   1.1             // ATTN: is it an error to not return instance name?
210                          return;
211                      }
212              
213                      static_cast<CIMCreateInstanceResponseMessage *>(
214                          getResponse())->instanceName = getObjects()[0];
215              
216              		// l10n
217              		getResponse()->contentLanguages = getLanguages();
218 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
219 schuur   1.1     }
220              
221              };
222              
223              class ModifyInstanceResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
224              {
225              public:
226                  ModifyInstanceResponseHandler(
227                      CIMModifyInstanceRequestMessage * request,
228                      CIMModifyInstanceResponseMessage * response)
229                  : OperationResponseHandler(request, response)
230                  {
231                  }
232              
233              };
234              
235              class DeleteInstanceResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
236              {
237              public:
238                  DeleteInstanceResponseHandler(
239                      CIMDeleteInstanceRequestMessage * request,
240 schuur   1.1         CIMDeleteInstanceResponseMessage * response)
241                  : OperationResponseHandler(request, response)
242                  {
243                  }
244              
245              };
246              
247              class GetPropertyResponseHandler : public OperationResponseHandler, public SimpleValueResponseHandler
248              {
249              public:
250                  GetPropertyResponseHandler(
251                      CIMGetPropertyRequestMessage * request,
252                      CIMGetPropertyResponseMessage * response)
253                  : OperationResponseHandler(request, response)
254                  {
255                  }
256              
257                  virtual void complete()
258                  {
259                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
260                  		    "OperationResponseHandler: complete()");
261 schuur   1.1 
262                      if(getObjects().size() == 0)
263                      {
264                          // error? provider claims success,
265                          // but did not deliver an instance.
266                          setStatus(CIM_ERR_NOT_FOUND);
267              
268                          return;
269                      }
270              
271                      static_cast<CIMGetPropertyResponseMessage *>(
272                          getResponse())->value = getObjects()[0];
273              
274              		// l10n
275              		getResponse()->contentLanguages = getLanguages();
276 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
277 schuur   1.1     }
278              };
279              
280              class SetPropertyResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
281              {
282              public:
283                  SetPropertyResponseHandler(
284                      CIMSetPropertyRequestMessage * request,
285                      CIMSetPropertyResponseMessage * response)
286                  : OperationResponseHandler(request, response)
287                  {
288                  }
289              
290              };
291              
292              class ExecQueryResponseHandler : public OperationResponseHandler, public SimpleInstance2ObjectResponseHandler
293              {
294              public:
295                  ExecQueryResponseHandler(
296                      CIMExecQueryRequestMessage * request,
297                      CIMExecQueryResponseMessage * response)
298 schuur   1.1     : OperationResponseHandler(request, response)
299                  {
300                  }
301              
302                  virtual void complete()
303                  {
304                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
305                  		    "OperationResponseHandler: complete()");
306              
307                      static_cast<CIMExecQueryResponseMessage *>(
308                          getResponse())->cimObjects = getObjects();
309                
310              	// l10n
311              	getResponse()->contentLanguages = getLanguages();
312 se.gupta 1.3 	getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
313 schuur   1.1     }
314              
315              };
316              
317              
318              class AssociatorsResponseHandler : public OperationResponseHandler, public SimpleObjectResponseHandler
319              {
320              public:
321                  AssociatorsResponseHandler(
322                      CIMAssociatorsRequestMessage * request,
323                      CIMAssociatorsResponseMessage * response)
324                  : OperationResponseHandler(request, response)
325                  {
326                  }
327              
328                  virtual void complete()
329                  {
330                      Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
331                              "OperationResponseHandler: complete()");
332              
333                      static_cast<CIMAssociatorsResponseMessage *>(
334 schuur   1.1             getResponse())->cimObjects = getObjects();
335              
336              		// l10n
337              		getResponse()->contentLanguages = getLanguages();
338 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
339 schuur   1.1     }
340              
341              };
342              
343              class AssociatorNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
344              {
345              public:
346                  AssociatorNamesResponseHandler(
347                      CIMAssociatorNamesRequestMessage * request,
348                      CIMAssociatorNamesResponseMessage * response)
349                  : OperationResponseHandler(request, response)
350                  {
351                  }
352              
353                  virtual void complete()
354                  {
355                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
356                  		    "OperationResponseHandler: complete()");
357              
358                      static_cast<CIMAssociatorNamesResponseMessage *>(
359                          getResponse())->objectNames.appendArray(getObjects());
360 schuur   1.1 
361              		// l10n
362              		getResponse()->contentLanguages = getLanguages();
363 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
364 schuur   1.1     }
365              
366              };
367              
368              class ReferencesResponseHandler : public OperationResponseHandler, public SimpleObjectResponseHandler
369              {
370              public:
371                  ReferencesResponseHandler(
372                      CIMReferencesRequestMessage * request,
373                      CIMReferencesResponseMessage * response)
374                  : OperationResponseHandler(request, response)
375                  {
376                  }
377              
378                  virtual void complete()
379                  {
380                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
381                  		    "OperationResponseHandler: complete()");
382              
383                      static_cast<CIMReferencesResponseMessage *>(
384                          getResponse())->cimObjects = getObjects();
385 schuur   1.1 
386              		// l10n
387              		getResponse()->contentLanguages = getLanguages();
388 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
389 schuur   1.1     }
390              
391              };
392              
393              class ReferenceNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
394              {
395              public:
396                  ReferenceNamesResponseHandler(
397                      CIMReferenceNamesRequestMessage * request,
398                      CIMReferenceNamesResponseMessage * response)
399                  : OperationResponseHandler(request, response)
400                  {
401                  }
402              
403                  virtual void complete()
404                  {
405                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
406                  		    "OperationResponseHandler: complete()");
407              
408                      static_cast<CIMReferenceNamesResponseMessage *>(
409                          getResponse())->objectNames.appendArray(getObjects());
410 schuur   1.1 
411              		// l10n
412              		getResponse()->contentLanguages = getLanguages();
413 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
414 schuur   1.1     }
415              
416              };
417              
418              class InvokeMethodResponseHandler : public OperationResponseHandler, public SimpleMethodResultResponseHandler
419              {
420              public:
421                  InvokeMethodResponseHandler(
422                      CIMInvokeMethodRequestMessage * request,
423                      CIMInvokeMethodResponseMessage * response)
424                  : OperationResponseHandler(request, response)
425                  {
426                  }
427              
428                  virtual void complete()
429                  {
430                      Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
431                          "OperationResponseHandler: complete()");
432              
433                      // ATTN-RK-20020903: Is it legal for the return value to be null?
434                      //if(getReturnValue().isNull())
435 schuur   1.1         //{
436                          // ATTN: error? provider claims success, but did not deliver a CIMValue.
437                      //    return;
438                      //}
439              
440                      static_cast<CIMInvokeMethodResponseMessage *>(
441                          getResponse())->outParameters = getParamValues();
442              
443                      static_cast<CIMInvokeMethodResponseMessage *>(
444                          getResponse())->retValue = getReturnValue();
445              
446              		// l10n
447              		getResponse()->contentLanguages = getLanguages();
448 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
449 schuur   1.1     }
450              
451              };
452              
453              
454 kumpf    1.2 typedef void (*PEGASUS_INDICATION_CALLBACK)(
455                  CIMProcessIndicationRequestMessage*);
456              
457 schuur   1.1 class EnableIndicationsResponseHandler : public OperationResponseHandler, public SimpleIndicationResponseHandler
458              {
459              public:
460                  EnableIndicationsResponseHandler(
461                      CIMEnableIndicationsRequestMessage * request,
462                      CIMEnableIndicationsResponseMessage * response,
463                      CIMInstance & provider,
464 kumpf    1.2         PEGASUS_INDICATION_CALLBACK indicationCallback)
465 schuur   1.1     : OperationResponseHandler(request, response),
466 kumpf    1.2         _request_copy(*request),
467                      _response_copy(*response),
468                      _indicationCallback(indicationCallback)
469 schuur   1.1     {
470                      _provider = provider;
471                  }
472              
473                  virtual void deliver(const CIMIndication & cimIndication)
474                  {
475                      OperationContext context;
476              
477                      Array<CIMObjectPath> subscriptionInstanceNames;
478              
479                      context.insert(SubscriptionInstanceNamesContainer
480                          (subscriptionInstanceNames));
481              
482                      deliver(context, cimIndication);
483                  }
484              
485                  virtual void deliver(const OperationContext & context, const CIMIndication & cimIndication)
486                  {
487                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
488                  		    "OperationResponseHandler: deliver()");
489                      // ATTN: temporarily convert indication to instance
490 schuur   1.1         CIMInstance cimInstance(cimIndication);
491              
492              	//
493                      //  Get list of subscription instance names from context
494                      //
495                      Array<CIMObjectPath> subscriptionInstanceNames;
496                      try
497                      {
498                          SubscriptionInstanceNamesContainer container = context.get
499                               (SubscriptionInstanceNamesContainer::NAME);
500              
501                          subscriptionInstanceNames =
502                              container.getInstanceNames();
503                      }
504 kumpf    1.2         catch (Exception&)
505 schuur   1.1         {
506                          subscriptionInstanceNames.clear();
507                      }
508              
509              // l10n
510 kumpf    1.2         ContentLanguages contentLangs;
511                      try
512                      {
513                          // Get the Content-Language for this indication.  The provider
514                          // does not have to add specify a language for the indication.
515                          ContentLanguageListContainer langContainer = context.get
516                              (ContentLanguageListContainer::NAME);
517              
518                          contentLangs = langContainer.getLanguages();
519                      }
520                      catch (Exception&)
521                      {
522                          // The provider did not explicitly set a Content-Language for
523                          // the indication.  Fall back to the lang set in this object.
524                          contentLangs = getLanguages();
525                      }
526              // l10n -end
527 schuur   1.1 
528                      // create message
529              // l10n
530                      CIMProcessIndicationRequestMessage * request =
531                          new CIMProcessIndicationRequestMessage(
532              	     _request_copy.messageId,
533                          cimInstance.getPath().getNameSpace(),
534                          cimInstance,
535              	    subscriptionInstanceNames,
536                          _provider,
537 kumpf    1.2             QueueIdStack(),  // Must be filled in by the callback function
538 schuur   1.1             contentLangs);
539                      request->operationContext = context;
540              
541 kumpf    1.2         _indicationCallback(request);
542 schuur   1.1     }
543              
544                  virtual void deliver(const Array<CIMIndication> & cimIndications)
545                  {
546                      OperationContext context;
547              
548                      deliver(context, cimIndications);
549                  }
550              
551                  virtual void deliver(const OperationContext & context, const Array<CIMIndication> & cimIndications)
552                  {
553                      for(Uint32 i = 0, n = cimIndications.size(); i < n; i++)
554                      {
555                          deliver(context, cimIndications[i]);
556                      }
557                  }
558              
559              private:
560                  CIMEnableIndicationsRequestMessage _request_copy;
561                  CIMEnableIndicationsResponseMessage _response_copy;
562 kumpf    1.2     PEGASUS_INDICATION_CALLBACK _indicationCallback;
563 schuur   1.1 };
564              
565              PEGASUS_NAMESPACE_END
566              
567              #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2