Search in sources :

Example 1 with CleanUpNode

use of org.talend.dataprep.transformation.pipeline.node.CleanUpNode in project data-prep by Talend.

the class ActionNodesBuilder method build.

/**
 * Build the actions pipeline
 */
public Node build() {
    final StatisticsNodesBuilder statisticsNodesBuilder = StatisticsNodesBuilder.builder().analyzerService(// 
    analyzerService).actionRegistry(// 
    actionRegistry).statisticsAdapter(// 
    statisticsAdapter).allowSchemaAnalysis(// 
    allowSchemaAnalysis).actions(// 
    actions).columns(initialMetadata.getColumns());
    final NodeBuilder builder = NodeBuilder.source();
    // unless we don't have initial metadata or we explicitly ask it
    if (needStatisticsBefore || initialMetadata.getColumns().isEmpty()) {
        LOGGER.debug("No initial metadata submitted for transformation, computing new one.");
        builder.to(statisticsNodesBuilder.buildPreStatistics());
    }
    // transformation context is the parent of every action context
    // it will hold all the action context
    // that makes it the perfect entry point to clean up all the contexts
    final TransformationContext context = new TransformationContext();
    // * an action node
    for (final RunnableAction nextAction : actions) {
        // some actions need fresh statistics
        // in those cases, we gather the rows in a reservoir node that triggers statistics computation
        // before dispatching each row to the next node
        final Node neededReservoir = statisticsNodesBuilder.buildIntermediateStatistics(nextAction);
        if (neededReservoir != null) {
            builder.to(neededReservoir);
        }
        final DataSetRowAction rowAction = nextAction.getRowAction();
        builder.to(new CompileNode(nextAction, context.create(rowAction, initialMetadata)));
        builder.to(new ActionNode(nextAction, context.in(rowAction)));
    }
    // when it is explicitly asked and the actions changes the columns
    if (needStatisticsAfter) {
        builder.to(statisticsNodesBuilder.buildPostStatistics());
    }
    // cleanup all contexts after all actions
    builder.to(new CleanUpNode(context));
    return builder.build();
}
Also used : DataSetRowAction(org.talend.dataprep.transformation.api.action.DataSetRowAction) CompileNode(org.talend.dataprep.transformation.pipeline.node.CompileNode) RunnableAction(org.talend.dataprep.transformation.actions.common.RunnableAction) CleanUpNode(org.talend.dataprep.transformation.pipeline.node.CleanUpNode) ActionNode(org.talend.dataprep.transformation.pipeline.node.ActionNode) CompileNode(org.talend.dataprep.transformation.pipeline.node.CompileNode) Node(org.talend.dataprep.transformation.pipeline.Node) CleanUpNode(org.talend.dataprep.transformation.pipeline.node.CleanUpNode) ActionNode(org.talend.dataprep.transformation.pipeline.node.ActionNode) TransformationContext(org.talend.dataprep.transformation.api.action.context.TransformationContext)

Aggregations

RunnableAction (org.talend.dataprep.transformation.actions.common.RunnableAction)1 DataSetRowAction (org.talend.dataprep.transformation.api.action.DataSetRowAction)1 TransformationContext (org.talend.dataprep.transformation.api.action.context.TransformationContext)1 Node (org.talend.dataprep.transformation.pipeline.Node)1 ActionNode (org.talend.dataprep.transformation.pipeline.node.ActionNode)1 CleanUpNode (org.talend.dataprep.transformation.pipeline.node.CleanUpNode)1 CompileNode (org.talend.dataprep.transformation.pipeline.node.CompileNode)1