use of org.talend.dataprep.transformation.api.action.DataSetRowAction in project data-prep by Talend.
the class PipelineTest method testCompileAction.
@Test
public void testCompileAction() throws Exception {
// Given
final RunnableAction mockAction = new RunnableAction() {
@Override
public DataSetRowAction getRowAction() {
return new DataSetRowAction() {
@Override
public void compile(ActionContext actionContext) {
actionContext.get("ExecutedCompile", p -> true);
}
@Override
public DataSetRow apply(DataSetRow dataSetRow, ActionContext context) {
return dataSetRow;
}
};
}
};
final ActionContext actionContext = new ActionContext(new TransformationContext());
final Node node = NodeBuilder.source().to(new CompileNode(mockAction, actionContext)).to(output).build();
final RowMetadata rowMetadata = new RowMetadata();
final DataSetRow row = new DataSetRow(rowMetadata);
// when
assertFalse(actionContext.has("ExecutedCompile"));
node.exec().receive(row, rowMetadata);
// then
assertTrue(actionContext.has("ExecutedCompile"));
assertTrue(actionContext.get("ExecutedCompile"));
}
use of org.talend.dataprep.transformation.api.action.DataSetRowAction in project data-prep by Talend.
the class PipelineTest method testAction.
@Test
public void testAction() throws Exception {
// Given
final RunnableAction mockAction = new RunnableAction() {
@Override
public DataSetRowAction getRowAction() {
return (r, context) -> {
context.get("ExecutedApply", p -> true);
return r;
};
}
};
final ActionContext actionContext = new ActionContext(new TransformationContext());
final Node node = NodeBuilder.source().to(new ActionNode(mockAction, actionContext)).to(output).build();
final RowMetadata rowMetadata = new RowMetadata();
final DataSetRow row = new DataSetRow(rowMetadata);
// when
assertFalse(actionContext.has("ExecutedApply"));
node.exec().receive(row, rowMetadata);
// then
assertTrue(actionContext.has("ExecutedApply"));
assertTrue(actionContext.get("ExecutedApply"));
}
use of org.talend.dataprep.transformation.api.action.DataSetRowAction 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();
}
use of org.talend.dataprep.transformation.api.action.DataSetRowAction in project data-prep by Talend.
the class PipelineTest method testRecompileAction.
@Test
public void testRecompileAction() throws Exception {
// Given
AtomicInteger compileCount = new AtomicInteger();
final RunnableAction mockAction = new RunnableAction() {
@Override
public DataSetRowAction getRowAction() {
return new DataSetRowAction() {
@Override
public void compile(ActionContext actionContext) {
compileCount.incrementAndGet();
actionContext.setActionStatus(ActionContext.ActionStatus.OK);
}
@Override
public DataSetRow apply(DataSetRow dataSetRow, ActionContext context) {
return dataSetRow;
}
};
}
};
final ActionContext actionContext = new ActionContext(new TransformationContext());
final Node node = NodeBuilder.source().to(new CompileNode(mockAction, actionContext)).to(output).build();
final RowMetadata rowMetadata = new RowMetadata();
final DataSetRow row = new DataSetRow(rowMetadata);
// when
assertEquals(0, compileCount.get());
node.exec().receive(row, rowMetadata);
// Change row metadata in middle of the transformation (to trigger
rowMetadata.addColumn(new ColumnMetadata());
// new compile).
node.exec().receive(row, rowMetadata);
// then
assertEquals(2, compileCount.get());
}
use of org.talend.dataprep.transformation.api.action.DataSetRowAction in project data-prep by Talend.
the class PipelineTest method testCanceledAction.
@Test
public void testCanceledAction() throws Exception {
// Given
final RunnableAction mockAction = new RunnableAction() {
@Override
public DataSetRowAction getRowAction() {
return (r, context) -> {
context.get("Executed", p -> true);
return r;
};
}
};
final ActionContext actionContext = new ActionContext(new TransformationContext());
actionContext.setActionStatus(ActionContext.ActionStatus.CANCELED);
final Node node = NodeBuilder.source().to(new ActionNode(mockAction, actionContext)).to(output).build();
final RowMetadata rowMetadata = new RowMetadata();
final DataSetRow row = new DataSetRow(rowMetadata);
// when
node.exec().receive(row, rowMetadata);
// then
assertFalse(actionContext.has("Executed"));
}
Aggregations