]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm
fixed transaction support and tested with updates to biblio::record_node
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Storage / Publisher / metabib.pm
1 package OpenILS::Application::Storage::Publisher::metabib;
2 use base qw/OpenILS::Application::Storage/;
3 use vars qw/$VERSION/;
4 use OpenSRF::EX qw/:try/;
5 use OpenILS::Application::Storage::CDBI::metabib;
6 use OpenILS::Utils::Fieldmapper;
7
8 $VERSION = 1;
9
10 sub create_full_rec {
11         my $self = shift;
12         my $client = shift;
13         my $metadata = shift;
14
15         try {
16                 my $rec = metabib::full_rec->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_full_rec',
26         api_name        => 'open-ils.storage.metabib.full_rec.create',
27         api_level       => 1,
28         argc            => 2,
29         note            =><<TEXT
30 Method to create a "full_rec" (Koha) nodeset in the DB.
31 0|new->id = open-ils.storage.metabib.full_rec.create ( Fieldmapper::metabib::full_rec );
32 TEXT
33
34 );
35
36 sub update_full_rec {
37         my $self = shift;
38         my $client = shift;
39         my $entry = shift;
40         
41         try {
42                 metabib::full_rec->update($entry);
43         } catch Error with {
44                 return 0;
45         };
46         return 1;
47 }
48 __PACKAGE__->register_method(
49         method          => 'update_full_rec',
50         api_name        => 'open-ils.storage.metabib.full_rec.update',
51         api_level       => 1,
52         argc            => 1,
53 );
54
55 sub delete_full_rec {
56         my $self = shift;
57         my $client = shift;
58         my $entry = shift;
59         
60         try {
61                 metabib::full_rec->delete($entry);
62         } catch Error with {
63                 return 0;
64         };
65         return 1;
66 }
67 __PACKAGE__->register_method(
68         method          => 'delete_full_rec',
69         api_name        => 'open-ils.storage.metabib.full_rec.delete',
70         api_level       => 1,
71         argc            => 1,
72 );
73
74 sub get_full_rec {
75         my $self = shift;
76         my $client = shift;
77         my @ids = @_;
78
79         for my $id ( @ids ) {
80                 next unless ($id);
81                 
82                 my ($rec) = metabib::full_rec->fast_fieldmapper($id);
83                 $client->respond( $rec ) if ($rec);
84
85                 last if ($self->api_name !~ /list/o);
86         }
87         return undef;
88 }
89 __PACKAGE__->register_method(
90         method          => 'get_full_rec',
91         api_name        => 'open-ils.storage.metabib.full_rec.retrieve',
92         api_level       => 1,
93         argc            => 1,
94 );
95 __PACKAGE__->register_method(
96         method          => 'get_full_rec',
97         api_name        => 'open-ils.storage.metabib.full_rec.retrieve.list',
98         api_level       => 1,
99         argc            => 1,
100         stream          => 1,
101 );
102
103
104 sub create_record_nodeset {
105         my $self = shift;
106         my $client = shift;
107         my @nodes = @_;
108
109         my $method = $self->method_lookup('open-ils.storage.metabib.record_node.create');
110
111         my @success;
112         while ( my $node = shift(@nodes) ) {
113                 my ($res) = $method->run( $node );
114                 push @success, $res if ($res);
115         }
116         
117         my $insert_total = 0;
118         $insert_total += $_ for (@success);
119
120         return $insert_total;
121 }
122 __PACKAGE__->register_method(
123         method          => 'create_record_nodeset',
124         api_name        => 'open-ils.storage.metabib.record_node.batch.create',
125         api_level       => 1,
126         argc            => 1,
127 );
128
129 sub update_record_nodeset {
130         my $self = shift;
131         my $client = shift;
132
133         my $method = $self->method_lookup('open-ils.storage.metabib.record_node.update');
134
135         my @success;
136         while ( my $node = shift(@_) ) {
137                 my ($res) = $method->run( $node );
138                 push @success, $res if ($res);
139         }
140
141         my $update_total = 0;
142         $update_total += $_ for (@success);
143         
144         return $update_total;
145 }
146 __PACKAGE__->register_method(
147         method          => 'create_record_nodeset',
148         api_name        => 'open-ils.storage.metabib.record_node.batch.update',
149         api_level       => 1,
150         argc            => 1,
151 );
152
153 sub delete_record_nodeset {
154         my $self = shift;
155         my $client = shift;
156
157         my $method = $self->method_lookup('open-ils.storage.metabib.record_node.delete');
158
159         my @success;
160         while ( my $node = shift(@_) ) {
161                 my ($res) = $method->run( $node );
162                 push @success, $res if ($res);
163         }
164
165         my $delete_total = 0;
166         $delete_total += $_ for (@success);
167         
168         return $delete_total;
169 }
170 __PACKAGE__->register_method(
171         method          => 'create_record_nodeset',
172         api_name        => 'open-ils.storage.metabib.record_node.batch.delete',
173         api_level       => 1,
174         argc            => 1,
175 );
176
177 sub get_record_nodeset {
178         my $self = shift;
179         my $client = shift;
180         my @ids = @_;
181
182         for my $id ( @ids ) {
183                 next unless ($id);
184                 
185                 $client->respond( [metabib::record_node->fast_fieldmapper( owner_doc => "$id", {order_by => 'intra_doc_id'} )] );
186                 
187                 last if ($self->api_name !~ /list/o);
188         }
189         return undef;
190 }
191 __PACKAGE__->register_method(
192         method          => 'get_record_nodeset',
193         api_name        => 'open-ils.storage.metabib.full_rec.nodeset.retrieve',
194         api_level       => 1,
195         argc            => 1,
196 );
197 __PACKAGE__->register_method(
198         method          => 'get_record_nodeset',
199         api_name        => 'open-ils.storage.metabib.full_rec.nodeset.retrieve.list',
200         api_level       => 1,
201         argc            => 1,
202         stream          => 1,
203 );
204
205
206 1;