PlanoTrabalhoController.java 4.98 KB
package br.com.controller;

import java.io.IOException;

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.validator.ValidationMessage;
import br.com.dao.HashDao;
import br.com.dao.PlanoTrabalhoDao;
import br.com.model.entity.PlanoTrabalho;
import br.com.model.entity.Questionario;


@Resource
public class PlanoTrabalhoController  extends DefaultMultipartConfig {

  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() {

  }

  @Path("/plano-trabalho-confirmacao")
  public void planoTrabalhoConfirmacao() {

  }

  
  @Path("/salvar-plano-trabalho") 
  public void enviarPlanoTrabalho(String valorHash, UploadedFile file) {

    String mensagem = "Não foi possível enviar o plano de trabalho!";
    boolean status = false;
    
    if(file != null)
    {        
    String tipoArquivo = file.getContentType();  
    
    int idPlanoTrabalho = -1;

    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")) {

      mensagem = "Formato de Arquivo inválido!";
      status = false;

    } else {
      HashDao hashDao = new HashDao();
      Questionario questionario = new Questionario();
      questionario = hashDao.verificarHash(path, valorHash);
      String nomeExtensao = file.getFileName();
   
        if (questionario != null && questionario.getDtInicioQuestionario() != null) {
          PlanoTrabalhoDao planoTrabalhoDao = new PlanoTrabalhoDao();

          idPlanoTrabalho =
              planoTrabalhoDao.verificaPlanoTrabalho(path, questionario.getIdQuestionario());

          if (idPlanoTrabalho == -1) {
            if (planoTrabalhoDao.salvarPlanoTrabalho(path, file.getFile(), questionario,
                nomeExtensao)) {
              mensagem = "Plano de trabalho enviado com sucesso!";
              status = true;
            } else {
              mensagem = "Não foi possível enviar o plano de trabalho!";
            }
          } else {
            if (planoTrabalhoDao.atualizarPlanoTrabalho(path, file.getFile(), questionario,
                idPlanoTrabalho, nomeExtensao)) {
              mensagem = "Plano de trabalho enviado com sucesso!";
              status = true;
            } else {
              mensagem = "Não foi possível enviar o plano de trabalho!";
            }
          }

        } else {
          mensagem = "Favor verificar o Código de Acesso!";
        }
     
    }
    }
    else
    {
      mensagem = "O arquivo não pode ser maior que 50Mb!";
    }
    result.include("mensagem", mensagem);
    result.include("status", status);
    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)
      {
        try {
          String nome = planoTrabalho.getNomeExtensao();
          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) {
          
        }
      }
    }
  }
}