Digital Public Library of America
[Biblio-Z3950.git] / server.pl
index 8d7494e..8262c2a 100755 (executable)
--- a/server.pl
+++ b/server.pl
@@ -6,9 +6,11 @@ use strict;
 use Net::Z3950::SimpleServer;
 use Net::Z3950::OID;
 use Data::Dumper;
-use COBISS;
+#use COBISS;
 use Aleph;
 use GoogleBooks;
+use vuFind;
+use DPLA;
 
 use Encode;
 
@@ -19,6 +21,8 @@ my $databases = {
        'NSK10'  => 'Aleph',
        'ZAG01'  => 'Aleph',
        'GOOGLEBOOKS' => 'GoogleBooks',
+       'HATHITRUST' => 'vuFind',
+       'DPLA'   => 'DPLA',
 };
 
 my $max_records = 3; # XXX configure this
@@ -193,27 +197,32 @@ package Net::Z3950::RPN::And;
 
 sub render {
        my ($self,$usemap) = @_;
-    return $self->[0]->render($usemap) . ' AND ' . $self->[1]->render($usemap);
+    return $self->[0]->render($usemap)
+               . ( $usemap->{RPN}->{And} || ' AND ' )
+               . $self->[1]->render($usemap);
 }
 
 package Net::Z3950::RPN::Or;
 
 sub render {
        my ($self,$usemap) = @_;
-    return $self->[0]->render($usemap) . ' OR ' . $self->[1]->render($usemap);
+    return $self->[0]->render($usemap)
+               . ( $usemap->{RPN}->{Or} || ' OR ' )
+               . $self->[1]->render($usemap);
 }
 
 package Net::Z3950::RPN::AndNot;
 
 sub render {
        my ($self,$usemap) = @_;
-    return $self->[0]->render($usemap) . ' AND NOT ' . $self->[1]->render($usemap);
+    return $self->[0]->render($usemap)
+               . ( $usemap->{RPN}->{Or} || ' AND NOT ' )
+               . $self->[1]->render($usemap);
 }
 
 package Net::Z3950::RPN::Term;
 
 use Data::Dump qw(dump);
-use COBISS;
 
 sub render {
        my ($self,$usemap) = @_;
@@ -262,14 +271,18 @@ warn "# usemap ", dump($usemap);
     my $comp = $attributes->{6};
     if ($prefix) {
         if ( defined($comp) && ( $comp >= 2 ) ) {
-            $prefix = "all$prefix= ";
-        }
-        else {
-            $prefix = "$prefix=";
+            $prefix = "all$prefix"; # FIXME?
         }
     }
 
-    my $q = $prefix . $self->{term} . '*';
+       my $q;
+
+       if ( $usemap->{prefix_term} ) {
+               warn "# using custom prefix_term query";
+               $q = $usemap->{prefix_term}->( $prefix, $self->{term} );
+       } else {
+       $q = $prefix . $self->{term} . '*';
+       }
        print "# q: $q\n";
        return $q;
 }