From 8e52941bb89b65380715b5349f11ea07097ab6a7 Mon Sep 17 00:00:00 2001 From: miker Date: Tue, 8 Mar 2005 23:09:05 +0000 Subject: [PATCH] adding propper fieldmapper support for actor and biblio classes git-svn-id: svn://svn.open-ils.org/ILS/trunk@281 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../Application/Storage/Publisher/actor.pm | 74 +++- .../Application/Storage/Publisher/biblio.pm | 333 +++++++++++------- 2 files changed, 282 insertions(+), 125 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm index 274a6856e4..702c8a88b7 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/actor.pm @@ -18,8 +18,13 @@ sub get_user_record { my $rec; - ($rec) = actor::user->search( usrname => $id) if ($self->api_name =~/username/o); - ($rec) = actor::user->search( usrid => $id) if ($self->api_name =~/userid/o); + if ($self->api_name =~/username/o) { + ($rec) = actor::user->search( usrname => "$id"); + } elsif ($self->api_name =~/userid/o) { + ($rec) = actor::user->search( usrid => "$id"); + } else { + $rec = actor::user->retrieve("$id"); + } if ($rec) { @@ -39,29 +44,86 @@ sub get_user_record { } __PACKAGE__->register_method( method => 'get_user_record', - api_name => 'open-ils.storage.actor.user.retrieve.username', + api_name => 'open-ils.storage.actor.user.retrieve', + api_level => 1, + argc => 1, +); +__PACKAGE__->register_method( + method => 'get_user_record', + api_name => 'open-ils.storage.actor.user.search.username', + api_level => 1, + argc => 1, +); +__PACKAGE__->register_method( + method => 'get_user_record', + api_name => 'open-ils.storage.actor.user.search.userid', api_level => 1, argc => 1, ); __PACKAGE__->register_method( method => 'get_user_record', - api_name => 'open-ils.storage.actor.user.retrieve.userid', + api_name => 'open-ils.storage.actor.user.retrieve.list', api_level => 1, argc => 1, ); __PACKAGE__->register_method( method => 'get_user_record', - api_name => 'open-ils.storage.actor.user.retrieve.username.list', + api_name => 'open-ils.storage.actor.user.search.username.list', api_level => 1, stream => 1, argc => 1, ); __PACKAGE__->register_method( method => 'get_user_record', - api_name => 'open-ils.storage.actor.user.retrieve.userid.list', + api_name => 'open-ils.storage.actor.user.search.userid.list', api_level => 1, stream => 1, argc => 1, ); +sub update_user_record { + my $self = shift; + my $client = shift; + my $user = shift; + + my $rec = actor::user->retrieve(''.$user->id); + return 0 unless ($rec); + + $rec->autoupdate(0); + + for my $field ( Fieldmapper::actor::user->real_fields ) { + $rec->$field( $user->$field ); + } + + return 0 unless ($rec->is_changed); + + $rec->update; + + return 1; +} +__PACKAGE__->register_method( + method => 'update_user_record', + api_name => 'open-ils.storage.actor.user.update', + api_level => 1, + argc => 1, +); + +sub delete_record_entry { + my $self = shift; + my $client = shift; + my $user = shift; + + my $rec = actor::user->retrieve(''.$user->id); + return 0 unless ($rec); + + $rec->delete; + return 1; +} +__PACKAGE__->register_method( + method => 'delete_user_record', + api_name => 'open-ils.storage.actor.user.delete', + api_level => 1, + argc => 1, +); + 1; diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm index ff2fc875de..a644a18435 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/biblio.pm @@ -4,117 +4,15 @@ use OpenSRF::EX qw/:try/; use OpenILS::Application::Storage::CDBI::biblio; use OpenILS::Utils::Fieldmapper; -sub create_record_node { - my $self = shift; - my $client = shift; - my $node = shift;; - - try { - my $n = biblio::record_node->create($node); - $client->respond( $n->id ); - } catch Error with { - $client->respond( 0 ); - }; - - return undef; -} -__PACKAGE__->register_method( - method => 'create_record_node', - api_name => 'open-ils.storage.biblio.record_node.create', - api_level => 1, - argc => 1, -); - -sub update_record_node { - my $self = shift; - my $client = shift; - my $node = shift;; - - my $n = biblio::record_node->retrieve("$$node{id}"); - return undef unless ($n); - - for my $field ( keys %$node ) { - $n->$field( $$node{$field} ); - } - - try { - $n->update; - $client->respond( $n->id ); - } catch Error with { - $client->respond( 0 ); - }; - - return undef; -} -__PACKAGE__->register_method( - method => 'update_record_node', - api_name => 'open-ils.storage.biblio.record_node.update', - api_level => 1, - argc => 1, -); - - -sub create_record_nodeset { - my $self = shift; - my $client = shift; - - # COPY version... not working yet - if (0) { - - my $dbh = biblio::record_node->db_Main; - my @cols = grep { $_ ne biblio::record_node->primary } biblio::record_node->columns('All'); - - $dbh->do('COPY '. biblio::record_node->table .' ('.join(',',@cols).')'.' FROM STDIN'); - - while ( my $node = shift(@_) ) { - my @parts; - for my $col (@cols) { - my $part; - if ($part = $node->{$col}) { - push @parts, $dbh->quote($part); - } else { - push @parts, '\N'; - } - } - return 0 unless ($dbh->func(join("\t", map {s/^'(.*)'$/$1/o} @parts)."\n", 'putline')); - } - $dbh->func('\.', 'putline'); - return 1; - } else { - # INSERT version, works but slow - - my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create'); - - my @ids; - my $total = scalar(@ids); - my @success; - - while ( my $node = shift(@_) ) { - my ($res) = $method->run( $node ); - push @success, $res if ($res); - } - - if ($total == scalar(@success)) { - return 1; - } else { - return 0; - } - } -} -__PACKAGE__->register_method( - method => 'create_record_nodeset', - api_name => 'open-ils.storage.biblio.record_node.batch.create', - api_level => 1, - argc => 1, -); - sub create_record_entry { my $self = shift; my $client = shift; my $metadata = shift; + my %hash = map { ( $_ => $metadata->$_) } Fieldmapper::biblio::record_entry->real_fields; + try { - my $rec = biblio::record_entry->create($metadata); + my $rec = biblio::record_entry->create(\%hash); $client->respond( $rec->id ); } catch Error with { $client->respond( 0 ); @@ -151,42 +49,100 @@ sub update_record_entry { my $self = shift; my $client = shift; my $entry = shift; + + my $rec = biblio::record_entry->retrieve(''.$entry->id); + return 0 unless ($rec); - my $rec = biblio::record_entry->retrieve("$$entry{id}"); - return undef unless ($rec); + $rec->autoupdate(0); - for my $field ( keys %$node ) { - $rec->$field( $$node{$field} ); + for my $field ( Fieldmapper::biblio::record_entry->real_fields ) { + $rec->$field( $entry->$field ); } - try { - $rec->update; - $client->respond( $rec->id ); - } catech Error with { - $client->respond( 0 ); - }; + return 0 unless ($rec->is_changed); - return undef; + $rec->update; + + return 1; } __PACKAGE__->register_method( - method => 'update_record_node', - api_name => 'open-ils.storage.biblio.record_node.update', + method => 'update_record_entry', + api_name => 'open-ils.storage.biblio.record_entry.update', + api_level => 1, + argc => 1, +); + +sub delete_record_entry { + my $self = shift; + my $client = shift; + my $entry = shift; + + my $rec = biblio::record_entry->retrieve(''.$entry->id); + return 0 unless ($rec); + + $rec->delete; + return 1; +} +__PACKAGE__->register_method( + method => 'delete_record_entry', + api_name => 'open-ils.storage.biblio.record_entry.delete', api_level => 1, argc => 1, ); +sub search_record_entry_one_field { + my $self = shift; + my $client = shift; + my @ids = @_; + + (my $search_field = $self->api_name) =~ s/^.*retrieve\.([^\.]+).*?$/$1/o; + my @fields = Fieldmapper::biblio::record_entry->real_fields; + for my $id ( @ids ) { + next unless ($id); + + my $fm = new Fieldmapper::biblio::record_entry; + for my $rec ( biblio::record_entry->search($search_field => "$id") ) { + for my $f (@fields) { + $fm->$f( $rec->$f ); + } + $client->respond( $fm ) if ($rec); + } + + last if ($self->api_name !~ /list/o); + } + return undef; +} +__PACKAGE__->register_method( + method => 'search_record_entry_one_field', + api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value', + api_level => 1, + argc => 1, + stream => 1, +); +__PACKAGE__->register_method( + method => 'search_record_entry_one_field', + api_name => 'open-ils.storage.biblio.record_entry.search.tcn_value.list', + api_level => 1, + argc => 1, + stream => 1, +); sub get_record_entry { my $self = shift; my $client = shift; my @ids = @_; + my @fields = Fieldmapper::biblio::record_entry->real_fields; for my $id ( @ids ) { next unless ($id); + my $fm = new Fieldmapper::biblio::record_entry; my $rec = biblio::record_entry->retrieve("$id"); - $client->respond( $self->_cdbi2Hash( $rec ) ) if ($rec); + for my $f (@fields) { + $fm->$f( $rec->$f ); + } + $client->respond( $fm ) if ($rec); last if ($self->api_name !~ /list/o); } @@ -206,6 +162,73 @@ __PACKAGE__->register_method( stream => 1, ); +sub create_record_node { + my $self = shift; + my $client = shift; + my $node = shift;; + + my %hash = map { ( $_ => $node->$_) } Fieldmapper::biblio::record_node->real_fields; + + try { + my $n = biblio::record_node->create(\%hash); + $client->respond( $n->id ); + } catch Error with { + $client->respond( 0 ); + }; + + return undef; +} +__PACKAGE__->register_method( + method => 'create_record_node', + api_name => 'open-ils.storage.biblio.record_node.create', + api_level => 1, + argc => 1, +); + +sub update_record_node { + my $self = shift; + my $client = shift; + my $node = shift;; + + + my $n = biblio::record_node->retrieve(''.$node->id); + return 0 unless ($n); + + $n->autoupdate(0); + + for my $field ( Fieldmapper::biblio::record_node->real_fields ) { + $n->$field( $node->$field ); + } + + $n->update; + return 1; +} +__PACKAGE__->register_method( + method => 'update_record_node', + api_name => 'open-ils.storage.biblio.record_node.update', + api_level => 1, + argc => 1, +); + +sub delete_record_node { + my $self = shift; + my $client = shift; + my $node = shift; + + my $rec = biblio::record_node->retrieve(''.$node->id); + return 0 unless ($rec); + + $rec->delete; + + return 1; +} +__PACKAGE__->register_method( + method => 'delete_record_node', + api_name => 'open-ils.storage.biblio.record_node.delete', + api_level => 1, + argc => 1, +); + sub get_record_node { my $self = shift; my $client = shift; @@ -235,6 +258,78 @@ __PACKAGE__->register_method( stream => 1, ); +sub create_record_nodeset { + my $self = shift; + my $client = shift; + + my $method = $self->method_lookup('open-ils.storage.biblio.record_node.create'); + + my @success; + while ( my $node = shift(@_) ) { + my ($res) = $method->run( $node ); + push @success, $res if ($res); + } + + my $insert_total = 0; + $insert_total += $_ for (@success); + + return $insert_total; +} +__PACKAGE__->register_method( + method => 'create_record_nodeset', + api_name => 'open-ils.storage.biblio.record_node.batch.create', + api_level => 1, + argc => 1, +); + +sub update_record_nodeset { + my $self = shift; + my $client = shift; + + my $method = $self->method_lookup('open-ils.storage.biblio.record_node.update'); + + my @success; + while ( my $node = shift(@_) ) { + my ($res) = $method->run( $node ); + push @success, $res if ($res); + } + + my $update_total = 0; + $update_total += $_ for (@success); + + return $update_total; +} +__PACKAGE__->register_method( + method => 'create_record_nodeset', + api_name => 'open-ils.storage.biblio.record_node.batch.update', + api_level => 1, + argc => 1, +); + +sub delete_record_nodeset { + my $self = shift; + my $client = shift; + + my $method = $self->method_lookup('open-ils.storage.biblio.record_node.delete'); + + my @success; + while ( my $node = shift(@_) ) { + my ($res) = $method->run( $node ); + push @success, $res if ($res); + } + + my $delete_total = 0; + $delete_total += $_ for (@success); + + return $delete_total; +} +__PACKAGE__->register_method( + method => 'create_record_nodeset', + api_name => 'open-ils.storage.biblio.record_node.batch.delete', + api_level => 1, + argc => 1, +); + sub get_record_nodeset { my $self = shift; my $client = shift; -- 2.43.2