use of org.talend.dataprep.api.action.ActionForm in project data-prep by Talend.
the class PreparationConversions method toPreparationMessage.
private PreparationMessage toPreparationMessage(Preparation source, PreparationMessage target, ApplicationContext applicationContext) {
final PreparationRepository preparationRepository = applicationContext.getBean(PreparationRepository.class);
final ActionRegistry actionRegistry = applicationContext.getBean(ActionRegistry.class);
// Steps diff metadata
final List<StepDiff> diffs = //
source.getSteps().stream().filter(//
step -> !Step.ROOT_STEP.id().equals(step.id())).map(//
Step::getDiff).collect(toList());
target.setDiff(diffs);
// Actions
if (source.getHeadId() != null) {
// Get preparation actions
final String headId = source.getHeadId();
final Step head = preparationRepository.get(headId, Step.class);
if (head != null) {
final PreparationActions prepActions = preparationRepository.get(head.getContent(), PreparationActions.class);
if (prepActions != null) {
final List<Action> actions = prepActions.getActions();
target.setActions(prepActions.getActions());
// Allow distributed run
boolean allowDistributedRun = true;
for (Action action : actions) {
final ActionDefinition actionDefinition = actionRegistry.get(action.getName());
if (actionDefinition.getBehavior().contains(ActionDefinition.Behavior.FORBID_DISTRIBUTED)) {
allowDistributedRun = false;
break;
}
}
target.setAllowDistributedRun(allowDistributedRun);
// no need to have lock information (and may also break StandAlonePreparationParser...)
target.setLock(null);
// Actions metadata
if (actionRegistry == null) {
LOGGER.debug("No action metadata available, unable to serialize action metadata for preparation {}.", source.id());
} else {
List<ActionForm> actionDefinitions = //
actions.stream().map(a -> //
actionRegistry.get(a.getName()).adapt(//
ScopeCategory.from(a.getParameters().get(ImplicitParameters.SCOPE.getKey())))).map(//
a -> a.getActionForm(getLocale())).map(//
PreparationConversions::disallowColumnCreationChange).collect(Collectors.toList());
target.setMetadata(actionDefinitions);
}
}
} else {
LOGGER.warn("Head step #{} for preparation #{} does not exist.", headId, source.id());
target.setActions(Collections.emptyList());
target.setSteps(Collections.singletonList(Step.ROOT_STEP));
target.setMetadata(Collections.emptyList());
}
} else {
target.setActions(Collections.emptyList());
target.setSteps(Collections.singletonList(Step.ROOT_STEP));
target.setMetadata(Collections.emptyList());
}
return target;
}
Aggregations