Mercurial > dive4elements > river
diff flys-artifacts/contrib/visualize-transitions.xsl @ 351:2d268f9894bb
Added XSL transformation do create Graphviz digraph out of conf.xml
flys-artifacts/trunk@1755 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 28 Apr 2011 09:09:44 +0000 |
parents | |
children | 88614ddfc1e3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/contrib/visualize-transitions.xsl Thu Apr 28 09:09:44 2011 +0000 @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. + + Author: Sascha L. Teichmann (sascha.teichmann@intevation.de) +--> + +<xsl:stylesheet + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="1.0"> + + <xsl:output method="text" encoding="UTF-8"/> + + <xsl:param name="base-dir">.</xsl:param> + + <xsl:template match="/"> + <xsl:text>digraph transition_model {
</xsl:text> + <xsl:apply-templates /> + <xsl:text>}
</xsl:text> + </xsl:template> + + <xsl:template match="artifact"> + <xsl:choose> + <xsl:when test="@xlink:href != ''"> + <!-- handle external artifacts --> + <xsl:variable name="path"> + <xsl:call-template name="string-replace-all"> + <xsl:with-param name="text" select="@xlink:href" /> + <xsl:with-param name="replace">${artifacts.config.dir}</xsl:with-param> + <xsl:with-param name="by" select="$base-dir" /> + </xsl:call-template> + </xsl:variable> + <xsl:for-each select="document($path)"> + <xsl:apply-templates select="/artifact"/> + </xsl:for-each> + </xsl:when> + <xsl:otherwise> + <!-- handle internal artifacts --> + <xsl:text>subgraph </xsl:text><xsl:value-of select="@name"/> + <xsl:text> {
</xsl:text> + <xsl:text> label = "Artefakt: </xsl:text> + <xsl:value-of select="@name"/> + <xsl:text>";
</xsl:text> + <xsl:apply-templates mode="inside-artifact" select="./states/state"/> + <xsl:apply-templates mode="inside-artifact" select="./states/transition"/> + <xsl:text>}
</xsl:text> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template match="state" mode="inside-artifact"> + <xsl:text> "</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text disable-output-escaping="yes" + >" [ shape = "record" label=<<table border="0" cellborder="0" cellpadding="3"> + <tr><td align="center" colspan="2" bgcolor="black"><font color="white"></xsl:text> + <xsl:value-of select="@id"/> + <xsl:text disable-output-escaping="yes" + ></font></td></tr></xsl:text> + <xsl:apply-templates mode="inside-artifact" /> + <xsl:text disable-output-escaping="yes" + ></table>>]</xsl:text> + <xsl:text>;
</xsl:text> + </xsl:template> + + <xsl:template match="data" mode="inside-artifact"> + <xsl:text disable-output-escaping="yes" + ><tr><td align="right"></xsl:text> + <xsl:value-of select="@name"/> + <xsl:text disable-output-escaping="yes" + ></td><td align="left"></xsl:text> + <xsl:value-of select="@type"/> + <xsl:text disable-output-escaping="yes" + ></td></tr></xsl:text> + </xsl:template> + + <xsl:template match="transition" mode="inside-artifact"> + <xsl:text> "</xsl:text> + <xsl:value-of select="from/@state"/> + <xsl:text disable-output-escaping="yes">" -> "</xsl:text> + <xsl:value-of select="to/@state"/> + <xsl:apply-templates mode="inside-artifact"/> + <xsl:text>";
</xsl:text> + </xsl:template> + + <xsl:template match="condition" mode="inside-artifact"> + <xsl:text> [ label="</xsl:text> + <xsl:value-of select="@inputvalue"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@operator"/> + <xsl:text> </xsl:text> + <xsl:value-of select="@value"/> + <xsl:text>" ]</xsl:text> + </xsl:template> + + <xsl:template match="text()" mode="inside-artifact"/> + <xsl:template match="text()"/> + + <xsl:template name="string-replace-all"> + <xsl:param name="text" /> + <xsl:param name="replace" /> + <xsl:param name="by" /> + <xsl:choose> + <xsl:when test="contains($text, $replace)"> + <xsl:value-of select="substring-before($text,$replace)" /> + <xsl:value-of select="$by" /> + <xsl:call-template name="string-replace-all"> + <xsl:with-param name="text" + select="substring-after($text,$replace)" /> + <xsl:with-param name="replace" select="$replace" /> + <xsl:with-param name="by" select="$by" /> + </xsl:call-template> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="$text" /> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> +