package ch.unibe.scg.cc;
import java.io.IOException;
import java.io.Serializable;
import javax.inject.Inject;
import ch.unibe.scg.cc.GitInputFormat.GitRepoCodec;
import ch.unibe.scg.cc.Protos.Clone;
import ch.unibe.scg.cc.Protos.GitRepo;
import ch.unibe.scg.cc.Protos.Snippet;
import ch.unibe.scg.cells.Codec;
import ch.unibe.scg.cells.Pipeline;
/** Run the clone detector. */
public class PipelineRunner implements Serializable {
final private static long serialVersionUID = 1L;
final private GitPopulator gitPopulator;
final private Function2RoughCloner function2RoughCloner;
final private Function2FineCloner function2FineCloner;
final private Codec<GitRepo> repoCodec;
final private Codec<Snippet> snippet2FunctionsCodec;
final private Codec<Clone> function2RoughClonesCodec;
@Inject
PipelineRunner(GitPopulator gitPopulator, Function2RoughCloner function2RoughCloner,
Function2FineCloner function2FineCloner,
GitRepoCodec repoCodec,
Snippet2FunctionsCodec snippet2FunctionsCodec,
Function2RoughClonesCodec function2RoughClonesCodec) {
this.gitPopulator = gitPopulator;
this.function2RoughCloner = function2RoughCloner;
this.function2FineCloner = function2FineCloner;
this.repoCodec = repoCodec;
this.snippet2FunctionsCodec = snippet2FunctionsCodec;
this.function2RoughClonesCodec = function2RoughClonesCodec;
}
/** Run the clone detector. */
public void run(Pipeline<GitRepo, Clone> pipe) throws IOException, InterruptedException {
pipe
.influx(repoCodec)
.map(gitPopulator)
.shuffle(snippet2FunctionsCodec)
.map(function2RoughCloner)
.shuffle(function2RoughClonesCodec)
.mapAndEfflux(function2FineCloner, function2RoughClonesCodec);
}
}