Mini Kabibi Habibi
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" exclude-result-prefixes="uml xmi exslt exslt-set exslt-functions"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:uml="http://schema.omg.org/spec/UML/2.1.2"
xmlns:xmi="http://schema.omg.org/spec/XMI/2.1"
xmlns:exslt="http://exslt.org/common" xmlns:exslt-set="http://exslt.org/sets"
xmlns:exslt-functions="http://exslt.org/functions">
<!-- Called on every class/interface. One file per class/interface -->
<xsl:template name="classifier">
<xsl:param name="relPathTop"/>
<xsl:param name="entity"/>
<xsl:param name="nestingPackageName"/>
<xsl:param name="ownedAttributeSet"/>
<xsl:param name="ownedOperationSet" />
<xsl:param name="generalization"/>
<xsl:param name="implements"/>
<xsl:param name="prevEntity"/>
<xsl:param name="nextEntity"/>
<xsl:param name="filePrefix"/>
<xsl:param name="relPathClass"/>
<xsl:variable name="path">
<element>
<xsl:attribute name="id"><xsl:value-of select="@xmi:id"/></xsl:attribute>
<xsl:call-template name="getPackageNamePart"/>
<xsl:value-of select="@name"/>
</element>
<xsl:for-each select="generalization">
<xsl:call-template name="generalization"></xsl:call-template>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="allImplementedClasses" select="key('getElementById', key('getRealizations', exslt:node-set($path)/*/@id)/@supplier)"/>
<xsl:variable name="allImplementingClasses" select="key('getElementById',key('getRealizingClasses', @xmi:id)/@client)"/>
<xsl:variable name="allSubClasses" select="key('getSubclasses', @xmi:id)"/>
<xsl:variable name="artifact" select="key('getElementById',key('getManifestation', @xmi:id)/@client)"/>
<xsl:variable name="lcEntityName" select="translate($entity, 'CDI', 'cdi')"/>
<html>
<xsl:call-template name="htmlStartPage"/>
<xsl:call-template name="htmlHead">
<xsl:with-param name="path" select="$relPathTop"/>
<xsl:with-param name="title" select="concat($nestingPackageName, $packageDelimiter, @name)"/>
</xsl:call-template>
<body>
<div id="navigation">
<div id="banner">
<ul class="sections">
<li><a href="{$relPathTop}{$fileOverviewSummary}" title="Summary of all packages">Overview</a></li>
<li><a href="{$filePackageSummary}" title="Summary of {$nestingPackageName}">Package</a></li>
<li class="active"><xsl:value-of select="$entity"/></li>
<li><a href="{$relPathTop}{$fileIndexAll}">Index</a></li>
</ul>
<ul class="navigFrame">
<a href="{concat($relPathTop,$fileIndex,'?',$relPathClass,$filePrefix,@name,'.html')}" class="navigFrameElem" target="_top">FRAMES</a>
<xsl:text> </xsl:text>
<a href="{concat($filePrefix,@name,'.html')}" class="navigFrameElem" target="_top">NO FRAMES</a>
</ul>
</div>
<ul class="siblingSections">
<xsl:if test="$prevEntity!=''">
<li><a href="{concat($filePrefix,$prevEntity,'.html')}"><xsl:value-of select="concat('Prev ', $entity)" /></a></li>
</xsl:if>
<xsl:if test="$nextEntity!=''">
<li class="last"><a href="{concat($filePrefix,$nextEntity,'.html')}"><xsl:value-of select="concat('Next ', $entity)" /></a></li>
</xsl:if>
</ul>
</div>
<div id="content">
<div class="classSummary">
<!-- Class Name -->
<h3 id="entityPackage"><xsl:value-of select="$nestingPackageName"/></h3>
<h1 id="entityName"><xsl:value-of select="concat($entity, ' ', @name)" /></h1>
<!-- Class tree -->
<xsl:call-template name="htmlInheritedClassTree">
<xsl:with-param name="path" select="$path"/>
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
<!-- All Implemented Classes -->
<xsl:if test="count($allImplementedClasses) > 0">
<h3 class="titleSmallList">All Implemented Interfaces:</h3>
<div class="smallList">
<xsl:for-each select="$allImplementedClasses">
<xsl:call-template name="htmlLinkToElement">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="."/>
<xsl:with-param name="style" select="string('linkSimple')"/>
</xsl:call-template>
<xsl:if test="position() < last()"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>
</div>
</xsl:if>
<!-- All Implemented Classes -->
<xsl:if test="count($allSubClasses) > 0">
<h3 class="titleSmallList">Direct Known Subclasses:</h3>
<div class="smallList">
<xsl:for-each select="$allSubClasses">
<xsl:call-template name="htmlLinkToElement">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="."/>
<xsl:with-param name="style" select="string('linkSimple')"/>
</xsl:call-template>
<xsl:if test="position() < last()"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>
</div>
</xsl:if>
<!-- All Implementing Classes -->
<xsl:if test="count($allImplementingClasses) > 0">
<h3 class="titleSmallList">All Known Implementing Classes:</h3>
<div class="smallList">
<xsl:for-each select="$allImplementingClasses">
<xsl:call-template name="htmlLinkToElement">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="."/>
<xsl:with-param name="style" select="string('linkSimple')"/>
</xsl:call-template>
<xsl:if test="position() < last()"><xsl:text>, </xsl:text></xsl:if>
</xsl:for-each>
</div>
</xsl:if>
<hr/>
<!-- Class details -->
<xsl:text>public </xsl:text>
<xsl:if test="@isAbstract='true' and $entity!='Interface'">
<xsl:text>abstract </xsl:text>
</xsl:if>
<xsl:value-of select="concat($lcEntityName, ' ')"/>
<strong><xsl:value-of select="@name" /></strong><br/>
<xsl:if test="count($generalization) > 0">
extends <xsl:value-of select="$generalization/@name" /><br/>
</xsl:if>
<xsl:if test="count($implements) > 0">
implements
<xsl:for-each select="$implements">
<xsl:value-of select="@name" />
<xsl:if test="position() < last()">, </xsl:if>
</xsl:for-each>
</xsl:if>
<p>
<xsl:call-template name="htmlDescription">
<xsl:with-param name="baseElement" select="@xmi:id"/>
</xsl:call-template>
<xsl:if test="count($artifact) > 0">
<b>File: </b>
<xsl:for-each select="exslt:node-set($artifact)/ancestor::*[@xmi:type='uml:Package']">
<xsl:if test="position() > 1"><xsl:value-of select="concat('/',@name)"/></xsl:if>
</xsl:for-each>
<xsl:value-of select="concat('/', $artifact/@name)"/>
</xsl:if>
</p>
<hr/>
</div>
<xsl:if test="count($ownedAttributeSet) > 0">
<div id="fieldSummary">
<h2>Field Summary</h2>
<table border="1" class="tableSummary">
<xsl:for-each select="$ownedAttributeSet">
<xsl:call-template name="class-field-summary">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
</xsl:for-each>
</table>
</div>
</xsl:if>
<xsl:if test="count($ownedOperationSet) > 0">
<div id="methodSummary">
<h2>Method Summary</h2>
<table border="1" class="tableSummary">
<xsl:for-each select="$ownedOperationSet">
<xsl:call-template name="class-method-summary">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
</xsl:for-each>
</table>
</div>
</xsl:if>
<xsl:if test="count($ownedAttributeSet) > 0">
<div id="fieldDetail">
<h2>Field Detail</h2>
<xsl:for-each select="$ownedAttributeSet">
<xsl:call-template name="class-field-detail">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
</xsl:for-each>
</div>
</xsl:if>
<xsl:if test="count($ownedOperationSet) > 0">
<div id="methodDetail">
<h2>Method Detail</h2>
<xsl:for-each select="$ownedOperationSet">
<xsl:call-template name="class-method-detail">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="specifiedBy" select="exslt:node-set($allImplementedClasses)/ownedOperation[@name=current()/@name]"/>
</xsl:call-template>
</xsl:for-each>
</div>
</xsl:if>
<xsl:variable name="nestedClassSet" select="nestedClassifier[@xmi:type='uml:Class']"/>
<xsl:if test="count($nestedClassSet) > 0">
<div>
<h2>Nested Classes</h2>
<xsl:call-template name="htmlTableSummary">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="set" select="$nestedClassSet"/>
<xsl:with-param name="filePrefix" select="string(concat(@name, '/', $fileprefixClass))"/>
</xsl:call-template>
</div>
</xsl:if>
</div>
</body>
</html>
</xsl:template>
<xsl:template name="class-field-summary">
<xsl:param name="relPathTop"/>
<tr>
<td align="right" width="1%" valign="top">
<span class="code">
<xsl:choose>
<xsl:when test="@isReadOnly='true'">const</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="@visibility='private'">private</xsl:when>
<xsl:when test="@visibility='protected'">protected</xsl:when>
</xsl:choose>
<xsl:if test="@isStatic='true'"> static</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="count(type) > 0">
<xsl:text> </xsl:text>
<xsl:call-template name="htmlType">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="."/>
</xsl:call-template>
</xsl:if>
</span>
</td>
<td valign="top">
<span class="code">
<a href="#{@name}" class="linkSummary"><xsl:value-of select="@name" /></a>
</span>
</td>
</tr>
</xsl:template>
<!-- Method summary -->
<xsl:template name="class-method-summary">
<xsl:param name="relPathTop"/>
<tr>
<td align="right" width="1%" valign="top">
<span class="code">
<xsl:if test="@isReadOnly='true'">final</xsl:if>
<xsl:choose>
<xsl:when test="@visibility='private'"> private</xsl:when>
<xsl:when test="@visibility='protected'"> protected</xsl:when>
</xsl:choose>
<xsl:if test="@isAbstract='true'"> abstract</xsl:if>
<xsl:if test="@isStatic='true'"> static</xsl:if>
<xsl:choose>
<xsl:when test="ownedParameter[@direction='return']">
<xsl:text> </xsl:text>
<xsl:call-template name="htmlType">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="ownedParameter[@direction='return']"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</span>
</td>
<td valign="top">
<span class="code">
<xsl:variable name="parameters">
<xsl:call-template name="htmlParametersBracket">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
</xsl:variable>
<a href="#{concat(@name,$parameters)}" class="linkSummary"><xsl:value-of select="@name"/></a>
<xsl:copy-of select="$parameters"/>
</span>
</td>
</tr>
</xsl:template>
<!-- Field Detail -->
<xsl:template name="class-field-detail">
<xsl:param name="relPathTop"/>
<div class="detail" id="{@name}">
<h4><xsl:value-of select="@name" /></h4>
<div class="detailContent">
<span class="code">
<xsl:choose>
<xsl:when test="@isReadOnly='true'">const</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="@visibility='private'">private</xsl:when>
<xsl:when test="@visibility='protected'">protected</xsl:when>
<xsl:otherwise>public</xsl:otherwise>
</xsl:choose>
<xsl:if test="@isStatic='true'"> static</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="count(type) > 0">
<xsl:text> </xsl:text>
<xsl:call-template name="htmlType">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="."/>
</xsl:call-template>
</xsl:if>
<b><xsl:value-of select="concat(' ', @name)" /></b>
<xsl:if test="defaultValue">
<xsl:value-of select="concat(' = ', defaultValue/@value)" />
</xsl:if>
</span>
<p>
<xsl:call-template name="htmlDescription">
<xsl:with-param name="baseElement" select="@xmi:id"/>
</xsl:call-template>
</p>
</div>
</div>
<hr/>
</xsl:template>
<!-- Method Detail -->
<xsl:template name="class-method-detail">
<xsl:param name="relPathTop"/>
<xsl:param name="specifiedBy"/>
<xsl:variable name="artifact" select="key('getElementById',key('getManifestation', @xmi:id)/@client)"/>
<xsl:variable name="parameters">
<xsl:call-template name="htmlParametersBracket">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
</xsl:call-template>
</xsl:variable>
<div class="detail" id="{concat(@name,$parameters)}">
<h4><xsl:value-of select="@name"/></h4>
<div class="detailContent">
<span class="code">
<xsl:choose>
<xsl:when test="@visibility='private'">private</xsl:when>
<xsl:when test="@visibility='protected'">protected</xsl:when>
<xsl:otherwise>public</xsl:otherwise>
</xsl:choose>
<xsl:if test="@isAbstract='true'"> abstract</xsl:if>
<xsl:if test="@isStatic='true'"> static</xsl:if>
<xsl:choose>
<xsl:when test="ownedParameter[@direction='return']">
<xsl:text> </xsl:text>
<xsl:call-template name="htmlType">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="ownedParameter[@direction='return']"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
<b><xsl:value-of select="concat(' ', @name)" /></b>
<xsl:copy-of select="$parameters"/>
</span>
<!-- Description and tags -->
<p>
<xsl:call-template name="htmlDescriptionParam">
<xsl:with-param name="baseElement" select="@xmi:id"/>
</xsl:call-template>
<xsl:if test="count($artifact) > 0">
<b>File: </b>
<xsl:for-each select="exslt:node-set($artifact)/ancestor::*[@xmi:type='uml:Package']">
<xsl:if test="position() > 1"><xsl:value-of select="concat('/',@name)"/></xsl:if>
</xsl:for-each>
<xsl:value-of select="concat('/', $artifact/@name)"/>
</xsl:if>
</p>
<!-- Specified By -->
<xsl:if test="count($specifiedBy) > 0">
<xsl:for-each select="exslt:node-set($specifiedBy)/ownedComment">
<h3 class="titleSmallList">Description Copied From interface:</h3>
<div class="smallList">
<xsl:value-of select="@body"/>
<xsl:call-template name="br-replace">
<xsl:with-param name="str" select="body/text()"/>
</xsl:call-template>
</div>
</xsl:for-each>
<h3 class="titleSmallList">Specified By</h3>
<div class="smallList">
<xsl:for-each select="$specifiedBy">
<xsl:variable name="classParent" select="parent::*"/>
<xsl:variable name="path">
<xsl:call-template name="getPackageFilePath">
<xsl:with-param name="context" select="$classParent"/>
</xsl:call-template>
<xsl:call-template name="getPrefix">
<xsl:with-param name="context" select="$classParent"/>
</xsl:call-template>
</xsl:variable>
<span class="code">
<a href="{concat($relPathTop,$path,$classParent/@name,'.html#',@name,$parameters)}" class="$linkType">
<xsl:value-of select="@name"/>
</a>
</span>
<xsl:text> in </xsl:text>
<span class="code">
<xsl:call-template name="htmlLinkToElement">
<xsl:with-param name="relPathTop" select="$relPathTop"/>
<xsl:with-param name="context" select="$classParent"/>
<xsl:with-param name="style" select="string('linkSimple')"/>
</xsl:call-template>
</span>
</xsl:for-each>
</div>
</xsl:if>
<xsl:variable name="params" select="ownedParameter[not(@direction) or @direction!='return']"/>
<xsl:if test="count($params) > 0">
<h3 class="titleSmallList">Parameters</h3>
<div class="smallList">
<xsl:variable name="id" select="@xmi:id"/>
<xsl:for-each select="$params">
<xsl:variable name="cnt" select="position()"/>
<span class="code"><xsl:value-of select="@name"/></span>
<xsl:text> - </xsl:text>
<xsl:for-each select="key('getMetadata', $id)/*[local-name()='param'][$cnt]">
<xsl:call-template name="htmlDocblockParam"/>
</xsl:for-each>
<br/>
</xsl:for-each>
</div>
</xsl:if>
</div>
</div>
</xsl:template>
</xsl:stylesheet>