]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm
fixed transaction support and tested with updates to biblio::record_node
[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 $success = 1;
55         try {
56                 $success = biblio::record_entry->update($entry);
57         } catch Error with {
58                 $success = 0;
59         };
60
61         return $success;
62 }
63 __PACKAGE__->register_method(
64         method          => 'update_record_entry',
65         api_name        => 'open-ils.storage.biblio.record_entry.update',
66         api_level       => 1,
67         argc            => 1,
68 );
69
70 sub delete_record_entry {
71         my $self = shift;
72         my $client = shift;
73         my $entry = shift;
74         
75         my $rec = biblio::record_entry->delete($entry);
76         return 0 unless ($rec);
77         return 1;
78 }
79 __PACKAGE__->register_method(
80         method          => 'delete_record_entry',
81         api_name        => 'open-ils.storage.biblio.record_entry.delete',
82         api_level       => 1,
83         argc            => 1,
84 );
85
86 sub search_record_entry_one_field {
87         my $self = shift;
88         my $client = shift;
89         my @ids = @_;
90
91         (my $search_field = $self->api_name) =~ s/^.*\.search\.([^\.]+).*?$/$1/o;
92
93         for my $id ( @ids ) {
94                 next unless ($id);
95                 
96                 for my $rec ( biblio::record_entry->fast_fieldmapper($search_field => "$id") ) {
97                         $client->respond( $rec ) if ($rec);
98                 }
99
100                 last if ($self->api_name !~ /list/o);
101         }
102         return undef;
103 }
104 __PACKAGE__->register_method(
105         method          => 'search_record_entry_one_field',
106         api_name        => 'open-ils.storage.biblio.record_entry.search.tcn_value',
107         api_level       => 1,
108         argc            => 1,
109         stream          => 1,
110 );
111 __PACKAGE__->register_method(
112         method          => 'search_record_entry_one_field',
113         api_name        => 'open-ils.storage.biblio.record_entry.search.tcn_value.list',
114         api_level       => 1,
115         argc            => 1,
116         stream          => 1,
117 );
118
119 sub get_record_entry {
120         my $self = shift;
121         my $client = shift;
122         my @ids = @_;
123
124         for my $id ( @ids ) {
125                 next unless ($id);
126                 
127                 my ($rec) = biblio::record_entry->fast_fieldmapper($id);
128                 $client->respond( $rec ) if ($rec);
129
130                 last if ($self->api_name !~ /list/o);
131         }
132         return undef;
133 }
134 __PACKAGE__->register_method(
135         method          => 'get_record_entry',
136         api_name        => 'open-ils.storage.biblio.record_entry.retrieve',
137         api_level       => 1,
138         argc            => 1,
139 );
140 __PACKAGE__->register_method(
141         method          => 'get_record_entry',
142         api_name        => 'open-ils.storage.biblio.record_entry.retrieve.list',
143         api_level       => 1,
144         argc            => 1,
145         stream          => 1,
146 );
147
148 sub create_record_node {
149         my $self = shift;
150         my $client = shift;
151         my $node = shift;;
152
153         try {
154                 my $n = biblio::record_node->create($node);
155                 $client->respond( $n->id );
156         } catch Error with {
157                 $client->respond( 0 );
158         };
159
160         return undef;
161 }
162 __PACKAGE__->register_method(
163         method          => 'create_record_node',
164         api_name        => 'open-ils.storage.biblio.record_node.create',
165         api_level       => 1,
166         argc            => 1,
167 );
168
169 sub update_record_node {
170         my $self = shift;
171         my $client = shift;
172         my $node = shift;;
173
174         my $success = 1;
175         try {
176                 $success = biblio::record_node->update($node);
177         } catch Error with {
178                 $success = 0;
179         };
180
181         return $success;
182 }
183 __PACKAGE__->register_method(
184         method          => 'update_record_node',
185         api_name        => 'open-ils.storage.biblio.record_node.update',
186         api_level       => 1,
187         argc            => 1,
188 );
189
190 sub delete_record_node {
191         my $self = shift;
192         my $client = shift;
193         my $node = shift;
194         
195         my $rec = biblio::record_node->delete($node);
196         return 0 unless ($rec);
197         return 1;
198 }
199 __PACKAGE__->register_method(
200         method          => 'delete_record_node',
201         api_name        => 'open-ils.storage.biblio.record_node.delete',
202         api_level       => 1,
203         argc            => 1,
204 );
205
206 sub get_record_node {
207         my $self = shift;
208         my $client = shift;
209         my @ids = @_;
210
211         for my $id ( @ids ) {
212                 next unless ($id);
213                 
214                 my ($rec) = biblio::record_node->fast_fieldmapper($id);
215                 $client->respond( $rec ) if ($rec);
216
217                 last if ($self->api_name !~ /list/o);
218         }
219         return undef;
220 }
221 __PACKAGE__->register_method(
222         method          => 'get_record_node',
223         api_name        => 'open-ils.storage.biblio.record_node.retrieve',
224         api_level       => 1,
225         argc            => 1,
226 );
227 __PACKAGE__->register_method(
228         method          => 'get_record_node',
229         api_name        => 'open-ils.storage.biblio.record_node.retrieve.list',
230         api_level       => 1,
231         argc            => 1,
232         stream          => 1,
233 );
234
235 sub create_record_nodeset {
236         my $self = shift;
237         my $client = shift;
238         my @nodes = @_;
239
240         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
241
242         my @success;
243         while ( my $node = shift(@nodes) ) {
244                 my ($res) = $method->run( $node );
245                 push(@success, $res) if ($res >= 0);
246         }
247         
248         my $insert_total = 0;
249         $insert_total += $_ for (@success);
250
251         return $insert_total;
252 }
253 __PACKAGE__->register_method(
254         method          => 'create_record_nodeset',
255         api_name        => 'open-ils.storage.biblio.record_node.batch.create',
256         api_level       => 1,
257         argc            => 1,
258 );
259
260 sub update_record_nodeset {
261         my $self = shift;
262         my $client = shift;
263         my @stuff = @_;
264
265         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.update');
266
267         my @success;
268         while ( my $node = shift(@stuff) ) {
269                 my ($res) = $method->run( $node );
270                 push(@success, $res) if ($res >= 0);
271         }
272
273         my $update_total;
274         $update_total += $_ for (@success);
275         
276         return $update_total;
277 }
278 __PACKAGE__->register_method(
279         method          => 'update_record_nodeset',
280         api_name        => 'open-ils.storage.biblio.record_node.batch.update',
281         api_level       => 1,
282         argc            => 1,
283 );
284
285 sub delete_record_nodeset {
286         my $self = shift;
287         my $client = shift;
288
289         my $method = $self->method_lookup('open-ils.storage.biblio.record_node.delete');
290
291         my @success;
292         while ( my $node = shift(@_) ) {
293                 my ($res) = $method->run( $node );
294                 push(@success, $res) if ($res >= 0);
295         }
296
297         my $delete_total = 0;
298         $delete_total += $_ for (@success);
299         
300         return $delete_total;
301 }
302 __PACKAGE__->register_method(
303         method          => 'delete_record_nodeset',
304         api_name        => 'open-ils.storage.biblio.record_node.batch.delete',
305         api_level       => 1,
306         argc            => 1,
307 );
308
309 sub get_record_nodeset {
310         my $self = shift;
311         my $client = shift;
312         my @ids = @_;
313
314         for my $id ( @ids ) {
315                 next unless ($id);
316                 
317                 $client->respond( [biblio::record_node->fast_fieldmapper( owner_doc => "$id", {order_by => 'intra_doc_id'} )] );
318                 
319                 last if ($self->api_name !~ /list/o);
320         }
321         return undef;
322 }
323 __PACKAGE__->register_method(
324         method          => 'get_record_nodeset',
325         api_name        => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
326         api_level       => 1,
327         argc            => 1,
328 );
329 __PACKAGE__->register_method(
330         method          => 'get_record_nodeset',
331         api_name        => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',
332         api_level       => 1,
333         argc            => 1,
334         stream          => 1,
335 );
336
337
338 1;