package com.ibm.streamsx.topology.generator.spl;
import static com.ibm.streamsx.topology.generator.spl.GraphUtilities.getDownstream;
import java.util.Set;
import com.google.gson.JsonObject;
import com.ibm.streamsx.topology.builder.BVirtualMarker;
import com.ibm.streamsx.topology.internal.gson.GsonUtilities;
/**
* Processing related to autonomous regions.
*
* After pre-processing the JSON for the operator
* can contain the key {@code autonomous} set to true
* if the operator needs to be annotated.
*
*/
class AutonomousRegions {
static final String AUTONOMOUS = "autonomous";
/**
* Preprocess autonomous virtual markers to mark
* downstream operators as autonomous.
*/
static void preprocessAutonomousRegions(JsonObject graph) {
Set<JsonObject> autonomousOperators = GraphUtilities.findOperatorByKind(
BVirtualMarker.AUTONOMOUS, graph);
for (JsonObject autonomous : autonomousOperators) {
for (JsonObject sa : getDownstream(autonomous, graph)) {
if (!sa.has(AUTONOMOUS))
sa.addProperty(AUTONOMOUS, Boolean.TRUE);
}
}
GraphUtilities.removeOperators(autonomousOperators, graph);
}
/**
* Add in the annotation.
*/
static void autonomousAnnotation(JsonObject op, StringBuilder sb) {
boolean set = GsonUtilities.jboolean(op, AUTONOMOUS);
if (set)
sb.append("@autonomous\n");
}
}