--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project name="XEMELIOS-manifeste" default="usage" basedir=".">
+ <import file="../../common-tasks.xml"/>
+ <description>Builds, tests, and runs the project XEMELIOS CG sur Chiffre</description>
+ <property file="${user.home}/.ant.properties"/>
+
+ <target name="usage">
+ <echo>
+ Using ${ant.version}
+
+ These are targets supported by this ANT build script:
+
+ compile - compile all .java files, except
+ thoses in ./tmp folder.
+ clean - deletes all compiled and generated
+ files and resources.
+ jars - build jar files.
+
+ Do not call this script directly, use the one located
+ at root of projet (in ../..) instead.
+ </echo>
+ </target>
+
+ <target name="compile" depends="prepare,mk-output-dirs,define-compile-debug">
+ <javac srcdir="java" destdir="build/classes" debug="${compile.debug}" encoding="ISO-8859-1">
+ <classpath>
+ <pathelement path="../xml-marshall/build/classes"/>
+ <pathelement path="../xemelios-core/build/classes"/>
+ <pathelement path="../starter/build/classes"/>
+ <fileset dir="../core/lib" includes="*.jar"/>
+ <pathelement path="../mysql-persistence/build/classes"/>
+ <pathelement path="../core/build/classes"/>
+ <pathelement location="../swing-utils/build/classes"/>
+ <fileset dir="../swing-utils/lib/" includes="*.jar"/>
+ </classpath>
+ </javac>
+ <copy todir="build/classes">
+ <fileset dir="java">
+ <include name="**/*"/>
+ <exclude name="**/*.class"/>
+ <exclude name="**/*.java"/>
+ <exclude name="**/*.form"/>
+ </fileset>
+ </copy>
+ </target>
+
+ <target name="jars" depends="prepare">
+ <property file="component.properties"/>
+ <copy file="manifest/manifest.txt" tofile="build/manifest.txt">
+ <filterset>
+ <filter token="version" value="${component.release}"/>
+ <filter token="name" value="${component.name}"/>
+ </filterset>
+ </copy>
+ <jar destfile="build/jars/${component.name}.jar" basedir="build/classes" manifest="build/manifest.txt"/>
+ </target>
+
+ <target name="config" depends="prepare,get-configuration">
+ <!--property file="component.properties"/-->
+ <property name="component.dir" value="build/config/source/${component.name}/${component.release}"/>
+ <copy file="component-definition-properties.xml" tofile="build/config/source/component-definition-properties.xml"/>
+ <mkdir dir="${component.dir}"/>
+ <copy todir="${component.dir}">
+ <fileset dir="conf">
+ <include name="**/*"/>
+ <exclude name="**/CVS/*"/>
+ <exclude name="${component.name}.xml"/>
+ </fileset>
+ </copy>
+ <copy todir="${component.dir}" file="build/jars/${component.name}.jar"/>
+ <antcall target="prepare-config-metier"/>
+ <!--propertyfile file="${component.dir}/component.properties">
+ <entry key="description" value="Configuration pour le Compte de Gestion sur Chiffre"/>
+ <entry key="type" value="config-updates"/>
+ <entry key="base.dest" value="${xemelios.prg}/root/documents-def/"/>
+ <entry key="cg-colloc.jar.dest" value="${xemelios.prg}/root/lib"/>
+ <entry key="requires" value="${component.requires}"/>
+ </propertyfile-->
+ <antcall target="generate-update"/>
+ </target>
+
+ <target name="clean">
+ <delete dir="build"/>
+ </target>
+
+ <target name="setup">
+ <copy todir="../../build/setup/root/lib">
+ <fileset dir="build/jars" includes="*.jar"/>
+ </copy>
+ <copy todir="../../build/setup/root/documents-def">
+ <fileset dir="conf" includes="**/*" excludes="**/CVS"/>
+ </copy>
+ </target>
+
+ <target name="mk-output-dirs">
+ <mkdir dir="build/classes"/>
+ <mkdir dir="build/jars"/>
+ <mkdir dir="build/config"/>
+ </target>
+
+ <!--target name="check-config">
+ <xslt style="../../utils/persistence-verifier.xsl" in="conf/cg-spl/cg-spl-persist.xml" out="check-result.txt" force="true">
+ <param name="fileName" expression="conf/cg-spl/cg-spl-persist.xml"/>
+ <factory name="net.sf.saxon.TransformerFactoryImpl"/>
+ </xslt>
+ <loadfile property="message" srcFile="check-result.txt" encoding="UTF-8"/>
+ <echo>${message}</echo>
+ <delete file="check-result.txt"/>
+ </target-->
+
+</project>
+
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<component xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="../../defs/technical-component-definition.xsd">
+ <name>manifeste2</name>
+ <description>Configuration de la traçabilité des archives</description>
+ <release>5.0.0.0</release>
+ <url>http://xemelios.org/updatesV5/manifeste</url>
+ <type>CONFIG</type>
+ <destination>
+ <base>${xemelios.root}/documents-def/</base>
+ <file>
+ <name>${component.name}.html</name>
+ <dest>${xemelios.root}/help/documents</dest>
+ </file>
+ <file>
+ <name>${component.name}.jar</name>
+ <dest>${xemelios.root}/lib</dest>
+ </file>
+ </destination>
+ <requires>
+ <component-ref url="http://xemelios.org/updatesV5/starter" release="5.0.0.0"/>
+ <component-ref url="http://xemelios.org/updatesV5/core" release="5.0.0.28"/>
+ <component-ref url="http://xemelios.org/updatesV5/xemelios-core" release="5.0.0.0"/>
+ <component-ref url="http://xemelios.org/updatesV5/swing-utils" release="5.0.0.0"/>
+ <component-ref url="http://xemelios.org/updatesV5/mysql-persistence" release="5.0.0.0"/>
+ </requires>
+ <release-notes>
+ <note visibility="public">Première version</note>
+ </release-notes>
+</component>
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<documents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../defs/config-metier/documents-def.xsd">
+ <document
+ balise="manifeste"
+ browsable="false"
+ extension="xml"
+ id="manifeste2"
+ import-class="fr.gouv.finances.dgfip.xemelios.manifeste2.ManifesteImporter"
+ libelle-extension="du manifeste d'archive (XML)" schema="toto.xsd"
+ referentiel="not-available-tag"
+ titre="Nouvelle traçabilité des Archives"
+ menu-grouping="group"
+ persistence-config="manifeste2/manifeste-persist.xml"
+ natIdColl="SIRET"
+ displayInMenuIf="xemelios.tracabilite2"
+ importable="false">
+ <namespaces>
+ <ns prefix="n" uri="http://www.xemelios.org/namespaces#manifeste"/>
+ <ns prefix="added" uri="http://projets.admisource.gouv.fr/xemelios/namespaces#added"/>
+ <ns prefix="rul" uri="http://xemelios.org/schemas#import-rules"/>
+ </namespaces>
+ <special-key id="sp1" libelle="Exercice" path="/manifeste/@exercice" pos="1"/>
+ <default-budget value="00">Budget Principal</default-budget>
+ <collectivite-path id="c1">
+ <code-path>/manifeste/@cgIdCol</code-path>
+ <libelle-path>/manifeste/@cgLibelle</libelle-path>
+ </collectivite-path>
+ <budget-path id="b1">
+ <code-path>/manifeste/@CodeBudget</code-path>
+ <libelle-path>/manifeste/@TypeBudget</libelle-path>
+ </budget-path>
+ <entete id="resultatimport">resultatimport</entete>
+ <entete id="section">section</entete>
+ <entete id="documents">documents</entete>
+ <entete id="actions">actions</entete>
+ <entete id="volumes">volumes</entete>
+ <entete id="evenements">evenements</entete>
+ <etat
+ balise="fakes"
+ balise-namespace="http://www.xemelios.org/namespaces#manifeste"
+ id="fakes"
+ titre="Documents Importés"
+ use-external-browser="false"
+ importable-element="fake"
+ xslt-file="manifeste2/manifeste.xsl"
+ exportable="true">
+ <element balise="fake" id="fake" max-display="500" titre="Archives importées">
+ <path>/n:manifeste/n:fakes/n:fake</path>
+ <liste-resultat ordre="ASC,ASC" tri-defaut="lr3,lr0">
+ <champ id="lr0" libelle="Exer." exportable="true">
+ <valeur>../../@exercice</valeur>
+ </champ>
+ <champ id="lr1" libelle="Nom Archive" exportable="true">
+ <valeur>../../@archive-name</valeur>
+ </champ>
+ <champ id="pc" libelle="Poste Comptable" exportable="true">
+ <valeur>../../@cgCodic</valeur>
+ </champ>
+ <champ id="lr3" libelle="Id. Coll." exportable="true">
+ <valeur>../../@cgIdCol</valeur>
+ </champ>
+ <champ id="lr4" libelle="Lib. Budg." exportable="true">
+ <valeur>../../@cgLibelle</valeur>
+ </champ>
+ <champ id="lr7" libelle="Date Transfert" datatype="date" date-format="dd/MM/yyyy hh:mm:ss" exportable="true">
+ <valeur>../../n:resultatimport/@LastModify</valeur>
+ </champ>
+ <champ id="date.production" libelle="Date production" datatype="date" date-format="dd/MM/yyyy hh:mm:ss" exportable="true">
+ <valeur>/n:manifeste/n:volumes/n:volume[@num=1]/@dateProduction</valeur>
+ </champ>
+ <champ id="lr8" libelle="Deb. Imp." datatype="date" date-format="dd/MM/yyyy hh:mm:ss" exportable="true">
+ <valeur>../../n:resultatimport/@Debut</valeur>
+ </champ>
+ <champ id="lr9" libelle="Fin Imp." datatype="date" date-format="dd/MM/yyyy hh:mm:ss" exportable="true">
+ <valeur>../../n:resultatimport/@Fin</valeur>
+ </champ>
+ <champ id="lr10" libelle="Duree Imp." exportable="true">
+ <valeur>../../n:resultatimport/@Duree</valeur>
+ </champ>
+ <champ id="lr11" libelle="Présent" exportable="true">
+ <valeur>../../@added:archive</valeur>
+ </champ>
+ </liste-resultat>
+ <critere id="CRI_MANIFESTE_DOCUMENT_EXERCICE" libelle="Exercice">
+ <help>Permet de filtrer sur l'exercice souhaité.</help>
+ <path>{../../@exercice=##VALEUR:exercice##}</path>
+ <input id="exercice" help="/n:manifeste/@exercice"/>
+ </critere>
+ <critere id="CRI_MANIFESTE_CODIC" libelle="Poste Comptable">
+ <help>Permet de filtrer par poste comptable</help>
+ <path>{##OPERATEUR:codic##(../../@cgCodic,"##VALEUR:codic##")}</path>
+ <input id="codic" datatype="string"/>
+ </critere>
+ <critere id="CRI_MANIFESTE_DOCUMENT_FILENAME" libelle="Nom d'archive">
+ <help>Permet de filtrer par nom d'archive</help>
+ <path>{##OPERATEUR:filename##(@fichier,"##VALEUR:filename##")}</path>
+ <input id="filename" datatype="string"/>
+ </critere>
+ <critere id="CRI_MANIFESTE_DOCUMENT_TYPE" libelle="Type de document">
+ <help>Permet de filtrer les archives par le type de document qu'elles contiennent</help>
+ <path>{n:document/@type='##VALEUR:type##'}</path>
+ <select id="type" sort="key">
+ <option value="CGE">Compte de Gestion SPL</option>
+ <option value="CGETAT">Compte de Gestion ETAT</option>
+ <option value="PES">PES Aller</option>
+ <option value="PJ">Pièces Justificatives</option>
+ <option value="ERTN">Titres RNF</option>
+ <option value="EDMN">Etats Détaillé des Mandats Nationaux</option>
+ </select>
+ </critere>
+ <critere id="CRI_MANIFESTE_DOCUMENT_BUIDCOL" libelle="Identifiant Collectivite">
+ <help>Permet de filtrer par identifiant de collectivité (en général, le SIRET du budget principal)</help>
+ <path>{##OPERATEUR:buIdCol##(../../@cgIdCol,"##VALEUR:buIdCol##")}</path>
+ <input id="buIdCol" datatype="string"/>
+ </critere>
+ <critere id="CRI_MANIFESTE_DOCUMENT_DEBUT" libelle="Import (Date de Début)">
+ <help>Permet de filtrer par date de début d'import</help>
+ <path>{/n:manifeste/n:resultatimport/##OPERATEUR:Debut##(xem:TruncDatetime(@Debut),"##VALEUR:Debut##")}</path>
+ <input id="Debut" datatype="date"/>
+ </critere>
+ <critere id="DATE_TRANSFERT" libelle="Date transfert">
+ <help>Permet de filtrer par date de transfert</help>
+ <path>{/n:manifeste/n:resultatimport/##OPERATEUR:transfert##(xem:TruncDatetime(@LastModify),"##VALEUR:transfert##")}</path>
+ <input id="transfert" datatype="date"/>
+ </critere>
+ <critere id="PRESENT" libelle="Présent">
+ <help>Permet de filtrer par présence</help>
+ <path>{@added:archive="##VALEUR:present##"}</path>
+ <select id="present">
+ <option value="Oui">Oui</option>
+ <option value="Non">Non</option>
+ </select>
+ </critere>
+ </element>
+ </etat>
+
+ </document>
+</documents>
--- /dev/null
+<?xml version="1.1" encoding="ISO-8859-1"?>
+<!DOCTYPE xsl:stylesheet [
+<!ENTITY nbsp " ">
+]>
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="xalan://xml.apache.org/xalan/java" xmlns="http://www.xemelios.org/namespaces#manifeste" xmlns:n="http://www.xemelios.org/namespaces#manifeste" xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added" xmlns:ano="http://projets.admisource.gouv.fr/xemelios/namespaces#anomally" exclude-result-prefixes="java" version="2.0">
+
+ <xsl:output standalone="yes" method="xml" indent="yes"/>
+
+ <xsl:output encoding="ISO-8859-1"/>
+ <xsl:output version="1.0"/>
+
+ <xsl:param name="language" select="'fr'"/>
+
+ <xsl:param name="CodeBudget"/>
+ <xsl:param name="LibelleBudget"/>
+ <xsl:param name="CodeCollectivite"/>
+ <xsl:param name="LibelleCollectivite"/>
+
+ <xsl:template match="/*[position()=1]">
+ <xsl:choose>
+ <xsl:when test="local-name(.) = 'manifeste'">
+ <manifeste xmlns="http://www.xemelios.org/namespaces#manifeste" xmlns:n="http://www.xemelios.org/namespaces#manifeste" xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
+ <xsl:for-each select="@*">
+ <xsl:choose>
+ <xsl:when test="string-length(.) eq 0"/>
+ <xsl:otherwise><xsl:copy-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:for-each select="./*">
+ <xsl:call-template name="writeElement">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </manifeste>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="writeElement">
+ <xsl:param name="el"/>
+ <xsl:choose>
+ <xsl:when test="namespace-uri($el) eq 'http://xemelios.org/schemas#import-rules'">
+ <xsl:element name="{name($el)}" namespace="http://xemelios.org/schemas#import-rules">
+ <xsl:for-each select="$el/@*"><xsl:copy-of select="."/></xsl:for-each>
+ <xsl:for-each select="$el/*">
+ <xsl:call-template name="writeElementRul">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:element name="{name($el)}">
+ <xsl:for-each select="$el/@*">
+ <xsl:choose>
+ <xsl:when test="string-length(.) eq 0"/>
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <!-- ajouts Attributs -->
+ <xsl:choose>
+ <xsl:when test="contains('|document|',concat('|',name($el),'|'))">
+ <xsl:attribute name="generated-id" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
+ <xsl:value-of select="generate-id()"/>
+ </xsl:attribute>
+ <xsl:attribute name="documentName" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
+ <xsl:variable name="tab" select="tokenize(@path,'/')"/>
+ <xsl:value-of select="$tab[count($tab)]"/>
+ </xsl:attribute>
+ <xsl:attribute name="type" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
+ <xsl:choose>
+ <xsl:when test="@type eq 'CGE' or @type eq 'cg-colloc'">Compte de Gestion SPL</xsl:when>
+ <xsl:when test="@type eq 'CGETAT' or @type eq 'cg-etat'">Compte de Gestion ETAT</xsl:when>
+ <xsl:when test="@type eq 'PES' or @type eq 'pes-aller'">PES Aller</xsl:when>
+ <xsl:when test="@type='PJ'">Pièces Justificatives</xsl:when>
+ <xsl:when test="@type='ERTN'">Titres RNF</xsl:when>
+ <xsl:when test="@type eq 'EDMN' or @type eq 'edmn'">Etats Détaillé des Mandats Nationaux</xsl:when>
+ <xsl:otherwise><xsl:value-of select="@type"></xsl:value-of></xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:when test="contains('|volume|',concat('|',name($el),'|'))">
+ <xsl:attribute name="generated-id" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
+ <xsl:value-of select="generate-id()"/>
+ </xsl:attribute>
+ <xsl:attribute name="archive" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">Oui</xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ <!-- recursion -->
+ <xsl:for-each select="$el/*">
+ <xsl:call-template name="writeElement">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <xsl:copy-of select="$el/text()" copy-namespaces="yes"/>
+ </xsl:element>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="writeElementRul">
+ <xsl:param name="el"/>
+ <xsl:element name="{name($el)}" namespace="http://xemelios.org/schemas#import-rules">
+ <xsl:for-each select="$el/@*"><xsl:copy-of select="."/></xsl:for-each>
+ <xsl:for-each select="$el/*">
+ <xsl:call-template name="writeElementRul">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+ <xsl:template name="iso-date">
+ <xsl:param name="datebrute"/>
+ <xsl:param name="separator">/</xsl:param>
+ <xsl:variable name="date.tokenize" select="tokenize($datebrute,'/')"/>
+ <xsl:choose>
+ <xsl:when test="string-length($datebrute)=10 and not(contains($datebrute,'..'))">
+ <xsl:value-of select="$date.tokenize[3]"/>
+ <xsl:value-of select="$separator"/>
+ <xsl:value-of select="$date.tokenize[2]"/>
+ <xsl:value-of select="$separator"/>
+ <xsl:value-of select="$date.tokenize[1]"/>
+ </xsl:when>
+ <xsl:when test="string-length($datebrute)=8 and not(contains($datebrute,'..'))">
+ <xsl:choose>
+ <xsl:when test="number($date.tokenize[3])>74">19<xsl:value-of select="$date.tokenize[3]"/></xsl:when>
+ <xsl:otherwise>20<xsl:value-of select="$date.tokenize[3]"/></xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="$separator"/>
+ <xsl:value-of select="$date.tokenize[2]"/>
+ <xsl:value-of select="$separator"/>
+ <xsl:value-of select="$date.tokenize[1]"/>
+ </xsl:when>
+ <xsl:when test="string-length($datebrute)>0 and contains($datebrute,'..')">
+ <xsl:value-of select="$datebrute"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="date.in.string">
+ <xsl:param name="chaine"/>
+ <xsl:if test="string-length(normalize-space($chaine)) > 0">
+
+ <xsl:variable name="date" select="tokenize(normalize-space($chaine),'/')"/>
+ <xsl:variable name="day" select="substring($date[1],string-length($date[1])-1,2)"/>
+
+ <xsl:call-template name="iso-date">
+ <xsl:with-param name="datebrute"><xsl:value-of select="$day"/>/<xsl:value-of select="$date[2]"/>/<xsl:value-of select="normalize-space(replace($date[3],'-',''))"/></xsl:with-param>
+ <xsl:with-param name="separator">-</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<persistence-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../defs/config-metier/Persistence.xsd">
+ <layer name="mysql" persistence-model="xemelios-sql">
+ <document id="manifeste2">
+ <table type="repository" base-name="MANIF2_REPO" version="1">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ ID VARCHAR(25),
+ LIBELLE VARCHAR(100),
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ REPOSITORY LONGBLOB,
+ ENCODING VARCHAR(20)
+ ) ENGINE MYISAM
+ </table>
+ <table type="special-key" base-name="MANIF2_SK" version="1">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ BUDGET VARCHAR(24) NOT NULL,
+ INITIAL_DOC_NAME VARCHAR(100) NOT NULL,
+ KEY1 VARCHAR(100) NOT NULL,
+ LIB1 VARCHAR(200),
+ KEY2 VARCHAR(100),
+ LIB2 VARCHAR(200),
+ KEY3 VARCHAR(100),
+ LIB3 VARCHAR(200),
+ INDEX IX_${base-name}_BC (COLLECTIVITE,BUDGET),
+ ARCHIVE_NAME VARCHAR(100),
+ INDEX ${base-name}_AN (ARCHIVE_NAME)
+ ) ENGINE MYISAM
+ </table>
+ <table type="list-bc" base-name="MANIF2_LBC" version="1">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ BUDGET VARCHAR(24) NOT NULL,
+ BUDGET_LIB VARCHAR(200),
+ COLLECTIVITE_LIB VARCHAR(200),
+ PARENT_COLL1 VARCHAR(15),
+ PARENT_COLL1_LIB VARCHAR(200),
+ PARENT_COLL2 VARCHAR(3),
+ PARENT_COLL2_LIB VARCHAR(3),
+ INITIAL_DOC_NAME VARCHAR(100) NOT NULL,
+ INDEX IX_${base-name}_BC (COLLECTIVITE,BUDGET),
+ ARCHIVE_NAME VARCHAR(100),
+ INDEX ${base-name}_AN (ARCHIVE_NAME) ) ENGINE MYISAM
+ </table>
+
+ <etat id="fakes" import-xslt-file="manifeste2/manifeste-import-mysql.xsl">
+ <key1>
+ <path>/n:manifeste/n:volumes/n:volume/@added:generated-id</path>
+ </key1>
+ <key2>
+ <path>/n:manifeste/n:volumes/n:volume/n:document/@added:generated-id</path>
+ </key2>
+
+ <table type="document" base-name="MANIF2_DOCS" version="1">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ BUDGET VARCHAR(24) NOT NULL,
+ INITIAL_DOC_NAME VARCHAR(100) NOT NULL,
+ DOC_ID VARCHAR(100) NOT NULL,
+ DOC LONGBLOB,
+ ENCODING VARCHAR(20),
+ ARCHIVE_NAME VARCHAR(100),
+ INDEX IX_${base-name}_BC (COLLECTIVITE,BUDGET,DOC_ID),
+ INDEX ${base-name}_AN (ARCHIVE_NAME)
+ ) ENGINE MYISAM
+ </table>
+
+ <table type="index" id="MANIFESTE_VOLUME_IX" base-name="MANIF2_VOL_IX" version="2" main="true" based-on="key1">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ BUDGET VARCHAR(24) NOT NULL,
+ INITIAL_DOC_NAME VARCHAR(100) NOT NULL,
+ DOC_ID VARCHAR(100) NOT NULL,
+ NODE_ID VARCHAR(50) NOT NULL,
+ EXERCICE VARCHAR(4) ,
+ CG_CODE_COLL VARCHAR(3) ,
+ CG_CODIC VARCHAR(6) ,
+ CG_ID_COLL VARCHAR(15) ,
+ DATE_VALIDATION DATE ,
+ NOM_VALIDEUR VARCHAR(255) ,
+ DATE_PRODUCTION DATE ,
+ DATE_TRANSFERT DATE,
+ FILENAME VARCHAR(150) ,
+ NUM_VOLUME INTEGER ,
+ ARCHIVE VARCHAR(3),
+ ARCHIVE_NAME VARCHAR(100),
+ INDEX IX_${base-name}_BC (COLLECTIVITE,BUDGET,DOC_ID),
+ INDEX IX_${base-name}_DC (DOC_ID),
+ INDEX ${base-name}_AN (ARCHIVE_NAME)
+ ) ENGINE MYISAM
+ <patch from-version="1">
+ <sql>ALTER TABLE ${base-name} ADD DATE_TRANSFERT DATE</sql>
+ </patch>
+
+ </table>
+
+ <table type="index" id="MANIFESTE_DOCUMENT_IX" base-name="MANIF_DOC_IX" version="1" main="false" based-on="key2">
+ CREATE TABLE IF NOT EXISTS ${base-name} (
+ COLLECTIVITE VARCHAR(15) NOT NULL,
+ BUDGET VARCHAR(24) NOT NULL,
+ INITIAL_DOC_NAME VARCHAR(100) NOT NULL,
+ DOC_ID VARCHAR(100) NOT NULL,
+ NODE_ID VARCHAR(50) NOT NULL,
+ LIBBUDG VARCHAR(255) ,
+ BUCODE VARCHAR(255) ,
+ BULIBELLE VARCHAR(255) ,
+ DEFAULT_OVERWRITE VARCHAR(255) ,
+ VOLUME DECIMAL ,
+ TYPE VARCHAR(255) ,
+ DEBUT DATE ,
+ FIN DATE ,
+ DUREE VARCHAR(75) ,
+ SKIP_IF_EXISTS VARCHAR(255) ,
+ PATH VARCHAR(255) ,
+ BUIDCOL VARCHAR(255) ,
+ FILENAME VARCHAR(150) ,
+ ARCHIVE_NAME VARCHAR(100),
+ INDEX IX_${base-name}_BC (COLLECTIVITE,BUDGET,DOC_ID),
+ INDEX IX_${base-name}_DC (DOC_ID),
+ INDEX ${base-name}_AN (ARCHIVE_NAME)
+ ) ENGINE MYISAM
+ </table>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_LIBBUDG" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_LIBBUDG">
+ <where-clause>fn:string-compare(${table}.${column},libBudg)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_BUCODE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_BUCODE">
+ <where-clause>fn:string-compare(${table}.${column},buCode)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_DEFAULT_OVERWRITE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_DEFAULT-OVERWRITE">
+ <where-clause>fn:string-compare(${table}.${column},default-overwrite)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_VOLUME" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_VOLUME">
+ <where-clause>${table}.${column}##OPERATEUR:volume####VALEUR:volume##</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_BULIBELLE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_BULIBELLE">
+ <where-clause>fn:string-compare(${table}.${column},buLibelle)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_FILENAME" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_FILENAME">
+ <where-clause>fn:string-compare(${table}.${column},filename)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_TYPE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_TYPE">
+ <where-clause>${table}.${column}='##VALEUR:type##'</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_DEBUT" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_DEBUT">
+ <where-clause>fn:date-compare(${table}.${column},Debut)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_FIN" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_FIN">
+ <where-clause>fn:date-compare(${table}.${column},Fin)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_DUREE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_DUREE">
+ <where-clause>fn:string-compare(${table}.${column},Duree)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_SKIP_IF_EXISTS" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_SKIP_IF_EXISTS">
+ <where-clause>fn:string-compare(${table}.${column},SKIP_IF_EXISTS)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_PATH" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_PATH">
+ <where-clause>fn:string-compare(${table}.${column},path)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_BUIDCOL" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_BUIDCOL">
+ <where-clause>fn:string-compare(${table}.${column},buIdCol)</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_DOCUMENT_EXERCICE" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_EXERCICE">
+ <where-clause>${table}.${column}=##VALEUR:exercice##</where-clause>
+ </criteria>
+ <criteria id="CRI_MANIFESTE_CODIC" type="1" sql-index-id="SQI_MANIFESTE_DOCUMENT_CG_CODIC">
+ <where-clause>fn:string-compare(${table}.${column},codic)</where-clause>
+ </criteria>
+ <criteria id="PRESENT" sql-index-id="SQI_MANIFESTE_DOCUMENT_ARCHIVE">
+ <where-clause>${table}.${column}='##VALEUR:present##'</where-clause>
+ </criteria>
+ <criteria id="DATE_TRANSFERT" sql-index-id="SQI_MANIFESTE_DOCUMENT_DATE_TRANSFERT">
+ <where-clause>fn:date-compare(${table}.${column},transfert)</where-clause>
+ </criteria>
+
+
+
+
+ <!-- SQL-INDEX /manifeste/volume -->
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_CG_CODE_COL" path="/n:manifeste/@cgCodeCol" datatype="string" column="CG_CODE_COLL" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_CG_CODIC" path="/n:manifeste/@cgCodic" datatype="string" column="CG_CODIC" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_CG_ID_COL" path="/n:manifeste/@cgIdCol" datatype="string" column="CG_ID_COLL" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DATE_VALIDATION" path="/n:manifeste/@dateValidation" datatype="date" format="yyyy-MM-dd'T'HH:mm:ss;yyyy-MM-dd" column="DATE_VALIDATION" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_EXERCICE" path="/n:manifeste/@exercice" datatype="string" column="EXERCICE" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_EXERCICEB" path="/manifeste/@exercice" datatype="string" column="EXERCICE" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_NOM_VALIDEUR" path="/n:manifeste/@nomValideur" datatype="string" column="NOM_VALIDEUR" table="MANIFESTE_VOLUME_IX"/>
+
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DATE_PRODUCTION" path="/n:manifeste/n:volumes/n:volume/@dateProduction" datatype="date" column="DATE_PRODUCTION" format="yyyy-MM-dd'T'HH:mm:ss;yyyy-MM-dd" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_FILENAME" path="/n:manifeste/n:volumes/n:volume/@fichier" datatype="string" column="FILENAME" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_NUM_VOLUME" path="/n:manifeste/n:volumes/n:volume/@num" datatype="integer" column="NUM_VOLUME" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_ARCHIVE" path="/n:manifeste/n:volumes/n:volume/@added:archive" datatype="string" column="ARCHIVE" table="MANIFESTE_VOLUME_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DATE_TRANSFERT" table="MANIFESTE_VOLUME_IX" column="DATE_TRANSFERT" path="/n:manifeste/n:resultatimport/@LastModify" datatype="date" format="yyyy-MM-dd HH:mm:ss.Ms;yyyy-MM-dd"/>
+
+ <!-- SQL-INDEX /manifeste/documents/document -->
+ <sql-index id="SQI_MANIFESTE_DOCUMENT__NODE_ID" path="/n:manifeste/n:volumes/n:volume/n:document/@added:generated-id" column="NODE_ID" datatype="string" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_LIBBUDG" path="/n:manifeste/n:volumes/n:volume/n:document/@libBudg" datatype="string" column="LIBBUDG" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_BUCODE" path="/n:manifeste/n:volumes/n:volume/n:document/@buCode" datatype="string" column="BUCODE" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DEFAULT-OVERWRITE" path="/n:manifeste/n:volumes/n:volume/n:document/@default-overwrite" datatype="string" column="DEFAULT_OVERWRITE" table="MANIFESTE_DOCUMENT_IX" format="uppercase"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_VOLUME" path="/n:manifeste/n:volumes/n:volume/n:document/@volume" datatype="decimal" column="VOLUME" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_BULIBELLE" path="/n:manifeste/n:volumes/n:volume/n:document/@buLibelle" datatype="string" column="BULIBELLE" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_TYPE" path="/n:manifeste/n:volumes/n:volume/n:document/@type" datatype="string" column="TYPE" table="MANIFESTE_DOCUMENT_IX" format="uppercase"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DEBUT" path="/n:manifeste/n:volumes/n:volume/n:document/n:resultatimport/@Debut" datatype="date" format="yyyy-MM-dd HH:mm:ss.Ms;yyyy-MM-dd" column="DEBUT" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_FIN" path="/n:manifeste/n:volumes/n:volume/n:document/n:resultatimport/@Fin" datatype="date" format="yyyy-MM-dd HH:mm:ss.Ms;yyyy-MM-dd" column="FIN" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_DUREE" path="/n:manifeste/n:volumes/n:volume/n:document/n:resultatimport/@Duree" datatype="string" column="DUREE" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_SKIP_IF_EXISTS" path="/n:manifeste/n:volumes/n:volume/n:document/@skip-if-exists" datatype="string" column="SKIP_IF_EXISTS" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_PATH" path="/n:manifeste/n:volumes/n:volume/n:document/@path" datatype="string" column="PATH" table="MANIFESTE_DOCUMENT_IX"/>
+ <sql-index id="SQI_MANIFESTE_DOCUMENT_BUIDCOL" path="/n:manifeste/n:volumes/n:volume/n:document/@buIdCol" datatype="string" column="BUIDCOL" table="MANIFESTE_DOCUMENT_IX"/>
+ </etat>
+ </document>
+ </layer>
+</persistence-config>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE xsl:stylesheet [
+<!ENTITY nbsp " ">
+<!ENTITY egrave "è">
+<!ENTITY euro "€">
+<!ENTITY agrave "à">
+<!ENTITY eacute "é">
+]>
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://www.xemelios.org/namespaces#manifeste"
+ xmlns:n="http://www.xemelios.org/namespaces#manifeste"
+ xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added"
+ xmlns:fn="http://projets.admisource.gouv.fr/xemelios/namespaces#functions"
+ xmlns:conf="http://projets.admisource.gouv.fr/xemelios/namespaces#config"
+ version="2.0">
+ <!-- Paramètres de sortie -->
+ <xsl:character-map name="accents">
+ <xsl:output-character character="à" string="&#224;"/>
+ <xsl:output-character character="é" string="&#233;"/>
+ <xsl:output-character character="è" string="&#232;"/>
+ <xsl:output-character character="ê" string="&#234;"/>
+ <xsl:output-character character="ë" string="&#235;"/>
+ <xsl:output-character character="î" string="&#238;"/>
+ <xsl:output-character character="ï" string="&#239;"/>
+ <xsl:output-character character="ô" string="&#244;"/>
+ <xsl:output-character character="ù" string="&#249;"/>
+ <xsl:output-character character="°" string="&#176;"/>
+ </xsl:character-map>
+
+ <xsl:output method="xhtml" indent="yes" use-character-maps="accents" encoding="ISO-8859-1"/>
+
+ <xsl:decimal-format name="decformat" decimal-separator="," grouping-separator=" " digit="#" pattern-separator=";" NaN="NaN" minus-sign="-"/>
+
+ <!-- Paramètres Web -->
+ <xsl:param name="is.web">-1</xsl:param>
+ <xsl:param name="context.path"/>
+
+ <!-- la configuration des documents -->
+ <xsl:param name="config" select="document(.)"/>
+
+ <!-- Paramètres d'entrée -->
+ <xsl:param name="show.formulaire"/>
+ <xsl:param name="browser-destination"/>
+
+ <!-- Paramètres d'entrée de la liste de résultat -->
+ <xsl:param name="numCompte">0</xsl:param>
+
+ <!-- Paramètres d'erreur -->
+ <xsl:param name="error.message">nomessage</xsl:param>
+
+ <!-- Variables -->
+ <xsl:variable name="page-format" select="paysage"/>
+ <!--xsl:param name="separator.timestamp.empty" select="' '"/>
+ <xsl:param name="separator.timestamp.T" select="'T'"/-->
+
+ <!-- pour eviter les sorties parasites de tags non matches -->
+ <xsl:template match="*"/>
+
+ <xsl:template match="/n:manifeste">
+ <html>
+ <head>
+ <title>Manifeste d'archives</title>
+ <style type="text/css" media="all">
+ body {font-family: verdana, sans-serif; font-size: 12px; }
+
+ h1 { font-size: 20px; color: #003535; font-weight: bold; }
+ h2 { font-size: 16px; color: #004545; text-align: left;}
+ h3 { background-color: #DDDDDD; font-size: 14px; color: #005555; text-align: left; margin-bottom: 3px;}
+
+ th { background-color: #999999; }
+
+ .resultatimport b { padding-left: 25px; }
+ .libelle { font-weight: bold; }
+
+ tr#colorised1 td {background-color: #FFFFC5; } /* fonce */
+ tr#colorised2 td {background-color: #FFFFE0; } /* clair */
+ tr#niCol1 td {background-color: #F68989; } /* fonce */
+ tr#niCol2 td {background-color: #F8B9B9 } /* clair */
+ .warn { right: 0px; color: red; font-weight: bold; }
+ td.good { right: 0px; color: green; font-weight: bold; }
+ </style>
+ </head>
+ <body width="100%">
+ <center><h1>Archive</h1></center>
+ <xsl:call-template name="informations.archive"><xsl:with-param name="manifeste" select="."/></xsl:call-template>
+ <xsl:variable name="nbVolumes" select="count(n:volumes/n:volume)"/>
+ <h4>Cette archive comporte <xsl:value-of select="$nbVolumes"/> volume<xsl:if test="$nbVolumes gt 1">s</xsl:if>.</h4>
+ <xsl:call-template name="information.archive.import"><xsl:with-param name="import" select="n:resultatimport"/></xsl:call-template>
+ <h2>Historique</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>Date</th>
+ <th>Utilisateur</th>
+ <th>Action efféctuée</th>
+ <th>Version d'archive</th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:for-each select="/n:manifeste/n:evenements/n:evenement">
+ <xsl:call-template name="evenement">
+ <xsl:with-param name="evt" select="."/>
+ <xsl:with-param name="pos" select="position()"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </tbody>
+ </table>
+
+ <h2>Documents présents dans l'archive</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>Document</th>
+ <th>Type</th>
+ <th>Poste comptable</th>
+ <th>Collectivité Budget</th>
+ <th>Importé</th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:for-each select="n:documents/n:document">
+ <xsl:variable name="document" select="."/>
+ <xsl:variable name="nom.doc">
+ <xsl:choose>
+ <xsl:when test="contains(@path,'/')"><xsl:value-of select="tokenize(./@path,'/')[count(tokenize($document/@path,'/'))]"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="@path"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="docId" select="fn:getDocIdFromType(@type)"/>
+ <!--tr><td colspan="4">docId=<xsl:value-of select="$docId"/></td></tr-->
+ <tr>
+ <xsl:choose>
+ <xsl:when test="@imported='Oui'">
+ <xsl:choose>
+ <xsl:when test="(position() mod 2) = 0">
+ <xsl:attribute name="id">colorised1</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="id">colorised2</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="(position() mod 2) = 0">
+ <xsl:attribute name="id">niCol1</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="id">niCol2</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <a href="#{fn:getAnchor(@path)}"><xsl:value-of select="$nom.doc"/></a>
+ </td>
+ <td>
+ <xsl:choose>
+ <xsl:when test="'yes'=$config//conf:document[@id=$docId]/@browsable and exists(@buIdCol) and exists(@buCode) and not(@imported='no')">
+ <a href="xemelios:/query?docId={$docId}&etatId={$config//conf:document[@id=$docId]/@browsable-etat}&collectivite={@buIdCol}&budget={@buCode}&sp1={/n:manifeste/@exercice}"><xsl:value-of select="$config//conf:document[@id=$docId]/@libelle"/></a>
+ </xsl:when>
+ <xsl:otherwise><xsl:choose>
+ <xsl:when test="string-length($docId) eq 0">Pièce justificative</xsl:when>
+ <xsl:otherwise><xsl:value-of select="$config//conf:document[@id=$docId]/@libelle"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td>
+ <td><xsl:value-of select="@buCodic"/></td>
+ <td><xsl:if test="exists(@buLibelle)"><xsl:value-of select="@buLibelle"/></xsl:if></td>
+ <td><xsl:value-of select="@imported"/></td>
+ </tr>
+ </xsl:for-each>
+ </tbody>
+ </table>
+ <xsl:for-each select="n:documents/n:document">
+ <xsl:call-template name="informations.document"><xsl:with-param name="document" select="."/></xsl:call-template>
+ <!--xsl:call-template name="informations.document.import">
+ <xsl:with-param name="import" select="n:resultatimport"/>
+ <xsl:with-param name="document" select="."/>
+ </xsl:call-template-->
+ </xsl:for-each>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="evenement">
+ <xsl:param name="evt"/>
+ <xsl:param name="pos"/>
+ <tr>
+ <xsl:choose>
+ <xsl:when test="(pos mod 2) eq 0"><xsl:attribute name="id">colorised1</xsl:attribute></xsl:when>
+ <xsl:otherwise><xsl:attribute name="id">colorised2</xsl:attribute></xsl:otherwise>
+ </xsl:choose>
+ <td><xsl:value-of select="format-dateTime($evt/@date, '[D01]/[M01]/[Y] [H01]:[m01]:[s01]')"/></td>
+ <td><xsl:value-of select="$evt/@user"/></td>
+ <td><xsl:value-of select="$evt/@section"/></td>
+ <td align="right"><xsl:value-of select="$evt/@version-archive"/></td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template name="informations.archive">
+ <xsl:param name="manifeste"/>
+ <!-- FA383 -->
+ <h2>Informations générales</h2>
+ <table width="95%">
+ <tbody>
+ <tr>
+ <td class="libelle">Exercice</td>
+ <td><xsl:value-of select="$manifeste/@exercice"/></td>
+ <td class="libelle">Poste comptable</td>
+ <td><xsl:value-of select="$manifeste/@cgCodic"/></td>
+ </tr>
+ <tr>
+ <!--td><xsl:value-of select="$manifeste/@cgIdCol"/></td>
+ <td><xsl:value-of select="$manifeste/@cgCodeCol"/></td-->
+ <td class="libelle">Budget Collectivité</td>
+ <td colspan="3"><xsl:value-of select="$manifeste/@cgLibelle"/></td>
+ </tr>
+ <xsl:choose>
+ <xsl:when test="exists($manifeste/@dateValidation)">
+ <tr>
+ <td class="libelle good">Archive validée <span>le</span></td>
+ <td><xsl:value-of select="format-dateTime($manifeste/@dateValidation,'[D01]/[M01]/[Y0001] [H01]:[m01]:[s01]')"/></td>
+ <td class="libelle">Par</td>
+ <td><xsl:value-of select="$manifeste/@nomValideur"/></td>
+ </tr>
+ </xsl:when>
+ <xsl:otherwise>
+ <tr>
+ <td class="libelle warn" colspan="4">Archive non validée</td>
+ </tr>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="information.archive.import">
+ <xsl:param name="import"/>
+ <!-- FA-383 -->
+ <h2>Import</h2>
+ <table width="95%">
+ <tbody>
+ <tr>
+ <td class="libelle">Date de réception</td>
+ <td><xsl:if test="$import/@LastModify"><xsl:value-of select="format-dateTime($import/@LastModify,'[D01]/[M01]/[Y0001] [H01]:[m01]:[s01]')"/></xsl:if></td>
+ <td class="libelle">Importé par</td>
+ <td><xsl:value-of select="$import/@User"/></td>
+ </tr>
+ <tr>
+ <td class="libelle">Début d'import</td>
+ <td><xsl:value-of select="format-dateTime($import/@Debut,'[D01]/[M01]/[Y0001] [H01]:[m01]:[s01]')"/></td>
+ <td class="libelle">Fin d'import</td>
+ <td><xsl:value-of select="format-dateTime($import/@Fin,'[D01]/[M01]/[Y0001] [H01]:[m01]:[s01]')"/></td>
+ </tr>
+ <tr>
+ <td class="libelle">Durée d'import</td>
+ <td><xsl:value-of select="$import/@Duree"/></td>
+ <td class="libelle">Données présentes</td>
+ <td><xsl:value-of select="/n:manifeste/n:volumes/n:volume/@added:archive"/></td>
+ </tr>
+ </tbody>
+ </table>
+ <xsl:call-template name="information.import.detail"><xsl:with-param name="parent.elements" select="$import/n:importation"/></xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="informations.document">
+ <xsl:param name="document"/>
+ <xsl:variable name="nom.doc">
+ <xsl:choose>
+ <xsl:when test="contains($document/@path,'/')"><xsl:value-of select="tokenize($document/@path,'/')[count(tokenize($document/@path,'/'))]"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="$document/@path"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="docId" select="fn:getDocIdFromType(@type)"/>
+ <h3><a name="{fn:getAnchor($document/@path)}"/>Document <xsl:value-of select="$nom.doc"/><xsl:if test="'no'=$document/@imported"><span class="warn">Non importé</span></xsl:if></h3>
+ <xsl:choose>
+ <xsl:when test="$document/@imported eq 'Non'"><p style="margin-bottom: 1px; margin-left: 5px; margin-top: 0px; font-weight: bold;">Ce document n'a pas été importé</p></xsl:when>
+ <xsl:when test="$document/@imported eq 'Non fourni'"><p>Ce document n'était pas disponible dans l'archive</p></xsl:when>
+ </xsl:choose>
+ <table style="margin-left: 5px;">
+ <colgroup>
+ <xsl:choose>
+ <xsl:when test="exists($document/n:resultatimport)">
+ <col width="15%"/>
+ <col width="20%"/>
+ <col width="15%"/>
+ <col width="20%"/>
+ <col width="15%"/>
+ <col width="15%"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <col width="20%"/>
+ <col width="30%"/>
+ <col width="20%"/>
+ <col width="30%"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </colgroup>
+ <tbody>
+ <xsl:variable name="_blank" select="not($document/@imported eq 'Oui')"/>
+ <tr>
+ <xsl:if test="$_blank"><xsl:attribute name="style">background-color: #EEEEEE;</xsl:attribute></xsl:if>
+ <td class="libelle">Poste comptable</td>
+ <td><xsl:value-of select="$document/@buCodic"/></td>
+ <td class="libelle">Type de doument</td>
+ <td><xsl:value-of select="$config//conf:document[@id=$docId]/@libelle"/></td>
+ <xsl:if test="exists($document/n:resultatimport)">
+ <td class="libelle">Début d'import</td>
+ <td><xsl:value-of select = "format-dateTime($document/n:resultatimport/@Debut,'[D01]/[M01]/[Y] [H01]:[m01]:[s01]')"/></td>
+ </xsl:if>
+ </tr>
+ <tr>
+ <xsl:if test="$_blank"><xsl:attribute name="style">background-color: #EEEEEE;</xsl:attribute></xsl:if>
+ <td class="libelle">Identifiant coll.</td>
+ <td><xsl:value-of select="$document/@buIdCol"/></td>
+ <td class="libelle">Code collectivité</td>
+ <td><xsl:value-of select="$document/@buCodeCol"/></td>
+ <xsl:if test="exists($document/n:resultatimport)">
+ <td class="libelle">Fin d'import</td>
+ <td><xsl:value-of select = "format-dateTime($document/n:resultatimport/@Fin,'[D01]/[M01]/[Y] [H01]:[m01]:[s01]')"/></td>
+ </xsl:if>
+ </tr>
+ <tr>
+ <xsl:if test="$_blank"><xsl:attribute name="style">background-color: #EEEEEE;</xsl:attribute></xsl:if>
+ <td class="libelle">Budget Collectivité</td>
+ <td><xsl:value-of select="$document/@buLibelle"/></td>
+ <td class="libelle">Code budget</td>
+ <td><xsl:value-of select="$document/@buCode"/></td>
+ <xsl:if test="exists($document/n:resultatimport)">
+ <td class="libelle">Durée d'import</td>
+ <td><xsl:value-of select = "$document/n:resultatimport/@Duree"/></td>
+ </xsl:if>
+ </tr>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="informations.document.import">
+ <xsl:param name="import"/>
+ <xsl:param name="document"/>
+
+ <table width="95%">
+ <!-- FA-383 -->
+ <caption><h3>Informations sur l'import du document</h3></caption>
+ <colgroup>
+ <col width="35%"/>
+ <col width="35%"/>
+ <col width="30%"/>
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Début d'import</th>
+ <th>Fin d'import</th>
+ <th>Durée d'import</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><xsl:value-of select="format-dateTime($import/@Debut,'[D01]/[M01]/[Y] [H01]:[m01]:[s01]')"></xsl:value-of></td>
+ <td><xsl:value-of select="format-dateTime($import/@Fin,'[D01]/[M01]/[Y] [H01]:[m01]:[s01]')"/></td>
+ <td><xsl:value-of select="$import/@Duree"/></td>
+ </tr>
+ </tbody>
+ </table>
+ <xsl:call-template name="information.import.detail">
+ <xsl:with-param name="parent.elements" select="$import/n:importation"/>
+ <xsl:with-param name="document" select="$document"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="information.import.detail">
+ <xsl:param name="parent.elements"/>
+ <xsl:param name="document"/>
+
+ <table width="95%">
+ <colgroup>
+ <col width="85%"/>
+ <col width="15%"/>
+ </colgroup>
+ <thead>
+ <tr>
+ <th>Element</th>
+ <th>Nombre</th>
+ </tr>
+ </thead>
+ <tbody>
+ <xsl:for-each select="$parent.elements/n:element">
+ <xsl:sort select="@Libelle"/>
+ <tr>
+ <xsl:choose>
+ <xsl:when test="@imported='no'">
+ <xsl:choose>
+ <xsl:when test="(position() mod 2) = 0">
+ <xsl:attribute name="id">ni-col1</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="id">ni-col2</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="(position() mod 2) = 0">
+ <xsl:attribute name="id">colorised1</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="id">colorised2</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td><xsl:value-of select="@Libelle"/></td>
+ <td><xsl:value-of select="@Nb"/></td>
+ </tr>
+ </xsl:for-each>
+ </tbody>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="iso-date">
+ <xsl:param name="datebrute"/>
+ <xsl:choose>
+ <xsl:when test="string-length($datebrute)>0 and not(contains($datebrute,'..'))">
+ <xsl:value-of select="substring($datebrute, 9, 2)"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="substring($datebrute,6,2)"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="substring($datebrute, 1, 4)"/>
+ </xsl:when>
+ <xsl:when test="string-length($datebrute)>0 and contains($datebrute,'..')">
+ <xsl:value-of select="$datebrute"/>
+ </xsl:when>
+ <xsl:otherwise>-</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:function name="fn:getDocIdFromType" as="xs:string">
+ <xsl:param name="type" as="xs:string"/>
+ <xsl:variable name="docId">
+ <xsl:choose>
+ <xsl:when test="'CGE' eq $type">cg-colloc</xsl:when>
+ <xsl:when test="'CGETAT' eq $type">cg-etat</xsl:when>
+ <xsl:when test="'PES' eq $type">pes-aller</xsl:when>
+ <xsl:when test="'EDMN' eq $type">edmn</xsl:when>
+ <xsl:when test="'ERTN' eq $type">ertn</xsl:when>
+ <xsl:when test="'PJ' eq $type"></xsl:when>
+ <xsl:otherwise><xsl:value-of select="$type"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:sequence select="$docId"/>
+ </xsl:function>
+ <xsl:function name="fn:getAnchor" as="xs:string">
+ <xsl:param name="path" as="xs:string"/>
+ <xsl:sequence select="replace($path,'/','-')"/>
+ </xsl:function>
+</xsl:stylesheet>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><document><table base-name="MANIFESTE_SPECIAL_KEYS" new-name="MANIFESTE_SPECIAL_KEYS"><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET" new-name="BUDGET" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="INITIAL_DOC_NAME" new-name="INITIAL_DOC_NAME" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="KEY1" new-name="KEY1" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="LIB1" new-name="LIB1" new-type="VARCHAR(1000)"/><column id="KEY2" new-name="KEY2" new-type="VARCHAR(1000)"/><column id="LIB2" new-name="LIB2" new-type="VARCHAR(1000)"/><column id="KEY3" new-name="KEY3" new-type="VARCHAR(1000)"/><column id="LIB3" new-name="LIB3" new-type="VARCHAR(1000)"/><column id="ARCHIVE_NAME" new-name="ARCHIVE_NAME" new-type="VARCHAR(1000)"/><index id="IX_${base-name}_BC" new-name="${base-name}_BC"/><index id="${base-name}_AN" new-name="${base-name}_AN"/></table><table base-name="MANIFESTE_LIST_BUDG_COLL" new-name="MANIFESTE_LIST_BUDG_COLL"><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET" new-name="BUDGET" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET_LIB" new-name="BUDGET_LIB" new-type="VARCHAR(1000)"/><column id="COLLECTIVITE_LIB" new-name="COLLECTIVITE_LIB" new-type="VARCHAR(1000)"/><column id="PARENT_COLL1" new-name="PARENT_COLL1" new-type="VARCHAR(1000)"/><column id="PARENT_COLL1_LIB" new-name="PARENT_COLL1_LIB" new-type="VARCHAR(1000)"/><column id="PARENT_COLL2" new-name="PARENT_COLL2" new-type="VARCHAR(1000)"/><column id="PARENT_COLL2_LIB" new-name="PARENT_COLL2_LIB" new-type="VARCHAR(1000)"/><column id="INITIAL_DOC_NAME" new-name="INITIAL_DOC_NAME" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="ARCHIVE_NAME" new-name="ARCHIVE_NAME" new-type="VARCHAR(1000)"/><index id="IX_${base-name}_BC" new-name="${base-name}_BC"/><index id="${base-name}_AN" new-name="${base-name}_AN"/></table><table base-name="MANIFESTE_REPOSITORY" new-name="MANIFESTE_REPOSITORY"><column id="ID" new-name="ID" new-type="VARCHAR(1000)"/><column id="LIBELLE" new-name="LIBELLE" new-type="VARCHAR(1000)"/><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="REPOSITORY" new-name="REPOSITORY" new-type="BLOB"/><column id="ENCODING" new-name="ENCODING" new-type="VARCHAR(1000)" avoid-generate="true"/></table><etat id="volumes"><table base-name="MANIFESTE_DOCUMENT_IX" new-name="MANIFESTE_DOCUMENT_IX"><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET" new-name="BUDGET" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="INITIAL_DOC_NAME" new-name="INITIAL_DOC_NAME" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="DOC_ID" new-name="DOC_ID" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="NODE_ID" new-name="NODE_ID" new-type="VARCHAR(1000)" new-qualif=""/><column id="LIBBUDG" new-name="LIBBUDG" new-type="VARCHAR(1000)"/><column id="BUCODE" new-name="BUCODE" new-type="VARCHAR(1000)"/><column id="BULIBELLE" new-name="BULIBELLE" new-type="VARCHAR(1000)"/><column id="DEFAULT_OVERWRITE" new-name="DEFAULT_OVERWRITE" new-type="VARCHAR(1000)"/><column id="VOLUME" new-name="VOLUME" new-type="DECIMAL"/><column id="TYPE" new-name="TYPE_DOC" new-type="VARCHAR(1000)"/><column id="DEBUT" new-name="DEBUT" new-type="DATE"/><column id="FIN" new-name="FIN" new-type="DATE"/><column id="DUREE" new-name="DUREE" new-type="VARCHAR(1000)"/><column id="SKIP_IF_EXISTS" new-name="SKIP_IF_EXISTS" new-type="VARCHAR(1000)"/><column id="PATH" new-name="PATH" new-type="VARCHAR(1000)"/><column id="BUIDCOL" new-name="BUIDCOL" new-type="VARCHAR(1000)"/><column id="FILENAME" new-name="FILENAME" new-type="VARCHAR(1000)"/><column id="ARCHIVE_NAME" new-name="ARCHIVE_NAME" new-type="VARCHAR(1000)"/><index id="IX_${base-name}_BC" new-name="${base-name}_BC"/><index id="IX_${base-name}_DC" new-name="${base-name}_DC"/><index id="${base-name}_AN" new-name="${base-name}_AN"/></table><table base-name="MANIFESTE_DOCUMENTS" new-name="MANIFESTE_DOCUMENTS"><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET" new-name="BUDGET" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="INITIAL_DOC_NAME" new-name="INITIAL_DOC_NAME" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="DOC_ID" new-name="DOC_ID" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="DOC" new-name="DOC" new-type="BLOB"/><column id="ENCODING" new-name="ENCODING" new-type="VARCHAR(1000)" avoid-generate="true"/><column id="ARCHIVE_NAME" new-name="ARCHIVE_NAME" new-type="VARCHAR(1000)"/><index id="IX_${base-name}_BC" new-name="${base-name}_BC"/><index id="${base-name}_AN" new-name="${base-name}_AN"/></table><table base-name="MANIFESTE_VOLUME_IX" new-name="MANIFESTE_VOLUME_IX"><column id="COLLECTIVITE" new-name="COLLECTIVITE" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="BUDGET" new-name="BUDGET" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="INITIAL_DOC_NAME" new-name="INITIAL_DOC_NAME" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="DOC_ID" new-name="DOC_ID" new-type="VARCHAR(1000)" new-qualif="NOT NULL"/><column id="NODE_ID" new-name="NODE_ID" new-type="VARCHAR(1000)" new-qualif=""/><column id="EXERCICE" new-name="EXERCICE" new-type="VARCHAR(1000)"/><column id="CG_CODE_COLL" new-name="CG_CODE_COLL" new-type="VARCHAR(1000)"/><column id="CG_CODIC" new-name="CG_CODIC" new-type="VARCHAR(1000)"/><column id="CG_ID_COLL" new-name="CG_ID_COLL" new-type="VARCHAR(1000)"/><column id="DATE_VALIDATION" new-name="DATE_VALIDATION" new-type="DATE"/><column id="NOM_VALIDEUR" new-name="NOM_VALIDEUR" new-type="VARCHAR(1000)"/><column id="DATE_PRODUCTION" new-name="DATE_PRODUCTION" new-type="DATE"/><column id="DATE_TRANSFERT" new-name="DATE_TRANSFERT" new-type="DATE"/><column id="FILENAME" new-name="FILENAME" new-type="VARCHAR(1000)"/><column id="NUM_VOLUME" new-name="NUM_VOLUME" new-type="INTEGER"/><column id="ARCHIVE" new-name="ARCHIVE_PRES" new-type="VARCHAR(1000)"/><column id="ARCHIVE_NAME" new-name="ARCHIVE_NAME" new-type="VARCHAR(1000)"/><index id="IX_${base-name}_BC" new-name="${base-name}_BC"/><index id="IX_${base-name}_DC" new-name="${base-name}_DC"/><index id="${base-name}_AN" new-name="${base-name}_AN"/></table></etat></document>
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright
+ * 2012 axYus - http://www.axyus.com
+ * 2012 C.Marchand - christophe.marchand@axyus.com
+ *
+ * This file is part of XEMELIOS_NB.
+ *
+ * XEMELIOS_NB is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * XEMELIOS_NB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with XEMELIOS_NB; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+package fr.gouv.finances.dgfip.xemelios.manifeste2;
+
+import fr.gouv.finances.cp.utils.PropertiesExpansion;
+import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
+import fr.gouv.finances.dgfip.utils.xml.SAXWriter;
+import fr.gouv.finances.dgfip.xemelios.auth.XemeliosUser;
+import fr.gouv.finances.dgfip.xemelios.common.FileInfo;
+import fr.gouv.finances.dgfip.xemelios.importers.DefaultImporter;
+import java.io.File;
+import java.io.FileOutputStream;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import org.apache.log4j.Logger;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
+import org.xml.sax.helpers.LocatorImpl;
+
+/**
+ *
+ * @author cmarchand
+ */
+public class ManifesteImporter extends DefaultImporter {
+ private static final Logger logger = Logger.getLogger(ManifesteImporter.class);
+ File outputTmpFile;
+
+ public ManifesteImporter(XemeliosUser user, PropertiesExpansion props) {
+ super(user, props);
+ }
+
+ @Override
+ protected FileInfo importFile(File f) throws Exception {
+ getImpSvcProvider().startLongWait();
+ File newFile = wrapFile(f);
+ return super.importFile(newFile);
+ }
+ @Override
+ public void done() {
+ super.done();
+ outputTmpFile.delete();
+ }
+
+ private File wrapFile(File fSource) {
+ SAXParserFactory fact = FactoryProvider.getSaxParserFactory();
+ outputTmpFile = new File(getTmpDir(),fSource.getName());
+ while(outputTmpFile.exists()) {
+ if(outputTmpFile.equals(fSource)) {
+ File tmpDir = outputTmpFile.getParentFile();
+ tmpDir = new File(tmpDir,"TMP-DIR");
+ tmpDir.mkdirs();
+ outputTmpFile = new File(tmpDir,fSource.getName());
+ } else {
+ outputTmpFile.delete();
+ }
+ }
+ FileOutputStream fos = null;
+ try {
+ fos = new FileOutputStream(outputTmpFile);
+ String encoding = getFileEncoding(fSource);
+ SAXWriter writer = new SAXWriter(fos, encoding, "1.0") {
+ private boolean actionsOpened = false;
+ private boolean actionsClosed = false;
+ @Override
+ public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
+ if("action".equals(localName) || "on-delete".equals(localName)) {
+ if(!actionsOpened) {
+ super.startElement(uri, "actions", "actions", new AttributesImpl());
+ actionsOpened = true;
+ }
+ } else if(actionsOpened && !actionsClosed && ("section".equals(localName) || "resultatimport".equals(localName) || "evenements".equals(localName))) {
+ super.endElement(uri,"actions","actions");
+ actionsClosed = true;
+ }
+ super.startElement(uri, localName, qName, atts);
+ }
+
+ @Override
+ public void endElement(String uri, String localName, String qName) throws SAXException {
+ if("manifeste".equals(localName) && actionsOpened && !actionsClosed) {
+ super.endElement(uri,"actions","actions");
+ actionsClosed = true;
+ }
+ if("manifeste".equals(localName)) {
+ // on crée le fakes/fake
+ super.startElement(uri,"fakes","fakes", new AttributesImpl());
+ super.startElement(uri,"fake","fake", new AttributesImpl());
+ super.endElement(uri,"fake","fake");
+ super.endElement(uri,"fakes","fakes");
+ }
+ super.endElement(uri, localName, qName);
+ }
+
+ };
+ Locator locator = new LocatorImpl();
+ writer.setDocumentLocator(locator);
+ SAXParser parser = fact.newSAXParser();
+ try {
+ parser.parse(fSource, writer);
+ } catch(SAXException saxEx) {
+ logger.error("SAXException in "+locator.getSystemId()+" at "+locator.getLineNumber()+","+locator.getColumnNumber(),saxEx);
+ throw saxEx;
+ }
+ } catch(Exception ex) {
+ logger.error("wrapFile(File):",ex);
+ } finally {
+ try {
+ fos.flush();
+ fos.close();
+ } catch(Throwable t) {}
+ }
+ return outputTmpFile;
+ }
+}
--- /dev/null
+<?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="http://www.xemelios.org/namespaces#manifeste" xmlns:n="http://www.xemelios.org/namespaces#manifeste" xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added" exclude-result-prefixes="xs" version="2.0">
+ <xsl:output method="xml" encoding="ISO-8859-1" indent="yes"/>
+
+ <xsl:template match="n:manifeste">
+ <xsl:element name="manifeste">
+ <xsl:for-each select="@*"><xsl:copy-of select="."/></xsl:for-each>
+ <xsl:for-each select="./*">
+ <xsl:call-template name="writeElement">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="writeElement">
+ <xsl:param name="el"/>
+ <xsl:element name="{name($el)}">
+ <!-- ajouts Attributs -->
+ <xsl:choose>
+ <xsl:when test="contains('|volume|',concat('|',name($el),'|'))">
+ <xsl:for-each select="$el/@*">
+ <xsl:choose>
+ <xsl:when test="local-name(.)='archive'"><xsl:attribute name="archive" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">Non</xsl:attribute></xsl:when>
+ <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="$el/@*"><xsl:copy-of select="."/></xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- recursion -->
+ <xsl:for-each select="$el/*">
+ <xsl:call-template name="writeElement">
+ <xsl:with-param name="el" select="."/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <xsl:copy-of select="$el/text()" copy-namespaces="yes"/>
+ </xsl:element>
+ </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
--- /dev/null
+Manifest-version: 1.0
+Jar-Version: @version@
+Jar-Content: @name@
+