Java tutorial
/*** Copyright (c) 2012 - 2020 Hrcules S. S. Jos Este arquivo parte do programa Oramento Domstico. Oramento Domstico um software livre; voc pode redistribui-lo e/ou modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como publicada pela Fundao do Software Livre (FSF); na verso 2.1 da Licena. Este programa distribudo na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU em portugus para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do projeto no endereco https://github.com/herculeshssj/orcamento ou escreva para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Para mais informaes sobre o programa Oramento Domstico e seu autor entre em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, Marco II - Nova Iguau, RJ, Brasil. ***/ package br.com.hslife.orcamento.controller; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.faces.context.FacesContext; import javax.faces.model.SelectItem; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.primefaces.event.FileUploadEvent; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import br.com.hslife.orcamento.entity.Arquivo; import br.com.hslife.orcamento.enumeration.Container; import br.com.hslife.orcamento.exception.BusinessException; import br.com.hslife.orcamento.exception.ValidationException; import br.com.hslife.orcamento.facade.IArquivo; import br.com.hslife.orcamento.model.AnexoEntidade; import br.com.hslife.orcamento.model.CriterioArquivo; @Component("arquivoMB") @Scope("session") public class ArquivoController extends AbstractController { /** * */ private static final long serialVersionUID = 8085348187243579495L; @Autowired private IArquivo service; private CriterioArquivo criterio = new CriterioArquivo(); private Arquivo entity; private List<Arquivo> listEntity; private Long idEntity; private String operation = "delete"; private BigDecimal espacoOcupado = new BigDecimal(0); private Container container; private String descricao; private AnexoEntidade entidadeSelecionada; private List<AnexoEntidade> listContainer; public ArquivoController() { moduleTitle = "Arquivos Anexados"; } @Override protected void initializeEntity() { /* Este mtodo sempre ir garantir que haja objetos elegveis para o Garbage Collector */ // Seta o valor null na entidade antes de instanciar um novo objeto entity = null; entity = new Arquivo(); // Chama o mtodo clear para remover todas as referncias, seta null na lista e instancia uma nova if (listEntity != null && !listEntity.isEmpty()) listEntity.clear(); listEntity = null; listEntity = new ArrayList<Arquivo>(); if (listContainer != null && !listContainer.isEmpty()) listContainer.clear(); } @Override public String startUp() { initializeEntity(); // Invoca o Garbage Collector System.gc(); return "/pages/Arquivo/listArquivo"; } public String find() { initializeEntity(); // Invoca o Garbage Collector System.gc(); try { criterio.setUsuario(getUsuarioLogado()); listEntity = getService().buscarPorCriterioArquivo(criterio); // Varivel que contabiliza quantos arquivos podem ser descartados int quantDescartar = 0; BigDecimal bytesALiberar = new BigDecimal(0); // Calcula o espao ocupado e injeta as opes do sistema nas entidades espacoOcupado = new BigDecimal(0); Map<String, Integer> opcoesSistema = getOpcoesSistema().getOpcoesArquivosAnexados(getUsuarioLogado()); for (Arquivo a : listEntity) { espacoOcupado = espacoOcupado.add(new BigDecimal(a.getTamanho())); a.setOpcoesSistema(opcoesSistema); if (a.isPrazoExpirado()) { quantDescartar++; bytesALiberar = bytesALiberar.add(new BigDecimal(a.getTamanho())); } } // Retorna uma mensagem informando quandos arquivos podem ser excludos if (quantDescartar != 0) { warnMessage(quantDescartar + " arquivo(s) pode(m) ser descartado(s), liberando " + new DecimalFormat("#,##0.##").format(bytesALiberar) + " bytes no disco."); } } catch (ValidationException | BusinessException be) { errorMessage(be.getMessage()); } return ""; } public String create() { return "/pages/Arquivo/formArquivo"; } public void findEntity() { try { listContainer = getService().buscarEntidadesPorDescricao(descricao, container); } catch (ValidationException | BusinessException be) { errorMessage(be.getMessage()); } } public void save() { try { if (entidadeSelecionada == null) { warnMessage("Selecione uma entidade!"); return; } if (entity == null || entity.getDados() == null || entity.getDados().length == 0) { warnMessage("Anexe um arquivo!"); return; } getService().salvarAnexo(entidadeSelecionada.getId(), container, entity); infoMessage("Anexo salvo com sucesso!"); initializeEntity(); } catch (ValidationException | BusinessException be) { errorMessage(be.getMessage()); } } public String view() { return "/pages/Arquivo/viewArquivo"; } public String delete() { try { getService().excluir(entity); infoMessage("Registro excludo com sucesso!"); // Verifica se a listagem de resultados est nula ou no para poder efetuar novamente a busca if (listEntity != null && !listEntity.isEmpty()) { if (getOpcoesSistema().getExibirBuscasRealizadas()) find(); else initializeEntity(); } else initializeEntity(); return "/pages/Arquivo/listArquivo"; } catch (ValidationException | BusinessException be) { errorMessage(be.getMessage()); } return ""; } public String cancel() { return "/pages/Arquivo/listArquivo"; } public void baixarArquivo() { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext() .getResponse(); try { response.setContentType(entity.getContentType()); response.setHeader("Content-Disposition", "attachment; filename=" + entity.getNomeArquivo()); response.setContentLength(entity.getDados().length); ServletOutputStream output = response.getOutputStream(); output.write(entity.getDados(), 0, entity.getDados().length); FacesContext.getCurrentInstance().responseComplete(); } catch (Exception e) { errorMessage(e.getMessage()); } } public void carregarArquivo(FileUploadEvent event) { if (event.getFile() != null) { if (entity == null) entity = new Arquivo(); entity.setDados(event.getFile().getContents()); entity.setNomeArquivo(event.getFile().getFileName().replace(" ", ".")); entity.setContentType(event.getFile().getContentType()); entity.setTamanho(event.getFile().getSize()); entity.setContainer(container); entity.setUsuario(getUsuarioLogado()); } } public List<SelectItem> getListaContainer() { List<SelectItem> listaSelectItem = new ArrayList<SelectItem>(); for (Container status : Container.values()) { listaSelectItem.add(new SelectItem(status, status.toString())); } return listaSelectItem; } public int getQuantRegistros() { if (listEntity == null || listEntity.isEmpty()) { return 0; } else { return listEntity.size(); } } public String getEspacoOcupado() { return new DecimalFormat("#,##0.##").format(espacoOcupado); } public IArquivo getService() { return service; } public void setService(IArquivo service) { this.service = service; } public Arquivo getEntity() { return entity; } public void setEntity(Arquivo entity) { this.entity = entity; } public List<Arquivo> getListEntity() { return listEntity; } public void setListEntity(List<Arquivo> listEntity) { this.listEntity = listEntity; } public Long getIdEntity() { return idEntity; } public void setIdEntity(Long idEntity) { this.idEntity = idEntity; } public CriterioArquivo getCriterio() { return criterio; } public void setCriterio(CriterioArquivo criterio) { this.criterio = criterio; } public String getOperation() { return operation; } public void setOperation(String operation) { this.operation = operation; } public Container getContainer() { return container; } public void setContainer(Container container) { this.container = container; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public AnexoEntidade getEntidadeSelecionada() { return entidadeSelecionada; } public void setEntidadeSelecionada(AnexoEntidade entidadeSelecionada) { this.entidadeSelecionada = entidadeSelecionada; } public List<AnexoEntidade> getListContainer() { return listContainer; } public void setListContainer(List<AnexoEntidade> listContainer) { this.listContainer = listContainer; } }