#!/usr/bin/perl -w

use RDQL;

my $db = "dawgtest";

my $using = " USING rs FOR <http://jena.hpl.hp.com/2003/03/result-set#>".
	          " mf FOR <http://jena.hpl.hp.com/2003/03/test-manifest#>".
		  " qt FOR <http://jena.hpl.hp.com/2003/03/test-query#>";

my $rdql = new RDQL(database => $db);
$rdql->set("max_comp", 100000);

while ($file = shift) {
	$dirname = `dirname $file`;
	chomp $dirname;
	$dirname .= "/";
	$cmd = "tstore_import --database=$db -m test:manifest -f $file";
	$out = `$cmd 2>&1`;
	if ($out) {
		print "$cmd: $out";
		next;
	}
	$cmd = "tstore_rebuild_taxonomy --database=$db";
	system($cmd);
	my $rows = $rdql->query(<<EOQ
SELECT ?list
WHERE (?manifest, <mf:entries>, ?list)
$using
EOQ
	);
	#print "<p>$file</p>\n";
	for $row (@{$rows}) {
		%cols = %{$row};
		&printEntry($cols{'?list'});
	}
}

sub printEntry {
	local($uri) = @_;

	my $listq = $rdql->query(<<EOQ
SELECT ?first, ?rest
WHERE ($uri, <rdf:first>, ?first)
      ($uri, <rdf:rest>, ?rest)
EOQ
);

	$row = @{$listq}[0];
	if (!$row) {
		return;
	}
	%cols = %{$row};
	$this = $cols{'?first'};
	$rest = $cols{'?rest'};

	my $rows = $rdql->query(<<EOQ
SELECT ?p, ?o
WHERE ($this, ?p, ?o)
EOQ
);
	for $row (@{$rows}) {
		%cols = %{$row};
                $p = &valof($cols{'?p'});
		$p =~ s/.*?#//;
		#print "-- $p --\n";
		$data{$p} = $cols{'?o'};
	}

	if ($data{'name'}) {
		print "\n<h2>".valof($data{name})."</h2>\n";
	} else {
		print "<h2>unknown test</h2>\n";
	}
	if ($data{'comment'}) {
		print "<p>".valof($data{'comment'})."</p>\n";
	}
	if ($data{'action'}) {
		$quri = valof($data{'action'});

		my $qq = $rdql->query(<<EOQ
SELECT ?query, ?data
WHERE (<$quri>, <qt:query>, ?query)
      (<$quri>, <qt:data>, ?data)
$using
EOQ
);
		$row = @{$qq}[0];
		if ($row) {
			%cols = %{$row};
			print "<h3>Data</h3>\n";
			$data = &valof($cols{'?data'});
			$datafn = &valof($cols{'?data'});
			$datafn =~ s/file:/$dirname/;
			print "<a href=\"$datafn\">$data</a>\n";
			print "<h3>Query</h3>\n";
			$query = &valof($cols{'?query'});
			$query =~ s/file:/$dirname/;
			print "<pre>\n";
			system("cat $query");
			print "</pre>\n";
		}
	}
	if ($data{'result'}) {
		print "<h3>Results</h3>\n";
		$fn = valof($data{'result'});
		$fn =~ s/file:/$dirname/;
		system("./res2table.pl $fn");
	}

	&printEntry($rest) if $rest;
}

sub valof {
	local ($v) = @_;

	$v =~ s/^<(.*)>$/$1/;
	$v =~ s/^"(.*)"$/$1/;

	return $v;
}

sub escape {
	local ($v) = @_;

	$v =~ s/&/\&amp;/g;
	$v =~ s/</\&lt;/g;
	$v =~ s/>/\&gt;/g;

	return $v;
}

