package org.smoothbuild.task.save; import static org.smoothbuild.lang.type.Types.BLOB; import static org.smoothbuild.lang.type.Types.BLOB_ARRAY; import static org.smoothbuild.lang.type.Types.FILE; import static org.smoothbuild.lang.type.Types.FILE_ARRAY; import static org.smoothbuild.lang.type.Types.NIL; import static org.smoothbuild.lang.type.Types.STRING; import static org.smoothbuild.lang.type.Types.STRING_ARRAY; import javax.inject.Inject; import org.smoothbuild.cli.Console; import org.smoothbuild.io.fs.base.FileSystem; import org.smoothbuild.lang.function.base.Name; import org.smoothbuild.lang.type.Type; import org.smoothbuild.lang.value.Blob; import org.smoothbuild.lang.value.Nothing; import org.smoothbuild.lang.value.SString; import org.smoothbuild.lang.value.Value; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; public class ArtifactSaver { private final ImmutableMap<Type, Saver<?>> saversMap; @Inject public ArtifactSaver(FileSystem fileSystem, Console console) { Builder<Type, Saver<?>> builder = ImmutableMap.builder(); builder.put(STRING, new StringSaver(fileSystem)); builder.put(BLOB, new BlobSaver(fileSystem)); builder.put(FILE, new FileSaver(fileSystem)); builder.put(STRING_ARRAY, new ArraySaver<SString>(fileSystem)); builder.put(BLOB_ARRAY, new ArraySaver<Blob>(fileSystem)); builder.put(FILE_ARRAY, new FileArraySaver(fileSystem, console)); builder.put(NIL, new ArraySaver<Nothing>(fileSystem)); this.saversMap = builder.build(); } public <T extends Value> void save(Name name, T value) { Saver<T> saver = (Saver<T>) saversMap.get(value.type()); saver.save(name, value); } }