Subversion Repositories Integrator Subversion

Rev

Blame | Last modification | View Log | Download | RSS feed

package br.com.ec.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.file.UploadedFile;
import org.springframework.context.annotation.Scope;

import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.ArquivoUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ImagemDTO;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.model.Avaliacao;
import br.com.ec.domain.model.AvaliacaoProduto;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.AvaliacaoService;
import br.com.ec.domain.service.ImagemService;
import br.com.ec.domain.service.VigenciaService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;

@Named
@Scope("view")
public class GestaoMensalArquivosBean extends AbstractBean<Vigencia> implements Serializable {

        private static final long serialVersionUID = 1L;
       
        private VigenciaService vigenciaService;
        private AvaliacaoService avaliacaoService;
        private ImagemService imagemService;

        private VigenciaDTO vigenciaSelecionada;
       
        private List<AvaliacaoProduto> produtosPromocaoInterna;
        private String codigoProdutoParaVincular;
       
        private ImagemDTO imagemDTO;
        private UploadedFile imagemParaUpload;
       
        @Inject
        public GestaoMensalArquivosBean(VigenciaService vigenciaService, AvaliacaoService avaliacaoService, ImagemService imagemService) {
                this.vigenciaService = vigenciaService;
                this.avaliacaoService = avaliacaoService;
                this.imagemService = imagemService;
        }
       
        @Override
        public void preCarregamento() {
                limparEntidade();
        }
       
        @PostConstruct
        private void posCarregamento() {
                if (VerificadorUtil.estaNulo(vigenciaSelecionada)) {
                        if (VerificadorUtil.naoEstaNulo(getParametro("vigencia"))) {
                                setVigenciaSelecionada(vigenciaService.consultarVigencia(new Long(getParametro("vigencia").toString())));
                        }
                }
        }

        @Override
        public void limparEntidade() {
                setEntidade(new Vigencia());
        }

        @Override
        public GenericService<Vigencia> getService() {
                return vigenciaService;
        }
       
        @Override
        public Vigencia getEntidade() {
                return entidade;
        }
       
        @Override
        public void preConsultar() {
                setTipoOperacao(TipoOperacao.CONSULTAR);
        }

        @Override
        public Vigencia getId() {
                return getEntidade();
        }
       
        public VigenciaDTO getVigenciaSelecionada() {
                return vigenciaSelecionada;
        }
        public void setVigenciaSelecionada(VigenciaDTO vigenciaSelecionada) {
                this.vigenciaSelecionada = vigenciaSelecionada;
        }
       
        public List<AvaliacaoProduto> getProdutosPromocaoInterna() {
                return produtosPromocaoInterna;
        }
        public void setProdutosPromocaoInterna(List<AvaliacaoProduto> produtosPromocaoInterna) {
                this.produtosPromocaoInterna = produtosPromocaoInterna;
        }
       
        public String getCodigoProdutoParaVincular() {
                return codigoProdutoParaVincular;
        }
        public void setCodigoProdutoParaVincular(String codigoProdutoParaVincular) {
                this.codigoProdutoParaVincular = codigoProdutoParaVincular;
        }
       
        public ImagemDTO getImagemDTO() {
                return imagemDTO;
        }
        public void setImagemDTO(ImagemDTO imagemDTO) {
                this.imagemDTO = imagemDTO;
        }
       
        public UploadedFile getImagemParaUpload() {
                return imagemParaUpload;
        }
        public void setImagemParaUpload(UploadedFile imagemParaUpload) {
                this.imagemParaUpload = imagemParaUpload;
        }
       
        /***************************************************************/
       
        public void uploadImagemPromocoes(final FileUploadEvent e) {
        new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                uploadImagem(e, "promocoes_");
                        }
                });
    }
       
        public void uploadImagemEscala(final FileUploadEvent e) {
        new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                uploadImagem(e, "escala_");
                        }
                });
    }
       
        public void uploadImagemDestaques(final FileUploadEvent e) {
        new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                uploadImagem(e, "destaques_");
                        }
                });
    }
       
        private void uploadImagem(final FileUploadEvent e, String caminho) {
                ImagemDTO imagemAdicionada = gerarArquivo(e.getFile());
                imagemAdicionada.setDescricao(caminho + getVigenciaSelecionada().getSequencial());
//              imagemAdicionada.compactarImagem();
//              imagemAdicionada.converterPngParaJpg();
                lancarExcecaoCasoArquivoExcedeuLimite(imagemAdicionada);
                setImagemParaUpload(e.getFile());
                uploadFisico(imagemAdicionada);
        }
       
        public ImagemDTO gerarArquivo(UploadedFile file) {
                ImagemDTO arquivo = new ImagemDTO();
                arquivo.setArquivo(file.getContent());
                arquivo.setDescricao(file.getFileName());
                arquivo.setExtensao(ArquivoUtil.retornarExtensaoDoArquivo(file.getFileName()));
                return arquivo;
        }
       
        private void lancarExcecaoCasoArquivoExcedeuLimite(ImagemDTO arquivoGerado) {
                if (arquivoGerado.isExcedeuLimite()) {
                        throw new NegocioException("Arquivo: " + arquivoGerado.getDescricao() + " excedeu o limite de 3000 kbytes. ");
                }
        }
       
        public void uploadFisico(ImagemDTO arquivoGerado) {
                String caminho = imagemService.caminhoPastaImagens() + arquivoGerado.getDescricao() + "." + arquivoGerado.getExtensao();
                FileOutputStream fos;
                try {
                        fos = new FileOutputStream(caminho);
                        fos.write(arquivoGerado.getArquivo());
                        fos.close();
                } catch (Exception e1) {
                        e1.printStackTrace();
                }
        }
       
        public void removerImagemPromocoes() {
                String caminhoPromocao = getVigenciaSelecionada().getImagemPromocoes();
                if (!caminhoPromocao.contains("SEM")) {
                        File imagem = new File(caminhoPromocao);
                        imagem.delete();
                }
        }
       
        public void removerImagemEscala() {
                String caminhoPromocao = getVigenciaSelecionada().getImagemEscala();
                if (!caminhoPromocao.contains("SEM")) {
                        File imagem = new File(caminhoPromocao);
                        imagem.delete();
                }
        }
       
        public void removerImagemDestaques() {
                String caminhoPromocao = getVigenciaSelecionada().getImagemDestaques();
                if (!caminhoPromocao.contains("SEM")) {
                        File imagem = new File(caminhoPromocao);
                        imagem.delete();
                }
        }
       
        /**************************************************/
       
        public void redirecionarGestaoMensal() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                try {
                                        LancadorMensagem.redirecionarTela("/sistema/gestao_mensal/gestao_mensal.xhtml");
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }
       
        public void consultarProdutosPromocaoInterna() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                setProdutosPromocaoInterna(avaliacaoService.consultarProdutosPromocaoInterna(getEntidade().getSequencial()));
                        }
                });
        }
       
        public void vincularProdutoPromocaoInterna() {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
//                              avaliacaoService.cadastrarProdutoPromocaoInterna(getEntidade(), getCodigoProdutoParaVincular());
//                              setProdutosPromocaoInterna(avaliacaoService.consultarProdutosPromocaoInterna(getEntidade().getSequencial()));
//                              LancadorMensagem.lancarSucesso("PRODUTO " + getCodigoProdutoParaVincular() + " VINCULADO COM SUCESSO");
//                              setCodigoProdutoParaVincular(null);
                        }
                });
        }
       
        public void desvincularProdutoPromocaoInterna(final AvaliacaoProduto avaliacaoProduto) {
                new VerificadorLancamentoException().tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean() {
                        public void execute() {
                                avaliacaoService.excluirProdutoPromocaoInterna(avaliacaoProduto);
                                setProdutosPromocaoInterna(avaliacaoService.consultarProdutosPromocaoInterna(getEntidade().getSequencial()));
                                LancadorMensagem.lancarSucesso("PRODUTO DESVINCULADO COM SUCESSO");
                        }
                });
        }
       
}