<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:key name="formation" match="program | subProgram" use="programID"/>
	<xsl:output method="xml"/>
	<xsl:param name="cmd">extractMentionIDs</xsl:param>
	<xsl:param name="ID">program-400001</xsl:param>
	<xsl:param name="referentiel">constantes</xsl:param>
	<xsl:variable name="codes" select="document(concat('file://',$referentiel,'.xml'))/constantes"/>
	<!-- calcule le ident de l'orgunit universite : c'est forcement une orgunit de premier niveau /CM/orgunit avec normalement orgType='universitet' ou alors on chosit l'element de premiere position ! -->
	<xsl:variable name="universiteID" select="/CDM/orgUnit[1]/@id"/>
	<!-- traitement principal -->
	<xsl:template match="* | @* | comment() | text()">
		<xsl:copy>
			<xsl:apply-templates select="* | @* | comment() |text()" />
		</xsl:copy>
	</xsl:template>
	<xsl:template match="program">
		<xsl:copy>
			<xsl:apply-templates select="* |@* |comment() |text()" />
			<xsl:if test="substring(@ident,1,2)='ME'">
				<xsl:apply-templates select="/CDM/habilitation"/>
				<!-- TRES MAL PLACE (à mettre a la racine) -->
				<!-- copy du properties pour avoir les infos de génération du CDM -->
				
			</xsl:if>
		</xsl:copy>
	</xsl:template>
	<xsl:template match="/">	
		<xsl:choose>
			<xsl:when test="$cmd='extractDossier'">
				<xsl:call-template name="extractDossier"/>
			</xsl:when>
			<xsl:when test="$cmd='extractMentionIDs'">
				<xsl:call-template name="extractMentionIDs"/>
			</xsl:when>
			<xsl:when test="$cmd='extractCourseIDs'">
				<xsl:call-template name="extractCourseIDs"/>
			</xsl:when>
			<xsl:when test="$cmd='extractParcoursIDs'">
				<xsl:call-template name="extractParcoursIDs"/>
			</xsl:when>
			<xsl:when test="$cmd='extractOaiIDs'">
				<xsl:call-template name="extractOaiIDs"/>
			</xsl:when>
		</xsl:choose>
	</xsl:template>
	
	<xsl:template name="extractDossier">
		<CDM language="fr-FR">
			<!--<xsl:call-template name="doSubProgram">
				<xsl:with-param name="id" select="$ID"/>
			</xsl:call-template>-->
			<!--xsl:apply-templates select="/CDM/habilitation"/-->
			<xsl:apply-templates select="/CDM/properties"/>
			<!-- copy universite -->
			<xsl:apply-templates select="/CDM/orgUnit"/>
			<!-- copy du program -->
			<xsl:apply-templates select="key('formation', $ID)"/>
			
			<!-- copy des program qui sont references par le program -->
			<xsl:call-template name="program">
				<xsl:with-param name="id" select="$ID"/>
			</xsl:call-template>
			<!-- copy de tous les course -->
			<xsl:apply-templates select="/CDM/course"/>
			<!-- copy des person qui sont references par le program ou les orgunit copies dans le dossier -->
			<xsl:apply-templates select="/CDM/person"/>
		</CDM>
	</xsl:template>
	<xsl:template name="program">
		<xsl:param name="id"/>
		<xsl:for-each select="key('formation', $id)/programStructure//refProgram">
			<xsl:apply-templates select="key('formation', @ref)"/>
			<xsl:call-template name="program">
				<xsl:with-param name="id" select="@ref"/>
			</xsl:call-template>
		</xsl:for-each>
	</xsl:template>
	<xsl:template name="extractMentionIDs">
		<IDs>
			<xsl:for-each select="/CDM/program[substring(@ident,1,2)='ME']">
				<ID>
					<xsl:value-of select="programID"/>
				</ID>
			</xsl:for-each>
		</IDs>
	</xsl:template>
	<xsl:template name="extractOaiIDs">
		<IDs>
			<xsl:for-each select="/CDM/program[substring(@ident,16,2)='ME']">
				<ID>
					<xsl:value-of select="programID"/>
				</ID>
			</xsl:for-each>
		</IDs>
	</xsl:template>
	<xsl:template name="extractParcoursIDs">
		<IDs>
			<xsl:for-each select="/CDM/program[/CDM/program/programStructure//refProgram/@idRef=@id]">
				<ID>
					<xsl:value-of select="programID"/>
				</ID>
			</xsl:for-each>
		</IDs>
	</xsl:template>
	<xsl:template name="extractCourseIDs">
		<IDs>
			<xsl:for-each select="//course[not(courseCode[@codeSet='UE'])]">
				<ID>
					<xsl:value-of select="courseID"/>
				</ID>
			</xsl:for-each>
		</IDs>
	</xsl:template>
	<xsl:template match="program/@ident">
		<xsl:attribute name="id">
			<xsl:value-of select="../programID" />
		</xsl:attribute>
		<xsl:attribute name="ident">
			<xsl:value-of select="../programID" />
		</xsl:attribute>
	</xsl:template>
	<xsl:template match="orgUnit/@ident">
		<xsl:attribute name="id">
			<xsl:value-of select="../orgUnitID" />
		</xsl:attribute>
		<xsl:attribute name="ident">
			<xsl:value-of select="../orgUnitID" />
		</xsl:attribute>
	</xsl:template>
	<xsl:template match="course/@ident">
		<xsl:attribute name="id">
			<xsl:value-of select="../courseID" />
		</xsl:attribute>
		<xsl:attribute name="ident">
			<xsl:value-of select="../courseID" />
		</xsl:attribute>
	</xsl:template>
	<xsl:template match="person/@ident">
		<xsl:attribute name="id">
			<xsl:value-of select="../personID" />
		</xsl:attribute>
		<xsl:attribute name="ident">
			<xsl:value-of select="../personID" />
		</xsl:attribute>
	</xsl:template>
	<xsl:template match="@ref">
		<xsl:attribute name="ref">
			<xsl:value-of select="." />
		</xsl:attribute>
		<xsl:attribute name="idRef">
			<xsl:value-of select="." />
		</xsl:attribute>
	</xsl:template>
</xsl:stylesheet>
