package br.com.controller; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.activation.DataHandler; import javax.servlet.ServletContext; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import br.com.caelum.vraptor.Get; import br.com.caelum.vraptor.Path; import br.com.caelum.vraptor.Resource; import br.com.caelum.vraptor.Result; import br.com.caelum.vraptor.Validator; import br.com.caelum.vraptor.interceptor.multipart.DefaultMultipartConfig; import br.com.caelum.vraptor.interceptor.multipart.UploadedFile; import br.com.caelum.vraptor.ioc.spring.VRaptorRequestHolder; import br.com.caelum.vraptor.validator.ValidationMessage; import br.com.dao.HashDao; import br.com.dao.PlanoTrabalhoDao; import br.com.dao.QuestionarioDao; import br.com.model.entity.EnvioEmailSemAutenticacao; import br.com.model.entity.PlanoTrabalho; import br.com.model.entity.Questionario; import br.com.model.utilities.Email; import br.com.util.DateUtil; import br.com.util.Validacao; @Resource public class PlanoTrabalhoController extends DefaultMultipartConfig { private List mensagemValidacaoCampos = new ArrayList(); private Validator validator; private Result result; private ServletContext application; private String path; public PlanoTrabalhoController(Result result, Validator validator, ServletContext application) { this.validator = validator; this.application = application; this.path = this.application.getRealPath("") + "/WEB-INF/conexao.properties"; this.result = result; } // alteramos o tamanho total do upload para 50MB public long getSizeLimit() { return 50 * 1024 * 1024; } @Path("/planoTrabalho-site") public void planoTrabalho() { Questionario questionario = new Questionario(); questionario = (Questionario) VRaptorRequestHolder.currentRequest() .getServletContext().getAttribute("questionario"); if (questionario == null) { Validacao validacao = new Validacao(); validacao.setCampo("valorHash"); validacao .setMensagem("ATEN��O: Voc� precisa estar logado para anexar os documentos."); mensagemValidacaoCampos.add(validacao); result.include("mensagemValidacaoCampos", mensagemValidacaoCampos); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(loginController.class).login(); } else { if (!questionario.isQuestionario_respondido()) { Validacao validacao = new Validacao(); validacao.setCampo("valorHash"); validacao .setMensagem("ATEN��O: � preciso responder o FAD antes de anexar os arquivos."); mensagemValidacaoCampos.add(validacao); result.include("mensagemValidacaoCampos", mensagemValidacaoCampos); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(loginController.class).login(); } else { PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); PlanoTrabalho planoTrabalho = new PlanoTrabalho(); planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); result.include("planoTrabalho", planoTrabalho); } } } @Path("/plano-trabalho-confirmacao") public void planoTrabalhoConfirmacao() { } @Path("/salvar-plano-trabalho") public void enviarPlanoTrabalho(String valorHash, UploadedFile filePlano, UploadedFile fileRelatorio) { String mensagemPlano = null; String mensagemRelatorio = null; boolean statusPlano = false; boolean statusRelatorio = false; boolean existeRelatorioAnexado = false; Questionario questionario = new Questionario(); PlanoTrabalho planoTrabalho = new PlanoTrabalho(); PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); if (filePlano != null) { String tipoArquivo = filePlano.getContentType(); if (!tipoArquivo.equalsIgnoreCase("application/msword") && !tipoArquivo .equalsIgnoreCase("application/vnd.ms-excel") && !tipoArquivo .equalsIgnoreCase("application/vnd.oasis.opendocument.text") && !tipoArquivo.equalsIgnoreCase("text/plain") && !tipoArquivo.equalsIgnoreCase("application/pdf") && !tipoArquivo.equalsIgnoreCase("image/png") && !tipoArquivo.equalsIgnoreCase("image/gif") && !tipoArquivo.equalsIgnoreCase("image/jpeg") && !tipoArquivo.equalsIgnoreCase("application/zip") && !tipoArquivo .equalsIgnoreCase("application/x-rar-compressed") && !tipoArquivo .equalsIgnoreCase("application/octet-stream")) { mensagemPlano = "Formato de Arquivo para plano de trabalho inválido!"; statusPlano = false; } else { HashDao hashDao = new HashDao(); questionario = new Questionario(); questionario = hashDao.verificarHash(path, valorHash); String nomeExtensaoPlanoTrabalho = filePlano.getContentType(); if (questionario != null && questionario.getDtInicioQuestionario() != null) { planoTrabalhoDao = new PlanoTrabalhoDao(); planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho( path, questionario); if (planoTrabalho.getIdPlanoTrabalho() == 0) { if (planoTrabalhoDao.salvarPlanoTrabalho(path, filePlano.getFile(), questionario, filePlano.getFileName(), nomeExtensaoPlanoTrabalho)) { mensagemPlano = "Plano de trabalho anexado com sucesso!"; statusPlano = true; } else { mensagemPlano = "N�o foi poss�vel anexar o plano de trabalho!"; } } else { if (planoTrabalhoDao.atualizarPlanoTrabalho(path, filePlano.getFile(), questionario, planoTrabalho.getIdPlanoTrabalho(), filePlano.getFileName(), nomeExtensaoPlanoTrabalho)) { mensagemPlano = "Plano de trabalho anexado com sucesso!"; statusPlano = true; } else { mensagemPlano = "N�o foi poss�vel anexar o plano de trabalho!"; } } } else { mensagemPlano = "Favor verificar o C�digo de Acesso!"; } } result.include("mensagemPlano", mensagemPlano); result.include("statusPlano", statusPlano); } // /Relatório Assinado if (fileRelatorio != null) { String tipoArquivo = fileRelatorio.getContentType(); if (!tipoArquivo.equalsIgnoreCase("application/msword") && !tipoArquivo .equalsIgnoreCase("application/vnd.ms-excel") && !tipoArquivo .equalsIgnoreCase("application/vnd.oasis.opendocument.text") && !tipoArquivo.equalsIgnoreCase("text/plain") && !tipoArquivo.equalsIgnoreCase("application/pdf") && !tipoArquivo.equalsIgnoreCase("image/png") && !tipoArquivo.equalsIgnoreCase("image/gif") && !tipoArquivo.equalsIgnoreCase("image/jpeg") && !tipoArquivo.equalsIgnoreCase("application/zip") && !tipoArquivo .equalsIgnoreCase("application/x-rar-compressed") && !tipoArquivo .equalsIgnoreCase("application/octet-stream")) { mensagemRelatorio = "Formato de Arquivo para Relat�rio � inv�lido!"; statusRelatorio = false; } else { HashDao hashDao = new HashDao(); questionario = new Questionario(); questionario = hashDao.verificarHash(path, valorHash); String nomeExtensaoRelatorio = fileRelatorio.getContentType(); if (questionario != null && questionario.getDtInicioQuestionario() != null) { planoTrabalhoDao = new PlanoTrabalhoDao(); planoTrabalho = new PlanoTrabalho(); planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho( path, questionario); if (planoTrabalho.getIdPlanoTrabalho() == 0) { if (planoTrabalhoDao.salvarRelatorioAss(path, fileRelatorio.getFile(), questionario, fileRelatorio.getFileName(), nomeExtensaoRelatorio)) { mensagemRelatorio = "FAD anexado com sucesso!"; existeRelatorioAnexado = true; statusRelatorio = true; } else { mensagemRelatorio = "N�o foi poss�vel anexar o FAD!"; } } else { if (planoTrabalhoDao.atualizarRelatorioAss(path, fileRelatorio.getFile(), questionario, planoTrabalho.getIdPlanoTrabalho(), fileRelatorio.getFileName(), nomeExtensaoRelatorio)) { mensagemRelatorio = "FAD anexado com sucesso!"; statusRelatorio = true; } else { mensagemRelatorio = "N�o foi poss�vel anexar o FAD!"; } } } else { mensagemRelatorio = "Favor verificar o C�digo de Acesso!"; } } result.include("mensagemRelatorio", mensagemRelatorio); result.include("statusRelatorio", statusRelatorio); VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("questionario", questionario); VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("fileRelatorio", fileRelatorio); } planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); if (planoTrabalho.getArquivoRelatorioAss() != null) { existeRelatorioAnexado = true; } result.include("existeRelatorioAnexado", existeRelatorioAnexado); if (filePlano == null && fileRelatorio == null) { mensagemPlano = "N�o foi poss�vel anexar o Plano de Trabalho!"; mensagemRelatorio = "N�o foi poss�vel anexar o FAD!"; result.include("mensagemPlano", mensagemPlano); result.include("statusPlano", statusPlano); result.include("mensagemRelatorio", mensagemRelatorio); result.include("statusRelatorio", statusRelatorio); } formularioOrgaoController formularioOrgao = new formularioOrgaoController( result, validator, application); HashDao hashDao = new HashDao(); Questionario novoQuestionario = new Questionario(); novoQuestionario = hashDao.verificarQuestionario(path, questionario.getIdQuestionario()); verificarPosicaoUsuario(novoQuestionario); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(PlanoTrabalhoController.class) .planoTrabalhoConfirmacao(); } @Get("/recuperar-plano-trabalho/{id}") public void recuperarPlanoTrabalho(int id, HttpServletResponse response) throws IOException { Questionario questionario = new Questionario(path, id); PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); PlanoTrabalho planoTrabalho = new PlanoTrabalho(); byte[] dados = null; if (questionario != null && questionario.getIdQuestionario() > 0) { planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); if (planoTrabalho != null && planoTrabalho.getArquivoPlanoTrabalho() != null) { try { String nome = planoTrabalho.getNomePlanoTrabalho(); dados = planoTrabalho.getArquivoPlanoTrabalho(); response.setContentType("inline/download"); String arq = "attachment;filename=" + nome; response.setHeader("Content-Disposition", arq); ServletOutputStream os = response.getOutputStream(); os.write(dados); os.flush(); os.close(); } catch (Exception e) { } } else { this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(QuestionarioController.class) .listaQuestionario(); } } else { this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(QuestionarioController.class) .listaQuestionario(); } } @Get("/recuperar-relatorio/{id}") public void recuperarRelatorio(int id, HttpServletResponse response) throws IOException { Questionario questionario = new Questionario(path, id); PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); PlanoTrabalho planoTrabalho = new PlanoTrabalho(); byte[] dados = null; if (questionario != null && questionario.getIdQuestionario() > 0) { planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); if (planoTrabalho != null && planoTrabalho.getArquivoRelatorioAss() != null) { try { String nome = planoTrabalho.getNomeRelatorioAss(); dados = planoTrabalho.getArquivoRelatorioAss(); response.setContentType("inline/download"); String arq = "attachment;filename=" + nome; response.setHeader("Content-Disposition", arq); ServletOutputStream os = response.getOutputStream(); os.write(dados); os.flush(); os.close(); } catch (Exception e) { } } else { this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(QuestionarioController.class) .listaQuestionario(); } } else { this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(QuestionarioController.class) .listaQuestionario(); } } @Path("/enviar-relatorio") public void enviarRelatorioPlanoTrabalho() { Questionario questionario = new Questionario(); questionario = (Questionario) VRaptorRequestHolder.currentRequest() .getServletContext().getAttribute("questionario"); if (questionario == null) { Validacao validacao = new Validacao(); validacao.setCampo("valorHash"); validacao .setMensagem("ATENÇÃO: Você precisa estar logado para enviar Relatório à PFDC/MPF."); mensagemValidacaoCampos.add(validacao); result.include("mensagemValidacaoCampos", mensagemValidacaoCampos); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(loginController.class).login(); } } private void enviarEmail(Questionario questionario) { QuestionarioDao questionarioDao; StringBuffer mensagemMPF = new StringBuffer(); StringBuffer mensagemOrgao = new StringBuffer(); String assuntoMPF = ""; String assuntoOrgao = ""; PlanoTrabalho planoTrabalho = new PlanoTrabalho(); PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); if (planoTrabalho.getArquivoRelatorioAss() != null) { DataHandler dataHandlerRelatorio = null; DataHandler dataHandlerPlano = null; dataHandlerRelatorio = new DataHandler( planoTrabalho.getArquivoRelatorioAss(), planoTrabalho.getNomeExtensaoRelatorioAss()); if (planoTrabalho != null && planoTrabalho.getArquivoPlanoTrabalho() != null) { dataHandlerPlano = new DataHandler( planoTrabalho.getArquivoPlanoTrabalho(), planoTrabalho.getNomeExtensaoPlanoTrabalho()); } Email email = new Email(this.application.getRealPath("") + "/WEB-INF/mail.properties"); EnvioEmailSemAutenticacao envioEmailSemAutenticacao = new EnvioEmailSemAutenticacao(email.getHost(), Integer.toString(email.getPort())); assuntoMPF = "Registro de Encaminhamento do Relatório Circunstanciado de Acessibilidade Digital - " + questionario.getNoOrgao(); mensagemMPF.append("À Procuradoria Federal dos Diretos do Cidadão,
"); mensagemMPF.append("

O(A) " + questionario.getNoOrgao() +" encaminha o Relatório Circunstanciado relativo aos ambientes digitais desta instituição.

"); mensagemMPF.append("Dados do Responsável:
"); mensagemMPF.append("Nome: " + questionario.getResponsavel() +"
"); mensagemMPF.append("Cargo: "+ questionario.getCargoResponsavel() + "
"); mensagemMPF.append("Telefone: " + questionario.getTelefone() + "
"); mensagemMPF.append("email: "+ questionario.getEmailDestinoOrgao() + "
"); mensagemMPF.append("

Brasília, "+ DateUtil.dataHoraAtual() +".

"); mensagemMPF.append("

Encaminhado por:

"); mensagemMPF.append("

http://fad.governoeletronico.gov.br​

"); mensagemMPF.append("

Coordenação-Geral de Padrões de Governo Digital

"); mensagemMPF.append("

Departamento de Governo Digital

"); mensagemMPF.append("

Secretaria de Tecnologia da Informação

"); mensagemMPF.append("

Ministério do Planejamento, Desenvolvimento e Gestão

"); String mensagemRetornoMPF = envioEmailSemAutenticacao.sendMailComAnexo(questionario.getEmailDestinoOrgao(), email.getAnexosTo(), assuntoMPF, mensagemMPF.toString(), email.getAuth(), email.getAuthUser(), email.getAuthPass(), dataHandlerRelatorio, planoTrabalho.getNomeRelatorioAss(), dataHandlerPlano, planoTrabalho.getNomePlanoTrabalho()); if (mensagemRetornoMPF.equalsIgnoreCase("")) { assuntoOrgao = "Registro de Encaminhamento do Relatório Circunstanciado de Acessibilidade Digital - " + questionario.getNoOrgao(); mensagemOrgao.append("

Prezado(a) "+ questionario.getResponsavel() +", "+ questionario.getCargoResponsavel() +" do "+ questionario.getNoOrgao() +", você concluiu com sucesso o processo de "); mensagemOrgao.append("envio do Relatório Circunstanciado (Formulário Eletrônico de Acessibilidade Digital e "); mensagemOrgao.append("Plano de Trabalho) à Procuradoria Federal dos Direitos do Cidadão do Ministério "); mensagemOrgao.append("Público Federal.

"); mensagemOrgao.append("

Além do envio, o relatório circunstanciado deverá ser publicado no portal do órgão/entidade e o seu "); mensagemOrgao.append("reporte , na forma de síntese, deverá ser registrado na seção \"Medidas Relativas à Acessibilidade\" do "); mensagemOrgao.append("Relatório de Gestão referente a 2016 e, nos anos subsequentes, indicar nessa seção o monitoramento "); mensagemOrgao.append("das metas propostas nos planos de trabalho.

"); mensagemOrgao.append("

Em caso de dúvida acesse http://fad.governoeletronico.gov.br/fad/contato/contato-site​​​.

"); mensagemOrgao.append("

Brasília, "+ DateUtil.dataHoraAtual() +".

"); mensagemOrgao.append("

Encaminhado por:

"); mensagemOrgao.append("

http://fad.governoeletronico.gov.br​

"); mensagemOrgao.append("

Coordenação-Geral de Padrões de Governo Digital

"); mensagemOrgao.append("

Departamento de Governo Digital

"); mensagemOrgao.append("

Secretaria de Tecnologia da Informação

"); mensagemOrgao.append("

Ministério do Planejamento, Desenvolvimento e Gestão

"); String mensagemRetornoOrgao = envioEmailSemAutenticacao.sendMailComAnexo(email.getFrom(), questionario.getEmailDestinoOrgao(), assuntoOrgao, mensagemOrgao.toString(), email.getAuth(), email.getAuthUser(), email.getAuthPass(), dataHandlerRelatorio, planoTrabalho.getNomeRelatorioAss(), dataHandlerPlano, planoTrabalho.getNomePlanoTrabalho()); if (mensagemRetornoOrgao.equalsIgnoreCase("")) { questionarioDao = new QuestionarioDao(); if (questionarioDao.atualizarFlagEnviado(path, questionario.getIdQuestionario())) { result.include("mensagemEnvio", "Mensagem enviada com Sucesso, você recebeu um email com os anexos!"); result.include("statusEnvio", true); } } } else { result.include("mensagemEnvio", "Não foi possível enviar o email com os anexos!"); result.include("statusEnvio", false); } }else { result.include("mensagemEnvio", "É preciso ter o Relatório e o Plano de Trabalho anexados!"); result.include("statusEnvio", false); } HashDao hashDao = new HashDao(); Questionario novoQuestionario = new Questionario(); novoQuestionario = hashDao.verificarQuestionario(path, questionario.getIdQuestionario()); verificarPosicaoUsuario(novoQuestionario); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(PlanoTrabalhoController.class) .confirmacaoEnvioEmailMPF(); } @Path("/enviar-email-mpf-alternativo") public void enviarEmailMPFAlternativo(String valorHash) { Validacao validacao = new Validacao(); mensagemValidacaoCampos = new ArrayList(); mensagemValidacaoCampos = validacao.validarHash(path, valorHash); if (mensagemValidacaoCampos.size() > 0) { result.include("mensagemValidacaoCampos", mensagemValidacaoCampos); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(PlanoTrabalhoController.class) .enviarRelatorioPlanoTrabalho(); } HashDao hashDao = new HashDao(); Questionario questionario = new Questionario(); questionario = hashDao.verificarHash(path, valorHash); if (questionario != null && questionario.getIdQuestionario() > 0) { if (questionario.isFlagEnviado()) { result.include("mensagemEnvio", "O Relatório já foi enviado para MPF!"); result.include("statusEnvio", false); this.validator.add(new ValidationMessage("", "")); this.validator.onErrorUsePageOf(PlanoTrabalhoController.class) .confirmacaoEnvioEmailMPF(); } else { enviarEmail(questionario); } } } @Path("/enviar-email-mpf") public void enviarEmailMPF() { Questionario questionario = new Questionario(); questionario = (Questionario) VRaptorRequestHolder.currentRequest() .getServletContext().getAttribute("questionario"); if (questionario != null && questionario.getIdQuestionario() > 0) { enviarEmail(questionario); } } public void verificarPosicaoUsuario(Questionario questionario) { PlanoTrabalho planoTrabalho = new PlanoTrabalho(); PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao(); // Solicitou código de Acesso? VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_01", true); // Respondeu FAD? if (questionario.isQuestionario_respondido()) { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_02", true); } else { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_02", false); } planoTrabalho = planoTrabalhoDao.recuperarPlanoTrabalho(path, questionario); // Anexou Fad? if (planoTrabalho.getArquivoRelatorioAss() != null) { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_03", true); } else { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_03", false); } // Anexou Plano de Trabalho? if (planoTrabalho.getArquivoPlanoTrabalho() != null) { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_04", true); } else { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_04", false); } // Processo finalizado? if (questionario.isFlagEnviado()) { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_05", true); } else { VRaptorRequestHolder.currentRequest().getServletContext() .setAttribute("nivel_05", false); } } public void confirmacaoEnvioEmailMPF() { } }