Package fr.gpmsi

Class ScriptStep


  • public class ScriptStep
    extends Object
    Etape de script. Les étapes de script résultent de l'exécution des méthodes de GroovyScriptsBase. A l'intérieur des blocs 'onItem', l'objet 'item' possède des variables, qui dépendent du type de l'étape. Les étapes admises actuellement (avec les variables disponibles) sont :
    • RSS : 'RUM' (ou 'rum'), 'line', 'linenr'
    • RSA : 'RSA' (ou 'rsa'), 'line', 'linenr'
    • RHS : 'RHS' (ou 'rhs'), 'line', 'linenr'
    • RHA : pas encore implemente
    • CSV : 'row' (CsvRow), 'linenr'
    • SINGLE : pas de variable, execute une fois le corps et sort
    • LINE : 'line', 'linenr'
    • VIDHOSP : 'vidhosp', 'line', 'linenr'
    • RSFACE : 'RSF' (ou 'rsf'), 'line', 'linenr'
    • MONO : 'MONO' (ou 'mono'), 'line', 'linenr'
    • XLPOI : 'row' , 'linenr' (EN COURS DE DEV)
    • DBF : 'row', 'linenr' (EN COURS DE DEV)
    En entrée on déclare soit un inputReader, soit un inputFilePath. Le inputReader a priorité sur le inputFilePath.

    ScriptStep n'envoie rien par défaut sur la sortie standard, mais permet de déclarer un outputWriter via un appel à outputWriter ou un outputFilePath via un appel à output. Les scripts qui s'exécutent dans un ScriptStep sont encouragés à utiliser ces deux variables pour déclarer le fichier de sortie ou le flux de sortie, et à les utiliser pour ecrire leurs resultats ; cependant il n'y a pas d'obligation à utiliser ces variables.

    L'étape de script XLPOI ouvre par défaut l'onglet 0 (le premier onglet du fichier excel). On peut lui dire d'ouvrir un autre onglet en donnant son nom par un appel à sheetName, ou son numéro par un appel à sheetNumber (sheetName a priorité sur sheetNumber)

    Pour certaines étapes il est nécessaire de préciser explicitement les métadonnées à utiliser. On peut faire cela en définissant la valeur de metaHint pour aider à trouver la bonne version d'une métadonnées (par exemple l'année pour un les métadonnées RSFACE), ou bien on peut définir directement la valeur metaName pour donner le nom de la métadonnée à trouver. Si le fichier des métadonnées n'est pas un fichier fourni par défaut dans la librairie on peut donner le chemin du répertoire où chercher ce fichier de métadonnées via metaDir.

    Par exemple pour lire un fichier TRA de 2022 qui est dans C:\t\mon-tra.txt on mettra input à "C:\t\mon-tra.txt" et metaName à tra2016. gpmsi trouvera tout seul le fichier gpmsi2016.csv qui est dans les ressources de la librairie pmsixml.

    La librairie utilisée pour lire les données csv est OpenCsv. S'y référer pour voir tout ce que fait cette librairie qui permet d'analyser fiablement le csv. Cette librairie peut utiliser un caractère d'échappement pour représenter le caractère de "quotation" (habituellement le guillemet : "). Cependant ici on met par défaut ce caractère d'échappement à 0 car ce mécanisme n'est pas utilisé couramment par Excel et cela cause plus de bugs que d'autres choses. Si vous en avez besoin, remettez le caractère de votre choix à l'aide de la méthode setCsvEscapeCharacter(char).

    • Field Detail

      • ST_RHA

        public static final int ST_RHA
        Etape RHA (pas encore implémentée)
        See Also:
        Constant Field Values
      • ST_SINGLE

        public static final int ST_SINGLE
        Etape avec une seule exécution, peu utilisé
        See Also:
        Constant Field Values
      • ST_LINE

        public static final int ST_LINE
        Etape traitement des lignes d'un fichier
        See Also:
        Constant Field Values
      • ST_MONO

        public static final int ST_MONO
        Etape MONO pour tous les fichiers mono-niveau, comme les FICHCOMP, FICHSUP, etc.
        See Also:
        Constant Field Values
      • ST_XLPOI

        public static final int ST_XLPOI
        Etape XLPOI pour les fichiers Excel simples (qui sont comme des fichiers csv) lus par Apache POI
        See Also:
        Constant Field Values
      • ST_DBF

        public static final int ST_DBF
        Etape DBF pour lecture d'un fichier DBF enregistrement par enregistrement
        See Also:
        Constant Field Values
    • Method Detail

      • input

        public void input​(String path)
        Définir le chemin du fichier d'entrée Fait la même chose que setInputFilePath(String)
        Parameters:
        path - Le chemin
      • input

        public void input​(String path,
                          String encoding)
        Définir le chemin du fichier d'entrée et l'encodage dans le même temps.
        Parameters:
        path - Le chemin
        encoding - L'encodage
      • setInputEncoding

        public void setInputEncoding​(String enc)
        Définit l'encodage utilisé par le fichier d'entrée. N.B. : c'est org.apache.commons.io.input.BOMInputStream qui est utilisé en interne, donc l'encodage UTF-8 fonctionnera même s'il y a un "BOM" (Byte Order Mark).
        Parameters:
        enc - L'encodage (par ex. "UTF-8" ou "windows-1252")
      • output

        public void output​(String path)
        Définir le chemin du fichier de sortie. Synonyme de setOutputFilePath(String).
        Parameters:
        path - Le chemin du fichier de sortie.
      • name

        public void name​(String str)
        Définit le nom de cette étape.
        Parameters:
        str - Le nom
      • onInit

        public void onInit​(Closure<?> dcl)
        Définit la closure (fonction) pour l'initialisation. Synonyme de setOnInit(Closure).
        Parameters:
        dcl - La closure
      • onItem

        public void onItem​(Closure<?> dcl)
        Définit la closure (fonction) qui est appelée pour chaque élément. Synonyme de setOnItem(Closure).
        Parameters:
        dcl - La closure
      • onEnd

        public void onEnd​(Closure<?> dcl)
        Définit la closure (fonction) pour la fin d'exécution. Synonyme de setOnEnd(Closure).
        Parameters:
        dcl - La closure
      • getInputFilePath

        public String getInputFilePath()
        Retourner le chemin du fichier d'entrée (qui a été défini par la fonction "input")
        Returns:
        Le chemin
      • setInputFilePath

        public void setInputFilePath​(String inputFilePath)
        Définir le chemin du fichier d'entrée
        Parameters:
        inputFilePath - Le chemin
      • getStepType

        public int getStepType()
        Retourner le type d'étape (step)
        Returns:
        Le type d'étape (ST_CSV, ST_RSS, etc.)
      • setStepType

        public void setStepType​(int stepType)
        Définir le type d'étape (step)
        Parameters:
        stepType - Le type d'étape (ST_CSV, ST_RSS, etc.)
      • getName

        public String getName()
        Retourner le nom de cette étape. Utile à utiliser lorsque l'on émet des messages.
        Returns:
        Le nom
      • setName

        public void setName​(String name)
        Définir le nom de cette étape
        Parameters:
        name - Le nom
      • getOnInit

        public Closure<?> getOnInit()
        Retourner la closure (fonction) à utiliser pour l'initialisation de cette étape
        Returns:
        La closure
      • setOnInit

        public void setOnInit​(Closure<?> onInit)
        Définir la closure (fonction) à utiliser pour l'initialisation de cette étape
        Parameters:
        onInit - La closure
      • getOnItem

        public Closure<?> getOnItem()
        Retourner la closure (fonction) à utiliser pour chaque élément de l'étape
        Returns:
        La closure
      • setOnItem

        public void setOnItem​(Closure<?> onItem)
        Définir la closure (fonction) à utiliser pour chaque élément de l'étape
        Parameters:
        onItem - La closure à utiliser.
      • getOnEnd

        public Closure<?> getOnEnd()
        Retourner la closure (fonction) à utiliser lorsque l'étape est terminée
        Returns:
        La closure
      • setOnEnd

        public void setOnEnd​(Closure<?> onEnd)
        Définir la closure (fonction) à utiliser lorsque l'étape est terminée
        Parameters:
        onEnd - La closure
      • callOnInit

        public void callOnInit()
                        throws IOException
        Initialisation. Appelle le code utilisateur d'initialisation, et ensuite si besoin cree le inputReader (ou le inputStream pour xlpoi) s'il n'est pas defini.
        Throws:
        IOException - si erreur d'entrée/sortie
      • callOnEnd

        public void callOnEnd()
        Appeler les closures de fin d'exécution de l'étape (se fait en interne, l'appel direct est utilisé uniquement pour du débogage).
      • getCsvSeparator

        public char getCsvSeparator()
        Retourner le séparateur csv
        Returns:
        Le caractère séparateur csv (par défaut ";")
      • setCsvSeparator

        public void setCsvSeparator​(char csvSeparator)
        Définir le séparateur qui sera utilisé pour construire le CSVReader (défaut : ';')
        Parameters:
        csvSeparator - Le séparateur
      • getCsvEscapeCharacter

        public char getCsvEscapeCharacter()
        Retourner le caractère d'échappement csv.
        Returns:
        Le caractère d'échappement csv
      • setCsvEscapeCharacter

        public void setCsvEscapeCharacter​(char csvEscapeCharacter)
        Définir le caractère qui servira pour les séquences d'échappement (défaut : '\\', pour désactiver, utiliser '\0'.
        Parameters:
        csvEscapeCharacter - Le caractère à utiliser
      • getCsvQuoteCharacter

        public char getCsvQuoteCharacter()
        Retourner le caractère de "quote" qui sert à délimiter le texte et ainsi forcer le contenu en texte simple.
        Returns:
        Le caractère de "quote"
      • setCsvQuoteCharacter

        public void setCsvQuoteCharacter​(char csvQuoteCharacter)
        Définir le caractère qui sera utilisé pour délimiter le texte. Défaut : '"'
        Parameters:
        csvQuoteCharacter - Le caractère à utiliser
      • csvSeparator

        public void csvSeparator​(char csvSeparator)
        Identique à setCsvSeparator(char) mais plus clair lorsqu'on utilise groovy
        Parameters:
        csvSeparator - Le séparateur csv (typiquement ";", ou "\t", ou ",")
      • csvEscapeCharacter

        public void csvEscapeCharacter​(char csvEscapeCharacter)
        Parameters:
        csvEscapeCharacter - Le caractère
      • csvQuoteCharacter

        public void csvQuoteCharacter​(char csvQuoteCharacter)
        Parameters:
        csvQuoteCharacter - Le caractère
      • getOutputFilePath

        public String getOutputFilePath()
        Retourner le chemin du fichier de sortie
        Returns:
        le chemin du fichier de sortie
      • setOutputFilePath

        public void setOutputFilePath​(String outputFilePath)
        Définir le chemin du fichier de sortie
        Parameters:
        outputFilePath - Le chemin du fichier de sortie
      • formatAsFrenchDate

        public String formatAsFrenchDate​(Date d)
        Formater au format français (dd/MM/yyyy).
        Parameters:
        d - La date à formater. si null retourne une chaîne vide.
        Returns:
        Une String de d au format français.
      • formatLocalAsFrenchDate

        public String formatLocalAsFrenchDate​(LocalDate ld)
        Formater au format français (dd/MM/yyyy)
        Parameters:
        ld - La date (de type LocalDate) à formater. si null retourne une chaîne vide.
        Returns:
        Une String de ld au format français Note Obligé de renommer de formatAsFrenchDate en formatLocalAsFrenchDate car malgré mes efforts lorsque ld est null j'ai une erreur Ambiguous method overloading même en faisant des casts en LocalDate.
      • getMetaName

        public String getMetaName()
        Retourner le nom de la métadonnée à utiliser (pour PmsiXml en particulier)
        Returns:
        Le nom de la métadonnée
      • metaName

        public void metaName​(String metaName)
        nom a utiliser pour pour syntaxe DSL pour donner le nom de la métadonnée. Synonyme de setMetaName(String)
        Parameters:
        metaName - Le nom de métadonnée pour trouver le fichier
      • setMetaName

        public void setMetaName​(String metaName)
        Définir le nom de la métadonnée à utiliser (pour PmsiXml en particulier).
        Parameters:
        metaName - Le nom de la métadonnée
      • getMetaHint

        public String getMetaHint()
        Donner une aide pour trouver la métadonnée
        Returns:
        L'aide à donner pour trouver la métadonnée
      • metaHint

        public void metaHint​(String metaHint)
        nom a utiliser pour syntaxe DSL
        Parameters:
        metaHint - L'indice pour aider à retrouver les métadonnées
      • setMetaHint

        public void setMetaHint​(String metaHint)
        Définir l'aide à donner pour la métadonnée
        Parameters:
        metaHint - Aide pour la métadonnée
      • getMetasDir

        public String getMetasDir()
        Retourner le chemin du répertoire à utiliser pour lire les métadonnées supplémentaires qui ne sont pas disponibles en tant que ressource. Les métadonnées qui sont dans ce repertoire sont prioritaires, et sont chargées avant de rechercher dans les fichiers de ressource.
        Returns:
        Le chemin du répertoire
      • setMetasDir

        public void setMetasDir​(String metasDirPath)
        Définir le chemin du répertoire à utiliser pour lire les métadonnées supplémentaires qui ne sont pas disponibles en tant que ressource. Les métadonnées qui sont dans ce repertoire sont prioritaires, et sont chargées avant de rechercher dans les fichiers de ressource.
        Parameters:
        metasDirPath - Le chemin du répertoire
      • metasDir

        public void metasDir​(String metasDirPath)
        nom a utiliser pour pour syntaxe DSL
        Parameters:
        metasDirPath - Le chemin pour rechercher les fichiers de métadonnées
      • isTruncatedInputAccepted

        public boolean isTruncatedInputAccepted()
        Est-ce que des données tronquées sont acceptées (pour PmsiXml notamment) ?
        Returns:
        true si des données tronquées sont acceptées
      • setTruncatedInputAccepted

        public void setTruncatedInputAccepted​(boolean truncatedInputAccepted)
        Définit si des données tronquées doivent être acceptées
        Parameters:
        truncatedInputAccepted - Un boolean qui autorise ou non les données tronquées
      • getCsvHeaderRow

        public String[] getCsvHeaderRow()
        Retourner le tableau des colonnes d'en-tête
        Returns:
        Le tableau des titres de colonne
      • getCsvColumnCount

        public int getCsvColumnCount()
        Retourner le nombre de colonnes Csv
        Returns:
        Le nombre de colonnes
      • getXlpoiColumnCount

        public int getXlpoiColumnCount()
        Retourner le nombre de colonnes Excel (via Apache POI)
        Returns:
        Le nombre de colonnes
      • getXlpoiHeaderRow

        public String[] getXlpoiHeaderRow()
        Retourner le tableau d'en-tête qui contient les titres de colonne.
        Returns:
        Le tableau des titres de colonne pour XlPoi
      • getDbfHeaderRow

        public String[] getDbfHeaderRow()
        Retourner le tableau d'en-tête qui contient les titres de colonne pour le fichier Dbf.
        Returns:
        Le tableau des titres de colonne pour Dbf
      • setCsvHeaderRow

        public void setCsvHeaderRow​(String[] newRow)
        Définir (ou redéfinir) la rangée d'en-tête pour Csv (ou Xl). Utile notamment lorsqu'il faut sauter un certain nombre de rangées avant d'arriver à la bonne ligne qui contient des noms de colonne.
        Parameters:
        newRow - un tableau de Strings
      • getCsvColumnIndex

        public int getCsvColumnIndex​(String name)
        Renvoyer l'index de la colonne csv (ou xl) qui a le nom donné ou -1 si il n'y a pas de colonne avec ce nom.
        Parameters:
        name - Le nom de la colonne
        Returns:
        le numéro de colonne (commence à 0), -1 si non trouvé
      • getXlpoiColumnIndex

        public int getXlpoiColumnIndex​(String name)
        Parameters:
        name - Le nom de la colonne
        Returns:
        le numéro de colonne (commence à 0), -1 si non trouvé
      • ci

        public int ci​(String name)
        Nom plus court pour getCsvColumnIndex(String)
        Parameters:
        name - Le nom de la colonne
        Returns:
        le numéro de colonne (commence à 0), -1 si non trouvé
      • getInputReader

        public Reader getInputReader()
        Retourner le Reader qui sert à prendre les caractères en entrée
        Returns:
        le reader
      • setInputReader

        public void setInputReader​(Reader inputReader)
        Définir le Reader qui va servir à prendre les caractères en entrée
        Parameters:
        inputReader - Le Reader à utiliser
      • inputReader

        public void inputReader​(Reader inputReader)
        forme courte pour pouvoir écrire en Groovy quelque chose comme :
        inputReader new StringReader()
        Parameters:
        inputReader - Le Reader à utiliser
      • getOutputWriter

        public Writer getOutputWriter()
        Retourner le Writer actuel qui est utilisé pour la sortie des caractères
        Returns:
        Le Writer actuel
      • setOutputWriter

        public void setOutputWriter​(Writer outputWriter)
        Définir le Writer qui sera utilisé pour la sortie des caractères
        Parameters:
        outputWriter - Le Writer à définir
      • outputWriter

        public void outputWriter​(Writer outputWriter)
        forme courte pour pouvoir écrire en Groovy quelque chose comme
        outputWriter new StringWriter()
        Parameters:
        outputWriter - Le Writer à utiliser
      • getChildScriptStep

        public ScriptStep getChildScriptStep()
        Retourner lde ScriptStep fils.
        Returns:
        Le ScriptStep fils.
      • getParentScriptStep

        public ScriptStep getParentScriptStep()
        Retourner le ScriptStep parent
        Returns:
        le Script Step parent
      • getCountOfCsvLinesToSkip

        public int getCountOfCsvLinesToSkip()
        Retourner le nombre de lignes initiales à sauter (ignorer) lors de la lecture d'un fichier csv. Utile lorsque les programmes produisent un fichier avec des lignes de description qui précèdents les lignes csv proprement dites (par exemple : Excel). Par défaut : 0.
        Returns:
        le nombre de lignes à ignorer
      • setCountOfCsvLinesToSkip

        public void setCountOfCsvLinesToSkip​(int countOfCsvLinesToSkip)
        Définir le nombre de lignes à ignorer lors de la lecture d'un fichier csv.
        Parameters:
        countOfCsvLinesToSkip - Le nombre de lignes à ignorer
      • countOfCsvLinesToSkip

        public void countOfCsvLinesToSkip​(int countOfCsvLinesToSkip)
        forme courte pour pouvoir écrire en Groovy quelque chose comme
        countOfCsvLinesToSkip 5
        Parameters:
        countOfCsvLinesToSkip - Le nombre de lignes à sauter avant de lire les données csv proprement dites
      • getSheetNumber

        public Integer getSheetNumber()
        Acces à la variable sheetNumber qui donne le numéro de l'onglet à ouvrir
        Returns:
        sheetNumber Le numéro de l'onglet à ouvrir (commence à 0, peut être null)
      • setSheetNumber

        public void setSheetNumber​(Integer sheetNumber)
        Acces à la variable sheetNumber qui donne le numéro de l'onglet à ouvrir. Valeur par défaut : null, ce qui a pour effet d'ouvrir le premier onglet (si sheetName est null aussi)
        Parameters:
        sheetNumber - Le numéro de l'onglet à ouvrir (commence à 0, peut être null)
      • sheetNumber

        public void sheetNumber​(Integer sheetNumber)
        Acces à la variable sheetNumber via la fonction sheetNumber, cela permet l'appel dans un bloc via groovy
        Parameters:
        sheetNumber - Le numéro de l'onglet à ouvrir (commence à 0, peut être null)
      • getSheetName

        public String getSheetName()
        Accès à la variable sheetName
        Returns:
        La valeur de sheetName
      • setSheetName

        public void setSheetName​(String sheetName)
        Accès à la variable sheetName. Par défaut : null. Lorsque sheetName n'est pas null, c'est elle qui a priorité pour indiquer l'onglet à ouvrir.
        Parameters:
        sheetName - Nom de l'onglet à ouvrir
      • sheetName

        public void sheetName​(String sheetName)
        Acces à la variable sheetName via la fonction sheetName, cela permet l'appel dans un bloc via groovy
        Parameters:
        sheetName - Nom de l'onglet à ouvrir