<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:fun="org:xemelios:buildtools:functions"
exclude-result-prefixes="xs"
version="2.0">
</xsl:processing-instruction>
<xsl:element name="xemelios-component">
<xsl:for-each select="/xemelios-component/@*">
- <xsl:copy-of select="."/>
+ <xsl:choose>
+ <xsl:when test="name(.) eq 'last-version'">
+ <xsl:attribute name="last-version"><xsl:value-of select="$version"/></xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise>
+ </xsl:choose>
</xsl:for-each>
- <xsl:copy-of select="$remote.document//version[@version=$version]"/>
+ <xsl:variable name="version.to.move" select="$remote.document//version[@version=$version]"/>
+ <xsl:element name="version">
+ <xsl:for-each select="$version.to.move/@*"><xsl:copy-of select="."></xsl:copy-of></xsl:for-each>
+ <xsl:copy-of select="$version.to.move/files"></xsl:copy-of>
+ <xsl:copy-of select="$version.to.move/requires"></xsl:copy-of>
+ <xsl:variable name="last.public.version" select="/xemelios-component/@last-version"/>
+
+ <xsl:for-each select="$remote.document//version">
+ <xsl:variable name="comp.res" select="fun:compare(@version,$last.public.version)"/>
+ <xsl:if test="$comp.res gt 0">
+ <xsl:for-each select="./note"><xsl:copy-of select="."/></xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:element>
<xsl:for-each select="//version">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:element>
</xsl:template>
+
+ <xsl:function name="fun:compare" as="xs:double">
+ <xsl:param name="v1" as="xs:string"/>
+ <xsl:param name="v2" as="xs:string"/>
+ <xsl:sequence select="fun:tonumber($v1) - fun:tonumber($v2)"/>
+ </xsl:function>
+
+ <xsl:function name="fun:tonumber" as="xs:double">
+ <xsl:param name="s" as="xs:string"/>
+ <xsl:variable name="atom.number"><numbers><xsl:for-each select="tokenize($s,'\.')"><number><xsl:choose>
+ <xsl:when test="position()=1"><xsl:value-of select="number(.)*1000000"/></xsl:when>
+ <xsl:when test="position()=2"><xsl:value-of select="number(.)*10000"/></xsl:when>
+ <xsl:when test="position()=3"><xsl:value-of select="number(.)*100"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="number(.)"/></xsl:otherwise>
+ </xsl:choose>
+ </number></xsl:for-each></numbers></xsl:variable>
+ <xsl:sequence select="sum($atom.number//number/text())"/>
+ </xsl:function>
+
</xsl:stylesheet>