##########################################################################
#
# audioDBBuildproc.pm -- 
# A component of the Greenstone digital library software
# from the New Zealand Digital Library Project at the 
# University of Waikato, New Zealand.
#
# Copyright (C) 1999 New Zealand Digital Library Project
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
###########################################################################

# This document processor outputs a document for indexing (should be 
# implemented by subclass) and storing in the database

package audioDBBuildproc;

use strict; 
no strict 'refs'; # allow filehandles to be variables and viceversa

use util;

use extrabuildproc;


BEGIN {
    @audioDBBuildproc::ISA = ('extrabuildproc');
}

sub new()
  {
    my $class = shift @_;

    my $self = new extrabuildproc (@_);

    return bless $self, $class;
}


sub textedit {
    my $self = shift (@_);
    my ($doc_obj,$file,$mode) = @_;

    # Code written on the assumption that that audioDB does a replace
    # operation when presented with a docid that already extis.
    # => don't need to do anything special to distinguish between
    #    a mode of "add" and "update"

    my $outhandle = $self->{'outhandle'};


    my $source_dir = $self->{'source_dir'}; # typically the archives dir
    my $build_dir  = $self->{'build_dir'};

    # full path to adb database
    my $adb_filename 
	= &util::filename_cat($build_dir, "audioDB", "lsh-features.adb");

    # get doc id
    my $doc_oid = $doc_obj->get_OID();

    # map to assoc dir
    my $top_section = $doc_obj->get_top_section();
    my $assoc_file
	= $doc_obj->get_metadata_element ($top_section,"assocfilepath");
    my $assoc_filename = &util::filename_cat($source_dir,$assoc_file);

    my $chr12_filename = &util::filename_cat($assoc_filename,"doc.chr12");
    my $powerlog_filename = &util::filename_cat($assoc_filename,"doc.power");

    print $outhandle "  Inserting features for $doc_oid\n";

    my $cmd = "audioDB -d \"$adb_filename\" -I -k \"$doc_oid\" -f \"$chr12_filename\" -w \"$powerlog_filename\"";

    my $status = system($cmd);
    if ($status != 0) {
	print STDERR "Error: failed to run:\n  $cmd\n$!\n";
    }
}

sub text {
    my $self = shift (@_);
    my ($doc_obj,$file) = @_;

    $self->textedit($doc_obj,$file,"add");
}

sub textreindex
{
    my $self = shift @_;
    my ($doc_obj,$file) = @_;

    $self->textedit($doc_obj,$file,"update");
}

sub textdelete
{
    my $self = shift @_;

    my ($doc_obj,$file) = @_;

    print STDERR "Warning: audioDB command-line does not currently support delete operation\n";

    # $self->textedit($doc_obj,$file,"delete");
}

1;
