Scan feature added, not documented yet
[idzebra-moved-to-github.git] / perl / lib / IDZebra / ScanList.pm
1 # $Id: ScanList.pm,v 1.1 2003-03-04 19:33:52 pop Exp $
2
3 # Zebra perl API header
4 # =============================================================================
5 package IDZebra::ScanList;
6
7 use strict;
8 use warnings;
9
10 BEGIN {
11     use IDZebra;
12     use IDZebra::Logger qw(:flags :calls);
13     use IDZebra::ScanEntry;
14     use Scalar::Util qw(weaken);
15     use Carp;
16     our $VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; 
17     our @ISA = qw(IDZebra::Logger);
18 }
19
20 1;
21 # -----------------------------------------------------------------------------
22 # Class constructors, destructor
23 # -----------------------------------------------------------------------------
24 sub new {
25     my ($proto,$session, %args) = @_;
26     my $class = ref($proto) || $proto;
27     my $self = {};
28     bless ($self, $class);
29
30     $self->{session} = $session;
31     weaken ($self->{session});
32
33     $self->{expression} = $args{expression};
34     $self->{databases} = $args{databases};
35
36     $self->{so} = IDZebra::ScanObj->new();
37
38     $self->{odr_stream} = IDZebra::odr_createmem($IDZebra::ODR_DECODE);
39     
40     $self->entries(num_entries => 0);
41     
42     return ($self);
43 }
44
45 sub DESTROY {
46     my $self = shift;
47
48     if ($self->{odr_stream}) {
49         IDZebra::odr_reset($self->{odr_stream});
50         IDZebra::odr_destroy($self->{odr_stream});
51         $self->{odr_stream} = undef;  
52     }
53
54     delete($self->{so});
55     delete($self->{session});
56 }
57
58 # =============================================================================
59 sub is_partial {
60     my ($self) = @_;
61     return ($self->{so}{is_partial});
62 }
63
64 sub position {
65     my ($self) = @_;
66     return ($self->{so}{position});
67 }
68
69 sub num_entries {
70     my ($self) = @_;
71     return ($self->{so}{num_entries});
72 }
73
74 sub errCode {
75     my ($self) = @_;
76     return ($self->{session}->errCode);
77 }
78
79 sub errString {
80     my ($self) = @_;
81     return ($self->{session}->errString);
82 }
83
84 # -----------------------------------------------------------------------------
85 sub entries {
86     my ($self, %args) = @_;
87
88     unless ($self->{session}{zh}) { 
89         croak ("Session is closed or out of scope");
90     }
91
92     my $so=$self->{so};
93     
94     $so->{position}    = defined($args{position})    ? $args{position}    : 1;
95     $so->{num_entries} = defined($args{num_entries}) ? $args{num_entries} : 20;
96     
97     my @origdbs;
98     if ($self->{databases}) {
99         @origdbs = $self->{session}->databases;
100         $self->{session}->databases(@{$self->{databases}});
101     }
102
103     $so->{is_partial} = 0;
104
105     my $r = IDZebra::scan_PQF($self->{session}{zh}, $so,
106                               $self->{odr_stream},
107                               $self->{expression});
108
109     if ($self->{session}->errCode) {
110         croak ("Error in scan, code: ".$self->{session}->errCode . 
111                ", message: ".$self->{session}->errString);
112     }
113     
114     my @res;
115     for (my $i=1; $i<=$so->{num_entries}; $i++) {
116         
117         push (@res, 
118             IDZebra::ScanEntry->new(entry    => IDZebra::getScanEntry($so, $i),
119                                     position => $i,
120                                     list     => $self));
121     }
122  
123     if ($self->{databases}) {
124         $self->{session}->databases(@origdbs);
125     }
126
127     IDZebra::odr_reset($self->{odr_stream});
128
129     $self->{so} = $so;
130
131     return (@res);
132 }
133
134
135 # ============================================================================
136 __END__
137
138 =head1 NAME
139
140 IDZebra::ScanList - Scan results
141
142 =head1 SYNOPSIS
143
144 =head1 DESCRIPTION
145
146 =head1 PROPERTIES
147
148 =head1 COPYRIGHT
149
150 Fill in
151
152 =head1 AUTHOR
153
154 Peter Popovics, pop@technomat.hu
155
156 =head1 SEE ALSO
157
158 IDZebra, IDZebra::Session, Zebra documentation
159
160 =cut