r1045@llin: dpavlin | 2006-09-29 21:38:42 +0200
[webpac2] / lib / WebPAC / Input.pm
index 0ffa04a..7ac1a7c 100644 (file)
@@ -98,28 +98,16 @@ sub new {
        $log->logconfess("lookup argument is not suppored any more. rewrite call to lookup_ref") if ($self->{lookup});
 
        $log->logconfess("specify low-level file format module") unless ($self->{module});
-       my $module = $self->{module};
-       $module =~ s#::#/#g;
-       $module .= '.pm';
-       $log->debug("require low-level module $self->{module} from $module");
+       my $module_path = $self->{module};
+       $module_path =~ s#::#/#g;
+       $module_path .= '.pm';
+       $log->debug("require low-level module $self->{module} from $module_path");
 
-       require $module;
-       #eval $self->{module} .'->import';
+       require $module_path;
 
        # check if required subclasses are implemented
        foreach my $subclass (qw/open_db fetch_rec init dump_rec/) {
-               my $n = $self->{module} . '::' . $subclass;
-               if (! defined &{ $n }) {
-                       my $missing = "missing $subclass in $self->{module}";
-                       $self->{$subclass} = sub { $log->logwarn($missing) };
-               } else {
-                       $self->{$subclass} = \&{ $n };
-               }
-       }
-
-       if ($self->{init}) {
-               $log->debug("calling init");
-               $self->{init}->($self, @_);
+               # FIXME
        }
 
        $self->{'encoding'} ||= 'ISO-8859-2';
@@ -250,7 +238,9 @@ sub open {
        }
        $log->debug("rec_regex: ", Dumper($rec_regex)) if ($rec_regex);
 
-       my ($db, $size) = $self->{open_db}->( $self, 
+       my $class = $self->{module} || $log->logconfess("can't get low-level module name!");
+
+       my $ll_db = $class->new(
                path => $arg->{path},
 #              filter => sub {
 #                      my ($l,$f_nr) = @_;
@@ -262,11 +252,13 @@ sub open {
                %{ $arg },
        );
 
-       unless (defined($db)) {
+       unless (defined($ll_db)) {
                $log->logwarn("can't open database $arg->{path}, skipping...");
                return;
        }
 
+       my $size = $ll_db->size;
+
        unless ($size) {
                $log->logwarn("no records in database $arg->{path}, skipping...");
                return;
@@ -298,7 +290,7 @@ sub open {
 
                $log->debug("position: $pos\n");
 
-               my $rec = $self->{fetch_rec}->($self, $pos, sub {
+               my $rec = $ll_db->fetch_rec($pos, sub {
                                my ($l,$f_nr) = @_;
 #                              return unless defined($l);
 #                              return $l unless ($rec_regex && $f_nr);
@@ -348,7 +340,7 @@ sub open {
                if ($self->{stats}) {
 
                        # fetch clean record with regexpes applied for statistics
-                       my $rec = $self->{fetch_rec}->($self, $pos);
+                       my $rec = $ll_db->fetch_rec($pos);
 
                        foreach my $fld (keys %{ $rec }) {
                                $self->{_stats}->{fld}->{ $fld }++;