-#!/usr/bin/perl -w
-
-# $Id: test-xml-update.pl,v 1.2 2006-11-01 10:31:57 mike Exp $
+#!/usr/bin/perl
#
# Run like this:
-# perl -I ../lib ./test-xml-update.pl bagel.indexdata.dk:210/gils
+# perl -I ../lib ./test-xml-update.pl bagel.indexdata.dk:210/gils title "Test Database" author "Adam" description "This is a nice database"
use strict;
use warnings;
+use Getopt::Std;
use ZOOM;
use ZOOM::IRSpy::Utils qw(irspy_xpath_context modify_xml_document);
+use ZOOM::IRSpy; # For _rewrite_zeerex_record()
# This array copied from ../web/htdocs/details/edit.mc
my @fields =
qw() ],
[ password => 0, "Password (if needed)", "e:serverInfo/e:authentication/e:password",
qw(e:user) ],
- [ title => 0, "title", "e:databaseInfo/e:title",
+ [ title => 0, "Title", "e:databaseInfo/e:title",
qw() ],
[ description => 5, "Description", "e:databaseInfo/e:description",
qw(e:title) ],
qw(e:title e:description) ],
);
-if (@ARGV < 1 || @ARGV % 2 == 0) {
- print STDERR "Usage: %0 <id> [<key1> <value1> ...]\n";
+my %opts;
+if (!getopts('wnxd', \%opts) || @ARGV % 2 == 0) {
+ print STDERR "Usage: %0 [options] <id> [<key1> <value1> ...]\n";
+ print STDERR " -w Write modified record back to DB\n";
+ print STDERR " -n Show new values of fields using XPath\n";
+ print STDERR " -x Show new XML document with changes made\n";
+ print STDERR " -d Show differences between old and new XML\n";
exit 1;
}
my($id, %data) = @ARGV;
-my $conn = new ZOOM::Connection("localhost:3313/IR-Explain---1", 0,
+my $conn = new ZOOM::Connection("localhost:8018/IR-Explain---1", 0,
user => "admin", password => "fruitbat");
$conn->option(elementSetName => "zeerex");
my $qid = $id;
my $rec = $rs->record(0);
my $xc = irspy_xpath_context($rec);
my %fieldsByKey = map { ( $_->[0], $_) } @fields;
+
my $oldText = $xc->getContextNode()->toString();
-my $nchanges = modify_xml_document($xc, \%fieldsByKey, \%data);
+my @changedFields = modify_xml_document($xc, \%fieldsByKey, \%data);
+my $nchanges = @changedFields;
my $newText = $xc->getContextNode()->toString();
-#ZOOM::IRSpy::_really_rewrite_record($conn, $xc->getContextNode());
-print "The record has been updated (nchanges=$nchanges).\n";
+print("Document modified with $nchanges change", $nchanges == 1 ? "" : "s",
+ ": ", join(", ", map { $_->[2] } @changedFields), "\n");
-# Now display diffs between the original and modified records
-my $oldFile = "/tmp/old.txu.$$";
-my $newFile = "/tmp/new.txu.$$";
-open OLD, ">$oldFile";
-print OLD $oldText;
-close OLD;
-open NEW, ">/tmp/new.txu.$$";
-print NEW $newText;
-close NEW;
-system("diff $oldFile $newFile");
-unlink($oldFile);
-unlink($newFile);
+if ($opts{w}) {
+ ZOOM::IRSpy::_rewrite_zeerex_record($conn, $xc->getContextNode(), $id);
+ print "Rewrote record '$id'\n";
+}
+
+if ($opts{n}) {
+ foreach my $key (sort keys %data) {
+ my $ref = $fieldsByKey{$key};
+ my($name, $nlines, $caption, $xpath, @addAfter) = @$ref;
+ print "New $caption ($xpath) = '", $xc->findvalue($xpath), "'\n";
+ }
+}
+
+if ($opts{x}) {
+ print $newText;
+}
+
+if ($opts{d}) {
+ my $oldFile = "/tmp/old.txu.$$";
+ my $newFile = "/tmp/new.txu.$$";
+ open OLD, ">$oldFile";
+ print OLD $oldText;
+ close OLD;
+ open NEW, ">/tmp/new.txu.$$";
+ print NEW $newText;
+ close NEW;
+ system("diff $oldFile $newFile");
+ unlink($oldFile);
+ unlink($newFile);
+}