]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm
logic clarification in the nodeset creator
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Storage / Publisher / biblio.pm
1 package OpenILS::Application::Storage::Publisher::biblio;
2 use base qw/OpenILS::Application::Storage/;
3 use vars qw/$VERSION/;
4 use OpenSRF::EX qw/:try/;
5 use OpenILS::Application::Storage::CDBI::biblio;
6 use OpenILS::Utils::Fieldmapper;
7
8 $VERSION = 1;
9
10 sub create_record_entry {
11         my $self = shift;
12         my $client = shift;
13         my $metadata = shift;
14
15         try {
16                 my $rec = biblio::record_entry->create($metadata);
17                 $client->respond( $rec->id );
18         } catch Error with {
19                 $client->respond( 0 );
20         };
21
22         return undef;
23 }
24 __PACKAGE__->register_method(
25         method          => 'create_record_entry',
26         api_name        => 'open-ils.storage.biblio.record_entry.create',
27         api_level       => 1,
28         argc            => 2,
29         note            => <<TEXT,
30
31 Params should be passed as a hash ref! 
32 Required fields are:
33
34         creator
35         editor
36
37 Please at least try to fill in:
38
39         tcn_source
40         tcn_value
41         metarecord
42         source
43         active
44
45 TEXT
46
47 );
48
49 sub update_record_entry {
50         my $self = shift;
51         my $client = shift;
52         my $entry = shift;
53         
54         my $rec = biblio::record_entry->update($entry);
55         return 0 unless ($rec);
56         return 1;
57 }
58 __PACKAGE__->register_method(
59         method          => 'update_record_entry',
60         api_name        => 'open-ils.storage.biblio.record_entry.update',
61         api_level       => 1,
62         argc            => 1,
63 );
64
65 sub delete_record_entry {
66         my $self = shift;
67         my $client = shift;
68         my $entry = shift;
69         
70         my $rec = biblio::record_entry->delete($entry);
71         return 0 unless ($rec);
72         return 1;
73 }
74 __PACKAGE__->register_method(
75         method          => 'delete_record_entry',
76         api_name        => 'open-ils.storage.biblio.record_entry.delete',
77         api_level       => 1,
78         argc            => 1,
79 );
80
81 sub search_record_entry_one_field {
82         my $self = shift;
83         my $client = shift;
84         my @ids = @_;
85
86         (my $search_field = $self->api_name) =~ s/^.*\.search\.([^\.]+).*?$/$1/o;
87
88         for my $id ( @ids ) {
89                 next unless ($id);
90                 
91                 for my $rec ( biblio::record_entry->fast_fieldmapper($search_field => "$id") ) {
92                         $client->respond( $rec ) if ($rec);
93                 }
94
95                 last if ($self->api_name !~ /list/o);
96         }
97         return undef;
98 }
99 __PACKAGE__->register_method(
100         method          => 'search_record_entry_one_field',
101         api_name        => 'open-ils.storage.biblio.record_entry.search.tcn_value',
102         api_level       => 1,
103         argc            => 1,
104         stream          => 1,
105 );
106 __PACKAGE__->register_method(
107         method          => 'search_record_entry_one_field',
108         api_name        => 'open-ils.storage.biblio.record_entry.search.tcn_value.list',
109         api_level       => 1,
110         argc            => 1,
111         stream          => 1,
112 );
113
114 sub get_record_entry {
115         my $self = shift;
116         my $client = shift;
117         my @ids = @_;
118
119         for my $id ( @ids ) {
120                 next unless ($id);
121                 
122                 my ($rec) = biblio::record_entry->fast_fieldmapper($id);
123                 $client->respond( $rec ) if ($rec);
124
125                 last if ($self->api_name !~ /list/o);
126         }
127         return undef;
128 }
129 __PACKAGE__->register_method(
130         method          => 'get_record_entry',
131         api_name        => 'open-ils.storage.biblio.record_entry.retrieve',
132         api_level       => 1,
133         argc            => 1,
134 );
135 __PACKAGE__->register_method(
136         method          => 'get_record_entry',
137         api_name        => 'open-ils.storage.biblio.record_entry.retrieve.list',
138         api_level       => 1,
139         argc            => 1,
140         stream          => 1,
141 );
142
143 sub create_record_node {
144         my $self = shift;
145         my $client = shift;
146         my $node = shift;;
147
148         try {
149                 my $n = biblio::record_node->create($node);
150                 $client->respond( $n->id );
151         } catch Error with {
152                 $client->respond( 0 );
153         };
154
155         return undef;
156 }
157 __PACKAGE__->register_method(
158         method          => 'create_record_node',
159         api_name        => 'open-ils.storage.biblio.record_node.create',
160         api_level       => 1,
161         argc            => 1,
162 );
163
164 sub update_record_node {
165         my $self = shift;
166         my $client = shift;
167         my $node = shift;;
168
169         my $n = biblio::record_node->update($node);
170         return 0 unless ($n);
171         return 1;
172 }
173 __PACKAGE__->register_method(
174         method          => 'update_record_node',
175         api_name        => 'open-ils.storage.biblio.record_node.update',
176         api_level       => 1,
177         argc            => 1,
178 );
179
180 sub delete_record_node {
181         my $self = shift;
182         my $client = shift;
183         my $node = shift;
184         
185         my $rec = biblio::record_node->delete($node);
186         return 0 unless ($rec);
187         return 1;
188 }
189 __PACKAGE__->register_method(
190         method          => 'delete_record_node',
191         api_name        => 'open-ils.storage.biblio.record_node.delete',
192         api_level       => 1,
193         argc            => 1,
194 );
195
196 sub get_record_node {
197         my $self = shift;
198         my $client = shift;
199         my @ids = @_;
200
201         for my $id ( @ids ) {
202                 next unless ($id);
203                 
204                 my ($rec) = biblio::record_node->fast_fieldmapper($id);
205                 $client->respond( $rec ) if ($rec);
206
207                 last if ($self->api_name !~ /list/o);
208         }
209         return undef;
210 }
211 __PACKAGE__->register_method(
212         method          => 'get_record_node',
213         api_name        => 'open-ils.storage.biblio.record_node.retrieve',
214         api_level       => 1,
215         argc            => 1,
216 );
217 __PACKAGE__->register_method(
218         method          => 'get_record_node',
219         api_name        => 'open-ils.storage.biblio.record_node.retrieve.list',
220         api_level       => 1,
221         argc            => 1,
222         stream          => 1,
223 );
224
225 sub create_record_nodeset {
226         my $self = shift;
227         my $client = shift;
228         my @nodes = @_;
229
230         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
231
232         my @success;
233         while ( my $node = shift(@nodes) ) {
234                 my ($res) = $method->run( $node );
235                 push @success, $res if ($res);
236         }
237         
238         my $insert_total = 0;
239         $insert_total += $_ for (@success);
240
241         return $insert_total;
242 }
243 __PACKAGE__->register_method(
244         method          => 'create_record_nodeset',
245         api_name        => 'open-ils.storage.biblio.record_node.batch.create',
246         api_level       => 1,
247         argc            => 1,
248 );
249
250 sub update_record_nodeset {
251         my $self = shift;
252         my $client = shift;
253
254         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.update');
255
256         my @success;
257         while ( my $node = shift(@_) ) {
258                 my ($res) = $method->run( $node );
259                 push @success, $res if ($res);
260         }
261
262         my $update_total = 0;
263         $update_total += $_ for (@success);
264         
265         return $update_total;
266 }
267 __PACKAGE__->register_method(
268         method          => 'create_record_nodeset',
269         api_name        => 'open-ils.storage.biblio.record_node.batch.update',
270         api_level       => 1,
271         argc            => 1,
272 );
273
274 sub delete_record_nodeset {
275         my $self = shift;
276         my $client = shift;
277
278         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.delete');
279
280         my @success;
281         while ( my $node = shift(@_) ) {
282                 my ($res) = $method->run( $node );
283                 push @success, $res if ($res);
284         }
285
286         my $delete_total = 0;
287         $delete_total += $_ for (@success);
288         
289         return $delete_total;
290 }
291 __PACKAGE__->register_method(
292         method          => 'create_record_nodeset',
293         api_name        => 'open-ils.storage.biblio.record_node.batch.delete',
294         api_level       => 1,
295         argc            => 1,
296 );
297
298 sub get_record_nodeset {
299         my $self = shift;
300         my $client = shift;
301         my @ids = @_;
302
303         for my $id ( @ids ) {
304                 next unless ($id);
305                 
306                 $client->respond( [biblio::record_node->fast_fieldmapper( owner_doc => "$id", {order_by => 'intra_doc_id'} )] );
307                 
308                 last if ($self->api_name !~ /list/o);
309         }
310         return undef;
311 }
312 __PACKAGE__->register_method(
313         method          => 'get_record_nodeset',
314         api_name        => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
315         api_level       => 1,
316         argc            => 1,
317 );
318 __PACKAGE__->register_method(
319         method          => 'get_record_nodeset',
320         api_name        => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',
321         api_level       => 1,
322         argc            => 1,
323         stream          => 1,
324 );
325
326
327 1;