refactored internal WebPAC::Input::* API a bit, added dump_rec,
[webpac2] / lib / WebPAC / Input / MARC.pm
1 package WebPAC::Input::MARC;
2
3 use warnings;
4 use strict;
5
6 use MARC::Fast 0.03;
7
8 =head1 NAME
9
10 WebPAC::Input::MARC - support for MARC database files
11
12 =head1 VERSION
13
14 Version 0.05
15
16 =cut
17
18 our $VERSION = '0.05';
19
20
21 =head1 SYNOPSIS
22
23 Open USMARC, Unimarc or any other file format that has same internal
24 structure using C<MARC::Fast>.
25
26  my $marc = new WebPAC::Input::MARC();
27  $marc->open( path => '/path/to/marc.iso' );
28
29 =head1 FUNCTIONS
30
31 =head2 open_db
32
33 Returns handle to database and size in records
34
35   my ($db,$size) = $open_db(
36         path => '/path/to/marc.iso',
37         filter => \&code_ref,
38   }
39
40 =cut
41
42 sub open_db {
43         my $self = shift;
44
45         my $arg = {@_};
46
47         my $log = $self->_get_logger();
48
49         $log->info("opening MARC database '$arg->{path}'");
50
51         my $db = new MARC::Fast(
52                 marcdb => $arg->{path},
53                 hash_filter => $arg->{filter},
54         );
55         my $db_size = $db->count - 1;   # FIXME
56
57         $self->{_marc_size} = $db_size;
58         $self->{_marc_db} = $db;
59
60         return ($db, $db_size);
61 }
62
63 =head2 fetch_rec
64
65 Return record with ID C<$mfn> from database
66
67   my $rec = $self->fetch_rec( $mfn );
68
69 }
70
71 =cut
72
73 sub fetch_rec {
74         my $self = shift;
75
76         my $mfn = shift;
77
78         if ($mfn > $self->{_marc_size}) {
79                 $self->_get_logger()->warn("seek beyond database size $self->{_marc_size} to $mfn");
80         } else {
81                 my $row = $self->{_marc_db}->to_hash($mfn);
82                 push @{$row->{'000'}}, $mfn;
83                 return $row;
84         }
85 }
86
87 =head1 PROPERTIES
88
89 =head2 _marc_size
90
91 Store size of MARC database
92
93   print $self->{_marc_size};
94
95
96
97 =head1 AUTHOR
98
99 Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
100
101 =head1 COPYRIGHT & LICENSE
102
103 Copyright 2005 Dobrica Pavlinusic, All Rights Reserved.
104
105 This program is free software; you can redistribute it and/or modify it
106 under the same terms as Perl itself.
107
108 =cut
109
110 1; # End of WebPAC::Input::MARC