package br.gov.servicos.editor.conteudo.cartas;
import br.gov.servicos.editor.conteudo.ConteudoVersionado;
import br.gov.servicos.editor.conteudo.ConteudoVersionadoFactory;
import br.gov.servicos.editor.conteudo.TipoPagina;
import br.gov.servicos.editor.frontend.Siorg;
import br.gov.servicos.editor.security.CheckOrgaoEspecificoController;
import br.gov.servicos.editor.security.TipoPermissao;
import br.gov.servicos.editor.security.UserProfiles;
import br.gov.servicos.editor.utils.ReformatadorXml;
import lombok.experimental.FieldDefaults;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.RedirectView;
import javax.xml.transform.dom.DOMSource;
import static lombok.AccessLevel.PRIVATE;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
@Slf4j
@Controller
@FieldDefaults(level = PRIVATE, makeFinal = true)
public class SalvarCartaController extends CheckOrgaoEspecificoController {
ReformatadorXml reformatadorXml;
UserProfiles userProfiles;
ConteudoVersionadoFactory factory;
Siorg siorg;
@Autowired
public SalvarCartaController(ReformatadorXml reformatadorXml, UserProfiles userProfiles, ConteudoVersionadoFactory factory, Siorg siorg) {
this.reformatadorXml = reformatadorXml;
this.userProfiles = userProfiles;
this.factory = factory;
this.siorg = siorg;
}
@RequestMapping(value = "/editar/api/pagina/{tipo}/{id}", method = POST)
RedirectView salvar(
@PathVariable("tipo") String tipo,
@PathVariable("id") String id,
@RequestBody DOMSource servico) throws Exception {
TipoPagina tipoPagina = TipoPagina.fromNome(tipo);
String conteudo = reformatadorXml.formata(servico);
ConteudoVersionado conteudoVersionado = factory.pagina(id, tipoPagina);
if (!usuarioPodeRealizarAcao(userProfiles, tipoPagina, id)) {
throw new AccessDeniedException("Usuário sem permissão");
}
conteudoVersionado.salvar(userProfiles.get(), conteudo);
return new RedirectView("/editar/api/pagina/" + tipo + '/' + conteudoVersionado.getId(), true, false);
}
@Override
public TipoPermissao getTipoPermissao() {
return TipoPermissao.EDITAR_SALVAR;
}
}