(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 kumpf    1.6 #include <Pegasus/Common/XmlWriter.h>
 55 schuur   1.1 
 56              #include <Pegasus/ProviderManager2/SimpleResponseHandler.h>
 57              
 58              #include <Pegasus/ProviderManager2/Linkage.h>
 59              
 60              PEGASUS_NAMESPACE_BEGIN
 61              
 62              class PEGASUS_PPM_LINKAGE OperationResponseHandler
 63              {
 64              public:
 65                  OperationResponseHandler(CIMRequestMessage * request, CIMResponseMessage * response)
 66                      : _request(request), _response(response)
 67                  {
 68                  }
 69              
 70                  virtual ~OperationResponseHandler(void)
 71                  {
 72                  }
 73              
 74                  CIMRequestMessage * getRequest(void) const
 75                  {
 76 schuur   1.1         return(_request);
 77                  }
 78              
 79                  CIMResponseMessage * getResponse(void) const
 80                  {
 81                      return(_response);
 82                  }
 83              
 84                  virtual void setStatus(const Uint32 code, const String & message = String::EMPTY)
 85                  {
 86                      _response->cimException = PEGASUS_CIM_EXCEPTION(CIMStatusCode(code), message);
 87                  }
 88              
 89                  virtual void setStatus(const Uint32 code,
 90                  						const ContentLanguages & langs,
 91                  						const String & message = String::EMPTY)
 92                  {
 93                      _response->cimException = PEGASUS_CIM_EXCEPTION_LANG(
 94                      						langs,
 95                      						CIMStatusCode(code),
 96                      						 message);
 97 schuur   1.1     }
 98              
 99              protected:
100                  CIMRequestMessage * _request;
101                  CIMResponseMessage * _response;
102              
103              };
104              
105              
106              /* ------------------------------------------------------------------------- */
107              /* operation specific response handlers                                      */
108              /* ------------------------------------------------------------------------- */
109              
110              class GetInstanceResponseHandler:  public OperationResponseHandler, public SimpleInstanceResponseHandler
111              {
112              public:
113                  GetInstanceResponseHandler(
114                      CIMGetInstanceRequestMessage * request,
115                      CIMGetInstanceResponseMessage * response)
116                  : OperationResponseHandler(request, response)
117                  {
118 schuur   1.1     }
119              
120                  virtual void complete()
121                  {
122                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
123                  		    "OperationResponseHandler: complete()");
124              
125                      if(getObjects().size() == 0)
126                      {
127                          // error? provider claims success,
128                          // but did not deliver an instance.
129                          setStatus(CIM_ERR_NOT_FOUND);
130              
131                          return;
132                      }
133              
134                      static_cast<CIMGetInstanceResponseMessage *>(
135                          getResponse())->cimInstance = getObjects()[0];
136              
137              		// l10n
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 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
162 schuur   1.1     }
163              
164              };
165              
166              class EnumerateInstanceNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
167              {
168              public:
169                  EnumerateInstanceNamesResponseHandler(
170                      CIMEnumerateInstanceNamesRequestMessage * request,
171                      CIMEnumerateInstanceNamesResponseMessage * response)
172                  : OperationResponseHandler(request, response)
173                  {
174                  }
175              
176                  virtual void complete()
177                  {
178                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
179                  		    "OperationResponseHandler: complete()");
180              
181                      static_cast<CIMEnumerateInstanceNamesResponseMessage *>(
182                          getResponse())->instanceNames = getObjects();
183 schuur   1.1 
184              	// l10n
185 se.gupta 1.3 	getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
186 schuur   1.1     }
187              
188              };
189              
190              class CreateInstanceResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
191              {
192              public:
193                  CreateInstanceResponseHandler(
194                      CIMCreateInstanceRequestMessage * request,
195                      CIMCreateInstanceResponseMessage * response)
196                  : OperationResponseHandler(request, response)
197                  {
198                  }
199              
200                  virtual void complete()
201                  {
202                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
203                  		    "OperationResponseHandler: complete()");
204              
205                      if(getObjects().size() == 0)
206                      {
207 schuur   1.1             // ATTN: is it an error to not return instance name?
208                          return;
209                      }
210              
211                      static_cast<CIMCreateInstanceResponseMessage *>(
212                          getResponse())->instanceName = getObjects()[0];
213              
214              		// l10n
215 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
216 schuur   1.1     }
217              
218              };
219              
220              class ModifyInstanceResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
221              {
222              public:
223                  ModifyInstanceResponseHandler(
224                      CIMModifyInstanceRequestMessage * request,
225                      CIMModifyInstanceResponseMessage * response)
226                  : OperationResponseHandler(request, response)
227                  {
228                  }
229              
230              };
231              
232              class DeleteInstanceResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
233              {
234              public:
235                  DeleteInstanceResponseHandler(
236                      CIMDeleteInstanceRequestMessage * request,
237 schuur   1.1         CIMDeleteInstanceResponseMessage * response)
238                  : OperationResponseHandler(request, response)
239                  {
240                  }
241              
242              };
243              
244              class GetPropertyResponseHandler : public OperationResponseHandler, public SimpleValueResponseHandler
245              {
246              public:
247                  GetPropertyResponseHandler(
248                      CIMGetPropertyRequestMessage * request,
249                      CIMGetPropertyResponseMessage * response)
250                  : OperationResponseHandler(request, response)
251                  {
252                  }
253              
254                  virtual void complete()
255                  {
256                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
257                  		    "OperationResponseHandler: complete()");
258 schuur   1.1 
259                      if(getObjects().size() == 0)
260                      {
261                          // error? provider claims success,
262                          // but did not deliver an instance.
263                          setStatus(CIM_ERR_NOT_FOUND);
264              
265                          return;
266                      }
267              
268                      static_cast<CIMGetPropertyResponseMessage *>(
269                          getResponse())->value = getObjects()[0];
270              
271              		// l10n
272 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
273 schuur   1.1     }
274              };
275              
276              class SetPropertyResponseHandler : public OperationResponseHandler, public SimpleResponseHandler
277              {
278              public:
279                  SetPropertyResponseHandler(
280                      CIMSetPropertyRequestMessage * request,
281                      CIMSetPropertyResponseMessage * response)
282                  : OperationResponseHandler(request, response)
283                  {
284                  }
285              
286              };
287              
288              class ExecQueryResponseHandler : public OperationResponseHandler, public SimpleInstance2ObjectResponseHandler
289              {
290              public:
291                  ExecQueryResponseHandler(
292                      CIMExecQueryRequestMessage * request,
293                      CIMExecQueryResponseMessage * response)
294 schuur   1.1     : OperationResponseHandler(request, response)
295                  {
296                  }
297              
298                  virtual void complete()
299                  {
300                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
301                  		    "OperationResponseHandler: complete()");
302              
303                      static_cast<CIMExecQueryResponseMessage *>(
304                          getResponse())->cimObjects = getObjects();
305                
306              	// l10n
307 se.gupta 1.3 	getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
308 schuur   1.1     }
309              
310              };
311              
312              
313              class AssociatorsResponseHandler : public OperationResponseHandler, public SimpleObjectResponseHandler
314              {
315              public:
316                  AssociatorsResponseHandler(
317                      CIMAssociatorsRequestMessage * request,
318                      CIMAssociatorsResponseMessage * response)
319                  : OperationResponseHandler(request, response)
320                  {
321                  }
322              
323                  virtual void complete()
324                  {
325                      Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
326                              "OperationResponseHandler: complete()");
327              
328                      static_cast<CIMAssociatorsResponseMessage *>(
329 schuur   1.1             getResponse())->cimObjects = getObjects();
330              
331              		// l10n
332 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
333 schuur   1.1     }
334              
335              };
336              
337              class AssociatorNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
338              {
339              public:
340                  AssociatorNamesResponseHandler(
341                      CIMAssociatorNamesRequestMessage * request,
342                      CIMAssociatorNamesResponseMessage * response)
343                  : OperationResponseHandler(request, response)
344                  {
345                  }
346              
347                  virtual void complete()
348                  {
349                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
350                  		    "OperationResponseHandler: complete()");
351              
352                      static_cast<CIMAssociatorNamesResponseMessage *>(
353                          getResponse())->objectNames.appendArray(getObjects());
354 schuur   1.1 
355              		// l10n
356 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
357 schuur   1.1     }
358              
359              };
360              
361              class ReferencesResponseHandler : public OperationResponseHandler, public SimpleObjectResponseHandler
362              {
363              public:
364                  ReferencesResponseHandler(
365                      CIMReferencesRequestMessage * request,
366                      CIMReferencesResponseMessage * response)
367                  : OperationResponseHandler(request, response)
368                  {
369                  }
370              
371                  virtual void complete()
372                  {
373                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
374                  		    "OperationResponseHandler: complete()");
375              
376                      static_cast<CIMReferencesResponseMessage *>(
377                          getResponse())->cimObjects = getObjects();
378 schuur   1.1 
379              		// l10n
380 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
381 schuur   1.1     }
382              
383              };
384              
385              class ReferenceNamesResponseHandler : public OperationResponseHandler, public SimpleObjectPathResponseHandler
386              {
387              public:
388                  ReferenceNamesResponseHandler(
389                      CIMReferenceNamesRequestMessage * request,
390                      CIMReferenceNamesResponseMessage * response)
391                  : OperationResponseHandler(request, response)
392                  {
393                  }
394              
395                  virtual void complete()
396                  {
397                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
398                  		    "OperationResponseHandler: complete()");
399              
400                      static_cast<CIMReferenceNamesResponseMessage *>(
401                          getResponse())->objectNames.appendArray(getObjects());
402 schuur   1.1 
403              		// l10n
404 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
405 schuur   1.1     }
406              
407              };
408              
409              class InvokeMethodResponseHandler : public OperationResponseHandler, public SimpleMethodResultResponseHandler
410              {
411              public:
412                  InvokeMethodResponseHandler(
413                      CIMInvokeMethodRequestMessage * request,
414                      CIMInvokeMethodResponseMessage * response)
415                  : OperationResponseHandler(request, response)
416                  {
417                  }
418              
419                  virtual void complete()
420                  {
421                      Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
422                          "OperationResponseHandler: complete()");
423              
424                      // ATTN-RK-20020903: Is it legal for the return value to be null?
425                      //if(getReturnValue().isNull())
426 schuur   1.1         //{
427                          // ATTN: error? provider claims success, but did not deliver a CIMValue.
428                      //    return;
429                      //}
430              
431                      static_cast<CIMInvokeMethodResponseMessage *>(
432                          getResponse())->outParameters = getParamValues();
433              
434                      static_cast<CIMInvokeMethodResponseMessage *>(
435                          getResponse())->retValue = getReturnValue();
436              
437              		// l10n
438 se.gupta 1.3 		getResponse()->operationContext.set(ContentLanguageListContainer(getLanguages()));
439 schuur   1.1     }
440              
441              };
442              
443              
444 kumpf    1.2 typedef void (*PEGASUS_INDICATION_CALLBACK)(
445                  CIMProcessIndicationRequestMessage*);
446              
447 schuur   1.1 class EnableIndicationsResponseHandler : public OperationResponseHandler, public SimpleIndicationResponseHandler
448              {
449              public:
450                  EnableIndicationsResponseHandler(
451                      CIMEnableIndicationsRequestMessage * request,
452                      CIMEnableIndicationsResponseMessage * response,
453                      CIMInstance & provider,
454 kumpf    1.2         PEGASUS_INDICATION_CALLBACK indicationCallback)
455 schuur   1.1     : OperationResponseHandler(request, response),
456 kumpf    1.2         _request_copy(*request),
457                      _response_copy(*response),
458                      _indicationCallback(indicationCallback)
459 schuur   1.1     {
460                      _provider = provider;
461                  }
462              
463                  virtual void deliver(const CIMIndication & cimIndication)
464                  {
465                      OperationContext context;
466              
467                      Array<CIMObjectPath> subscriptionInstanceNames;
468              
469                      context.insert(SubscriptionInstanceNamesContainer
470                          (subscriptionInstanceNames));
471              
472                      deliver(context, cimIndication);
473                  }
474              
475                  virtual void deliver(const OperationContext & context, const CIMIndication & cimIndication)
476                  {
477                  	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
478                  		    "OperationResponseHandler: deliver()");
479                      // ATTN: temporarily convert indication to instance
480 schuur   1.1         CIMInstance cimInstance(cimIndication);
481              
482              	//
483                      //  Get list of subscription instance names from context
484                      //
485                      Array<CIMObjectPath> subscriptionInstanceNames;
486                      try
487                      {
488                          SubscriptionInstanceNamesContainer container = context.get
489                               (SubscriptionInstanceNamesContainer::NAME);
490              
491                          subscriptionInstanceNames =
492                              container.getInstanceNames();
493                      }
494 kumpf    1.2         catch (Exception&)
495 schuur   1.1         {
496                          subscriptionInstanceNames.clear();
497                      }
498              
499              // l10n
500 kumpf    1.2         ContentLanguages contentLangs;
501                      try
502                      {
503                          // Get the Content-Language for this indication.  The provider
504                          // does not have to add specify a language for the indication.
505                          ContentLanguageListContainer langContainer = context.get
506                              (ContentLanguageListContainer::NAME);
507              
508                          contentLangs = langContainer.getLanguages();
509                      }
510                      catch (Exception&)
511                      {
512                          // The provider did not explicitly set a Content-Language for
513                          // the indication.  Fall back to the lang set in this object.
514                          contentLangs = getLanguages();
515                      }
516              // l10n -end
517 schuur   1.1 
518                      // create message
519              // l10n
520                      CIMProcessIndicationRequestMessage * request =
521                          new CIMProcessIndicationRequestMessage(
522 kumpf    1.6             XmlWriter::getNextMessageId(),
523 schuur   1.1             cimInstance.getPath().getNameSpace(),
524                          cimInstance,
525              	    subscriptionInstanceNames,
526                          _provider,
527 se.gupta 1.5             QueueIdStack()); // Must be filled in by the callback function
528 schuur   1.1         request->operationContext = context;
529 se.gupta 1.4 		try
530              		{
531              			request->operationContext.set(ContentLanguageListContainer(contentLangs));
532              		}catch(Exception &e)
533              		{
534              			request->operationContext.insert(ContentLanguageListContainer(contentLangs));
535              		}
536 schuur   1.1 
537 kumpf    1.2         _indicationCallback(request);
538 schuur   1.1     }
539              
540                  virtual void deliver(const Array<CIMIndication> & cimIndications)
541                  {
542                      OperationContext context;
543              
544                      deliver(context, cimIndications);
545                  }
546              
547                  virtual void deliver(const OperationContext & context, const Array<CIMIndication> & cimIndications)
548                  {
549                      for(Uint32 i = 0, n = cimIndications.size(); i < n; i++)
550                      {
551                          deliver(context, cimIndications[i]);
552                      }
553                  }
554              
555              private:
556                  CIMEnableIndicationsRequestMessage _request_copy;
557                  CIMEnableIndicationsResponseMessage _response_copy;
558 kumpf    1.2     PEGASUS_INDICATION_CALLBACK _indicationCallback;
559 schuur   1.1 };
560              
561              PEGASUS_NAMESPACE_END
562              
563              #endif

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2