Effect.java
package com.redis.test.fi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* A client-observable outcome of {@code topology_change_standalone} with the triggers that produce
* it ��� the typed, read-only envelope of one discovery response. Dbconfigs inside stay opaque maps;
* their schema belongs to the FI / Redis Enterprise.
*/
public final class Effect {
private final StandaloneEffect type;
private final int clusterNodes;
private final List<Trigger> triggers;
private Effect(StandaloneEffect type, int clusterNodes, List<Trigger> triggers) {
this.type = type;
this.clusterNodes = clusterNodes;
this.triggers = Collections.unmodifiableList(triggers);
}
@SuppressWarnings("unchecked")
static Effect parse(StandaloneEffect type, Map<String, Object> response) {
Map<String, Object> cluster = (Map<String, Object>) response.get("cluster");
int nodes = cluster == null ? 0 : ((Number) cluster.get("nodes")).intValue();
List<Trigger> triggers = new ArrayList<>();
for (Object t : (List<Object>) response.get("triggers")) {
triggers.add(Trigger.parse(type, (Map<String, Object>) t));
}
return new Effect(type, nodes, triggers);
}
public StandaloneEffect type() {
return type;
}
public int clusterNodes() {
return clusterNodes;
}
public List<Trigger> triggers() {
return triggers;
}
/** The named trigger; fails loudly when the FI does not offer it for this effect. */
public Trigger trigger(String name) {
for (Trigger trigger : triggers) {
if (trigger.name().equals(name)) {
return trigger;
}
}
throw new IllegalArgumentException(
"FI offers no trigger '" + name + "' for " + type + "; available: " + triggers);
}
}