2002/ws/desc/test-suite/messages generate-xpath-assertions-soap.xsl,NONE,1.1 generate-xpath-assertions.xsl,NONE,1.1

Update of /sources/public/2002/ws/desc/test-suite/messages
In directory hutz:/tmp/cvs-serv26371

Added Files:
	generate-xpath-assertions-soap.xsl 
	generate-xpath-assertions.xsl 
Log Message:
First shot at converting wsdlcm into XPath assertions

--- NEW FILE: generate-xpath-assertions-soap.xsl ---
<?xml version="1.0" encoding="utf-8"?>
<!--

$Header: /sources/public/2002/ws/desc/test-suite/messages/generate-xpath-assertions-soap.xsl,v 1.1 2006/10/24 16:53:09 plehegar Exp $

Convert WSDL Component model into XPath expressions

-->
<xsl:stylesheet version="1.0"
		xmlns:l="http://www.w3.org/2002/ws/desc/logs/"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:cm='http://www.w3.org/2002/ws/desc/wsdl/component'
		xmlns:cmextensions='http://www.w3.org/2002/ws/desc/wsdl/component-extensions'
		xmlns:cmbase='http://www.w3.org/2002/ws/desc/wsdl/component-base'
		xmlns:cmhttp='http://www.w3.org/2002/ws/desc/wsdl/component-http'
		xmlns:cmrpc='http://www.w3.org/2002/ws/desc/wsdl/component-rpc'
		xmlns:cmsoap='http://www.w3.org/2002/ws/desc/wsdl/component-soap'
		xmlns:soap12='http://www.w3.org/2003/05/soap-envelope'
		xmlns:soap11='http://schemas.xmlsoap.org/soap/envelope/'
		exclude-result-prefixes='cmsoap cmrpc cmhttp cmbase cmextensions cm xpath'>
  <xsl:output method="xml" indent="yes" />

  <xsl:key name='xmlId' match='*' use='@xml:id'/>

  <xsl:template name='checkSoap'>
    <!-- interfaceMessageReferenceComponent node -->
    <xsl:param name='msgRef'/>
    <!-- bindingOperationComponent node -->
    <xsl:param name='bindingRef'/>
    <!-- XPath expression to the message in the log, e.g. "/l:log/l:message[@number='2']" -->
    <xsl:param name='xmessage'/>

    <xsl:choose>
      <xsl:when test='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapUnderlyingProtocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"'>
      </xsl:when>
      <xsl:when test='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapUnderlyingProtocol="http://www.w3.org/2006/01/soap11/bindings/HTTP"'>
      </xsl:when>
      <xsl:otherwise>
	<xsl:message>Unknown underlying protocol <xsl:value-of select='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapUnderlyingProtocol'/></xsl:message>
      </xsl:otherwise>
    </xsl:choose>

    <xsl:if test='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapUnderlyingProtocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
		  or $bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapUnderlyingProtocol="http://www.w3.org/2006/01/soap11/bindings/HTTP"'>
      <xsl:call-template name='checkSoapHTTPMethod'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>

      <xsl:call-template name='checkSoapHTTPContentType'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>
      
      <xsl:call-template name='checkSoapHTTPSOAPAction'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>
    </xsl:if>

    <xsl:variable name='method'>
      <xsl:call-template name='getSoapHTTPMethod'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name='direction' select='$msgRef/cm:direction'/>

    <xsl:choose>
      <xsl:when test='$method="POST" or $direction="out"'>
	<xsl:call-template name='checkSoapEnvelope'>
	  <xsl:with-param name='msgRef' select='$msgRef'/>
	  <xsl:with-param name='bindingRef' select='$bindingRef'/>
	  <xsl:with-param name='xmessage' select='$xmessage'/>
	</xsl:call-template>
	<xsl:call-template name='checkSoapBody'>
	  <xsl:with-param name='msgRef' select='$msgRef'/>
	  <xsl:with-param name='bindingRef' select='$bindingRef'/>
	  <xsl:with-param name='xmessage' select='$xmessage'/>
	</xsl:call-template>
      </xsl:when>
      <xsl:when test='$method="GET"'>
	<xsl:call-template name='generate-assertion'>
	  <xsl:with-param name='xpath'>
	    <xsl:text>count(</xsl:text>
	    <xsl:value-of select='$xmessage'/>
	    <xsl:text>/l:content/*) = 0</xsl:text>
	  </xsl:with-param>
	  <xsl:with-param name='description'>The message SHOULD NOT have a body when using HTTP GET</xsl:with-param>
	</xsl:call-template>
      </xsl:when>
    </xsl:choose>
  </xsl:template>


  <xsl:template name='getSoapVersion'>
    <xsl:param name='bindingRef'/>
    <xsl:choose>
      <xsl:when test='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapVersion'>
	<xsl:value-of select='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapVersion'/>
      </xsl:when>
      <xsl:otherwise>
	<xsl:text>@@No SOAP version?!?</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name='getSoapMEP'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>

    <xsl:choose>
      <xsl:when test='$bindingRef/cmsoap:soapBindingOperationExtension/cmsoap:soapMep'>
	<xsl:value-of select='$bindingRef/cmsoap:soapBindingOperationExtension/cmsoap:soapMep'/>
      </xsl:when>
      <xsl:when test='../../cmsoap:soapBindingExtension/cmsoap:soapMepDefault'>
	<xsl:value-of select='$bindingRef/../../cmsoap:soapBindingExtension/cmsoap:soapMepDefault'/>
      </xsl:when>
      <xsl:when test='$msgRef/../../cm:messageExchangePattern="http://www.w3.org/2006/01/wsdl/in-out"'>
	<!-- WARNING: this assumes SOAP 1.2 -->
	<xsl:text>http://www.w3.org/2003/05/soap/mep/request-response/</xsl:text>	    
      </xsl:when>
      <xsl:otherwise>
	<!-- This is an error and will be reported in checkSoapHTTPMethod -->
	<xsl:text>(No MEP specified for </xsl:text>
	<xsl:value-of select='$msgRef/../../cm:messageExchangePattern'/>
	<xsl:text>)</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name='getSoapHTTPMethod'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>

    <xsl:variable name='direction' select='$msgRef/cm:direction'/>
    <xsl:variable name='soapMep'>
      <xsl:call-template name='getSoapMEP'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:choose>
      <xsl:when test='$direction="in" and $soapMep="http://www.w3.org/2003/05/soap/mep/soap-response/"'>
	<xsl:text>GET</xsl:text>
      </xsl:when>
      <xsl:when test='$direction="in" and ($soapMep="http://www.w3.org/2003/05/soap/mep/request-response/"
		                           or $soapVersion="1.1")'>
	<xsl:text>POST</xsl:text>
      </xsl:when>
      <xsl:otherwise>
	<xsl:text>@@OOPS</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name='checkSoapHTTPMethod'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='xmessage'/>

    <xsl:variable name='direction' select='$msgRef/cm:direction'/>
    <xsl:variable name='soapMep'>
      <xsl:call-template name='getSoapMEP'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:call-template name='generate-assertion'>
      <xsl:with-param name='xpath'>
	<xsl:value-of select='$xmessage'/>
	<xsl:text>/l:httpHeaders</xsl:text>
	<xsl:choose>
	  <xsl:when test='$direction="in" and $soapMep="http://www.w3.org/2003/05/soap/mep/soap-response/"'>
	    <xsl:text>/l:Method[@value='GET']</xsl:text>
	  </xsl:when>
	  <xsl:when test='$direction="in" and ($soapMep="http://www.w3.org/2003/05/soap/mep/request-response/"
		                               or $soapVersion="1.1")'>
	    <xsl:text>/l:Method[@value='POST']</xsl:text>
	  </xsl:when>
	  <xsl:when test='$direction="in"'>
	    <xsl:message>Unknown SOAP MEP <xsl:value-of select='$soapMep'/></xsl:message> 
	    <xsl:text>/l:Method[@value='@@UNKNOWN']</xsl:text>
	  </xsl:when>
	  <xsl:when test='$direction="out"'>
	    <xsl:text>/l:StatusCode[@value='200']</xsl:text>
	  </xsl:when>
	  <xsl:otherwise>
	    <xsl:text>@@InvalidDirection</xsl:text>
	  </xsl:otherwise>
	</xsl:choose>
      </xsl:with-param>      
      <xsl:with-param name='description'>
	<xsl:choose>
	  <xsl:when test='$direction="in"'>
	    <xsl:text>The message request MUST use the proper HTTP Method</xsl:text>
	  </xsl:when>
	  <xsl:otherwise>
	    <xsl:text>The message response MUST use the proper HTTP status code</xsl:text>
	  </xsl:otherwise>
	</xsl:choose>
      </xsl:with-param>
    </xsl:call-template>
  </xsl:template>

  <xsl:template name='checkSoapHTTPContentType'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='xmessage'/>
    <xsl:variable name='direction' select='$msgRef/cm:direction'/>
    <xsl:variable name='soapMep'>
      <xsl:call-template name='getSoapMEP'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:if test='not($direction="in" and $soapMep="http://www.w3.org/2003/05/soap/mep/soap-response/")'>
      <xsl:comment>Is the proper HTTP Content Type used?</xsl:comment>
      <xsl:call-template name='generate-assertion'>
	<xsl:with-param name='xpath'>
	  <xsl:value-of select='$xmessage'/>
	  <xsl:text>/l:httpHeaders/l:Content-Type/@type = </xsl:text>
	  <xsl:choose>
	    <xsl:when test='$soapVersion="1.2"'>
	      <xsl:text>'application/soap+xml'</xsl:text>
	    </xsl:when>
	    <xsl:when test='$soapVersion="1.1"'>
	      <xsl:text>'text/xml'</xsl:text>
	    </xsl:when>
	    <xsl:when test='$soapVersion="unknown"'>
	    </xsl:when>
	  </xsl:choose>
	</xsl:with-param>
	<xsl:with-param name='description'>The message MUST use the proper Content-Type HTTP Header</xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
  
  <xsl:template name='checkSoapHTTPSOAPAction'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='xmessage'/>

    <xsl:variable name='direction' select='$msgRef/cm:direction'/>

    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:if test='$direction="in" and $bindingRef/cmsoap:soapBindingOperationExtension/cmsoap:soapAction'>
      <xsl:comment>Is the proper HTTP SOAP Action used?</xsl:comment>
      <xsl:call-template name='generate-assertion'>
	<xsl:with-param name='xpath'>
	  <xsl:value-of select='$xmessage'/>
	  <xsl:text>/l:httpHeaders/l:SOAPAction = '</xsl:text>
	  <xsl:if test='$soapVersion="1.1"'>
	    <xsl:text>"</xsl:text>
	  </xsl:if>
	  <xsl:value-of select='$bindingRef/cmsoap:soapBindingOperationExtension/cmsoap:soapAction'/>
	  <xsl:if test='$soapVersion="1.1"'>
	    <xsl:text>"</xsl:text>
	  </xsl:if>
	  <xsl:text>'</xsl:text>
	</xsl:with-param>
	<xsl:with-param name='description'>The message MUST use the proper SOAPAction HTTP Header</xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
  
  <xsl:template name='checkSoapEnvelope'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='xmessage'/>

    <xsl:variable name='direction' select='$msgRef/cm:direction'/>
    <xsl:variable name='soapMep'>
      <xsl:call-template name='getSoapMEP'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <xsl:if test='not($direction="in" and $soapMep="http://www.w3.org/2003/05/soap/mep/soap-response/")'>
      <xsl:comment>Is the proper SOAP Envelope used?</xsl:comment>
      
      <xsl:call-template name='generate-assertion'>
	<xsl:with-param name='xpath'>
	  <xsl:value-of select='$xmessage'/>
	  <xsl:choose>
	    <xsl:when test='$soapVersion="1.2"'>
	      <xsl:text>/l:content/soap12:Envelope</xsl:text>
	    </xsl:when>
	    <xsl:when test='$soapVersion="1.1"'>
	      <xsl:text>/l:content/soap11:Envelope</xsl:text>
	    </xsl:when>
	    <xsl:when test='$soapVersion="unknown"'>
	    </xsl:when>
	  </xsl:choose>
	</xsl:with-param>
	<xsl:with-param name='description'>The message MUST use the proper SOAP <xsl:value-of select='$soapVersion'/> Envelope</xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

  <xsl:template name='checkSoapBody'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='xmessage'/>

    <xsl:variable name='direction' select='$msgRef/cm:direction'/>
    <xsl:variable name='soapMep'>
      <xsl:call-template name='getSoapMEP'>
	<xsl:with-param name='msgRef' select='$msgRef'/>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
	<xsl:with-param name='xmessage' select='$xmessage'/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name='msgCModel' select='$msgRef/cm:messageContentModel'/>
    <xsl:variable name='soapVersion'>
      <xsl:call-template name='getSoapVersion'>
	<xsl:with-param name='bindingRef' select='$bindingRef'/>
      </xsl:call-template>
    </xsl:variable>

    <!-- Construct the path to the soap body -->
    <xsl:variable name='body'>
      <xsl:value-of select='$xmessage'/>
      <xsl:choose>
	<xsl:when test='$soapVersion="1.2"'>
	  <xsl:text>/l:content/soap12:Envelope/soap12:Body</xsl:text>
	</xsl:when>
	<xsl:when test='$soapVersion="1.1"'>
	  <xsl:text>/l:content/soap11:Envelope/soap11:Body</xsl:text>
	</xsl:when>
	<xsl:when test='$soapVersion="unknown"'>
	</xsl:when>
      </xsl:choose>
    </xsl:variable>

    <xsl:if test='not($direction="in" and $soapMep="http://www.w3.org/2003/05/soap/mep/soap-response/")'>

      <!-- check that we have the number of elements within the Body
	   as well as the right root element
      -->    
      <xsl:comment>Do we have the appropriate number of elements in the Body?</xsl:comment>
      <xsl:choose>
	<xsl:when test='$msgCModel="#any"'>
	  <!-- it's anything, just check the number.
	       is it really one or can it be more?
	  -->
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	      <xsl:text>count(</xsl:text>
	      <xsl:value-of select='$body'/>
	    <xsl:text>/*) = 1</xsl:text>      </xsl:with-param>      
	    <xsl:with-param name='description'>The message MUST have one element</xsl:with-param>
	  </xsl:call-template>

	</xsl:when>
	<xsl:when test='$msgCModel="#other"'>
	  <!-- it's nothing or something
	       is it really one or can it be more?
	  -->
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	    <xsl:value-of select='$body'/>      </xsl:with-param>      
	    <xsl:with-param name='description'>The message MUST use the proper SOAP Body</xsl:with-param>
	  </xsl:call-template>

	</xsl:when>
	<xsl:when test='$msgCModel="#none"'>
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	      <xsl:text>count(</xsl:text>
	      <xsl:value-of select='$body'/>
	    <xsl:text>/*) = 0</xsl:text>      </xsl:with-param>      
	    <xsl:with-param name='description'>The SOAP Body MUST must be empty</xsl:with-param>
	  </xsl:call-template>

	</xsl:when>
	<xsl:when test='$msgCModel="#element"'>
	  <xsl:variable name='elRef' select='key("xmlId", $msgRef/cm:elementDeclaration/@ref)'/>
	  
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	      <xsl:text>count(</xsl:text>
	      <xsl:value-of select='$body'/>
	    <xsl:text>/*) = 1</xsl:text>      </xsl:with-param>      
	    <xsl:with-param name='description'>The SOAP Body MUST have one element</xsl:with-param>
	  </xsl:call-template>

	  
	  <xsl:comment>Is the proper element used in the SOAP Body?</xsl:comment>
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	      <xsl:value-of select='$body'/>
	      <xsl:text>/*[local-name()='</xsl:text>
	      <xsl:value-of select='$elRef/cm:name/cmbase:localName'/>
	      <xsl:text>' and namespace-uri()='</xsl:text>
	      <xsl:value-of select='$elRef/cm:name/cmbase:namespaceName'/>
	    <xsl:text>']</xsl:text>      </xsl:with-param>      
	    <xsl:with-param name='description'>The SOAP Body content MUST contain an element of the proper type</xsl:with-param>
	  </xsl:call-template>
	  
	</xsl:when>
	<xsl:otherwise>
	  <xsl:call-template name='generate-assertion'>
	    <xsl:with-param name='xpath'>
	    <xsl:text>@@invalidMessageContentModel</xsl:text>      </xsl:with-param>      
	  </xsl:call-template>
	</xsl:otherwise>
      </xsl:choose>
    </xsl:if>

  </xsl:template>

</xsl:stylesheet>

--- NEW FILE: generate-xpath-assertions.xsl ---
<?xml version="1.0" encoding="utf-8"?>
<!--

    $Header: /sources/public/2002/ws/desc/test-suite/messages/generate-xpath-assertions.xsl,v 1.1 2006/10/24 16:53:09 plehegar Exp $

    Convert WSDL Component model into XPath expressions

-->
<xsl:stylesheet version="1.0"
		xmlns="http://www.w3.org/1999/xhtml"
		xmlns:l="http://www.w3.org/2002/ws/desc/logs/"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:cm='http://www.w3.org/2002/ws/desc/wsdl/component'
		xmlns:cmextensions='http://www.w3.org/2002/ws/desc/wsdl/component-extensions'
		xmlns:cmbase='http://www.w3.org/2002/ws/desc/wsdl/component-base'
		xmlns:cmhttp='http://www.w3.org/2002/ws/desc/wsdl/component-http'
		xmlns:cmrpc='http://www.w3.org/2002/ws/desc/wsdl/component-rpc'
		xmlns:cmsoap='http://www.w3.org/2002/ws/desc/wsdl/component-soap'
		xmlns:soap12='http://www.w3.org/2003/05/soap-envelope'
		xmlns:soap11='http://schemas.xmlsoap.org/soap/envelope/'
		exclude-result-prefixes='cmsoap cmrpc cmhttp cmbase cmextensions cm'>
  <xsl:output method="xml" indent="yes" />

  <xsl:include href='generate-xpath-assertions-soap.xsl'/>

  <xsl:key name='xmlId' match='*' use='@xml:id'/>

  <xsl:template match='/'>
    <xsl:element name='stylesheet' namespace='http://www.w3.org/1999/XSL/Transform'>
      <xsl:attribute name='version'>1.0</xsl:attribute>
      <xsl:element name='output' namespace='http://www.w3.org/1999/XSL/Transform'>
	<xsl:attribute name='method'>xml</xsl:attribute>
	<xsl:attribute name='indent'>yes</xsl:attribute>	
      </xsl:element>
      <xsl:element name='template' namespace='http://www.w3.org/1999/XSL/Transform'>
	<xsl:attribute name='match'>/</xsl:attribute>
	<html>
	  <head>
	    <title>Results</title>
	    <link rel="stylesheet" type="text/css" href=
		  "http://www.w3.org/StyleSheets/TR/base.css" />
	    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	  </head>
	  <body>
	    <h1>Message exchange results</h1>
	    
	    <div>
	      <xsl:apply-templates select='/cm:descriptionComponent/cm:bindings/cm:bindingComponent'/>
	    <!--
		<xsl:apply-templates select='key("xmlId", "id-2110471850")'/>
	    -->
	    </div>
	  </body>
	</html>
      </xsl:element>
    </xsl:element>
  </xsl:template>

  <xsl:template match='cm:bindingComponent'>
    <xsl:variable name='bindingRef'
		  select='.'/>
    <xsl:variable name='interfaceOpComp'
		  select='key("xmlId", cm:interfaceOperation/@ref)'/>

    <h2><xsl:text>Interface </xsl:text>
    <xsl:value-of select='cm:name/cmbase:namespaceName'/>
    <xsl:text>{</xsl:text>
    <xsl:value-of select='cm:name/cmbase:localName'/>
    <xsl:text>}</xsl:text></h2>
    
    <xsl:apply-templates select='cm:bindingOperations/cm:bindingOperationComponent'/>
  </xsl:template>

  <xsl:template match='cm:bindingOperationComponent'>
    <xsl:variable name='bindingRef'
		  select='.'/>
    <xsl:variable name='interfaceOpComp'
		  select='key("xmlId", cm:interfaceOperation/@ref)'/>

    <h3><xsl:text>Operation </xsl:text>
      <xsl:value-of select='$interfaceOpComp/cm:name/cmbase:namespaceName'/>
      <xsl:text>{</xsl:text>
      <xsl:value-of select='$interfaceOpComp/cm:name/cmbase:localName'/>
      <xsl:text>}</xsl:text></h3>

    <xsl:variable name='position'>
      <xsl:for-each select='$interfaceOpComp/../cm:interfaceOperationComponent'>
	<xsl:if test='@xml:id=$interfaceOpComp/@xml:id'>
	  <xsl:value-of select='position()-1'/>
	</xsl:if>
      </xsl:for-each>
    </xsl:variable>
<!--
    <xsl:choose>
      <xsl:when test='$interfaceOpComp/cm:messageExchangePattern="http://www.w3.org/2006/01/wsdl/in-out"'>
	  <assertion><xsl:text>/l:log/l:message[@number='</xsl:text>
	  <xsl:value-of select='2*$position + 1'/><xsl:text>']/@type[text()='request']</xsl:text></assertion>
	  <assertion><xsl:text>/l:log/l:message[@number='</xsl:text>
	  <xsl:value-of select='2*$position + 2'/><xsl:text>']/@type[text()='response']</xsl:text></assertion>
	</xsl:when>
	<xsl:when test='$interfaceOpComp/cm:messageExchangePattern="http://www.w3.org/2006/01/wsdl/in"'>
	  <assertion><xsl:text>/l:log/l:message[@number='</xsl:text>
	  <xsl:value-of select='2*$position + 1'/><xsl:text>']/@type[text()='request']</xsl:text></assertion>
	</xsl:when>
      </xsl:choose>
-->

     <xsl:for-each select='$interfaceOpComp/cm:interfaceMessageReferences/cm:interfaceMessageReferenceComponent'>
       <xsl:call-template name='MessageRef'>
	 <xsl:with-param name='msgRef' select='.'/>
	 <xsl:with-param name='bindingRef' select='$bindingRef'/>
	 <xsl:with-param name='position'>
	   <xsl:choose>
	     <xsl:when test='cm:direction="in"'>
	       <xsl:value-of select='2*$position + 1'/>
	     </xsl:when>
	     <xsl:when test='cm:direction="out"'>
	       <xsl:value-of select='2*$position + 2'/>
	     </xsl:when>
	     <xsl:otherwise>
	       <xsl:text>@@InvalidDirection</xsl:text>
	     </xsl:otherwise>
	   </xsl:choose>
	 </xsl:with-param>
       </xsl:call-template>
     </xsl:for-each>

  </xsl:template>

  <xsl:template match='*'>
    
  </xsl:template>

  <xsl:template name='MessageRef'>
    <xsl:param name='msgRef'/>
    <xsl:param name='bindingRef'/>
    <xsl:param name='position'/>
    <xsl:variable name='direction' select='$msgRef/cm:direction'/>

    <xsl:variable name='xmessage'>
      <xsl:text>/l:log/l:message[@number='</xsl:text>
      <xsl:value-of select='$position'/>
      <xsl:text>']</xsl:text>
    </xsl:variable>

    <div class='message'>
      <p class='message' style='font-weight: bold'>
	<xsl:text>Message </xsl:text>
	<span class='direction'><xsl:value-of select='$direction' /></span>
	<span class='position'><xsl:value-of select='$position' /></span>
	<xsl:element name='choose' namespace='http://www.w3.org/1999/XSL/Transform'>
	  <xsl:element name='when' namespace='http://www.w3.org/1999/XSL/Transform'>
	    <xsl:attribute name='test'>
	      <xsl:value-of select='$xmessage'/>
	      <xsl:text>/@timestamp</xsl:text>
	    </xsl:attribute>	  
	    <xsl:text> @ </xsl:text>
	    <code class='timestamp'><xsl:element name='value-of' namespace='http://www.w3.org/1999/XSL/Transform'>
	      <xsl:attribute name='select'>
		<xsl:value-of select='$xmessage'/>
		<xsl:text>/@timestamp</xsl:text>
	      </xsl:attribute>
	    </xsl:element></code>
	  </xsl:element>
	  <xsl:element name='otherwise' namespace='http://www.w3.org/1999/XSL/Transform'>
	    <span class='failure'> doesn't exist!</span>
	  </xsl:element>	  
	</xsl:element>

	<xsl:element name='if' namespace='http://www.w3.org/1999/XSL/Transform'>
	  <xsl:attribute name='test'>
	    <xsl:value-of select='$xmessage'/>
	    <xsl:text>/l:senderHostAndPort</xsl:text>
	  </xsl:attribute>	  
	  <xsl:text> [</xsl:text>
	  <code class='from'><xsl:element name='value-of' namespace='http://www.w3.org/1999/XSL/Transform'>
	    <xsl:attribute name='select'>
	      <xsl:value-of select='$xmessage'/>
	      <xsl:text>/l:senderHostAndPort</xsl:text>
	    </xsl:attribute>
	  </xsl:element></code>
	</xsl:element>
	<xsl:element name='if' namespace='http://www.w3.org/1999/XSL/Transform'>
	  <xsl:attribute name='test'>
	    <xsl:value-of select='$xmessage'/>
	    <xsl:text>/l:receiverHostAndPort</xsl:text>
	  </xsl:attribute>	  
	  <xsl:text> &#8680; </xsl:text>
	  <code class='to'><xsl:element name='value-of' namespace='http://www.w3.org/1999/XSL/Transform'>
	    <xsl:attribute name='select'>
	      <xsl:value-of select='$xmessage'/>
	      <xsl:text>/l:receiverHostAndPort</xsl:text>
	    </xsl:attribute>
	  </xsl:element></code>
	  <xsl:text>]</xsl:text>
	</xsl:element>
      </p>

      <xsl:element name='if' namespace='http://www.w3.org/1999/XSL/Transform'>
	<xsl:attribute name='test'>
	  <xsl:value-of select='$xmessage'/>
	</xsl:attribute>	  

	<xsl:comment>
#
# Now checking "<xsl:value-of select='$direction'/>" message <xsl:value-of select='$xmessage'/>
#
	</xsl:comment>

	<xsl:choose>
	  <xsl:when test='$direction="in"'>
	    <xsl:call-template name='generate-assertion'>
	      <xsl:with-param name='xpath'>
		<xsl:value-of select='$xmessage'/><xsl:text>/@type='request'</xsl:text>
	      </xsl:with-param>
	      <xsl:with-param name='description'>The message exchange MUST include a request message</xsl:with-param>
	    </xsl:call-template>
	  </xsl:when>
	  <xsl:when test='$direction="out"'>
	    <xsl:call-template name='generate-assertion'>
	      <xsl:with-param name='xpath'>
		<xsl:value-of select='$xmessage'/><xsl:text>/@type='response'</xsl:text>
	      </xsl:with-param>
	      <xsl:with-param name='description'>The message exchange MUST include a response message</xsl:with-param>
	    </xsl:call-template>
	  </xsl:when>
	</xsl:choose>
	
	<xsl:if test='$bindingRef/../../cm:type="http://www.w3.org/2006/01/wsdl/soap"'>
	  <xsl:call-template name='checkSoap'>
	    <xsl:with-param name='msgRef' select='$msgRef'/>
	    <xsl:with-param name='bindingRef' select='$bindingRef'/>
	    <xsl:with-param name='xmessage' select='$xmessage'/>
	  </xsl:call-template>
	</xsl:if>
      </xsl:element>
    </div>
  </xsl:template>

  <xsl:template name='generate-assertion'>
    <xsl:param name='xpath'/>
    <xsl:param name='description'>No description available</xsl:param>

    <xsl:element name='choose' namespace='http://www.w3.org/1999/XSL/Transform'>
      <xsl:element name='when' namespace='http://www.w3.org/1999/XSL/Transform'>
	<xsl:attribute name="test">
	  <xsl:text>not(</xsl:text>
	  <xsl:value-of select='$xpath'/>
	  <xsl:text>)</xsl:text>
	</xsl:attribute>
	<p class='failure'>
	  <span class='description' style='color:red; font-weight: bold'><xsl:value-of select='$description'/></span>
	  <br />
	  <code class='xpath'><xsl:value-of select='$xpath'/></code>
	</p>
      </xsl:element>
      <xsl:element name='otherwise' namespace='http://www.w3.org/1999/XSL/Transform'>
	<p class='success'>
	  <span class='description' style='display: none'><xsl:value-of select='$description'/></span>
	  <span select='color: green'><xsl:text>[OK] </xsl:text></span>
	  <code class='xpath'><xsl:value-of select='$xpath'/></code>
	</p>
      </xsl:element>
    </xsl:element>
  </xsl:template>

</xsl:stylesheet>

Received on Tuesday, 24 October 2006 16:53:22 UTC