| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 
 |  
	<!--  template de lancement qui tri par ID-->
	<xsl:template match="/ROOT">
		<ROOT>
			<xsl:apply-templates select="/ROOT/LG[OU='FTP']" mode="nom" />
		</ROOT>
	</xsl:template>
 
	<!-- template qui traite les noeuds ftp -->
	<xsl:template match="/ROOT/LG[OU='FTP']" mode="nom">
		<xsl:variable name="id_ftp_download" select="ID"/>
		<!-- s' il s'agit d'un noeud ftp  -->
		<xsl:if test="not(preceding-sibling::ID = $id_ftp_download) and ($id_ftp_download = /ROOT/LG[OU='FTP'][MSG[COD='100']]/ID)">
			<xsl:if test="contains(MSG/TXT,'DOWN')">
				<TRAITEMENT>
					<xsl:call-template name="noeud_telechargement">
						<xsl:with-param name="id_ftp_download">
							<xsl:value-of select="$id_ftp_download"/>
						</xsl:with-param>
					</xsl:call-template>
				</TRAITEMENT>
			</xsl:if>
		</xsl:if>
	</xsl:template>
 
	<!-- template du noeud ftp qui cherche les traitements suivants ou les liens casses -->
	<xsl:template name="noeud_telechargement">
		<xsl:param name="id_ftp_download"/>
		<!-- <xsl:if test="contains(/ROOT/LG[OU='FTP'][ID=$id_ftp_download]/MSG/TXT,'DOWN')"> -->
			<xsl:for-each select="/ROOT/LG[OU='FTP'][ID=$id_ftp_download][MSG[COD='100']]">
					<!--  on recupere un nom de fichier telecharger -->
					<xsl:variable name="nom_fichier" select="./MSG[COD='101']/TXT"/>
					<!--  on teste si c un lien casse ou pas -->
					<xsl:variable name="casse">
						<xsl:call-template name="test_lien_casse">
							<xsl:with-param name="id" select="$id_ftp_download" />
							<xsl:with-param name="fichier" select="$nom_fichier" />						
						</xsl:call-template>
					</xsl:variable> 
 
					<!-- si casse = 0 alors pas de lien casse sinon -->
					<xsl:choose>
						<xsl:when test="$casse!='0'">	
							<MODULE type="telechargement">
							<LG>
								<xsl:copy-of select="ID"/>
								<xsl:copy-of select="HD"/>
								<xsl:copy-of select="OU"/>
								<xsl:for-each select="./MSG">
									<xsl:if test="COD!='101'">
										<xsl:copy-of select="."/>
									</xsl:if>
									<xsl:if test="COD='101'">
										<xsl:copy-of select="."/>
										<xsl:call-template name="next_LG">
											<xsl:with-param name="id">
												<xsl:value-of select="$id_ftp_download"/>
											</xsl:with-param>
											<xsl:with-param name="fichier_renomme">
												<xsl:value-of select="./TXT"/>
											</xsl:with-param>
										</xsl:call-template>
									</xsl:if>
								</xsl:for-each>
							</LG>
							</MODULE>
						</xsl:when>
						<xsl:otherwise>
						<MODULE type="telechargement">
							<LG>
								<xsl:copy-of select="/ROOT/LG[ID=$id_ftp_download][OU='FTP'][MSG[COD='100'][TXT=$nom_fichier]]/ID"/>
								<xsl:copy-of select="/ROOT/LG[ID=$id_ftp_download][OU='FTP'][MSG[COD='100'][TXT=$nom_fichier]]/HD"/>
								<xsl:copy-of select="/ROOT/LG[ID=$id_ftp_download][OU='FTP'][MSG[COD='100'][TXT=$nom_fichier]]/OU"/>
								<xsl:copy-of select="/ROOT/LG[ID=$id_ftp_download][OU='FTP'][MSG[COD='100'][TXT=$nom_fichier]]/MSG"/>
							</LG>
								<xsl:for-each select="./MSG[COD='101']">
									<xsl:variable name="id_suivant">
										<xsl:call-template name="find_id_suivant">
											<xsl:with-param name="id" select="$id_ftp_download"/>
											<xsl:with-param name="nom_fichier" select="./TXT"/>
										</xsl:call-template>
									</xsl:variable>
									<xsl:if test="$id_suivant=''">
										<LG>
											<ID>0</ID>
											<HD>0</HD>
											<MSG>
												<COD>0</COD>
												<TXT>lien casse</TXT>
											</MSG>
											<xsl:call-template name="lien_casse">
												<xsl:with-param name="id_courant" select="$id_ftp_download"/>
												<xsl:with-param name="list_clef_courante" select="./TXT"/>
											</xsl:call-template>
										</LG>
									</xsl:if>
								</xsl:for-each>
							</MODULE>						
						</xsl:otherwise>
					</xsl:choose>
			</xsl:for-each>
		<!-- </xsl:if> -->
	</xsl:template>
 
	<!--  template qui teste s il y a un lien casse ou pas -->
	<xsl:template name="test_lien_casse">
		<xsl:param name="id"/>
		<xsl:param name="fichier"/>
		<xsl:variable name="test_var">
			<xsl:call-template name="find_id_suivant">
				<xsl:with-param name="id" select="$id" />
				<xsl:with-param name="nom_fichier" select="$fichier" />
			</xsl:call-template>
		</xsl:variable>
		<xsl:choose>
			<xsl:when test="normalize-space($test_var)!=''">1</xsl:when>
			<xsl:otherwise>0</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
 
	<!-- template pour trouver le prochain ID de traitement, il prend en argument l ID du traitement precedent et le nom de fichier traite en entree -->
	<xsl:template name="find_id_suivant">
		<xsl:param name="id"/>
		<xsl:param name="nom_fichier"/>
		<xsl:variable name="id_suivant">
			<xsl:value-of select="/ROOT/LG[ID=$id][last()]/following-sibling::LG[MSG[TXT=$nom_fichier]]/ID"/>
		</xsl:variable>
		<xsl:value-of select="$id_suivant"/>
	</xsl:template>
 
	<!-- template pour trouver le prochain ID, il prend en argument l ID du traitement precedent -->
	<xsl:template name="find_next_id">
		<xsl:param name="id"/>
		<xsl:variable name="next_id">
			<xsl:value-of select="/ROOT/LG[ID=$id][last()]/following-sibling::LG[ID!=$id][1]/ID"/>
		</xsl:variable>
		<xsl:value-of select="$next_id"/>
	</xsl:template>
 
	<!--  template qui construit les modules et leurs LG : c long comme template car chaque traitement a son propre code il faut donc les traitees 1 par 1 -->
	<xsl:template name="next_LG">
		<xsl:param name="id"/>
		<xsl:param name="fichier_renomme"/>
		<!-- on recherche le prochain id du traitement de id -->
		<xsl:variable name="next_ID">
			<xsl:call-template name="find_next_id">
				<xsl:with-param name="id">
					<xsl:value-of select="$id"/>
				</xsl:with-param>
			</xsl:call-template>
		</xsl:variable>
		<!-- *********** LISTE DE PRG qui ont un code 100 en entrée et 101 en sortie CTRL, TRAD, RENO, FACORI, FTP ******************** -->
		<xsl:choose>
			<!-- FTP -->
			<xsl:when test="/ROOT/LG[ID=$next_ID][OU='FTP'][MSG[COD='100'][TXT=$fichier_renomme]]">
				<xsl:comment>FTP UPLOAD</xsl:comment>
				<MODULE type="fichier upload">
					<LG>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='FTP'][MSG[COD='100'][TXT=$fichier_renomme]]/ID"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='FTP'][MSG[COD='100'][TXT=$fichier_renomme]]/HD"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='FTP'][MSG[COD='100'][TXT=$fichier_renomme]]/OU"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='FTP'][MSG[COD='100'][TXT=$fichier_renomme]]/MSG"/>
					</LG>
				</MODULE>
			</xsl:when>
			<!-- controle -->
			<xsl:when test="/ROOT/LG[ID=$next_ID][OU='CTRL'][MSG[COD='100'][TXT=$fichier_renomme]]">
				<xsl:comment>CTRL</xsl:comment>
				<MODULE type="fichier xml">
					<LG>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='CTRL'][MSG[COD='100'][TXT=$fichier_renomme]]/ID"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='CTRL'][MSG[COD='100'][TXT=$fichier_renomme]]/HD"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='CTRL'][MSG[COD='100'][TXT=$fichier_renomme]]/OU"/>
						<xsl:copy-of select="/ROOT/LG[ID=$next_ID][OU='CTRL'][MSG[COD='100'][TXT=$fichier_renomme]]/MSG"/>
						<xsl:call-template name="next_LG">
							<xsl:with-param name="id">
								<xsl:value-of select="$next_ID"/>
							</xsl:with-param>
							<xsl:with-param name="fichier_renomme">
								<xsl:value-of select="$fichier_renomme"/>
							</xsl:with-param>
						</xsl:call-template>
					</LG>
				</MODULE>
			</xsl:when>
.... | 
Partager