package br.gov.servicos.editor.fixtures; import br.gov.servicos.editor.conteudo.TipoPagina; import br.gov.servicos.editor.utils.EscritorDeArquivos; import lombok.experimental.FieldDefaults; import org.eclipse.jgit.api.Git; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.function.Supplier; import static br.gov.servicos.editor.conteudo.TipoPagina.*; import static br.gov.servicos.editor.utils.Unchecked.Supplier.uncheckedSupplier; import static java.util.Arrays.asList; import static lombok.AccessLevel.PRIVATE; @FieldDefaults(makeFinal = true, level = PRIVATE) public class RepositorioCartasBuilder { Path localRepositorio; Map<Path, String> paginas; public RepositorioCartasBuilder(Path localRepositorio) { this.localRepositorio = localRepositorio; paginas = new HashMap<>(); } public RepositorioCartasBuilder touchCarta(String id) { return carta(id, ""); } public RepositorioCartasBuilder carta(String id, String conteudo) { return pagina(SERVICO, id, conteudo); } public RepositorioCartasBuilder touchOrgao(String id) { return orgao(id, ""); } public RepositorioCartasBuilder orgao(String id, String conteudo) { return pagina(ORGAO, id, conteudo); } public RepositorioCartasBuilder touchPaginaTematica(String id) { return paginaTematica(id, ""); } public RepositorioCartasBuilder paginaTematica(String id, String conteudo) { return pagina(PAGINA_TEMATICA, id, conteudo); } public boolean buildSemGit() { return criarEstruturaRepositorioCartas() && criarPaginas(); } public boolean build() { return buildSemGit() && commitPush(); } private boolean commitPush() { try { Git git = Git.open(localRepositorio.toFile()); git.add().addFilepattern(".").call(); git.commit() .setAuthor("Teste", "teste.automatizado@gmail.com") .setMessage("setup de testes") .call(); git.push().setPushAll().call(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } private boolean criarPaginas() { EscritorDeArquivos escritor = new EscritorDeArquivos(); paginas.entrySet() .stream() .forEach(entry -> escritor.escrever(localRepositorio.resolve(entry.getKey()), entry.getValue())); return true; } private RepositorioCartasBuilder pagina(TipoPagina tipo, String id, String conteudo) { Path p = Paths.get(tipo.getCaminhoPasta().toString(), id + '.' + tipo.getExtensao()); paginas.put(p, conteudo); return this; } private boolean criarEstruturaRepositorioCartas() { return asList(values()) .stream() .map(t -> localRepositorio.resolve(t.getCaminhoPasta())) .map(Path::toFile) .map(f -> { //noinspection ResultOfMethodCallIgnored f.mkdirs(); return uncheckedSupplier(() -> f.toPath().resolve("dummy").toFile().createNewFile()); }) .allMatch(Supplier::get); } }