Package fr.gpmsi.pmsixml
Class FszGroup
- java.lang.Object
-
- fr.gpmsi.pmsixml.FszNode
-
- fr.gpmsi.pmsixml.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"
- FszGroup "DA"
- FszGroup "DA" (container == true)
- FszGroup "RSS"
-
-
Constructor Summary
Constructors Constructor Description FszGroup(FszGroupMeta meta)Crée un nouveau groupe qui aura les métadonnées fournies
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddChild(FszNode child)Ajouter un noeud enfantvoidcollectChildren(String name, List<FszNode> lst)Colliger les enfantsDefChamp qui ont un nom donné, récursivement.voidcopyFieldsTo(FszGroup dst)Copier les champs enfantsDefChamp dans le groupe destination (qui peut avoir une autre version des métadonnées).voiddump(StringBuffer sb, int level)Faire un "dump" de ce groupe, pour l'afficher par exemple dans un journal d'exécution.voiddumpStructure(StringBuffer sb, int level)Faire un "dump", mais juste de la structure, pour vérifier l'imbrication.voidfillInsertPs(PreparedStatement ps)Remplir le PreparedStatement qui est destiné à l'insertion avec les valeurs contenues dans ce groupeFszNodegetChild(String name)Retourner le noeud enfant nomméFszNodegetChild(String name, boolean createIfMissing)Renvoie un noeud enfant, en le créant si nécessaire.intgetChildCount()nombre d'enfantsDefChampFszFieldgetChildField(String name)Retourner le champ enfant nomméFszGroupgetChildGroup(String name)Retourner le groupe enfant nomméList<FszNode>getChildren()liste avec les noeuds enfantsDefChampFszFieldgetCounterField(String counterName)Retourner le champ qui contient le compteurMap<String,String>getCounterFieldsByName()Retourner une Map avec la liste des noms des champs de compteur par nom de compteurMap<String,Integer>getCountersByName()Retourner une Map avec la liste des compteurs de champs.IntegergetCounterValue(String counterName)Retourner la valeur du compteurFszMetagetMeta()Retourner la métadonnées qui définit ce noeudbooleanisContainer()est-ce un noeud "conteneur", qui contient des noeuds de groupe de même nombooleanisField()Est-ce un champ simple : non icibooleanisFieldGroup()Est-ce un groupe de champs : oui iciPreparedStatementmakeInsertPs(Connection cxn, String tableName)Créer un PreparedStatement pour l'insertion de ce group en un nouvel enregistrement.voidread(InputString in)Lire l'entrée, en utilisant la stratégie appropriée de lecture de champs (ex : RSS1, RSA1, ...)voidreadLeafs(InputString in)Lire les feuilles, à partir de la chaîne d'entréevoidreadLeafs(InputString in, Map<String,Integer> repetitionCountByName, Map<String,String> repetitionFieldNamesByName)Lire toutes les feuilles (pas les sous-groupes) et attribuer les valeurs aux compteurs, dans la map repetionCountByName.FszGroupreadSubGroups(InputString is, String name)Lire les groupes enfant depuis le String en entrée.FszGroupreadSubGroups(InputString is, String name, boolean optional)Lire les groupes enfant depuis le String en entrée.FszGroupreadSubGroups(InputString is, String name, String counterName, boolean optional)Lire les groupes enfant depuis le String en entrée.FszGroupreadSubGroups__old(InputString in, FszGroupMeta sgMeta, List<FszGroup> groups)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.voidremoveChildren()Enlever tous les enfantsDefChampvoidsetContainer(boolean container)Définir si ce groupe est un conteneurvoidsetCounterValue(String counterName, Integer value)Définir la valeur du compteurStringtoString()voidtoText(StringBuffer sb)Emettre tous les champs enfant en texte fixe, mais sans émettre les sous-groupes.voidtoTextRecursive(StringBuffer sb)Emettre sous forme textuelle, dans l'ordre naturel.StringtoTextRecursiveString()Crée un StringBuffer, appelletoTextRecursive(StringBuffer)et renvoie le résultat sous forme de StringvoidupdateCounters()Pour les champs de compteur, les mettre à jour avec les noms de groupe correspondants, récursivement.-
Methods inherited from class fr.gpmsi.pmsixml.FszNode
dump, dumpString, dumpStructure, dumpStructureString, getParent, isEmpty, isGroup, setParent, toTextString
-
-
-
-
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
-
isFieldGroup
public boolean isFieldGroup()
Est-ce un groupe de champs : oui ici- Specified by:
isFieldGroupin classFszNode- Returns:
- true
-
getMeta
public FszMeta getMeta()
Description copied from class:FszNodeRetourner la métadonnées qui définit ce noeud
-
getChildCount
public int getChildCount()
Description copied from class:FszNodenombre d'enfantsDefChamp- Specified by:
getChildCountin classFszNode- Returns:
- le nombre d'enfantsDefChamp
-
getChildren
public List<FszNode> getChildren()
Description copied from class:FszNodeliste avec les noeuds enfantsDefChamp- Specified by:
getChildrenin classFszNode- 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) throws FieldParseException
Lire les feuilles, à partir de la chaîne d'entrée- Parameters:
in- La chaine d'entrée- Throws:
FieldParseException- Si erreur d'analyse
-
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éerepetitionCountByName- _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éesgMeta- La métadonnée des sous-groupes que l'on veutgroups- 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. AppellereadSubGroups(is, name, false)- Parameters:
is- le String à partir duquel on veut lirename- 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 lirename- 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 lirename- Le nom des groupes à récupérercounterName- 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.
-
dumpStructure
public void dumpStructure(StringBuffer sb, int level)
Faire un "dump", mais juste de la structure, pour vérifier l'imbrication.- Specified by:
dumpStructurein classFszNode- Parameters:
sb- le bufferlevel- le niveau
-
isContainer
public boolean isContainer()
Description copied from class:FszNodeest-ce un noeud "conteneur", qui contient des noeuds de groupe de même nom- Specified by:
isContainerin classFszNode- 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 compteurvalue- 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 recherchelst- La liste dans laquelle mettre les résultats
-
toText
public void toText(StringBuffer sb) throws FieldSizeException
Emettre tous les champs enfant en texte fixe, mais sans émettre les sous-groupes.- Specified by:
toTextin classFszNode- Parameters:
sb- leStringBufferdans lequel mettre le résultat- Throws:
FieldSizeException- si la valeur est trop grande pour le champ
-
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
-
toTextRecursiveString
public String toTextRecursiveString() throws FieldSizeException
Crée un StringBuffer, appelletoTextRecursive(StringBuffer)et renvoie le résultat sous forme de String- Returns:
- le résultat de
toTextRecursive(StringBuffer) - 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:FszNodeLire l'entrée, en utilisant la stratégie appropriée de lecture de champs (ex : RSS1, RSA1, ...)- Specified by:
readin classFszNode- 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 connexiontableName- 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 baseParseException- 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 SQLParseException- 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
-
-