File Coverage

blib/lib/Biblio/ILL/ISO/CheckedIn.pm
Criterion Covered Total %
statement 59 84 70.2
branch 15 42 35.7
condition 1 6 16.6
subroutine 12 14 85.7
pod 11 11 100.0
total 98 157 62.4


line stmt bran cond sub pod time code
1             package Biblio::ILL::ISO::CheckedIn;
2              
3             =head1 NAME
4              
5             Biblio::ILL::ISO::CheckedIn - Perl extension for handling ISO 10161 interlibrary loan Checked-In messages
6              
7             =cut
8              
9 2     2   3064 use Biblio::ILL::ISO::ISO;
  2         5  
  2         61  
10 2     2   11 use Carp;
  2         4  
  2         319  
11              
12             =head1 VERSION
13              
14             Version 0.02
15              
16             =cut
17              
18             our $VERSION = '0.02';
19             #---------------------------------------------------------------------------
20             # Mods
21             # 0.02 - 2003.09.07 - fixed the POD
22             # 0.01 - 2003.08.11 - original version
23             #---------------------------------------------------------------------------
24              
25             =head1 DESCRIPTION
26              
27             Biblio::ILL::ISO::CheckedIn is a derivation of the abstract
28             Biblio::ILL::ISO::ISO object, and handles the Checked-In 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   2589 BEGIN{@ISA = qw ( Biblio::ILL::ISO::ISO ); }
41              
42             =head1 FROM THE ASN DEFINITION
43            
44             Checked-In ::= [APPLICATION 11] 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             date-checked-in [40] IMPLICIT ISO-Date,
58             responder-note [46] ILL-String OPTIONAL,
59             checked-in-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             Checked-In message from a file (followed by a call to
72             from_asn() to turn the read's returned hash into a proper
73             CheckedIn 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 14 my $class = shift;
84 2         5 my $self = {};
85              
86 2 50       5 Biblio::ILL::ISO::ISO::_init() if (not $Biblio::ILL::ISO::ISO::_asn_initialized);
87 2         12 $self->{"ASN_TYPE"} = "Checked-In";
88              
89 2   33     9 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 3 my $self = shift;
114              
115 1         4 my %h = ();
116 1         11 foreach my $key (sort keys %$self) {
117 8 100       22 if ($key ne "ASN_TYPE") {
118             #print "\n[$key]\n";
119 7         32 $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::CheckedIn;
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_11.checked-in.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 =~ /^date-checked-in$/) {
173 0         0 $self->{$k} = new Biblio::ILL::ISO::ISODate();
174 0         0 $self->{$k}->from_asn($href->{$k});
175              
176             } elsif ($k =~ /^responder-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       4 croak "missing protocol-version-num" unless $parm;
206              
207 1         5 $self->{"protocol-version-num"} = new Biblio::ILL::ISO::ProtocolVersionNum($parm);
208              
209 1         3 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 6 my $self = shift;
231 1         2 my ($parm) = shift;
232              
233 1 50       3 croak "missing transaction-id" unless $parm;
234 1 50       4 croak "invalid transaction-id" unless (ref($parm) eq "Biblio::ILL::ISO::TransactionId");
235              
236 1         2 $self->{"transaction-id"} = $parm;
237              
238 1         3 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 3 my $self = shift;
261 1         2 my ($sdt) = shift;
262              
263 1 50       10 croak "missing service-date-time" unless $sdt;
264 1 50       10 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         3 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 5 my $self = shift;
290 1         2 my ($parm) = shift;
291              
292 1 50       5 croak "missing requester-id" unless $parm;
293 1 50       3 croak "invalid requester-id" unless (ref($parm) eq "Biblio::ILL::ISO::SystemId");
294              
295 1         2 $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 4 my $self = shift;
318 1         2 my ($parm) = shift;
319              
320 1 50       3 croak "missing responder-id" unless $parm;
321 1 50       3 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_date_checked_in($dci)
334              
335             Sets the message's date-checked-in.
336             Expects a valid Biblio::ILL::ISO::ISODate or a properly formatted
337             date string (YYYYMMDD).
338              
339             my $dci = new Biblio::ILL::ISO::ISODate("20030814");
340             $msg->set_date_checked_in($dci);
341              
342             This is a mandatory field.
343              
344             =cut
345             sub set_date_checked_in {
346 1     1 1 4 my $self = shift;
347 1         2 my ($parm) = shift;
348              
349 1 50       11 if (ref($parm) eq "Biblio::ILL::ISO::ISODate") {
350 1         3 $self->{"date-checked-in"} = $parm;
351             } else {
352 0         0 $self->{"date-checked-in"} = new Biblio::ILL::ISO::ISODate($parm);
353             }
354              
355 1         2 return;
356             }
357              
358             #---------------------------------------------------------------
359             #
360             #---------------------------------------------------------------
361             =head1
362              
363             =head2 set_responder_note($note)
364              
365             Sets the message's responder-note.
366             Expects a simple text string.
367              
368             $msg->set_responder_note("This is a responder note");
369              
370             This is an optional field.
371              
372             =cut
373             sub set_responder_note {
374 1     1 1 4 my $self = shift;
375 1         2 my ($parm) = shift;
376              
377 1 50       3 croak "missing responder-note" unless $parm;
378 1 50       3 croak "invalid responder-note" unless (ref($parm) eq "Biblio::ILL::ISO::ILLString");
379              
380 1         3 $self->{"responder-note"} = $parm;
381              
382 1         2 return;
383             }
384              
385             =head1 RELATED MODULES
386              
387             Biblio::ILL::ISO::ISO
388             Biblio::ILL::ISO::Request
389             Biblio::ILL::ISO::ForwardNotification
390             Biblio::ILL::ISO::Shipped
391             Biblio::ILL::ISO::Answer
392             Biblio::ILL::ISO::ConditionalReply
393             Biblio::ILL::ISO::Cancel
394             Biblio::ILL::ISO::CancelReply
395             Biblio::ILL::ISO::Received
396             Biblio::ILL::ISO::Recall
397             Biblio::ILL::ISO::Returned
398             Biblio::ILL::ISO::CheckedIn
399             Biblio::ILL::ISO::Overdue
400             Biblio::ILL::ISO::Renew
401             Biblio::ILL::ISO::RenewAnswer
402             Biblio::ILL::ISO::Lost
403             Biblio::ILL::ISO::Damaged
404             Biblio::ILL::ISO::Message
405             Biblio::ILL::ISO::StatusQuery
406             Biblio::ILL::ISO::StatusOrErrorReport
407             Biblio::ILL::ISO::Expired
408              
409             =cut
410              
411             =head1 SEE ALSO
412              
413             See the README for system design notes.
414              
415             For more information on Interlibrary Loan standards (ISO 10160/10161),
416             a good place to start is:
417              
418             http://www.nlc-bnc.ca/iso/ill/main.htm
419              
420             =cut
421              
422             =head1 AUTHOR
423              
424             David Christensen,
425              
426             =cut
427              
428              
429             =head1 COPYRIGHT AND LICENSE
430              
431             Copyright 2003 by David Christensen
432              
433             This library is free software; you can redistribute it and/or modify it
434             under the same terms as Perl itself.
435              
436             =cut
437              
438             1;