use of com.sequenceiq.cloudbreak.core.flow2.FlowEvent in project cloudbreak by hortonworks.
the class Flow2Config method flowConfigurationMap.
@Bean
public Map<String, FlowConfiguration<?>> flowConfigurationMap() {
Map<String, FlowConfiguration<?>> flowConfigMap = new HashMap<>();
for (FlowConfiguration<?> flowConfig : flowConfigs) {
for (FlowEvent event : flowConfig.getInitEvents()) {
String key = event.event();
if (flowConfigMap.get(key) != null) {
throw new UnsupportedOperationException("Event already registered: " + key);
}
flowConfigMap.put(key, flowConfig);
}
}
return ImmutableMap.copyOf(flowConfigMap);
}
use of com.sequenceiq.cloudbreak.core.flow2.FlowEvent in project cloudbreak by hortonworks.
the class OfflineStateGenerator method generate.
private void generate() throws Exception {
StringBuilder builder = new StringBuilder("digraph {\n");
inject(flowConfiguration, "applicationContext", APP_CONTEXT);
Flow flow = initializeFlow();
StateMachine<FlowState, FlowEvent> stateMachine = getStateMachine(flow);
FlowState init = stateMachine.getInitialState().getId();
builder.append(generateStartPoint(init, flowConfiguration.getClass().getSimpleName())).append('\n');
List<Transition<FlowState, FlowEvent>> transitions = (List<Transition<FlowState, FlowEvent>>) stateMachine.getTransitions();
Map<String, FlowState> transitionsAlreadyDefined = new HashMap<>();
transitionsAlreadyDefined.put(init.toString(), init);
while (!transitions.isEmpty()) {
for (Transition<FlowState, FlowEvent> transition : new ArrayList<>(transitions)) {
FlowState source = transition.getSource().getId();
FlowState target = transition.getTarget().getId();
if (transitionsAlreadyDefined.values().contains(source)) {
String id = generateTransitionId(source, target, transition.getTrigger().getEvent());
if (!transitionsAlreadyDefined.keySet().contains(id)) {
if (target.action() != null && !transitionsAlreadyDefined.values().contains(target)) {
builder.append(generateState(target, target.action().getSimpleName())).append('\n');
}
builder.append(generateTransition(source, target, transition.getTrigger().getEvent())).append('\n');
transitionsAlreadyDefined.put(id, target);
}
transitions.remove(transition);
}
}
}
saveToFile(builder.append('}').toString());
}
Aggregations