Class FszGroup


  • public class FszGroup
    extends FszNode
    Groupe de champs qui sont tous au même niveaux. Les groupes peuvent contenir d'autres groupes. Il y a des champs qui servent de compteurs, pour indiquer combien il y a de sous groupes. Par exemple dans un RSS, NDA indique combien il y a de DA, NZA indique combien il y a de ZA. La table qui contient ces compteurs est placée dans le groupe. Ainsi pour un RSA :
     [RSA
     NAG
     NSR
     NRU
       [AG]
       [SR]
       [RU
       NDA
       NZA 
         [DA]
         [ZA]
       ]
     ]  
     
    Lorsqu'un groupe contient une liste de sous-groupes, ces sous-groupes sont dans un objet FszGroup qui sert de conteneur. Par exemple si on a un RSS qui contient deux DA (par ex. I10 et I480), il sera représenté de la façon suivante :
    • FszGroup "RSS"
      • FszGroup "DA" (container == true)
        • FszGroup "DA"
          • FszField TDA = "I10"
        • FszGroup "DA"
          • FszField TDA = "I480"
    • Constructor Detail

      • FszGroup

        public FszGroup​(FszGroupMeta meta)
        Crée un nouveau groupe qui aura les métadonnées fournies
        Parameters:
        meta - Les métadonnées de définition du nouveau groupe
    • Method Detail

      • isField

        public boolean isField()
        Est-ce un champ simple : non ici
        Specified by:
        isField in class FszNode
        Returns:
        false
      • isFieldGroup

        public boolean isFieldGroup()
        Est-ce un groupe de champs : oui ici
        Specified by:
        isFieldGroup in class FszNode
        Returns:
        true
      • getMeta

        public FszMeta getMeta()
        Description copied from class: FszNode
        Retourner la métadonnées qui définit ce noeud
        Specified by:
        getMeta in class FszNode
        Returns:
        l'objet FszMeta représentant les métadonnées de ce groupe
      • getChildCount

        public int getChildCount()
        Description copied from class: FszNode
        nombre d'enfantsDefChamp
        Specified by:
        getChildCount in class FszNode
        Returns:
        le nombre d'enfantsDefChamp
      • getChildren

        public List<FszNode> getChildren()
        Description copied from class: FszNode
        liste avec les noeuds enfantsDefChamp
        Specified by:
        getChildren in class FszNode
        Returns:
        une liste avec les noeuds enfant
      • addChild

        public void addChild​(FszNode child)
        Ajouter un noeud enfant
        Parameters:
        child - Le noeud enfant
      • removeChildren

        public void removeChildren()
        Enlever tous les enfantsDefChamp
      • readLeafs

        public void readLeafs​(InputString in,
                              Map<String,​Integer> repetitionCountByName,
                              Map<String,​String> repetitionFieldNamesByName)
                       throws FieldParseException
        Lire toutes les feuilles (pas les sous-groupes) et attribuer les valeurs aux compteurs, dans la map repetionCountByName.
        Parameters:
        in - La chaîne d'entrée
        repetitionCountByName - _
        repetitionFieldNamesByName - _
        Throws:
        FieldParseException - _
      • readSubGroups__old

        public FszGroup readSubGroups__old​(InputString in,
                                           FszGroupMeta sgMeta,
                                           List<FszGroup> groups)
                                    throws FieldParseException
        Lire tous les sous-groupes d'un type donné, en séquence, en utilisant l'information donnée dans la liste de groupes passée en paramètre. Ex : pour une liste de RU* lire tous les DA* en utilisant le compteur de DA* dans chaque groupe.
        Parameters:
        in - La chaîne d'entrée
        sgMeta - La métadonnée des sous-groupes que l'on veut
        groups - Les groupes à parcourir
        Returns:
        Un groupe conteneur qui contient tous les sous-groupes trouvés
        Throws:
        FieldParseException - _
      • readSubGroups

        public FszGroup readSubGroups​(InputString is,
                                      String name)
                               throws FieldParseException
        Lire les groupes enfant depuis le String en entrée. Appelle readSubGroups(is, name, false)
        Parameters:
        is - le String à partir duquel on veut lire
        name - Le nom des groupes à récupérer
        Returns:
        Un groupe conteneur qui contient tous les groupes enfant
        Throws:
        FieldParseException - en cas d'erreur d'analyse
      • readSubGroups

        public FszGroup readSubGroups​(InputString is,
                                      String name,
                                      boolean optional)
                               throws FieldParseException
        Lire les groupes enfant depuis le String en entrée.
        Parameters:
        is - le String à partir duquel on veut lire
        name - Le nom des groupes à récupérer et aussi le nom du compteur à utiliser.
        optional - True si le sous-groupe est optionnel. S'il n'est pas optionnel, une erreur sera ecrite dans le log indiquant que le meta est manquant.
        Returns:
        Un groupe conteneur qui contient tous les groupes enfant
        Throws:
        FieldParseException - _
      • readSubGroups

        public FszGroup readSubGroups​(InputString is,
                                      String name,
                                      String counterName,
                                      boolean optional)
                               throws FieldParseException
        Lire les groupes enfant depuis le String en entrée.
        Parameters:
        is - le String à partir duquel on veut lire
        name - Le nom des groupes à récupérer
        counterName - Le nom du compteur à utiliser (parfois ce n'est pas le même nom que le groupe)
        optional - True si le sous-groupe est optionnel. S'il n'est pas optionnel, une erreur sera ecrite dans le log indiquant que le meta est manquant.
        Returns:
        Un groupe conteneur qui contient tous les groupes enfant
        Throws:
        FieldParseException - _
      • dump

        public void dump​(StringBuffer sb,
                         int level)
        Faire un "dump" de ce groupe, pour l'afficher par exemple dans un journal d'exécution.
        Specified by:
        dump in class FszNode
        Parameters:
        sb - le buffer dans lequel faire le dump
        level - le niveau d'identation
      • dumpStructure

        public void dumpStructure​(StringBuffer sb,
                                  int level)
        Faire un "dump", mais juste de la structure, pour vérifier l'imbrication.
        Specified by:
        dumpStructure in class FszNode
        Parameters:
        sb - le buffer
        level - le niveau
      • isContainer

        public boolean isContainer()
        Description copied from class: FszNode
        est-ce un noeud "conteneur", qui contient des noeuds de groupe de même nom
        Specified by:
        isContainer in class FszNode
        Returns:
        true si c'est un conteneur
      • setContainer

        public void setContainer​(boolean container)
        Définir si ce groupe est un conteneur
        Parameters:
        container - true si c'est un conteneur
      • getCounterValue

        public Integer getCounterValue​(String counterName)
        Retourner la valeur du compteur
        Parameters:
        counterName - Le nom du compteur
        Returns:
        La valeur du compteur
      • setCounterValue

        public void setCounterValue​(String counterName,
                                    Integer value)
        Définir la valeur du compteur
        Parameters:
        counterName - Le nom du compteur
        value - La valeur du compteur
      • getCounterField

        public FszField getCounterField​(String counterName)
        Retourner le champ qui contient le compteur
        Parameters:
        counterName - Le nom du compteur qui correspond au champ. Par ex. pour RHS, le compteur ACS est contenu dans le champ NCSA de RHS.
        Returns:
        le champ compteur ou null si non trouve
      • updateCounters

        public void updateCounters()
        Pour les champs de compteur, les mettre à jour avec les noms de groupe correspondants, récursivement. A appeler avant de générer le texte du FszGroup.
      • getCountersByName

        public Map<String,​Integer> getCountersByName()
        Retourner une Map avec la liste des compteurs de champs. Ces compteurs sont utilisés pour indiquer le nombre d'éléments que doit avoir le groupe, par exemple pour un groupe RUM on aura un compteur NZA qui indique combien il y a de groupes enfantsDefChamp ZA.
        Returns:
        La Map des compteurs par Nom
      • getCounterFieldsByName

        public Map<String,​String> getCounterFieldsByName()
        Retourner une Map avec la liste des noms des champs de compteur par nom de compteur
        Returns:
        La Map
      • getChild

        public FszNode getChild​(String name)
        Retourner le noeud enfant nommé
        Parameters:
        name - Le nom du noeud enfant à retourner
        Returns:
        Le noeud enfant
      • getChildGroup

        public FszGroup getChildGroup​(String name)
        Retourner le groupe enfant nommé
        Parameters:
        name - Le nom du groupe
        Returns:
        Le groupe enfant
      • getChildField

        public FszField getChildField​(String name)
        Retourner le champ enfant nommé
        Parameters:
        name - Le nom du champ à retourner
        Returns:
        Le champ enfant
      • getChild

        public FszNode getChild​(String name,
                                boolean createIfMissing)
        Renvoie un noeud enfant, en le créant si nécessaire.
        Parameters:
        name - Le nom du noeud enfant, doit exister dans les métadonnées ou bien null sera retourné
        createIfMissing - si true, un noeud enfant sera créé s'il n'y en a pas
        Returns:
        le noeud enfant, ou null si aucune définition n'a été trouvé avec ce noeud dans les métadonnées
      • collectChildren

        public void collectChildren​(String name,
                                    List<FszNode> lst)
        Colliger les enfantsDefChamp qui ont un nom donné, récursivement. Ne prendre que les enfantsDefChamp qui ne sont pas des conteneurs.
        Parameters:
        name - Le nom des enfantsDefChamp que l'on recherche
        lst - La liste dans laquelle mettre les résultats
      • toTextRecursive

        public void toTextRecursive​(StringBuffer sb)
                             throws FieldSizeException
        Emettre sous forme textuelle, dans l'ordre naturel. Bien pour débogage, mais attention lorsqu'on l'utilise pour générer des enregistrements, vérifier le bon ordre des sous-groupes.
        Parameters:
        sb - Le buffer à utiliser
        Throws:
        FieldSizeException - Si il y a un débordement dans la taille d'un champ
      • read

        public void read​(InputString in)
                  throws FieldParseException
        Description copied from class: FszNode
        Lire l'entrée, en utilisant la stratégie appropriée de lecture de champs (ex : RSS1, RSA1, ...)
        Specified by:
        read in class FszNode
        Parameters:
        in - La source d'entrée
        Throws:
        FieldParseException - Si erreur d'analyse
      • makeInsertPs

        public PreparedStatement makeInsertPs​(Connection cxn,
                                              String tableName)
                                       throws SQLException,
                                              ParseException
        Créer un PreparedStatement pour l'insertion de ce group en un nouvel enregistrement. La base de données doit supporter la génération automatique de la clé primaire.
        Parameters:
        cxn - La connexion
        tableName - Le nom de la table
        Returns:
        Le nouveau Prepared Statement
        Throws:
        SQLException - Si il y a une erreur de syntaxe ou d'exécution de la base
        ParseException - Si l'analyse du champ a détecté une erreur
      • fillInsertPs

        public void fillInsertPs​(PreparedStatement ps)
                          throws SQLException,
                                 ParseException
        Remplir le PreparedStatement qui est destiné à l'insertion avec les valeurs contenues dans ce groupe
        Parameters:
        ps - Le PreparedStatement à remplir
        Throws:
        SQLException - Si erreur d'exécution dans la base ou erreur de syntaxe du SQL
        ParseException - Si il y a une erreur lors de l'analyse du groupe
      • copyFieldsTo

        public void copyFieldsTo​(FszGroup dst)
        Copier les champs enfantsDefChamp dans le groupe destination (qui peut avoir une autre version des métadonnées). Recopie récursivement les sous-groupes. Cette méthodes est utile pour passer d'une version à une autre (typiquement pour les RSS)
        Parameters:
        dst - Destination