X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2FZOOM%2FIRSpy%2FConnection.pm;h=bd44b12aeb09de10cfb6f23095f8a30c4f9b85a7;hb=d8931f76879e7d7b5d0cb8340291b7d2dac65c91;hp=79238932794fc633755bf4618e1cffc289750b69;hpb=03aecbc2f35399498bb43a579a0ac33bfbf16a20;p=irspy-moved-to-github.git diff --git a/lib/ZOOM/IRSpy/Connection.pm b/lib/ZOOM/IRSpy/Connection.pm index 7923893..bd44b12 100644 --- a/lib/ZOOM/IRSpy/Connection.pm +++ b/lib/ZOOM/IRSpy/Connection.pm @@ -1,4 +1,4 @@ -# $Id: Connection.pm,v 1.2 2006-10-11 16:46:01 mike Exp $ +# $Id: Connection.pm,v 1.12 2007-04-27 14:04:40 mike Exp $ package ZOOM::IRSpy::Connection; @@ -9,8 +9,12 @@ use warnings; use ZOOM; our @ISA = qw(ZOOM::Connection); +use ZOOM::IRSpy::Record; +use ZOOM::IRSpy::Utils qw(cql_target render_record irspy_identifier2target); + use ZOOM::IRSpy::Task::Connect; use ZOOM::IRSpy::Task::Search; +use ZOOM::IRSpy::Task::Retrieve; =head1 NAME @@ -25,24 +29,41 @@ Keeping the private data in these objects removes the need for ugly mappings in the IRSpy object itself; adding the methods makes the application code cleaner. -The constructor takes an additional first argument, a reference to the -IRSpy object that it is associated with. +The constructor takes an two additional leading arguments: a reference +to the IRSpy object that it is associated with, and the target ID of +the connection. =cut sub create { my $class = shift(); my $irspy = shift(); + my $target = shift(); my $this = $class->SUPER::create(@_); + $this->option(host => irspy_identifier2target($target)); $this->{irspy} = $irspy; - $this->{record} = undef; $this->{tasks} = []; + my $query = cql_target($target); + my $rs = $irspy->{conn}->search(new ZOOM::Query::CQL($query)); + my $n = $rs->size(); + $this->log("irspy", "query '$query' found $n records"); + my $zeerex; + $zeerex = render_record($rs, 0, "zeerex") if $n > 0; + $this->{record} = new ZOOM::IRSpy::Record($this, + irspy_identifier2target($target), $zeerex); + return $this; } +sub destroy { + my $this = shift(); + $this->SUPER::destroy(@_); +} + + sub irspy { my $this = shift(); return $this->{irspy}; @@ -73,7 +94,7 @@ sub current_task { my $old = $this->{current_task}; if (defined $new) { $this->{current_task} = $new; - $this->log("irspy_debug", "set current task to $new"); + $this->log("irspy_task", "set current task to $new"); } return $old; @@ -87,7 +108,7 @@ sub next_task { my $old = $this->{next_task}; if (defined $new) { $this->{next_task} = $new; - $this->log("irspy_debug", "set next task to $new"); + $this->log("irspy_task", "set next task to $new"); } return $old; @@ -104,19 +125,28 @@ sub log { sub irspy_connect { my $this = shift(); - my(%cb) = @_; + my($udata, $options, %cb) = @_; - $this->add_task(new ZOOM::IRSpy::Task::Connect($this, %cb)); - $this->log("irspy", "registered connect()"); + $this->add_task(new ZOOM::IRSpy::Task::Connect + ($this, $udata, $options, %cb)); } sub irspy_search_pqf { my $this = shift(); - my($query, %cb) = @_; + my($query, $udata, $options, %cb) = @_; + + $this->add_task(new ZOOM::IRSpy::Task::Search + ($query, $this, $udata, $options, %cb)); +} + + +sub irspy_rs_record { + my $this = shift(); + my($rs, $index0, $udata, $options, %cb) = @_; - $this->add_task(new ZOOM::IRSpy::Task::Search($query, $this, %cb)); - $this->log("irspy", "registered search_pqf($query)"); + $this->add_task(new ZOOM::IRSpy::Task::Retrieve + ($rs, $index0, $this, $udata, $options, %cb)); } @@ -127,9 +157,17 @@ sub add_task { my $tasks = $this->{tasks}; $tasks->[-1]->{next} = $task if @$tasks > 0; push @$tasks, $task; - $this->log("irspy", "added task $task"); + $this->log("irspy_task", "added task $task"); +} + + +sub render { + my $this = shift(); + return ref($this) . "(" . $this->option("host") . ")"; } +use overload '""' => \&render; + =head1 SEE ALSO