GS-reactor, annotations ― Description des annotations

@Children

Prend comme valeur un tableau de classes étendant TagImpl qui correspondent aux classes des tags enfants à instancier. Lors du lancement de l’application, cette annotation est traitée en premier afin de construire entièrement l’arborescence des tags. Puis l’arbre est parcouru afin de traiter les autres annotations.

Exemple : InstancesTable permet d’afficher les instances d’un type. Les instances de cette classe ont 3 enfants : HeaderRow qui correspond à la ligne de titre, InstanceBuilder qui permet de créer une nouvelle instance du type affiché, et enfin ContentRow qui affiche les instances du type affiché.

@Attribute

Prend en paramètre un nom (name) et une valeur (value) d’attribut HTML à appliquer au(x) DOM node(s) à créer.

Exemple : Définition d’attributs pour une image :

@BindAction

Prend comme valeur une classe implémentant l’interface ContextAction, qui étend elle-même BiConsumer<Context, Tag>.
S’applique à des tags implémentant ActionDefaults, par exemple des boutons ou liens. Au clic, le biconsumer défini dans la classe indiquée est exécuté avec en arguments le tag et le contexte associés au DOM node concerné.

Exemple : Création d’un lien permettant de supprimer un générique.

@BindSelection

S’applique à un tag implémentant l’interface SelectionDefaults.
Prend en paramètre une classe (value) et éventuellement un entier (valuePos).
La classe et l’entier permettent de sélectionner un enfant du tag auquel l’annotation est appliquée. Si ce tag n’a qu’un enfant de la classe indiquée, l’entier n’est pas nécessaire. Sinon, l’entier précise qu’il faut choisir le valuePos-ième enfant (en commençant à 0) de la classe donnée par value.
Une propriété appelée sélection est créée à la racine de l’arbre des contextes. Elle contient un contexte et peut-être utilisée par exemple pour éditer l’élément sélectionné à l’aide d’un composant dédié. @BindSelection est utilisée typiquement sur un composant auquel un forEach est appliqué, et indique que la sélection est un des contextes liés à ce composant. La sélection sera modifiée ou réinitialisée lorsqu’un des génériques correspondant à un de ces contextes est supprimé ou modifié.

Exemple : InstancesTable a 3 enfants qui étendent tous la classes Composite. Le 3e est répété pour chaque instance du générique du contexte courant. Les contextes ainsi créés peuvent être stockés dans la sélection.
On aurait pu utiliser @BindSelection(ContentRow.class) au lieu de préciser une position.

@BindText

Prend comme valeur une classe implémentant TextBinding, qui étend BiFunction<Context, Tag, ObservableValue>. Le contenu textuel du ou des DOM nodes créés correspondra à la valeur de l’ObservableValue. Par défaut, affiche une chaîne correspondant au générique du contexte courant, déterminée en fonction du StringExtractor (que l’on peut définir avec l’annotation @SetStringExtractor).

Exemple : Pour afficher un message d’erreur dépendant du contexte :

@SetStringExtractor

Prend en paramètre une classe implémentant StringExtractor, qui étend Function<Generic, String>. Cette fonction est utilisée pour déterminer la chaîne à afficher lors de l’utilisation de bindText() ou @BindText().

Exemple : Indique que le titre de la table contenant les instances d’un type doit contenir « Type(s) management ».

@SetText

Prend en paramètre une chaîne de caractères qui est le contenu du HTML DOM node à créer.

Exemple : Met le texte « User Guide » sur le bouton :

Remarque : Comme @DirectSelect, @SetText peut avoir comme paramètre un tableau de valeurs au lieu d’une valeur unique, pour les cas où plusieurs tags descendants sont sélectionnés par les paramètres path et pos.

@StyleClass

Prend en paramètre un tableau de chaînes de caractères correspondant aux noms des classes CSS à appliquer aux DOM nodes créés.

Exemple : Indique que la div contenue dans une div modale a les classes widthResponsiveet modal-content :

@Switch

Prend en paramètre un tableau de classes implémentant TagSwitcher, qui étend BiFunction<Context, Tag, ObservableValue>. Le tag ne sera pris en compte que si toutes les ObservableValue retournées par les fonctions valent true.

Exemple : L’InstanceBuilder n’est affiché que si on est en admin mode.

@FlexDirectionStyle

Prend en paramètre soit FlexDirection.ROW, soit FlexDirection.COLUMN. Ne peut être appliqué qu’à FlexDiv ou ses extensions. Définit la flex-direction à appliquer.

Exemple : On crée une div contenant elle-même une div de titre et une table contenant les instances d’un type, avec une flex-direction column.

@InheritStyle

Prend en paramètre un tableau de chaînes de caractères correspondant aux noms de styles CSS que l’on souhaite hériter de l’ancêtre le plus proche pour lequel cette propriété est définie. N’a d’intérêt que pour les styles qui ne sont pas hérités automatiquement en CSS.

Exemple : Indique que le bouton doit avoir la même couleur de fond que son conteneur :

@KeepFlexDirection

Ne peut être appliqué qu’à FlexDiv ou ses extensions. Indique que ce composant a la même direction que son parent.

@ReverseFlexDirection

Ne peut être appliqué qu’à FlexDiv ou ses extensions. Indique que ce composant a la direction orthogonale à celle de son parent.

Exemple : Les enfants d’InstanceTable doivent avoir la direction opposée à celle de la table elle-même.

Remarque : Les annotations @FlexDirectionStyle, @KeepFlexDirection et @ReverseFlexDirection permettent de définir des composants dont tous les descendants changent de direction de façon appropriée lorsque la direction du tag racine est inversée.

Exemple : InstancesTable est définie avec une direction colonne, avec chaque instance correspondant à une ligne. Pour créer la même table en direction ligne, avec chaque instance sur une colonne, il suffit de modifier @FlexDirectionStyle :

@Style

Prend en paramètre un nom (name) et une valeur (value) de propriété CSS à appliquer au(x) DOM node(s) à créer.

Exemple : Style du titre de la page :