use Env;
my $HELM_CONFIGURATION_PREFIX = $ENV{"HELM_CONFIGURATION_PREFIX"};
my $HELM_CONFIGURATION_PATH =
- $HELM_CONFIGURATION_PREFIX."local/lib/helm/configuration.pl";
+ $HELM_CONFIGURATION_PREFIX."/local/lib/helm/configuration.pl";
# next require defines: $helm_dir, $html_link
require $HELM_CONFIGURATION_PATH;
my $cont = "";
my $d = new HTTP::Daemon LocalPort => 8081;
-tie(%map, 'DB_File', 'urls_of_uris.db', O_RDONLY, 0664);
+tie(%map, 'DB_File', $uris_dbm.".db", O_RDONLY, 0664);
print "Please contact me at: <URL:", $d->url, ">\n";
print "helm_dir: $helm_dir\n";
+print "urls_of_uris.db: $uris_dbm.db\n";
$SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
while (my $c = $d->accept) {
if (fork() == 0) {
$response = $ua->request($request, \&callback);
print "Storing file\n";
- open(FD, $filename);
+ mkdirs($filename);
+ open(FD, ">".$filename);
print FD $cont;
close(FD);
$response = $ua->request($request, \&callback);
print "Storing file for the annotation\n";
- open(FD, $filename);
+ mkdirs($filename);
+ open(FD, ">".$filename);
print FD $cont;
close(FD);
}
$response = $ua->request($request, \&callback);
print "Storing file for the file to annotate\n";
- open(FD, $filename_target);
+ mkdirs($filename_target);
+ open(FD, ">".$filename_target);
print FD $cont;
close(FD);
}
$res->content($merged);
$c->send_response($res);
} elsif ($http_method eq 'GET' and $http_path eq "/getwithtypes") {
- my $do_annotate = ($cicuri =~ /\.types$/);
+ my $mode;
+ my $do_annotate;
+ if ($cicuri =~ /\.types$/) {
+ $do_annotate = 1;
+ $mode = "types";
+ } elsif ($cicuri =~ /\.ann$/) {
+ $do_annotate = 1;
+ $mode = "ann";
+ } else {
+ $do_annotate = 0;
+ }
my $target_to_annotate = $cicuri;
- $target_to_annotate =~ s/(.*)\.types$/$1/ if $do_annotate;
+ if ($mode eq "types") {
+ $target_to_annotate =~ s/(.*)\.types$/$1/;
+ } elsif ($mode eq "ann") {
+ $target_to_annotate =~ s/(.*)\.ann$/$1/;
+ }
my $filename = $cicuri;
$filename =~ s/cic:(.*)/$1/;
$filename =~ s/theory:(.*)/$1/;
my $filename_target = $helm_dir.$filename if $do_annotate;
$filename = $helm_dir.$filename.".xml";
- $filename_target =~ s/(.*)\.types$/$1.xml/ if $do_annotate;
+ if ($mode eq "types") {
+ $filename_target =~ s/(.*)\.types$/$1.xml/;
+ } elsif ($mode eq "ann") {
+ $filename_target =~ s/(.*)\.ann$/$1.xml/;
+ }
my $resolved = $map{$cicuri};
my $resolved_target = $map{$target_to_annotate} if $do_annotate;
if ($do_annotate) {
- print "GETWITHTYPES!!\n";
+ print "GETWITHTYPES!!\n" if ($mode eq "types");
+ print "GETWITHANN!!\n" if ($mode eq "ann");
print "($cicuri, $target_to_annotate) ==> ($resolved + $resolved_target) ($filename)\n";
} else {
print "$cicuri ==> $resolved ($filename)\n";
# Retrieves the annotation
if (stat($filename)) {
- print "Using local copy for the types\n";
+ print "Using local copy for the types\n" if ($mode eq "types");
+ print "Using local copy for the ann\n" if ($mode eq "ann");
open(FD, $filename);
while(<FD>) { $cont .= $_; }
close(FD);
} else {
- print "Downloading the types\n";
+ print "Downloading the types\n" if ($mode eq "types");
+ print "Downloading the ann\n" if ($mode eq "ann");
$ua = LWP::UserAgent->new;
$request = HTTP::Request->new(GET => "$resolved");
$response = $ua->request($request, \&callback);
- print "Storing file for the types\n";
- open(FD, $filename);
+ print "Storing file for the types\n" if ($mode eq "types");
+ print "Storing file for the ann\n" if ($mode eq "ann");
+ mkdirs($filename);
+ open(FD, ">".$filename);
print FD $cont;
close(FD);
}
$response = $ua->request($request, \&callback);
print "Storing file for the file to type\n";
- open(FD, $filename_target);
+ mkdirs($filename_target);
+ open(FD, ">".$filename_target);
print FD $cont;
close(FD);
}
$target =~ s/<!DOCTYPE [^>]*>//sg;
$annotation =~ s/<\?xml [^?]*\?>//sg;
$annotation =~ s/<!DOCTYPE [^>]*>//sg;
+ my $element, $endelement;
+ if ($mode eq "types") {
+ $element = "<ALLTYPES>";
+ $endelement = "</ALLTYPES>";
+ } elsif ($mode eq "ann") {
+ $element = "";
+ $endelement = "";
+ }
my $merged = <<EOT;
<?xml version="1.0" encoding="UTF-8"?>
<cicxml uri="$target_to_annotate">
$target
-<ALLTYPES>
+$element
$annotation
-</ALLTYPES>
+$endelement
</cicxml>
EOT
my ($data) = @_;
$cont .= $data;
}
+
+# Does not raise errors if could not create dirs/files
+
+# Too much powerful: creates even /home, /home/users/, ...
+sub mkdirs
+{
+ my ($pathname) = @_;
+ my @dirs = split /\//,$pathname;
+ my $tmp;
+ foreach $dir (@dirs) {
+ $tmp = ((defined($tmp)) ? $tmp = $tmp."\/".$dir : "");
+ mkdir($tmp,0777);
+ }
+ rmdir($tmp);
+}