+sub _create_connection {
+ my ( $server ) = @_;
+ my $option1= new ZOOM::Options();
+ $option1->option( 'async' => 1 );
+ $option1->option( 'elementSetName', 'F' );
+ $option1->option( 'preferredRecordSyntax', $server->{syntax} );
+ $option1->option( 'timeout', $server->{timeout} ) if $server->{timeout};
+
+ if( $server->{servertype} eq 'sru' ) {
+ foreach( split ',', $server->{sru_options}//'' ) {
+ #first remove surrounding spaces at comma and equals-sign
+ s/^\s+|\s+$//g;
+ my @temp= split '=', $_, 2;
+ @temp= map { my $c=$_; $c=~s/^\s+|\s+$//g; $c; } @temp;
+ $option1->option( $temp[0] => $temp[1] ) if @temp;
+ }
+ } elsif( $server->{servertype} eq 'zed' ) {
+ $option1->option( 'databaseName', $server->{db} );
+ $option1->option( 'user', $server->{userid} ) if $server->{userid};
+ $option1->option( 'password', $server->{password} ) if $server->{password};
+ }
+
+ my $obj= ZOOM::Connection->create($option1);
+ if( $server->{servertype} eq 'sru' ) {
+ my $host= $server->{host};
+ if( $host !~ /^https?:\/\// ) {
+ #Normally, host will not be prefixed by protocol.
+ #In that case we can (safely) assume http.
+ #In case someone prefixed with https, give it a try..
+ $host = 'http://' . $host;
+ }
+ $obj->connect( $host.':'.$server->{port}.'/'.$server->{db} );
+ } else {
+ $obj->connect( $server->{host}, $server->{port} );
+ }
+ return $obj;
+}
+
+sub _translate_query { #SRU query adjusted per server cf. srufields column
+ my ($server, $query) = @_;
+
+ #sru_fields is in format title=field,isbn=field,...
+ #if a field doesn't exist, try anywhere or remove [field]=
+ my @parts= split(',', $server->{sru_fields} );
+ my %trans= map { if( /=/ ) { ( $`,$' ) } else { () } } @parts;
+ my $any= $trans{srchany}?$trans{srchany}.'=':'';
+
+ my $q=$query;
+ foreach my $key (keys %trans) {
+ my $f=$trans{$key};
+ if( $f ) {
+ $q=~s/\[$key\]/$f/g;
+ } else {
+ $q=~s/\[$key\]=/$any/g;
+ }
+ }
+ $q=~s/\[\w+\]=/$any/g; # remove remaining fields (not found in field list)
+ return $q;
+}
+