<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="no"/>
	
	<xsl:param name="DSTAMP" />
	<xsl:param name="TSTAMP" />
	<xsl:param name="TODAY" />
	
	<xsl:variable name="core-assertion-tables" select="document('../../wsdl20/component-assertion-table.xml') | document('../../wsdl20/document-assertion-table.xml')"/>

	<xsl:template match="/">
		<html>
			<head>
				<title>Validation Results</title>
				<link href="http://www.w3.org/StyleSheets/TR/base.css" type="text/css" rel="stylesheet"/>
				<style type="text/css">
					.errortext {font-size:x-small; border-top: 1px solid grey}
					.expected {font-size:x-small}
					td {vertical-align:top}
					.pass {border-left:16px solid green}
					.fail {border-left:16px solid red}
					.warn {border-left:16px solid yellow}
				</style>
			</head>
			<body>
				<h1>Validation Results</h1>
				<xsl:if test="$TODAY">
					<address>
						<xsl:text>Generated </xsl:text>
						<xsl:value-of select="$TODAY" />,
						<xsl:value-of select="$TSTAMP" />
					</address>
				</xsl:if>
				<table>
					<thead>
						<tr>
							<td><strong>testcase</strong></td>
							<td><strong>violates assertion</strong></td>
							<xsl:for-each select="summary/vendors/vendor">
								<td><strong><xsl:value-of select="@name"/></strong></td>
							</xsl:for-each>
						</tr>
					</thead>
					<tbody>
						<tr>
							<td/>
							<td/>
							<xsl:call-template name="validation-summaries"/>
						</tr>
						<xsl:apply-templates select="summary/result"/>
					</tbody>
				</table>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="result">
		<tr>
			<td>
				<xsl:value-of select="@name"/>
			</td>
			<td>
				<xsl:choose> 
					<xsl:when test="@violates-assertion">
						<xsl:call-template name="assertion-name">
							<xsl:with-param name="assertion" select="@violates-assertion"/>
						</xsl:call-template>
					</xsl:when>
					<xsl:otherwise>
						<xsl:text>--</xsl:text>
					</xsl:otherwise>
				</xsl:choose>
			</td>
			<xsl:for-each select="implementation">
				<td>
					<xsl:choose>
						<xsl:when test="@result='passed' and @identified-assertion">
							<!-- Bad testcase, detected invalidity and reported the correct assertion number. -->
							<xsl:attribute name="class">pass</xsl:attribute>
						</xsl:when>
						<xsl:when test="@result='passed' and not(../@violates-assertion)">
							<!-- Good testcase, reported no assertion violations. -->
							<xsl:attribute name="class">pass</xsl:attribute>
						</xsl:when>
						<xsl:when test="@result='passed'">
							<!-- Bad testcase, detected invalidity but failed to report the correct assertion number. -->
							<xsl:attribute name="class">warn</xsl:attribute>
						</xsl:when>
						<xsl:when test="@result='failed'">
							<!-- Failed to detect bad document, or incorrectly flagged a good document. -->
							<xsl:attribute name="class">fail</xsl:attribute>
						</xsl:when>
						<xsl:otherwise>
							<xsl:attribute name="class">missing</xsl:attribute>
						</xsl:otherwise>
					</xsl:choose>
					<xsl:choose>
						<xsl:when test="error">
							<xsl:for-each select="error">
								<div class="errortext">Error: 
									<xsl:if test="@line-number">
										<xsl:text>[</xsl:text>
										<xsl:value-of select="@line-number"/>
										<xsl:text>:</xsl:text>
										<xsl:value-of select="@column-number"/>
										<xsl:text>]</xsl:text>
									</xsl:if>
									<xsl:call-template name="assertion-name">
										<xsl:with-param name="assertion" select="@key"/>
									</xsl:call-template>
									<hr />
									<xsl:value-of select="."/>
								</div>
							</xsl:for-each>
						</xsl:when>
						<xsl:when test="@result!='missing'">
							<div><b>Actual:</b> no error</div>
						</xsl:when>
					</xsl:choose>
				</td>
			</xsl:for-each>
		</tr>
	</xsl:template>
	<xsl:template name="validation-summaries">
		<xsl:variable name="number" select="count(/summary/result)"/>
		<xsl:for-each select="/summary/vendors/vendor">
			<xsl:variable name="vendor" select="@name"/>
			<td>
				<xsl:variable name="passed" select="count(/summary/result/implementation[@vendor=$vendor][@result='passed' and (@identified-assertion or not(../@violates-assertion))])"/>
				<xsl:variable name="percentage-passed" select="$passed div $number"/>
				<xsl:variable name="warned" select="count(/summary/result/implementation[@vendor=$vendor][@result='passed' and not(@identified-assertion or not(../@violates-assertion))])"/>
				<xsl:variable name="percentage-warned" select="$warned div $number"/>
				<xsl:variable name="failed" select="count(/summary/result/implementation[@vendor=$vendor][@result='failed'])"/>
				<xsl:variable name="percentage-failed" select="$failed div $number"/>
				<xsl:variable name="missing" select="$number - $passed - $warned - $failed"/>
				
				<div style="border:1px solid black; width:201px; height:16px; font-size:x-small; font-weight:bold">
					<xsl:if test="$percentage-passed > .01">
						<span style="position:absolute"><xsl:value-of select="$passed"/></span>
						<img src="green.gif" height="16" width="{200*$percentage-passed}" alt="{$percentage-passed * 100}% passed"/>
					</xsl:if>
					<xsl:if test="$percentage-warned > .01">
						<span style="position:absolute"><xsl:value-of select="$warned"/></span>
						<img src="yellow.gif" height="16" width="{200*$percentage-warned}" alt="{$percentage-warned * 100}% passed"/>
					</xsl:if>
					<xsl:if test="$percentage-failed > .01">
						<span style="position:absolute"><xsl:value-of select="$failed"/></span>
						<img src="red.gif" height="16" width="{200*$percentage-failed}" alt="{$percentage-failed * 100}% failed"/>
					</xsl:if>
					<span style="position:absolute">&#160;(<xsl:value-of select="$missing"/>)</span>
				</div>
			</td>
		</xsl:for-each>
	</xsl:template>
	<xsl:template name="assertion-name">
		<xsl:param name="assertion"/>
		<xsl:variable name="spec">
			<xsl:choose>
				<xsl:when test="$core-assertion-tables//assert-summary[@ref=$assertion]">http://dev.w3.org/cvsweb/~checkout~/2002/ws/desc/wsdl20/wsdl20.html</xsl:when>
				<xsl:otherwise>http://dev.w3.org/cvsweb/~checkout~/2002/ws/desc/wsdl20/wsdl20-adjuncts.html</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<a href="{$spec}#{$assertion}"><xsl:value-of select="$assertion"/></a>		
	</xsl:template>
</xsl:stylesheet>

