flipkart-incubator / databuilderframework

A data driven execution engine
34 stars 29 forks source link

DataFlowExecutor's databuilderFactory is not used #48

Open onkarshedge opened 3 years ago

onkarshedge commented 3 years ago

I am creating a SimpleDataFlowExecutor with a custom DataBuilderFactory. DataFlowExecutor executor = new SimpleDataFlowExecutor(myDataBuilderFactory); However, when I run a dataflow with this executor the factory set in the constructor of DataFlowExecutor is not used. The databuilderFactory of dataFlow takes precedence over the executor's builderFactory. https://github.com/flipkart-incubator/databuilderframework/blob/master/src/main/java/com/flipkart/databuilderframework/engine/DataFlowExecutor.java#L57

    public DataExecutionResponse run(DataFlow dataFlow, DataDelta dataDelta) throws DataBuilderFrameworkException, DataValidationException {
        Preconditions.checkNotNull(dataFlow);
        Preconditions.checkArgument(null != dataFlow.getDataBuilderFactory() || null != this.dataBuilderFactory);
        return this.run(new DataBuilderContext(), new DataFlowInstance(), dataDelta, dataFlow, dataFlow.getDataBuilderFactory());
    }

Suggestion: If dataflow's builderFactory is null, exectuor's factory can be used. So whenever i have to run the dataflow, i have to explicitly set the databuilderFactory and then call run.

            dataFlow.setDataBuilderFactory(myDatabuilderFactory);
            result = executor.run(dataFlow, data);

Also the default factory set in DataFlowBuilder is MixedDataBuilderFactory. So can't really use this DataFlowBuilder to create a DataFlow.