1 package OpenILS::Application::Storage::Publisher::biblio;
2 use base qw/OpenILS::Application::Storage/;
3 use OpenSRF::EX qw/:try/;
4 use OpenILS::Application::Storage::CDBI::biblio;
5 use OpenILS::Utils::Fieldmapper;
7 sub create_record_entry {
12 my %hash = map { ( $_ => $metadata->$_) } Fieldmapper::biblio::record_entry->real_fields;
15 my $rec = biblio::record_entry->create(\%hash);
16 $client->respond( $rec->id );
18 $client->respond( 0 );
23 __PACKAGE__->register_method(
24 method => 'create_record_entry',
25 api_name => 'open-ils.storage.biblio.record_entry.create',
30 Params should be passed as a hash ref!
36 Please at least try to fill in:
48 sub update_record_entry {
53 my $rec = biblio::record_entry->retrieve(''.$entry->id);
54 return 0 unless ($rec);
58 for my $field ( Fieldmapper::biblio::record_entry->real_fields ) {
59 $rec->$field( $entry->$field );
62 return 0 unless ($rec->is_changed);
68 __PACKAGE__->register_method(
69 method => 'update_record_entry',
70 api_name => 'open-ils.storage.biblio.record_entry.update',
75 sub delete_record_entry {
80 my $rec = biblio::record_entry->retrieve(''.$entry->id);
81 return 0 unless ($rec);
86 __PACKAGE__->register_method(
87 method => 'delete_record_entry',
88 api_name => 'open-ils.storage.biblio.record_entry.delete',
93 sub search_record_entry_one_field {
98 (my $search_field = $self->api_name) =~ s/^.*retrieve\.([^\.]+).*?$/$1/o;
100 my @fields = Fieldmapper::biblio::record_entry->real_fields;
101 for my $id ( @ids ) {
104 my $fm = new Fieldmapper::biblio::record_entry;
105 for my $rec ( biblio::record_entry->search($search_field => "$id") ) {
106 for my $f (@fields) {
109 $client->respond( $fm ) if ($rec);
112 last if ($self->api_name !~ /list/o);
116 __PACKAGE__->register_method(
117 method => 'search_record_entry_one_field',
118 api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value',
123 __PACKAGE__->register_method(
124 method => 'search_record_entry_one_field',
125 api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value.list',
131 sub get_record_entry {
136 my @fields = Fieldmapper::biblio::record_entry->real_fields;
137 for my $id ( @ids ) {
140 my $fm = new Fieldmapper::biblio::record_entry;
141 my $rec = biblio::record_entry->retrieve("$id");
142 for my $f (@fields) {
145 $client->respond( $fm ) if ($rec);
147 last if ($self->api_name !~ /list/o);
151 __PACKAGE__->register_method(
152 method => 'get_record_entry',
153 api_name => 'open-ils.storage.biblio.record_entry.retrieve',
157 __PACKAGE__->register_method(
158 method => 'get_record_entry',
159 api_name => 'open-ils.storage.biblio.record_entry.retrieve.list',
165 sub create_record_node {
170 my %hash = map { ( $_ => $node->$_) } Fieldmapper::biblio::record_node->real_fields;
173 my $n = biblio::record_node->create(\%hash);
174 $client->respond( $n->id );
176 $client->respond( 0 );
181 __PACKAGE__->register_method(
182 method => 'create_record_node',
183 api_name => 'open-ils.storage.biblio.record_node.create',
188 sub update_record_node {
194 my $n = biblio::record_node->retrieve(''.$node->id);
195 return 0 unless ($n);
199 for my $field ( Fieldmapper::biblio::record_node->real_fields ) {
200 $n->$field( $node->$field );
206 __PACKAGE__->register_method(
207 method => 'update_record_node',
208 api_name => 'open-ils.storage.biblio.record_node.update',
213 sub delete_record_node {
218 my $rec = biblio::record_node->retrieve(''.$node->id);
219 return 0 unless ($rec);
225 __PACKAGE__->register_method(
226 method => 'delete_record_node',
227 api_name => 'open-ils.storage.biblio.record_node.delete',
232 sub get_record_node {
237 for my $id ( @ids ) {
240 my $rec = biblio::record_node->retrieve("$id");
241 $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec);
243 last if ($self->api_name !~ /list/o);
247 __PACKAGE__->register_method(
248 method => 'get_record_node',
249 api_name => 'open-ils.storage.biblio.record_node.retrieve',
253 __PACKAGE__->register_method(
254 method => 'get_record_node',
255 api_name => 'open-ils.storage.biblio.record_node.retrieve.list',
261 sub create_record_nodeset {
265 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create');
268 while ( my $node = shift(@_) ) {
269 my ($res) = $method->run( $node );
270 push @success, $res if ($res);
273 my $insert_total = 0;
274 $insert_total += $_ for (@success);
276 return $insert_total;
278 __PACKAGE__->register_method(
279 method => 'create_record_nodeset',
280 api_name => 'open-ils.storage.biblio.record_node.batch.create',
285 sub update_record_nodeset {
289 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.update');
292 while ( my $node = shift(@_) ) {
293 my ($res) = $method->run( $node );
294 push @success, $res if ($res);
297 my $update_total = 0;
298 $update_total += $_ for (@success);
300 return $update_total;
302 __PACKAGE__->register_method(
303 method => 'create_record_nodeset',
304 api_name => 'open-ils.storage.biblio.record_node.batch.update',
309 sub delete_record_nodeset {
313 my $method = $self->method_lookup('open-ils.storage.biblio.record_node.delete');
316 while ( my $node = shift(@_) ) {
317 my ($res) = $method->run( $node );
318 push @success, $res if ($res);
321 my $delete_total = 0;
322 $delete_total += $_ for (@success);
324 return $delete_total;
326 __PACKAGE__->register_method(
327 method => 'create_record_nodeset',
328 api_name => 'open-ils.storage.biblio.record_node.batch.delete',
333 sub get_record_nodeset {
338 my $table = biblio::record_node->table;
339 my @fields = Fieldmapper::biblio::record_node->real_fields;
340 my $field_list = join ',', @fields;
342 my $sth = biblio::record_node->db_Main->prepare_cached(<<" SQL");
346 ORDER BY intra_doc_id;
350 for my $id ( @ids ) {
353 $sth->execute("$id");
357 while (my $data = $sth->fetchrow_arrayref) {
358 my $n = new Fieldmapper::biblio::record_node;
360 for my $f ( @fields ) {
361 $n->$f( $$data[$index] );
368 $client->respond( \@nodeset );
370 last if ($self->api_name !~ /list/o);
374 __PACKAGE__->register_method(
375 method => 'get_record_nodeset',
376 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve',
380 __PACKAGE__->register_method(
381 method => 'get_record_nodeset',
382 api_name => 'open-ils.storage.biblio.record_entry.nodeset.retrieve.list',