package org.radargun.service;
import java.util.Collection;
import org.infinispan.distexec.mapreduce.MapReduceTask;
import org.infinispan.distexec.mapreduce.Reducer;
import org.radargun.traits.MapReducer;
import org.radargun.utils.KeyValueProperty;
import org.radargun.utils.Utils;
public class Infinispan52MapReduce<KIn, VIn, KOut, VOut, R> extends InfinispanMapReduce<KIn, VIn, KOut, VOut, R> {
public Infinispan52MapReduce(Infinispan52EmbeddedService service) {
super(service);
}
protected class Builder extends InfinispanMapReduce<KIn, VIn, KOut, VOut, R>.Builder {
protected Reducer<KOut, VOut> combiner;
@Override
public Builder combiner(String combinerFqn, Collection<KeyValueProperty> combinerParameters) {
try {
combiner = Utils.instantiate(combinerFqn);
Utils.invokeMethodWithProperties(combiner, combinerParameters);
} catch (Exception e) {
throw (new IllegalArgumentException("Could not instantiate Combiner class: " + combinerFqn, e));
}
return this;
}
@Override
public Task build() {
Infinispan52EmbeddedService embeddedService = (Infinispan52EmbeddedService) service;
MapReduceTask<KIn, VIn, KOut, VOut> mapReduceTask
= new MapReduceTask<KIn, VIn, KOut, VOut>(cache, embeddedService.mapReduceDistributedReducePhase, embeddedService.mapReduceUseIntermediateSharedCache);
mapReduceTask.mappedWith(mapper).reducedWith(reducer).combinedWith(combiner);
return new Task(mapReduceTask, collator);
}
}
@Override
public MapReducer.Builder<KOut, VOut, R> builder() {
return new Builder();
}
@Override
public boolean supportsCombiner() {
return true;
}
}