1 package OpenSRF::DomainObject::oilsResponse;
2 use vars qw/@EXPORT_OK %EXPORT_TAGS/;
6 use OpenSRF::Utils::Logger qw/:level/;
8 JSON->register_class_hint( hint => 'osrfResponse', class => 'OpenSRF::DomainObject::oilsResponse' );
11 @EXPORT_OK = qw/STATUS_CONTINUE STATUS_OK STATUS_ACCEPTED
12 STATUS_BADREQUEST STATUS_UNAUTHORIZED STATUS_FORBIDDEN
13 STATUS_NOTFOUND STATUS_NOTALLOWED STATUS_TIMEOUT
14 STATUS_INTERNALSERVERERROR STATUS_NOTIMPLEMENTED
15 STATUS_VERSIONNOTSUPPORTED STATUS_REDIRECTED
16 STATUS_EXPFAILED STATUS_COMPLETE/;
19 status => [ qw/STATUS_CONTINUE STATUS_OK STATUS_ACCEPTED
20 STATUS_BADREQUEST STATUS_UNAUTHORIZED STATUS_FORBIDDEN
21 STATUS_NOTFOUND STATUS_NOTALLOWED STATUS_TIMEOUT
22 STATUS_INTERNALSERVERERROR STATUS_NOTIMPLEMENTED
23 STATUS_VERSIONNOTSUPPORTED STATUS_REDIRECTED
24 STATUS_EXPFAILED STATUS_COMPLETE/ ],
31 OpenSRF::DomainObject::oilsResponse
35 use OpenSRF::DomainObject::oilsResponse qw/:status/;
37 my $resp = OpenSRF::DomainObject::oilsResponse->new;
39 $resp->status( 'a status message' );
41 $resp->statusCode( STATUS_CONTINUE );
43 $client->respond( $resp );
47 OpenSRF::DomainObject::oilsResponse implements the base class for all Application
48 layer messages send between the client and server.
52 sub STATUS_CONTINUE { return 100 }
54 sub STATUS_OK { return 200 }
55 sub STATUS_ACCEPTED { return 202 }
56 sub STATUS_COMPLETE { return 205 }
58 sub STATUS_REDIRECTED { return 307 }
60 sub STATUS_BADREQUEST { return 400 }
61 sub STATUS_UNAUTHORIZED { return 401 }
62 sub STATUS_FORBIDDEN { return 403 }
63 sub STATUS_NOTFOUND { return 404 }
64 sub STATUS_NOTALLOWED { return 405 }
65 sub STATUS_TIMEOUT { return 408 }
66 sub STATUS_EXPFAILED { return 417 }
68 sub STATUS_INTERNALSERVERERROR { return 500 }
69 sub STATUS_NOTIMPLEMENTED { return 501 }
70 sub STATUS_VERSIONNOTSUPPORTED { return 505 }
72 my $log = 'OpenSRF::Utils::Logger';
77 return JSON->perl2prettyJSON($self) if ($pretty);
78 return JSON->perl2JSON($self);
83 $class = ref($class) || $class;
85 my $default_status = eval "\$${class}::status";
86 my $default_statusCode = eval "\$${class}::statusCode";
88 my %args = ( status => $default_status,
89 statusCode => $default_statusCode,
92 return bless( \%args => $class );
98 $self->{status} = $val if (defined $val);
99 return $self->{status};
105 $self->{statusCode} = $val if (defined $val);
106 return $self->{statusCode};
110 #-------------------------------------------------------------------------------
114 package OpenSRF::DomainObject::oilsStatus;
115 use OpenSRF::DomainObject::oilsResponse qw/:status/;
116 use base 'OpenSRF::DomainObject::oilsResponse';
117 use vars qw/$status $statusCode/;
121 OpenSRF::DomainObject::oilsException
125 use OpenSRF::DomainObject::oilsResponse;
131 $client->status( OpenSRF::DomainObject::oilsStatus->new );
135 The base class for Status messages sent between client and server. This
136 is implemented on top of the C<OpenSRF::DomainObject::oilsResponse> class, and
137 sets the default B<status> to C<Status> and B<statusCode> to C<STATUS_OK>.
142 $statusCode = STATUS_OK;
144 package OpenSRF::DomainObject::oilsConnectStatus;
145 use OpenSRF::DomainObject::oilsResponse qw/:status/;
146 use base 'OpenSRF::DomainObject::oilsStatus';
147 use vars qw/$status $statusCode/;
151 OpenSRF::DomainObject::oilsConnectStatus
155 use OpenSRF::DomainObject::oilsResponse;
161 $client->status( new OpenSRF::DomainObject::oilsConnectStatus );
165 The class for Stati relating to the connection status of a session. This
166 is implemented on top of the C<OpenSRF::DomainObject::oilsStatus> class, and
167 sets the default B<status> to C<Connection Successful> and B<statusCode> to C<STATUS_OK>.
171 B<OpenSRF::DomainObject::oilsStatus>
175 $status = 'Connection Successful';
176 $statusCode = STATUS_OK;
181 package OpenSRF::DomainObject::oilsContinueStatus;
182 use OpenSRF::DomainObject::oilsResponse qw/:status/;
183 use base 'OpenSRF::DomainObject::oilsStatus';
184 use vars qw/$status $statusCode/;
188 OpenSRF::DomainObject::oilsContinueStatus
192 use OpenSRF::DomainObject::oilsResponse;
198 $client->status( new OpenSRF::DomainObject::oilsContinueStatus );
202 Implements the STATUS_CONTINUE message, informing the client that it should
203 continue to wait for a response to it's request.
207 B<OpenSRF::DomainObject::oilsStatus>
211 $status = 'Please hold. Creating response...';
212 $statusCode = STATUS_CONTINUE;
218 #-------------------------------------------------------------------------------
222 package OpenSRF::DomainObject::oilsResult;
223 use OpenSRF::DomainObject::oilsResponse qw/:status/;
224 use OpenSRF::DomainObject::oilsPrimitive;
225 use base 'OpenSRF::DomainObject::oilsResponse';
226 use vars qw/$status $statusCode/;
230 $statusCode = STATUS_OK;
234 OpenSRF::DomainObject::oilsResult
238 use OpenSRF::DomainObject::oilsResponse;
240 .... do stuff, create $object ...
242 my $res = OpenSRF::DomainObject::oilsResult->new;
244 $res->content($object)
246 $session->respond( $res );
250 This is the base class for encapuslating RESULT messages send from the server
251 to a client. It is a subclass of B<OpenSRF::DomainObject::oilsResponse>, and
252 sets B<status> to C<OK> and B<statusCode> to C<STATUS_OK>.
256 =head2 OpenSRF::DomainObject::oilsMessage->content( [$new_content] )
260 Sets or gets the content of the response. This should be exactly one object
261 of (sub)type domainObject or domainObjectCollection.
271 $self->{content} = $val if (defined $val);
272 return $self->{content};
277 B<OpenSRF::DomainObject::oilsResponse>
285 #-------------------------------------------------------------------------------
289 package OpenSRF::DomainObject::oilsException;
290 use OpenSRF::DomainObject::oilsResponse qw/:status/;
292 use base qw/OpenSRF::EX OpenSRF::DomainObject::oilsResponse/;
293 use vars qw/$status $statusCode/;
298 return '<' . $self->statusCode . '> ' . $self->status;
303 return $class->OpenSRF::DomainObject::oilsResponse::new( @_ );
309 OpenSRF::DomainObject::oilsException
313 use OpenSRF::DomainObject::oilsResponse;
319 $client->send( 'ERROR', OpenSRF::DomainObject::oilsException->new( status => "ARRRRRRG!" ) );
323 The base class for Exception messages sent between client and server. This
324 is implemented on top of the C<OpenSRF::DomainObject::oilsResponse> class, and
325 sets the default B<status> to C<Exception occured> and B<statusCode> to C<STATUS_BADREQUEST>.
329 $status = 'Exception occured';
330 $statusCode = STATUS_INTERNALSERVERERROR;
332 package OpenSRF::DomainObject::oilsConnectException;
333 use OpenSRF::DomainObject::oilsResponse qw/:status/;
335 use base qw/OpenSRF::DomainObject::oilsException OpenSRF::EX::ERROR/;
336 use vars qw/$status $statusCode/;
340 OpenSRF::DomainObject::oilsConnectException
344 use OpenSRF::DomainObject::oilsResponse;
348 # something breaks while connecting.
350 $client->send( 'ERROR', new OpenSRF::DomainObject::oilsConnectException );
354 The class for Exceptions that occur durring the B<CONNECT> phase of a session. This
355 is implemented on top of the C<OpenSRF::DomainObject::oilsException> class, and
356 sets the default B<status> to C<Connect Request Failed> and B<statusCode> to C<STATUS_FORBIDDEN>.
360 B<OpenSRF::DomainObject::oilsException>
365 $status = 'Connect Request Failed';
366 $statusCode = STATUS_FORBIDDEN;
368 package OpenSRF::DomainObject::oilsMethodException;
369 use OpenSRF::DomainObject::oilsResponse qw/:status/;
370 use base 'OpenSRF::DomainObject::oilsException';
371 use vars qw/$status $statusCode/;
375 OpenSRF::DomainObject::oilsMehtodException
379 use OpenSRF::DomainObject::oilsResponse;
383 # something breaks while looking up or starting
386 $client->send( 'ERROR', new OpenSRF::DomainObject::oilsMethodException );
390 The class for Exceptions that occur durring the B<CONNECT> phase of a session. This
391 is implemented on top of the C<OpenSRF::DomainObject::oilsException> class, and
392 sets the default B<status> to C<Connect Request Failed> and B<statusCode> to C<STATUS_NOTFOUND>.
396 B<OpenSRF::DomainObject::oilsException>
401 $status = 'Method not found';
402 $statusCode = STATUS_NOTFOUND;
404 # -------------------------------------------
406 package OpenSRF::DomainObject::oilsServerError;
407 use OpenSRF::DomainObject::oilsResponse qw/:status/;
408 use base 'OpenSRF::DomainObject::oilsException';
409 use vars qw/$status $statusCode/;
411 $status = 'Internal Server Error';
412 $statusCode = STATUS_INTERNALSERVERERROR;
414 # -------------------------------------------
420 package OpenSRF::DomainObject::oilsBrokenSession;
421 use OpenSRF::DomainObject::oilsResponse qw/:status/;
423 use base qw/OpenSRF::DomainObject::oilsException OpenSRF::EX::ERROR/;
424 use vars qw/$status $statusCode/;
425 $status = "Request on Disconnected Session";
426 $statusCode = STATUS_EXPFAILED;
428 package OpenSRF::DomainObject::oilsXMLParseError;
429 use OpenSRF::DomainObject::oilsResponse qw/:status/;
431 use base qw/OpenSRF::DomainObject::oilsException OpenSRF::EX::ERROR/;
432 use vars qw/$status $statusCode/;
433 $status = "XML Parse Error";
434 $statusCode = STATUS_EXPFAILED;
436 package OpenSRF::DomainObject::oilsAuthException;
437 use OpenSRF::DomainObject::oilsResponse qw/:status/;
439 use base qw/OpenSRF::DomainObject::oilsException OpenSRF::EX::ERROR/;
440 use vars qw/$status $statusCode/;
441 $status = "Authentication Failure";
442 $statusCode = STATUS_FORBIDDEN;