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

  1 martin 1.4 //%LICENSE////////////////////////////////////////////////////////////////
  2 martin 1.5 //
  3 martin 1.4 // Licensed to The Open Group (TOG) under one or more contributor license
  4            // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
  5            // this work for additional information regarding copyright ownership.
  6            // Each contributor licenses this file to you under the OpenPegasus Open
  7            // Source License; you may not use this file except in compliance with the
  8            // License.
  9 martin 1.5 //
 10 martin 1.4 // Permission is hereby granted, free of charge, to any person obtaining a
 11            // copy of this software and associated documentation files (the "Software"),
 12            // to deal in the Software without restriction, including without limitation
 13            // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 14            // and/or sell copies of the Software, and to permit persons to whom the
 15            // Software is furnished to do so, subject to the following conditions:
 16 martin 1.5 //
 17 martin 1.4 // The above copyright notice and this permission notice shall be included
 18            // in all copies or substantial portions of the Software.
 19 martin 1.5 //
 20 martin 1.4 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 21 martin 1.5 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 22 martin 1.4 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 23            // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 24            // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 25            // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 26            // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 27 martin 1.5 //
 28 martin 1.4 //////////////////////////////////////////////////////////////////////////
 29 kumpf  1.2 //
 30            //%/////////////////////////////////////////////////////////////////////////////
 31            
 32            #ifndef Pegasus_WsmResponse_h
 33            #define Pegasus_WsmResponse_h
 34            
 35            #include <Pegasus/Common/Config.h>
 36            #include <Pegasus/Common/ArrayInternal.h>
 37            #include <Pegasus/Common/ContentLanguageList.h>
 38            #include <Pegasus/WsmServer/WsmRequest.h>
 39            #include <Pegasus/WsmServer/WsmFault.h>
 40            #include <Pegasus/WsmServer/WsmInstance.h>
 41            #include <Pegasus/WsmServer/WsmUtils.h>
 42            
 43            PEGASUS_NAMESPACE_BEGIN
 44            
 45            class WsmResponse
 46            {
 47            protected:
 48            
 49                WsmResponse(
 50 kumpf  1.2         WsmOperationType type,
 51                    const WsmRequest* request,
 52                    const ContentLanguageList& contentLanguages)
 53                    : _type(type),
 54                      _messageId(WsmUtils::getMessageId()),
 55                      _relatesTo(request->messageId),
 56                      _queueId(request->queueId),
 57                      _httpMethod(request->httpMethod),
 58                      _httpCloseConnect(request->httpCloseConnect),
 59                      _maxEnvelopeSize(request->maxEnvelopeSize),
 60                      _contentLanguages(contentLanguages)
 61                {
 62                }
 63            
 64                WsmResponse(
 65                    WsmOperationType type,
 66                    const String& relatesTo,
 67                    Uint32 queueId,
 68                    HttpMethod httpMethod,
 69                    Boolean httpCloseConnect,
 70                    const ContentLanguageList& contentLanguages)
 71 kumpf  1.2         : _type(type),
 72                      _messageId(WsmUtils::getMessageId()),
 73                      _relatesTo(relatesTo),
 74                      _queueId(queueId),
 75                      _httpMethod(httpMethod),
 76                      _httpCloseConnect(httpCloseConnect),
 77                      _maxEnvelopeSize(0),
 78                      _contentLanguages(contentLanguages)
 79                {
 80                }
 81            
 82            public:
 83            
 84                virtual ~WsmResponse()
 85                {
 86                }
 87            
 88                WsmOperationType getType() const
 89                {
 90                    return _type;
 91                }
 92 kumpf  1.2 
 93                String& getMessageId()
 94                {
 95                    return _messageId;
 96                }
 97            
 98                String& getRelatesTo()
 99                {
100                    return _relatesTo;
101                }
102            
103                Uint32 getQueueId() const
104                {
105                    return _queueId;
106                }
107            
108                HttpMethod getHttpMethod() const
109                {
110                    return _httpMethod;
111                }
112            
113 kumpf  1.2     Boolean getHttpCloseConnect() const
114                {
115                    return _httpCloseConnect;
116                }
117            
118                Uint32 getMaxEnvelopeSize() const
119                {
120                    return _maxEnvelopeSize;
121                }
122            
123                ContentLanguageList& getContentLanguages()
124                {
125                    return _contentLanguages;
126                }
127            
128            private:
129            
130                WsmResponse(const WsmResponse&);
131                WsmResponse& operator=(const WsmResponse&);
132            
133                WsmOperationType _type;
134 kumpf  1.2     String _messageId;
135                String _relatesTo;
136                Uint32 _queueId;
137                HttpMethod _httpMethod;
138                Boolean _httpCloseConnect;
139                Uint32 _maxEnvelopeSize;
140                ContentLanguageList _contentLanguages;
141            };
142            
143            class WsmFaultResponse : public WsmResponse
144            {
145            public:
146            
147                WsmFaultResponse(
148                    const String& relatesTo,
149                    Uint32 queueId,
150                    HttpMethod httpMethod,
151                    Boolean httpCloseConnect,
152                    const WsmFault& fault)
153                    : WsmResponse(
154                          WSM_FAULT,
155 kumpf  1.2               relatesTo,
156                          queueId,
157                          httpMethod,
158                          httpCloseConnect,
159                          fault.getReasonLanguage()),
160                      _fault(fault)
161                {
162                }
163            
164                WsmFaultResponse(
165                    const WsmRequest* request,
166                    const WsmFault& fault)
167                    : WsmResponse(
168                          WSM_FAULT,
169                          request,
170                          fault.getReasonLanguage()),
171                      _fault(fault)
172                {
173                }
174            
175                ~WsmFaultResponse()
176 kumpf  1.2     {
177                }
178            
179                WsmFault& getFault()
180                {
181                    return _fault;
182                }
183            
184            private:
185            
186                WsmFault _fault;
187            };
188            
189            class SoapFaultResponse : public WsmResponse
190            {
191            public:
192            
193                SoapFaultResponse(
194                    const String& relatesTo,
195                    Uint32 queueId,
196                    HttpMethod httpMethod,
197 kumpf  1.2         Boolean httpCloseConnect,
198                    const SoapNotUnderstoodFault& fault)
199                    : WsmResponse(
200                          SOAP_FAULT,
201                          relatesTo,
202                          queueId,
203                          httpMethod,
204                          httpCloseConnect,
205                          fault.getMessageLanguage()),
206                      _fault(fault)
207                {
208                }
209            
210                ~SoapFaultResponse()
211                {
212                }
213            
214                SoapNotUnderstoodFault& getFault()
215                {
216                    return _fault;
217                }
218 kumpf  1.2 
219            private:
220            
221                SoapNotUnderstoodFault _fault;
222            };
223            
224 kumpf  1.3 class WxfGetResponse : public WsmResponse
225 kumpf  1.2 {
226            public:
227            
228 kumpf  1.3     WxfGetResponse(
229 kumpf  1.2         const WsmInstance& inst,
230 kumpf  1.3         const WxfGetRequest* request,
231 kumpf  1.2         const ContentLanguageList& contentLanguages)
232                    : WsmResponse(
233                          WS_TRANSFER_GET,
234                          request,
235                          contentLanguages),
236                      _instance(inst)
237                {
238                }
239            
240 kumpf  1.3     ~WxfGetResponse()
241 kumpf  1.2     {
242                }
243            
244                WsmInstance& getInstance()
245                {
246                    return _instance;
247                }
248            
249            private:
250            
251                WsmInstance _instance;
252            };
253            
254 kumpf  1.3 class WxfPutResponse : public WsmResponse
255 kumpf  1.2 {
256            public:
257            
258 kumpf  1.3     WxfPutResponse(
259                    const WxfPutRequest* request,
260 kumpf  1.2         const ContentLanguageList& contentLanguages)
261                    : WsmResponse(
262                          WS_TRANSFER_PUT,
263                          request,
264                          contentLanguages),
265                      _reference(request->epr),
266                      _requestedEPR(request->requestEpr)
267                {
268                }
269            
270 kumpf  1.3     ~WxfPutResponse()
271 kumpf  1.2     {
272                }
273            
274                WsmEndpointReference& getEPR()
275                {
276                    return _reference;
277                }
278            
279                Boolean getRequestedEPR()
280                {
281                    return _requestedEPR;
282                }
283            
284            private:
285            
286                // The client can request the potentially updated EPR by specifying the
287                // wsman:RequestEPR header.  CIM does not allow a ModifyInstance operation
288                // to change key values, though, so this will always be the same as the
289                // EPR in the request.
290                WsmEndpointReference _reference;
291                Boolean _requestedEPR;
292 kumpf  1.2 };
293            
294 kumpf  1.3 class WxfCreateResponse : public WsmResponse
295 kumpf  1.2 {
296            public:
297            
298 kumpf  1.3     WxfCreateResponse(
299 kumpf  1.2         const WsmEndpointReference& ref,
300 kumpf  1.3         const WxfCreateRequest* request,
301 kumpf  1.2         const ContentLanguageList& contentLanguages)
302                    : WsmResponse(
303                          WS_TRANSFER_CREATE,
304                          request,
305                          contentLanguages),
306                      _reference(ref)
307                {
308                }
309            
310 kumpf  1.3     ~WxfCreateResponse()
311 kumpf  1.2     {
312                }
313            
314                WsmEndpointReference& getEPR()
315                {
316                    return _reference;
317                }
318            
319            private:
320            
321                WsmEndpointReference _reference;
322            };
323            
324 kumpf  1.3 class WxfDeleteResponse : public WsmResponse
325 kumpf  1.2 {
326            public:
327            
328 kumpf  1.3     WxfDeleteResponse(
329                    const WxfDeleteRequest* request,
330 kumpf  1.2         const ContentLanguageList& contentLanguages)
331                    : WsmResponse(
332                          WS_TRANSFER_DELETE,
333                          request,
334                          contentLanguages)
335                {
336                }
337            
338 kumpf  1.3     ~WxfDeleteResponse()
339                {
340                }
341            };
342            
343            class WsenEnumerationData
344            {
345            public:
346            
347                WsenEnumerationData()
348                    : enumerationMode(WSEN_EM_UNKNOWN)
349                {
350                }
351 kumpf  1.6     WsenEnumerationData(const Array<WsmInstance>& inst,
352 kumpf  1.3         const Array<WsmEndpointReference> EPRs,
353                    WsmbPolymorphismMode pm, const String& uri)
354                    : instances(inst),
355                      eprs(EPRs),
356                      enumerationMode(WSEN_EM_OBJECT_AND_EPR),
357                      polymorphismMode(pm),
358                      classUri(uri)
359                {
360                }
361 kumpf  1.6     WsenEnumerationData(const Array<WsmInstance>& inst,
362 kumpf  1.3         WsmbPolymorphismMode pm, const String& uri)
363                    : instances(inst),
364                      enumerationMode(WSEN_EM_OBJECT),
365                      polymorphismMode(pm),
366                      classUri(uri)
367                {
368                }
369                WsenEnumerationData(const Array<WsmEndpointReference>& epr)
370                    : eprs(epr),
371                      enumerationMode(WSEN_EM_EPR),
372                      polymorphismMode(WSMB_PM_UNKNOWN)
373                {
374                }
375                WsenEnumerationData(const WsenEnumerationData& data)
376                    : instances(data.instances),
377                      eprs(data.eprs),
378                      enumerationMode(data.enumerationMode),
379                      polymorphismMode(data.polymorphismMode),
380                      classUri(data.classUri)
381                {
382                }
383 kumpf  1.3     Uint32 getSize()
384                {
385 kumpf  1.6         if (enumerationMode == WSEN_EM_OBJECT ||
386 kumpf  1.3             enumerationMode == WSEN_EM_OBJECT_AND_EPR)
387                    {
388                        return instances.size();
389                    }
390                    else if (enumerationMode == WSEN_EM_EPR)
391                    {
392                        return eprs.size();
393                    }
394                    else
395                    {
396                        PEGASUS_ASSERT(0);
397                        return 0;
398                    }
399                }
400                void remove(Uint32 index, Uint32 size)
401                {
402                    if (enumerationMode == WSEN_EM_OBJECT)
403                    {
404                        instances.remove(index, size);
405                    }
406                    else if (enumerationMode == WSEN_EM_EPR)
407 kumpf  1.3         {
408                        eprs.remove(index, size);
409                    }
410                    else if (enumerationMode == WSEN_EM_OBJECT_AND_EPR)
411                    {
412                        instances.remove(index, size);
413                        eprs.remove(index, size);
414 kumpf  1.6         }
415 kumpf  1.3         else
416                    {
417                        PEGASUS_ASSERT(0);
418                    }
419                }
420                void merge(const WsenEnumerationData& data)
421                {
422                    if (enumerationMode == WSEN_EM_OBJECT)
423                    {
424                        instances.appendArray(data.instances);
425                    }
426                    else if (enumerationMode == WSEN_EM_EPR)
427                    {
428                        eprs.appendArray(data.eprs);
429                    }
430                    else if (enumerationMode == WSEN_EM_OBJECT_AND_EPR)
431                    {
432                        instances.appendArray(data.instances);
433                        eprs.appendArray(data.eprs);
434                    }
435                    else
436 kumpf  1.3         {
437                        PEGASUS_ASSERT(0);
438                    }
439                }
440                void split(WsenEnumerationData& data, Uint32 num)
441                {
442                    data.enumerationMode = enumerationMode;
443                    data.polymorphismMode = polymorphismMode;
444                    data.classUri = classUri;
445            
446                    if (enumerationMode == WSEN_EM_OBJECT)
447                    {
448                        Uint32 i;
449                        for (i = 0; i < num && i < instances.size(); i++)
450                        {
451                            data.instances.append(instances[i]);
452                        }
453            
454                        if (i != 0)
455                        {
456                            instances.remove(0, i);
457 kumpf  1.3             }
458                    }
459                    else if (enumerationMode == WSEN_EM_EPR)
460                    {
461                        Uint32 i;
462                        for (i = 0; i < num && i < eprs.size(); i++)
463                        {
464                            data.eprs.append(eprs[i]);
465                        }
466                        if (i != 0)
467                        {
468                            eprs.remove(0, i);
469                        }
470                    }
471                    else if (enumerationMode == WSEN_EM_OBJECT_AND_EPR)
472                    {
473                        Uint32 i;
474                        for (i = 0; i < num && i < instances.size(); i++)
475                        {
476                            data.instances.append(instances[i]);
477                            data.eprs.append(eprs[i]);
478 kumpf  1.3             }
479            
480                        if (i != 0)
481                        {
482                            instances.remove(0, i);
483                            eprs.remove(0, i);
484                        }
485                    }
486                    else
487                    {
488                        PEGASUS_ASSERT(0);
489                    }
490                }
491            
492                Array<WsmInstance> instances;
493                Array<WsmEndpointReference> eprs;
494                WsenEnumerationMode enumerationMode;
495                WsmbPolymorphismMode polymorphismMode;
496                String classUri;
497            };
498            
499 kumpf  1.3 class WsenPullResponse : public WsmResponse
500            {
501            public:
502            
503                WsenPullResponse(
504                    const WsenEnumerationData& data,
505                    const WsenPullRequest* request,
506                    const ContentLanguageList& contentLanguages)
507                    : WsmResponse(
508                          WS_ENUMERATION_PULL,
509                          request,
510                          contentLanguages),
511                      _enumerationContext((Uint64) -1),
512                      _isComplete(false),
513                      _enumerationData(data)
514                {
515                }
516                ~WsenPullResponse()
517                {
518                }
519                Array<WsmInstance>& getInstances()
520 kumpf  1.3     {
521                    return _enumerationData.instances;
522                }
523                Array<WsmEndpointReference>& getEPRs()
524                {
525                    return _enumerationData.eprs;
526                }
527                WsenEnumerationData& getEnumerationData()
528                {
529                    return _enumerationData;
530                }
531                Uint32 getSize()
532                {
533                    return _enumerationData.getSize();
534                }
535                void remove(Uint32 index, Uint32 size)
536                {
537                    _enumerationData.remove(index, size);
538                }
539                void setComplete()
540                {
541 kumpf  1.3         _isComplete = true;
542                }
543                Boolean isComplete()
544                {
545                    return _isComplete;
546                }
547                WsenEnumerationMode getEnumerationMode()
548                {
549                    return _enumerationData.enumerationMode;
550                }
551                Uint64 getEnumerationContext()
552                {
553                    return _enumerationContext;
554                }
555                void setEnumerationContext(Uint64 context)
556                {
557                    _enumerationContext = context;
558                }
559            
560            private:
561            
562 kumpf  1.3     Uint64 _enumerationContext;
563                Boolean _isComplete;
564                WsenEnumerationData _enumerationData;
565            };
566            
567            class WsenEnumerateResponse : public WsmResponse
568            {
569            public:
570            
571                WsenEnumerateResponse(
572                    const Array<WsmInstance>& inst,
573                    const Array<WsmEndpointReference>& epr,
574                    Uint32 itemCount,
575                    const WsenEnumerateRequest* request,
576                    const ContentLanguageList& contentLanguages)
577                    : WsmResponse(
578                          WS_ENUMERATION_ENUMERATE,
579                          request,
580                          contentLanguages),
581                      _enumerationContext((Uint64) -1),
582                      _isComplete(false),
583 kumpf  1.3           _requestItemCount(request->requestItemCount),
584                      _itemCount(itemCount),
585                      _enumerationData(inst, epr, request->polymorphismMode,
586                          request->epr.resourceUri)
587                {
588                    PEGASUS_ASSERT(request->enumerationMode == WSEN_EM_OBJECT ||
589                        request->enumerationMode == WSEN_EM_OBJECT_AND_EPR);
590                }
591                WsenEnumerateResponse(
592                    const Array<WsmInstance>& inst,
593                    Uint32 itemCount,
594                    const WsenEnumerateRequest* request,
595                    const ContentLanguageList& contentLanguages)
596                    : WsmResponse(
597                          WS_ENUMERATION_ENUMERATE,
598                          request,
599                          contentLanguages),
600                      _enumerationContext((Uint64) -1),
601                      _isComplete(false),
602                      _requestItemCount(request->requestItemCount),
603                      _itemCount(itemCount),
604 kumpf  1.3           _enumerationData(inst, request->polymorphismMode,
605                          request->epr.resourceUri)
606                {
607                    PEGASUS_ASSERT(request->enumerationMode == WSEN_EM_OBJECT);
608                }
609                WsenEnumerateResponse(
610                    const Array<WsmEndpointReference>& epr,
611                    Uint32 itemCount,
612                    const WsenEnumerateRequest* request,
613                    const ContentLanguageList& contentLanguages)
614                    : WsmResponse(
615                          WS_ENUMERATION_ENUMERATE,
616                          request,
617                          contentLanguages),
618                      _enumerationContext((Uint64) -1),
619                      _isComplete(false),
620                      _requestItemCount(request->requestItemCount),
621                      _itemCount(itemCount),
622                      _enumerationData(epr)
623                {
624                    PEGASUS_ASSERT(request->enumerationMode == WSEN_EM_EPR);
625 kumpf  1.3     }
626                WsenEnumerateResponse(
627                    const WsenEnumerationData data,
628                    Uint32 itemCount,
629                    const WsenEnumerateRequest* request,
630                    const ContentLanguageList& contentLanguages)
631                    : WsmResponse(
632                          WS_ENUMERATION_ENUMERATE,
633                          request,
634                          contentLanguages),
635                      _enumerationContext((Uint64) -1),
636                      _isComplete(false),
637                      _requestItemCount(request->requestItemCount),
638                      _itemCount(itemCount),
639                      _enumerationData(data)
640                {
641                    PEGASUS_ASSERT(request->enumerationMode == data.enumerationMode);
642                }
643                ~WsenEnumerateResponse()
644                {
645                }
646 kumpf  1.3     Array<WsmInstance>& getInstances()
647                {
648                    return _enumerationData.instances;
649                }
650                Array<WsmEndpointReference>& getEPRs()
651                {
652                    return _enumerationData.eprs;
653                }
654                WsenEnumerationData& getEnumerationData()
655                {
656                    return _enumerationData;
657                }
658                Uint32 getSize()
659                {
660                    return _enumerationData.getSize();
661                }
662                void merge(WsenEnumerateResponse* response)
663                {
664 kumpf  1.6         PEGASUS_ASSERT(_enumerationData.enumerationMode ==
665 kumpf  1.3             response->_enumerationData.enumerationMode);
666                    _enumerationData.merge(response->getEnumerationData());
667                }
668                void merge(WsenPullResponse* response)
669                {
670 kumpf  1.6         PEGASUS_ASSERT(_enumerationData.enumerationMode ==
671 kumpf  1.3             response->getEnumerationData().enumerationMode);
672                    _enumerationData.merge(response->getEnumerationData());
673                }
674                void remove(Uint32 index, Uint32 size)
675                {
676                    _enumerationData.remove(index, size);
677                }
678                void setComplete()
679                {
680                    _isComplete = true;
681                }
682                Boolean isComplete()
683                {
684                    return _isComplete;
685                }
686                Boolean requestedItemCount()
687                {
688                    return _requestItemCount;
689                }
690                void setItemCount(Uint32 count)
691                {
692 kumpf  1.3         _itemCount = count;
693                }
694                Uint32 getItemCount()
695                {
696                    return _itemCount;
697                }
698                WsenEnumerationMode getEnumerationMode()
699                {
700                    return _enumerationData.enumerationMode;
701                }
702                Uint64 getEnumerationContext()
703                {
704                    return _enumerationContext;
705                }
706                void setEnumerationContext(Uint64 context)
707                {
708                    _enumerationContext = context;
709                }
710            
711            private:
712            
713 kumpf  1.3     Uint64 _enumerationContext;
714                Boolean _isComplete;
715                Boolean _requestItemCount;
716                Uint32 _itemCount;
717                WsenEnumerationData _enumerationData;
718            };
719            
720            class WsenReleaseResponse : public WsmResponse
721            {
722            public:
723            
724                WsenReleaseResponse(
725                    const WsenReleaseRequest* request,
726                    const ContentLanguageList& contentLanguages)
727                    : WsmResponse(
728                          WS_ENUMERATION_RELEASE,
729                          request,
730                          contentLanguages)
731                {
732                }
733            
734 kumpf  1.3     ~WsenReleaseResponse()
735 kumpf  1.2     {
736                }
737            };
738            
739            PEGASUS_NAMESPACE_END
740            
741            #endif /* Pegasus_WsmResponse_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2