eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
    if 0;


use XML::Parser;

my $file = shift;

my $parser = new XML::Parser(Style=>'Subs', 
                             Pkg=>'SubHandlers', 
                             ErrorContext => 2);
$parser->setHandlers(Char  => \&char_handler);

$parser->parsefile($file);

# ---------------------------------------------

sub char_handler {
    my ($p, $data) = @_;
    if ($::state::store_contents) {
      $::state::storage{$::state::store_contents} .= $data;
    } else {
        # print $data;
    }
}

# ---------------------------------------------

package SubHandlers;

sub take_action {
  my ($code, $name, $action, $qname) = @_;
  
  print "----------------------------------------\n";
  print "$code: Taking action: \"$action\" ";
  print "job on \"$qname\" queue\n\n";
}

sub machine_usage {
  # Open connection to database
  use DBI;

  $dsn = "DBI:mysql:database=xpgdb;";
  $user = 'xpg'; $password = 'xpg'; 
  $::state::dbh = DBI->connect($dsn, $user, $password)
                || die $DBI::errstr;
}

sub machine_usage_ {
  # Close connection to database
  $::state::dbh->disconnect();
}

sub code {
  $::state::store_contents = "code";
}

sub code_ {
  undef $::state::store_contents;
}

sub machine {
  undef %::state::storage;
}

sub machine_ {
  # The values have been stored in the hash %state::storage
  my $code = $::state::storage{'code'};

  my $sth = 
 	$::state::dbh->prepare("select * from rules where code='$code'");

  $sth->execute() 
	|| die "Can't execute statement: $DBI::errstr";

  while (($code, $name, $value, $type, $action, $qname) 
                                        = $sth->fetchrow_array) {
    if ($::state::storage{$type} > $value) {
      # This rule applies
      print "\nRule \"$type > $value\" for $name queue \n";
      print "applies for machine $code\n";
      take_action($code, $name, $action, $qname);
    }
  }
  $sth->finish();

  undef %::state::storage;
}

sub queue {
  my $expat = shift; my $element = shift;

  # Read the attributes
  my $att = shift;
  my $val = shift;

#----------------------------------------------------------------
  # The values have been stored in the hash %state::storage
  my $code = $::state::storage{'code'};

  my $sth = 
 	$::state::dbh->prepare("select * from rules where code='$code'");

  $sth->execute() 
	|| die "Can't execute statement: $DBI::errstr";

  while (($code, $name, $value, $type, $action, $qname) 
                                        = $sth->fetchrow_array) {
     if ( $val eq $name ) {
        $::state::storage{'name'} = $val; 
        $::state::storage{'usage'} = "yes"; 
     } 
  }
  $sth->finish();
#----------------------------------------------------------------
}

sub queue_ {
  if ( $::state::storage{'usage'} ) {
        $::state::storage{'usage'} = ""; 
  }
}

sub usage {
  my $expat = shift; my $element = shift;

  # Read the attributes
  while (@_) {
    my $att = shift;
    my $val = shift;
    $attr{$att} = $val;
  }

  if ( $::state::storage{'usage'} ) {
    if ($attr{'type'} eq "Queued") {
      $::state::storage{'queued'} = $attr{'value'};
    }
  }
}

sub usage_ {
}
