#!/usr/bin/env perl
use XMLRPC::Transport::HTTP;
use XML::Xerces;
use XML::Xerces::DOMParse;
use Carp;
use Fcntl ":flock";

my $daemon = XMLRPC::Transport::HTTP::Daemon
  -> new (LocalPort => 8081, Reuse => 1)
  -> dispatch_to('Monster')
;
print "Contact to XMLRPC server at ", $daemon->url, "\n";
$daemon->handle;

package Monster;
sub go{
    shift if UNIVERSAL::isa($_[0] => __PACKAGE__);
    my $CP = shift;
    $filePath = "/usr/local/jakarta-tomcat-4.1.12/webapps/monster/jobs/";
    my $parser = XML::Xerces::DOMParser->new();
    $parser->setCreateEntityReferenceNodes(1);
    my $error_handler = XML::Xerces::PerlErrorHandler->new();
    $parser->setErrorHandler($error_handler);
    my $in;
    eval {$in = XML::Xerces::MemBufInputSource->new($CP);};
    error($@) if $@;
    eval {$parser->parse($in);};
    error($@) if $@;

    my $doc = $parser->getDocument();
    my $cps = $doc->getElementsByTagName("ChainPairs");
    my $id =
$cps->item(0)->getAttributes()->getNamedItem("index")->getNodeValue();

    my $filePath2 = "$filePath$id/";

    mkdir $filePath2;

    my $fileNode = $doc->getElementsByTagName("File");
    my $file = $fileNode->item(0)->getChildNodes->item(0)->getNodeValue();

    $file = substr($file, 37);

    $pdb = substr($file, 0, -4);
    open (F, ">$filePath2$pdb.cp" ) or die "couldn't open file $pdb.cp: $!";
    flock(F, LOCK_EX);
    print F $CP;
    flock(F, LOCK_UN);
    close F;

    system("/usr/local/bin/monster", "-i$id", "$filePath$file");
}
