use HyperEstraier;
use Text::Iconv;
use Data::Dumper;
+use LWP::Simple;
+use URI::Escape;
=head1 NAME
=head1 VERSION
-Version 0.01
+Version 0.02
=cut
-our $VERSION = '0.01';
+our $VERSION = '0.02';
=head1 SYNOPSIS
Connect to Hyper Estraier index using HTTP
my $est = new WebPAC::Output::Estraier(
- url => 'http://localhost:1978/node/webpac2',
+ masterurl => 'http://localhost:1978/',
user => 'admin',
passwd => 'admin',
database => 'demo',
=over 4
-=item url
+=item masterurl
URI to C<estmaster> node
my $log = $self->_get_logger;
- foreach my $p (qw/url user passwd/) {
+ $log->debug("self: ", sub { Dumper($self) });
+
+ foreach my $p (qw/masterurl user passwd database/) {
$log->logdie("need $p") unless ($self->{$p});
}
- $log->info("opening Hyper Estraier index $self->{'url'}");
+ my $url = $self->{masterurl} . '/node/' . $self->{database};
+ $url =~ s#//#/#g;
+ $self->{url} = $url;
+
+ $log->info("opening Hyper Estraier index $self->{url}");
- $self->{'db'} = HyperEstraier::Node->new($self->{'url'});
- $self->{'db'}->set_auth($self->{'user'}, $self->{'passwd'});
+ my @nodes = $self->est_master( action => 'nodelist' );
+
+ if (! grep(/$self->{database}/, @nodes)) {
+ $log->info("creating index $url");
+ $self->est_master(
+ action => 'nodeadd',
+ name => $self->{database},
+ label => "WebPAC $self->{database}",
+ ) || $log->logdie("can't create Hyper Estraier node $self->{database}");
+ }
+
+ $self->{'db'} = HyperEstraier::Node->new($self->{url});
+ $self->{'db'}->set_auth($self->{'user'}, $self->{passwd});
my $encoding = $self->{'encoding'} || 'ISO-8859-2';
$log->info("using encoding $encoding");
return 1;
}
+=head2 est_master
+
+Issue administrative commands to C<estmaster> process and receive response
+as array of lines
+
+ my $nodelist = $self->est_master( action => nodelist );
+
+=cut
+
+my $estmaster_actions = {
+ userdel => [ qw/name/ ],
+ nodelist => [],
+ nodeadd => [ qw/name label/ ],
+ nodedel => [ qw/name/ ],
+};
+
+sub est_master {
+ my $self = shift;
+ my $args = {@_};
+ my $log = $self->_get_logger;
+
+ $log->debug(Dumper($args));
+
+ my $action = $args->{action} || $log->logconfess("no action specified");
+
+ $log->logdie("action '$action' isn't supported") unless ($estmaster_actions->{$action});
+
+ my $url = $self->{masterurl} . '/master?action=' . $action;
+
+ foreach my $arg (@{ $estmaster_actions->{$action} }) {
+ $log->logdie("missing parametar $arg for action $action") unless ($args->{$arg});
+ $url .= '&' . $arg . '=' . uri_escape( $args->{$arg} );
+ }
+
+ $log->debug("calling $url");
+
+ my $tsv = get($url);
+
+ if (! $tsv) {
+ $log->warn("unable to call $url");
+ return;
+ }
+
+ return split(/\n/, $tsv);
+}
+
=head1 AUTHOR
Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>