package br.gov.servicos.cms;
import br.gov.servicos.foundation.exceptions.ConteudoNaoEncontrado;
import lombok.experimental.FieldDefaults;
import org.pegdown.PegDownProcessor;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import static java.util.stream.Collectors.joining;
import static lombok.AccessLevel.PRIVATE;
@Component
@FieldDefaults(level = PRIVATE, makeFinal = true)
public class Markdown {
PegDownProcessor pegdown;
Markdown() {
pegdown = new PegDownProcessor();
}
public String render(String markdown) {
return pegdown.markdownToHtml(markdown);
}
@Cacheable("html")
public String toHtml(Resource resource) {
if (!resource.exists()) {
throw new ConteudoNaoEncontrado(resource.toString());
}
try {
InputStreamReader input = new InputStreamReader(resource.getInputStream(), "UTF-8");
try (BufferedReader br = new BufferedReader(input)) {
String nome = br.readLine();
String conteudo = nome + "\n" + br.lines().collect(joining("\n"));
return toHtml(conteudo);
}
} catch (IOException e) {
throw new ConteudoNaoEncontrado(e);
}
}
public String toHtml(String raw) {
return pegdown.markdownToHtml(raw);
}
}