package org.smoothbuild.task.exec;
import static org.smoothbuild.db.values.ValuesDb.memoryValuesDb;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.smoothbuild.db.values.ValuesDb;
import org.smoothbuild.io.fs.base.FileSystem;
import org.smoothbuild.io.fs.mem.MemoryFileSystem;
import org.smoothbuild.io.util.TempDir;
import org.smoothbuild.io.util.TempManager;
import org.smoothbuild.lang.message.Message;
import org.smoothbuild.lang.plugin.Container;
import org.smoothbuild.lang.value.ValueFactory;
public class ContainerImpl implements Container {
private final FileSystem fileSystem;
private final ValuesDb valuesDb;
private final TempManager tempManager;
private final List<Message> messages;
private final List<TempDir> tempDirs;
@Inject
public ContainerImpl(FileSystem fileSystem, ValuesDb valuesDb, TempManager tempManager) {
this.fileSystem = fileSystem;
this.valuesDb = valuesDb;
this.tempManager = tempManager;
this.messages = new ArrayList<>();
this.tempDirs = new ArrayList<>();
}
public static ContainerImpl containerImpl() {
MemoryFileSystem fileSystem = new MemoryFileSystem();
return new ContainerImpl(fileSystem, memoryValuesDb(), new TempManager(fileSystem));
}
public ValueFactory create() {
return valuesDb;
}
public FileSystem fileSystem() {
return fileSystem;
}
public void log(Message message) {
messages.add(message);
}
public List<Message> messages() {
return messages;
}
public TempDir createTempDir() {
TempDir tempDir = tempManager.tempDir(valuesDb);
tempDirs.add(tempDir);
return tempDir;
}
public void destroy() {
tempDirs.stream().forEach(TempDir::destroy);
}
}