package org.smoothbuild.task.exec;
import static java.util.Arrays.asList;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import javax.inject.Inject;
import org.smoothbuild.lang.expr.Expression;
import org.smoothbuild.lang.function.base.Function;
import org.smoothbuild.lang.function.base.Name;
import org.smoothbuild.lang.message.CodeLocation;
import org.smoothbuild.lang.value.Value;
import org.smoothbuild.task.base.Task;
import org.smoothbuild.task.save.ArtifactSaver;
public class ArtifactBuilder {
private final ArtifactSaver artifactSaver;
private final TaskGraph taskGraph;
private final Map<Name, Task> artifacts;
@Inject
public ArtifactBuilder(ArtifactSaver artifactSaver, TaskGraph taskGraph) {
this.artifactSaver = artifactSaver;
this.taskGraph = taskGraph;
this.artifacts = new HashMap<>();
}
public void addArtifact(Function function) {
Expression expression =
function.createCallExpression(asList(), false, CodeLocation.commandLine());
artifacts.put(function.name(), taskGraph.createTasks(expression));
}
public void runBuild() {
taskGraph.executeAll();
for (Entry<Name, Task> artifact : artifacts.entrySet()) {
Name name = artifact.getKey();
Task task = artifact.getValue();
Value value = task.output().result();
artifactSaver.save(name, value);
}
}
}