<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:cdm="http://cdm-fr.fr/2006/CDM-frSchema"
	cdm:schemaLocation="http://cdm-fr.fr/2006/CDM-frSchema http://cdm-fr.fr/cdm/2006/schemas/CDM-fr.xsd"
	exclude-result-prefixes="xsi xsl">
	<xsl:output method="xml" standalone="yes" />
	<xsl:param name="referentiel">constantes.sample</xsl:param>
	<xsl:variable name="defaultLang">fr-FR</xsl:variable>
	<xsl:variable name="codes"
		select="document(concat('file://',$referentiel,'.xml'))/constantes" />
	<!--<xsl:variable name="codes" select="/CDM" />-->
	<!-- La version actuelle ne prend pas en charge le multilinguisme.
		Il fallait aussi distinguer aisément les subProgram qui sont des options ou des mentions d'un program des subProgram qui ne sont que des découpages en semestres : un codeSet uniform portant la valeur diplome est utilisé à cet effect dans l'élément programCode
		A FAIRE : Les codes de typeDiplome        ****************************************************************************************************************************************** -->
	<!-- traitement par défaut : copie des noeuds -->
	<xsl:template match="* | @* | comment() | text()">
		<xsl:copy>
			<xsl:call-template name="copy.attributes" />
			<xsl:apply-templates select="* | text()" />
		</xsl:copy>
	</xsl:template>
	<!-- modification des attributs 
		débarrassé des attributs language, blockLang
		et passage de id en ident et de idRef en ref
	-->
	<xsl:template name="copy.attributes">
		<xsl:for-each
			select="@*[not(name()='id')  or not(name()='ident')or not(name()='idRef')or not(name()='ref') ]">
			<xsl:apply-templates select="." />
		</xsl:for-each>
		<xsl:choose>
			<xsl:when test="@ident">
				<xsl:attribute name="id">
					<xsl:value-of select="@ident" />
				</xsl:attribute>
				<xsl:attribute name="ident">
					<xsl:value-of select="@ident" />
				</xsl:attribute>
			</xsl:when>
			<xsl:when test="@id">
				<xsl:attribute name="id">
					<xsl:value-of select="@id" />
				</xsl:attribute>
				<xsl:attribute name="ident">
					<xsl:value-of select="@id" />
				</xsl:attribute>
			</xsl:when>
		</xsl:choose>

		<xsl:choose>
			<xsl:when test="@ref">
				<xsl:attribute name="ref">
					<xsl:value-of select="@ref" />
				</xsl:attribute>
				<xsl:attribute name="idRef">
					<xsl:value-of select="@ref" />
				</xsl:attribute>
			</xsl:when>
			<xsl:when test="@idRef">
				<xsl:attribute name="ref">
					<xsl:value-of select="@idRef" />
				</xsl:attribute>
				<xsl:attribute name="idRef">
					<xsl:value-of select="@idRef" />
				</xsl:attribute>
			</xsl:when>
		</xsl:choose>

	</xsl:template>
	<!-- ****************************************************************************************************************************************** -->
	<!-- traitement des infoBlock pour la mise forme -->
	<!-- pour les retour ligne -->

	<!-- ****************************************************************************************************************************************** -->
	<!--  TEMPLATE CDM pour ajouter l'attribut language -->
	<xsl:template match="/CDM">
		<xsl:copy>
			<xsl:call-template name="copy.attributes" />
			<xsl:choose>
				<xsl:when test="not(/CDM/@language)">
					<xsl:attribute name="language">
						<xsl:value-of select="$defaultLang" />
					</xsl:attribute>
				</xsl:when>
			</xsl:choose>
			<xsl:apply-templates select="orgUnit | text()" />
			<xsl:apply-templates select="program | text()" />
			<!-- eliminer les course non references-->
			<xsl:for-each select="//refCourse">
				<xsl:variable name="ref">
					<xsl:choose>
						<xsl:when test="@ref">
							<xsl:value-of select="@ref" />
						</xsl:when>
						<xsl:otherwise>
							<xsl:value-of select="@idRef" />
						</xsl:otherwise>
					</xsl:choose>
				</xsl:variable>
				<xsl:if
					test="not(preceding::refCourse/@ref=$ref or preceding::refCourse/@idRef=$ref )">
					<xsl:apply-templates
						select="/CDM/course[@ident=$ref][1]" />
				</xsl:if>
			</xsl:for-each>
			<!-- eliminer les person non references-->
			<xsl:for-each select="//refPerson">
				<xsl:variable name="ref">
					<xsl:choose>
						<xsl:when test="@ref">
							<xsl:value-of select="@ref" />
						</xsl:when>
						<xsl:otherwise>
							<xsl:value-of select="@idRef" />
						</xsl:otherwise>
					</xsl:choose>
				</xsl:variable>
				<xsl:if
					test="not(preceding::refPerson/@ref=$ref or preceding::refPerson/@idRef=$ref )">
					<xsl:apply-templates
						select="/CDM/person[@ident=$ref][1]" />
				</xsl:if>
			</xsl:for-each>
		</xsl:copy>
	</xsl:template>
	<xsl:template match="lov[@info='erasmus' or @info='rome'][@code='']"/>

	<!-- traitement des éléments de program non conforme à CDM-fr -->
	<!-- le programCode -->
	<xsl:template match="webLink[count(../programCode)=0]">
		<xsl:for-each
			select="../infoBlock/extension/*/lov[@info='erasmus'][@code!='']">
			<xsl:variable name="code" select="@code" />
			<programCode codeSet="erasmus">
				<xsl:value-of select="$code" />
			</programCode>
		</xsl:for-each>
		<xsl:for-each
			select="../infoBlock/extension/*/lov[@info='rome'][@code!='']">
			<xsl:variable name="code" select="@code" />
			<programCode codeSet="rome">
				<xsl:value-of select="$code" />
			</programCode>
		</xsl:for-each>
		<xsl:copy>
			<xsl:apply-templates />
		</xsl:copy>
	</xsl:template>

	<xsl:template match="programCode[not(@codeSet)] ">
		<xsl:for-each
			select="../infoBlock/extension/*/lov[@info='erasmus'][@code!='']">
			<xsl:variable name="code" select="@code" />
			<programCode codeSet="erasmus">
				<xsl:value-of select="$code" />
			</programCode>
		</xsl:for-each>
		<xsl:for-each
			select="../infoBlock/extension/*/lov[@info='rome'][@code!='']">
			<xsl:variable name="code" select="@code" />
			<programCode codeSet="rome">
				<xsl:value-of select="$code" />
			</programCode>
		</xsl:for-each>
	</xsl:template>
	<!-- le fichier des constantes est à compléter avec toutes les constantes de l'établissement SOF !!! -->
	<xsl:template match="qualification" xmlns:java="java.lang.String">
		<xsl:copy>
			<xsl:call-template name="copy.attributes" />
			<xsl:apply-templates
				select="qualificationName | qualificationDescription | credits" />
			<degree>	
				<xsl:choose>
					<xsl:when
						test="../infoBlock/extension/*/lov[@info='typeDiplome']">
						<xsl:variable name="code"
							select="../infoBlock/extension/*/lov[@info='typeDiplome']/@code" />
						<xsl:attribute name="degree">
							<xsl:value-of
								select="$codes/typeDiplome/data[@import=$code or import=$code]/@cdmDegree" />
						</xsl:attribute>
						<xsl:value-of
							select="$codes/typeDiplome/data[@import=$code or import=$code]/@id" />
					</xsl:when>
					<xsl:when
						test="../infoBlock/extension/*/typeDiplome/@code">
						<xsl:variable name="code"
							select="java:toLowerCase(java:new(../infoBlock/extension/*/typeDiplome/@code))" />
						<xsl:attribute name="degree">
							<xsl:value-of
								select="$codes/typeDiplome/data[@import=$code or import=$code]/@cdmDegree" />
						</xsl:attribute>
						<xsl:value-of
							select="$codes/typeDiplome/data[@import=$code or import=$code]/@id" />
					</xsl:when>
					<xsl:when test="degree/@degree">
						<xsl:variable name="code"
							select="degree/@degree" />
						<xsl:attribute name="degree">
							<xsl:value-of select="degree/@degree" />
						</xsl:attribute>
						<xsl:value-of
							select="$codes/typeDiplome/data[@cdmDegree=$code]/@id" />
					</xsl:when>
					<xsl:when
						test="degree/text() and not (degree/@degree)">
						<xsl:variable name="code"
							select="normalize-space(degree/text())" />
						<xsl:attribute name="degree">
							<xsl:value-of
								select="$codes/typeDiplome/data[@import=$code or import=$code]/@cdmDegree" />
						</xsl:attribute>
						<xsl:value-of select="$codes/typeDiplome/data[@import=$code or import=$code]/@id" />
					</xsl:when>
					<xsl:otherwise></xsl:otherwise>
				</xsl:choose>
			</degree>
			<xsl:apply-templates
				select="profession | studyQualification" />
		</xsl:copy>
	</xsl:template>
	<xsl:template match="qualification/degree" />
</xsl:stylesheet>
