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;
}
}
}