#!/usr/bin/perl -w
print "Content-type: text/xml\n\n";
#------------------------------------------------------------
# Read the inputs from the query URL.
# Parse the query string to determine what results to return.

my @url = split(/&/,$ENV{QUERY_STRING});
my %url_in = ();
foreach (@url) {
  s/\+/ /g;
  my ($name, $value) = split(/=/,$_);
  $name =~ s/%(..)/pack("c",hex($1))/ge;
  $value =~ s/%(..)/pack("c",hex($1))/ge;
  $name =~ tr/A-Z/a-z/;
  $url_in{$name} = $value;
}

use LWP::UserAgent;
$ua = LWP::UserAgent->new;

$url = 'http://maps.sco.wisc.edu/cgi-bin/scowfs3.gc?' . $ENV{QUERY_STRING};
my $servicename = $url_in{"service"};
my $requestname = $url_in{"request"};

#------------------------------------------------------------
# If the URL query string request is GetCapabilities...

if ( $requestname eq "GetCapabilities" ) {
   $request = HTTP::Request->new(GET => $url);
   $res = $ua->request($request);

   if ($res->is_success) {
      $result = $res->content;
			#print $result;
    }
   else {
      print "<request>Fail</request>\n\n";
    	die;
   }
	 
	 use XML::XSLT;

   my $xslfile = "getcapabilities_gml3.xsl";

   my $xslt = XML::XSLT->new($xslfile, warnings => 1);

   $xslt->serve($result);
   print $xslt->toString;
	 	 
}
#------------------------------------------------------------
# If the URL query string request is DescribeFeatureType...


elsif ( $requestname eq "DescribeFeatureType") {
   #$url = 'http://localhost/cgi-bin/mapserv.exe?' . $ENV{QUERY_STRING};
   $url = 'http://maps.sco.wisc.edu/cgi-bin/scowfs3.gc?OUTPUTFORMAT=SFE_XMLSCHEMA&' . $ENV{QUERY_STRING};
   $request = HTTP::Request->new(GET => $url);
   $res = $ua->request($request);

   if ($res->is_success) {
      $result = $res->content;
   	  #print $result;
    }
   else {
      print "<request>Fail</request>\n\n";
    	die;
   }
	 
	 use XML::XSLT;

   my $xslfile = "describefeaturetype_gml3.xsl";

   my $xslt = XML::XSLT->new($xslfile, warnings => 1);

   $xslt->serve($result);
   print $xslt->toString;
	 
}
#------------------------------------------------------------
# If the URL query string request is GetFeature...

elsif ( $requestname eq "GetFeature"){
  $url = 'http://maps.sco.wisc.edu/cgi-bin/scowfs3.gc?outputformat=GML3&' . $ENV{QUERY_STRING};
  $request = HTTP::Request->new(GET => $url);
  $res = $ua->request($request);

  if ($res->is_success) {
    $result = $res->content;
  }

  else
  {
   print "request failed!!\n";
  }

  use XML::XSLT;

  my $xslfile = "wfs_uml20051216_gml3.xsl";

  my $xslt = XML::XSLT->new($xslfile, warnings => 1);

  $xslt->serve($result);
  print $xslt->toString;
}
#------------------------------------------------------------
# If the URL query string is not provided or missing required elements, return an error message...

else {
  $url = 'http://maps.sco.wisc.edu/cgi-bin/scowfs3.gc?' . $ENV{QUERY_STRING};
  $request = HTTP::Request->new(GET => $url);
  $res = $ua->request($request);

   if ($res->is_success) {
      $result = $res->content;
	print "<ServiceExceptionReport version='1.1.1'><ServiceException code='ServiceNotDefined'>msWMSDispatch: WMS server error. This usually means that the REQUEST parameter and or SERVICE parameter are wrong.</ServiceException></ServiceExceptionReport>";
    }
}