File Coverage

blib/lib/Biblio/ILL/ISO/ConditionalReply.pm
Criterion Covered Total %
statement 59 83 71.0
branch 15 42 35.7
condition 1 6 16.6
subroutine 12 14 85.7
pod 11 11 100.0
total 98 156 62.8


line stmt bran cond sub pod time code
1             package Biblio::ILL::ISO::ConditionalReply;
2              
3             =head1 NAME
4              
5             Biblio::ILL::ISO::ConditionalReply - Perl extension for handling
6             ISO 10161 interlibrary loan Conditional-Reply messages
7              
8             =cut
9              
10 2     2   4021 use Biblio::ILL::ISO::ISO;
  2         7  
  2         70  
11 2     2   13 use Carp;
  2         7  
  2         246  
12              
13             =head1 VERSION
14              
15             Version 0.01
16              
17             =cut
18              
19             our $VERSION = '0.01';
20             #---------------------------------------------------------------------------
21             # Mods
22             # 0.01 - 2003.07.26 - original version
23             #---------------------------------------------------------------------------
24              
25             =head1 DESCRIPTION
26              
27             Biblio::ILL::ISO::ConditionalReply is a derivation of the abstract
28             Biblio::ILL::ISO::ISO object, and handles the Conditional-Reply message type.
29              
30             =head1 EXPORT
31              
32             None.
33              
34             =head1 ERROR HANDLING
35              
36             Each of the set_() methods will croak on missing or invalid parameters.
37              
38             =cut
39              
40 2     2   2848 BEGIN{@ISA = qw ( Biblio::ILL::ISO::ISO ); }
41              
42             =head1 FROM THE ASN DEFINITION
43              
44             Conditional-Reply ::= [APPLICATION 5] SEQUENCE {
45             protocol-version-num [0] IMPLICIT INTEGER, -- {
46             -- version-1 (1),
47             -- version-2 (2)
48             -- },
49             transaction-id [1] IMPLICIT Transaction-Id,
50             service-date-time [2] IMPLICIT Service-Date-Time,
51             requester-id [3] IMPLICIT System-Id OPTIONAL,
52             -- mandatory when using store-and-forward communications
53             -- optional when using connection-oriented communications
54             responder-id [4] IMPLICIT System-Id OPTIONAL,
55             -- mandatory when using store-and-forward communications
56             -- optional when using connection-oriented communications
57             answer [35] IMPLICIT BOOLEAN,
58             requester-note [46] ILL-String OPTIONAL,
59             conditional-reply-extensions [49] IMPLICIT SEQUENCE OF Extension OPTIONAL
60             }
61            
62             =cut
63              
64             =head1 CONSTRUCTORS
65              
66             new()
67              
68             Base constructor for the class. It just returns a completely
69             empty message object, which you'll need to populate with the
70             various set_() methods, or use the read() method to read a
71             Conditional-Reply message from a file (followed by a call to
72             from_asn() to turn the read's returned hash into a proper
73             ConditionalReply message.
74              
75             The constructor also initializes the Convert::ASN1 if it
76             hasn't been initialized.
77              
78             =cut
79             #---------------------------------------------------------------
80             #
81             #---------------------------------------------------------------
82             sub new {
83 2     2 1 17 my $class = shift;
84 2         4 my $self = {};
85              
86 2 50       5 Biblio::ILL::ISO::ISO::_init() if (not $Biblio::ILL::ISO::ISO::_asn_initialized);
87 2         4 $self->{"ASN_TYPE"} = "Conditional-Reply";
88              
89 2   33     14 bless($self, ref($class) || $class);
90 2         6 return ($self);
91             }
92              
93              
94             #---------------------------------------------------------------
95             #
96             #---------------------------------------------------------------
97             sub as_pretty_string {
98 0     0 1 0 my $self = shift;
99              
100 0         0 foreach my $key (sort keys %$self) {
101 0 0       0 if ($key ne "ASN_TYPE") {
102 0         0 print "\n[$key]\n";
103 0         0 print $self->{$key}->as_pretty_string();
104             }
105             }
106 0         0 return;
107             }
108              
109             #---------------------------------------------------------------
110             # This will return a structure usable by Convert::ASN1
111             #---------------------------------------------------------------
112             sub as_asn {
113 1     1 1 4 my $self = shift;
114              
115 1         4 my %h = ();
116 1         13 foreach my $key (sort keys %$self) {
117 8 100       19 if ($key ne "ASN_TYPE") {
118             #print "\n[$key]\n";
119 7         30 $h{$key} = $self->{$key}->as_asn();
120             }
121             }
122 1         4 return \%h;
123             }
124              
125             =head1 METHODS
126              
127             For any example code, assume the following:
128             my $msg = new Biblio::ILL::ISO::ConditionalReply;
129              
130             =cut
131              
132             #---------------------------------------------------------------
133             #
134             #---------------------------------------------------------------
135             =head1
136              
137             =head2 from_asn($href)
138              
139             To read a message from a file, use the following:
140              
141             my $href = $msg->read("msg_05.conditional-reply.ber");
142             $msg = $msg->from_asn($href);
143              
144             The from_asn() method turns the hash returned from read() into
145             a proper message-type object.
146              
147             =cut
148             sub from_asn {
149 0     0 1 0 my $self = shift;
150 0         0 my $href = shift;
151              
152 0         0 foreach my $k (keys %$href) {
153              
154 0 0 0     0 if ($k =~ /^protocol-version-num$/) {
    0          
    0          
    0          
    0          
    0          
155 0         0 $self->{$k} = new Biblio::ILL::ISO::ProtocolVersionNum();
156 0         0 $self->{$k}->from_asn($href->{$k});
157              
158             } elsif ($k =~ /^transaction-id$/) {
159 0         0 $self->{$k} = new Biblio::ILL::ISO::TransactionId();
160 0         0 $self->{$k}->from_asn($href->{$k});
161              
162             } elsif ($k =~ /^service-date-time$/) {
163 0         0 $self->{$k} = new Biblio::ILL::ISO::ServiceDateTime();
164 0         0 $self->{$k}->from_asn($href->{$k});
165              
166             } elsif (($k =~ /^requester-id$/)
167             || ($k =~ /^responder-id$/)
168             ) {
169 0         0 $self->{$k} = new Biblio::ILL::ISO::SystemId();
170 0         0 $self->{$k}->from_asn($href->{$k});
171              
172             } elsif ($k =~ /^answer$/) {
173 0         0 $self->{$k} = new Biblio::ILL::ISO::Flag();
174 0         0 $self->{$k}->from_asn($href->{$k});
175              
176             } elsif ($k =~ /^requester-note$/) {
177 0         0 $self->{$k} = new Biblio::ILL::ISO::ILLString();
178 0         0 $self->{$k}->from_asn($href->{$k});
179              
180             } else {
181 0         0 croak "invalid " . ref($self) . " element: [$k]";
182             }
183              
184             }
185 0         0 return $self;
186             }
187              
188             #---------------------------------------------------------------
189             #
190             #---------------------------------------------------------------
191             =head1
192              
193             =head2 set_protocol_version_num($pvn)
194              
195             Sets the protocol version number.
196             Acceptable parameter values are the strings:
197             version-1
198             version-2
199              
200             =cut
201             sub set_protocol_version_num {
202 1     1 1 5 my $self = shift;
203 1         2 my ($parm) = shift;
204              
205 1 50       3 croak "missing protocol-version-num" unless $parm;
206              
207 1         4 $self->{"protocol-version-num"} = new Biblio::ILL::ISO::ProtocolVersionNum($parm);
208              
209 1         4 return;
210             }
211              
212             #---------------------------------------------------------------
213             #
214             #---------------------------------------------------------------
215             =head1
216              
217             =head2 set_transaction_id($tid)
218              
219             Sets the message's transaction-id.
220             Expects a valid Biblio::ILL::ISO::TransactionId.
221              
222             my $tid = new Biblio::ILL::ISO::TransactionId("PLS","001","",
223             new Biblio::ILL::ISO::SystemId("MWPL"));
224             $msg->set_transaction_id($tid);
225              
226             This is a mandatory field.
227              
228             =cut
229             sub set_transaction_id {
230 1     1 1 4 my $self = shift;
231 1         2 my ($parm) = shift;
232              
233 1 50       3 croak "missing transaction-id" unless $parm;
234 1 50       3 croak "invalid transaction-id" unless (ref($parm) eq "Biblio::ILL::ISO::TransactionId");
235              
236 1         2 $self->{"transaction-id"} = $parm;
237              
238 1         2 return;
239             }
240              
241             #---------------------------------------------------------------
242             #
243             #---------------------------------------------------------------
244             =head1
245              
246             =head2 set_service_date_time($sdt)
247              
248             Sets the message's service-date-time.
249             Expects a valid Biblio::ILL::ISO::ServiceDateTime.
250              
251             my $dt_this = new Biblio::ILL::ISO::DateTime("20030623","114400");
252             my $dt_orig = new Biblio::ILL::ISO::DateTime("20030623","114015")
253             my $sdt = new Biblio::ILL::ISO::ServiceDateTime( $dt_this, $dt_orig);
254             $msg->set_service_date_time($sdt);
255              
256             This is a mandatory field.
257              
258             =cut
259             sub set_service_date_time {
260 1     1 1 4 my $self = shift;
261 1         2 my ($sdt) = shift;
262              
263 1 50       8 croak "missing service-date-time" unless $sdt;
264 1 50       5 croak "invalid service-date-time" unless (ref($sdt) eq "Biblio::ILL::ISO::ServiceDateTime");
265              
266 1         2 $self->{"service-date-time"} = $sdt;
267              
268 1         2 return;
269             }
270              
271             #---------------------------------------------------------------
272             #
273             #---------------------------------------------------------------
274             =head1
275              
276             =head2 set_requester_id($reqid)
277              
278             Sets the message's requester-id.
279             Expects a valid Biblio::ILL::ISO::SystemId.
280              
281             my $reqid = new Biblio::ILL::ISO::SystemId();
282             $reqid->set_person_name("David A. Christensen");
283             $msg->set_requester_id($reqid);
284              
285             This is an optional field.
286              
287             =cut
288             sub set_requester_id {
289 1     1 1 3 my $self = shift;
290 1         2 my ($parm) = shift;
291              
292 1 50       3 croak "missing requester-id" unless $parm;
293 1 50       4 croak "invalid requester-id" unless (ref($parm) eq "Biblio::ILL::ISO::SystemId");
294              
295 1         1 $self->{"requester-id"} = $parm;
296              
297 1         3 return;
298             }
299              
300             #---------------------------------------------------------------
301             #
302             #---------------------------------------------------------------
303             =head1
304              
305             =head2 set_responder_id($resid)
306              
307             Sets the message's responder-id.
308             Expects a valid Biblio::ILL::ISO::SystemId.
309              
310             my $resid = new Biblio::ILL::ISO::SystemId("MWPL");
311             $msg->set_responder_id($resid);
312              
313             This is an optional field.
314              
315             =cut
316             sub set_responder_id {
317 1     1 1 5 my $self = shift;
318 1         2 my ($parm) = shift;
319              
320 1 50       3 croak "missing responder-id" unless $parm;
321 1 50       4 croak "invalid responder-id" unless (ref($parm) eq "Biblio::ILL::ISO::SystemId");
322              
323 1         2 $self->{"responder-id"} = $parm;
324              
325 1         2 return;
326             }
327              
328             #---------------------------------------------------------------
329             #
330             #---------------------------------------------------------------
331             =head1
332              
333             =head2 set_answer($flag)
334              
335             Sets the message's answer flag.
336             Acceptable parameter values are the strings:
337             true
338             false
339              
340             This is a mandatory field.
341              
342             =cut
343             sub set_answer {
344 1     1 1 5 my $self = shift;
345 1         3 my ($parm) = shift;
346              
347 1 50       3 croak "missing answer flag" unless ($parm);
348 1         4 $self->{"answer"} = new Biblio::ILL::ISO::Flag($parm);
349              
350 1         3 return;
351             }
352              
353             #---------------------------------------------------------------
354             #
355             #---------------------------------------------------------------
356             =head1
357              
358             =head2 set_requester_note($note)
359              
360             Sets the message's requester-note.
361             Expects a simple text string.
362              
363             $msg->set_requester_note("This is a requester note");
364              
365             This is an optional field.
366              
367             =cut
368             sub set_requester_note {
369 1     1 1 4 my $self = shift;
370 1         1 my ($parm) = shift;
371              
372 1 50       3 croak "missing requester-note" unless $parm;
373 1 50       10 croak "invalid requester-note" unless (ref($parm) eq "Biblio::ILL::ISO::ILLString");
374              
375 1         8 $self->{"requester-note"} = $parm;
376              
377 1         3 return;
378             }
379              
380             =head1 RELATED MODULES
381              
382             Biblio::ILL::ISO::ISO
383             Biblio::ILL::ISO::Request
384             Biblio::ILL::ISO::ForwardNotification
385             Biblio::ILL::ISO::Shipped
386             Biblio::ILL::ISO::Answer
387             Biblio::ILL::ISO::ConditionalReply
388             Biblio::ILL::ISO::Cancel
389             Biblio::ILL::ISO::CancelReply
390             Biblio::ILL::ISO::Received
391             Biblio::ILL::ISO::Recall
392             Biblio::ILL::ISO::Returned
393             Biblio::ILL::ISO::CheckedIn
394             Biblio::ILL::ISO::Overdue
395             Biblio::ILL::ISO::Renew
396             Biblio::ILL::ISO::RenewAnswer
397             Biblio::ILL::ISO::Lost
398             Biblio::ILL::ISO::Damaged
399             Biblio::ILL::ISO::Message
400             Biblio::ILL::ISO::StatusQuery
401             Biblio::ILL::ISO::StatusOrErrorReport
402             Biblio::ILL::ISO::Expired
403              
404             =cut
405              
406             =head1 SEE ALSO
407              
408             See the README for system design notes.
409              
410             For more information on Interlibrary Loan standards (ISO 10160/10161),
411             a good place to start is:
412              
413             http://www.nlc-bnc.ca/iso/ill/main.htm
414              
415             =cut
416              
417             =head1 AUTHOR
418              
419             David Christensen,
420              
421             =cut
422              
423              
424             =head1 COPYRIGHT AND LICENSE
425              
426             Copyright 2003 by David Christensen
427              
428             This library is free software; you can redistribute it and/or modify it
429             under the same terms as Perl itself.
430              
431             =cut
432              
433             1;