when
Exécute les clauses suivantes si au moins une expression conditionnelle est vraie
La clause when() est exécuté sur l'endpoint courant, et éventuellement, comme alternative à une précédente clause when().
La clause when() est évaluée dans la portée de sa clause maitre (from, parallel, to, map, reduce)
Usage: évaluation conditionnelle
public LinkStream when(String label, [(LinkStream stream, Event event) -> { return ...true|false }],..) throws StreamDefinitionException;
@param
label: libellé de la lambda
@param
stream: instance du stream
@param
event: évenement ou message reçu par la lambda
@function
lambda: implémentation de la fonction lambda. Doit retouner true pour exécuter les clauses suivantes ou false dans le cas contraire
Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. La clause suivante est exécutée si au moins une lambda retourne
true
@Override
public void build() throws Exception {
make("data collect")
.from("collect", "www.mddynamics.fr/app/data", (stream, probe) -> {
return probe;
})
.when("warning", (stream, probe) -> probe.resource().matches("status", "WARNING"))
.reply("warning ack", ok("warning received"))
.when("error", (stream, probe) -> probe.resource().matches("status", "ERROR"))
.to("notify", "www.business.com/montitoring/notification", (stream, probe) -> {
return createNotificationFrom(probe);
})
.reply("error ack", ok("error received"))
...
}
Usage: évaluation conditionnelle via regex
public LinkStream when(String regex, [(LinkStream stream, Event event) -> { <lambda>}],..) throws StreamDefinitionException;
@param
label: libellé de la lambda
@param
stream: instance du stream
@param
event: évenement ou message reçu par la lambda
@function
lambda: implémentation de la fonction lambda. Doit retouner une valeur (non booléenne) qui sera évaluée par la regex
Lorsque plusieurs fonctions lambda sont définies, elles sont exécutées séquentiellement sur les mêmes données reçues en entrée. La clause suivante est exécutée si au moins une regex retourne
true
@Override
public void build() throws Exception {
make("api")
.from("REST/JSON demo", "www.mddynamics.fr/app/demo/api", (stream, request) -> {
stream.info("request received: %s", request);
return request;
})
.when("POST /demo/api", (stream, request) -> request.headers.getOrDefault("mddynamics-api", ""))
.reply("ok", (stream, request) -> ...)
.when("GET /demo/api", (stream, request) -> request.headers.getOrDefault("mddynamics-api", ""))
.reply("ok", (stream, request) -> ...)
...
}