package org.aksw.jena_sparql_api.batch.tasklet;
import org.aksw.jena_sparql_api.core.QueryExecutionFactory;
import org.aksw.jena_sparql_api.core.utils.QueryExecutionUtils;
import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.listener.StepExecutionListenerSupport;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.apache.jena.query.Query;
public class TaskletSparqlCountData
extends StepExecutionListenerSupport implements Tasklet, InitializingBean
{
// We should abstract where to place the value with some kind of 'sink'
// The sink could then be backed by the spring expression language, such that we could do
// sink = new SpelSink("jobContext['TaskletSparqlCountData.count']);
// sink.setValue(count);
//public static final String DEFAULT_KEY = TaskletSparqlCountData.class.getSimpleName() + ".count";
protected Query query;
protected QueryExecutionFactory qef;
protected String key;
public TaskletSparqlCountData(Query query, QueryExecutionFactory qef, String key) {
this.query = query;
this.qef = qef;
this.key = key;
}
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
long count = QueryExecutionUtils.countQuery(query, qef);
String k = key != null ? key : chunkContext.getStepContext().getStepName() + ".count";
chunkContext.getStepContext().getStepExecution().getJobExecution().getExecutionContext().put(k, count);
return RepeatStatus.FINISHED;
}
@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(query);
Assert.notNull(qef);
}
}