Ajouter une action

Pour créer une nouvelle action, la méthode est sensiblement la même que pour une expression. La classe créée doit hériter de ScriptAction et l'annotation doit être @Action, avec pour chaque pattern envisageable un @Feature contenant les informations relatifs à ce pattern. Les paramètres ont exactement les mêmes fonctions que ceux de l'annotation @Expression, vous pouvez vous y référerer ici : Expressions. Il n'y a qu'une méthode abstraite de la classe mère à implémenter : execute(ScriptContext). De la même manière que pour les expressions, il est possible d'obtenir l'indice du pattern reconnu grâce au getter getMatchedIndex(). De même, les paramètres configurés dans les patterns sont accessibles via la liste getParameters().

En plus de la méthode execute(), il est possible de directement modifier le comportement de la lecture du script en modifiant le prochain élément à exécuter après l'exécution de cette action. En surchargeant la méthode getNext() et en modifiant la valeur de retour à null, l'exécution du bloc en cours s'arrêtera à la fin de l'exécution de l'action, et reprendra au bloc parent de l'action. Le script peut être totalement arrêté en surchargeant la méthode getParent() et en modifiant la valeur de retour à null également.

Tip

C'est sur cette méthode que repose l'action return, par exemple.

Vous pouvez aussi rediriger l'exécution du script, mais cela demande plus d'expérience et de compréhension du mode de fonctionnement de Sqript.

Voici un exemple d'action, celle-ci affichant dans la console n'importe quel élément :

@Action(name = "Print Actions",
        features = @Feature(name = "Print", description = "Prints something in the console.", examples = "print \"Hello world !\"", pattern = "print {element}")
)
public class ActPrint extends ScriptAction {
    @Override
    public void execute(ScriptContext context) throws ScriptException {
        switch (getMatchedIndex()){
            case 0:
                ScriptExpression firstParameter = getParameters().get(0);
                ScriptManager.log.info(getLine().getScriptInstance().getName()+" : "+firstParameter.get(context));
                break;
        }
    }
}
Retour en haut de la page