br.ufg.calendario.components.EventoBean.java Source code

Java tutorial

Introduction

Here is the source code for br.ufg.calendario.components.EventoBean.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufg.calendario.components;

import br.ufg.calendario.dao.CalendarioDao;
import br.ufg.calendario.dao.EventoDao;
import br.ufg.calendario.dao.InteressadoDao;
import br.ufg.calendario.dao.RegionalDao;
import br.ufg.calendario.models.Calendario;
import br.ufg.calendario.models.Evento;
import br.ufg.calendario.models.Interessado;
import br.ufg.calendario.models.Regional;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Serializable;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.validation.Validator;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 *
 * @author Andre Luiz Fernandes Ribeiro Barca
 */
@Component
@Scope(value = "session")
public class EventoBean implements Serializable {

    @Autowired
    private transient Validator validator;

    @Autowired
    private transient EventoDao eventoDao;

    @Autowired
    private transient InteressadoDao interessadoDao;

    @Autowired
    private transient RegionalDao regionalDao;

    @Autowired(required = true)
    private transient CalendarioDao calendarioDao;

    @Autowired
    private transient ConfigBean configBean;

    private Evento evento;
    private Evento itemSelecionado;
    private Calendario calendario;
    private Regional selecaoRegional;
    private Interessado selecaoInteressado;
    private final LazyDataModel<Evento> eventos;
    private List<Evento> eventosImportados;
    private TipoBusca tipoBusca;

    //assunto | descricao
    private String termoBusca;
    private Regional buscaRegional;
    private Interessado buscaInteressado;
    private Date buscaDataInicio;
    private Date buscaDataTermino;

    @PostConstruct
    private void init() {
        this.calendario = calendarioDao.buscarAtivo();
        System.out.println("calendario ativo: " + calendario);
    }

    public EventoBean() {
        evento = new Evento();
        itemSelecionado = null;
        calendario = null;
        selecaoRegional = null;
        selecaoInteressado = null;
        eventosImportados = new ArrayList<>();
        tipoBusca = TipoBusca.TERMO;
        eventos = new LazyDataModel<Evento>() {

            private List<Evento> data;

            @Override
            public Object getRowKey(Evento object) {
                return object.getId().toString();
            }

            @Override
            public Evento getRowData(String rowKey) {
                for (Evento evt : data) {
                    if (evt.getId().toString().equals(rowKey)) {
                        return evt;
                    }
                }
                return null;
            }

            @Override
            public List<Evento> load(int first, int pageSize, String sortField, SortOrder sortOrder,
                    Map<String, Object> filters) {
                //reset primefaces filter
                filters = new HashMap();
                setPageSize(pageSize);
                if (getCalendario() != null) {
                    filters.put("calendario", getCalendario());
                }
                if (getTermoBusca() != null && !getTermoBusca().isEmpty()) {
                    System.out.println("termo: " + getTermoBusca());
                    filters.put("termo", getTermoBusca());
                }
                if (getBuscaDataInicio() != null && getBuscaDataTermino() != null) {
                    Map periodo = new HashMap();
                    periodo.put("inicio", getBuscaDataInicio());
                    periodo.put("termino", getBuscaDataTermino());
                    filters.put("periodo", periodo);

                }

                if (getBuscaInteressado() != null) {
                    filters.put("interessado", getBuscaInteressado());
                }

                if (getBuscaRegional() != null) {
                    filters.put("regional", getBuscaRegional());
                }

                if (!filters.isEmpty()) {
                    setRowCount(eventoDao.rowCount(filters));
                } else {
                    setRowCount(eventoDao.rowCount());
                }
                data = eventoDao.listar(first, pageSize, sortField, sortOrder == null ? null : sortOrder.name(),
                        filters);

                if (data.size() > pageSize) {
                    try {
                        data = data.subList(first, first + pageSize);
                    } catch (IndexOutOfBoundsException e) {
                        data = data.subList(first, first + (data.size() % pageSize));
                    }
                }
                return data;
            }
        };
    }

    public void adicionar() {
        evento = new Evento();
    }

    public void editar() {
        if (itemSelecionado != null) {
            evento = itemSelecionado;
        }
    }

    public void salvar() {
        //inserir validador
        FacesMessage msg;
        boolean saveStatus;
        if (evento.getId() == null) {
            saveStatus = eventoDao.adicionar(evento);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("itemSalvo"));
        } else {
            saveStatus = eventoDao.atualizar(evento);
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("itemAtualizado"));
        }
        if (!saveStatus) {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "info", LocaleBean.getMessage("erroSalvar"));
        }
        FacesContext.getCurrentInstance().addMessage(null, msg);
        RequestContext.getCurrentInstance().addCallbackParam("resultado", saveStatus);
    }

    public void excluir() {
        FacesMessage msg;
        boolean saveStatus = eventoDao.excluir(itemSelecionado);
        if (saveStatus) {
            itemSelecionado = null;
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("itemExcluido"));
        } else {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "info", LocaleBean.getMessage("erroExcluir"));
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);
        RequestContext.getCurrentInstance().addCallbackParam("resultado", saveStatus);
    }

    public void excluirPorCalendario() {
        FacesMessage msg;
        boolean saveStatus = eventoDao.excluir(calendario);
        if (saveStatus) {
            itemSelecionado = null;
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("listaExcluida"));
        } else {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "info", LocaleBean.getMessage("erroExcluir"));
        }

        FacesContext.getCurrentInstance().addMessage(null, msg);
        RequestContext.getCurrentInstance().addCallbackParam("resultado", saveStatus);
    }

    public void uploadEvento(FileUploadEvent event) {
        Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
        FacesMessage msg;
        boolean saveStatus = false;
        UploadedFile arquivo = event.getFile();
        try {
            InputStream arquivoReader = arquivo.getInputstream();
            Charset charset = Charset.forName("UTF-8");
            CharsetDecoder decoder = charset.newDecoder();
            Reader reader = new InputStreamReader(arquivoReader, decoder);
            CSVParser parser = new CSVParser(reader,
                    CSVFormat.DEFAULT.withHeader().withDelimiter(configBean.getDelimiter()));
            SimpleDateFormat dateFormatter = new SimpleDateFormat(configBean.getDateFormat());
            for (Entry<String, Integer> entry : parser.getHeaderMap().entrySet()) {
                System.out.format("header: %s - %d\n", entry.getKey(), entry.getValue());
            }
            Integer ano;
            Calendario cal = null;
            List<Regional> regionais = regionalDao.listar();
            List<Interessado> interessados = interessadoDao.listar();
            for (CSVRecord record : parser) {
                //adicionar entidade calendario (select box) na tela importar eventos.
                ano = Integer.parseInt(record.get(0));
                Date dataInicio = dateFormatter.parse(record.get(1));
                Date dataTermino = dateFormatter.parse(record.get(2));
                String assunto = record.get(3);
                String descricao = record.get(4);
                String[] interessadoArray = record.get(5).split(configBean.getRegexSplitter());
                String[] regionalArray = record.get(6).split(configBean.getRegexSplitter());
                boolean aprovado = record.get(7) != null && record.get(7).trim().toUpperCase().equals("S");
                if (cal == null) {
                    //buscar apenas uma vez
                    cal = calendarioDao.buscar(ano);
                }
                Set<Interessado> interessadoSet = new HashSet();
                for (String interessado : interessadoArray) {
                    if (!interessado.isEmpty()) {
                        for (Interessado i : interessados) {
                            if (i.getNome().equals(interessado.trim())) {
                                interessadoSet.add(i);
                            }
                        }
                    }
                }
                Set<Regional> regionalSet = new HashSet();
                for (String regional : regionalArray) {
                    if (!regional.isEmpty()) {
                        for (Regional r : regionais) {
                            if (r.getNome().equals(regional.trim())) {
                                regionalSet.add(r);
                            }
                        }
                    }
                }
                Evento evt = new Evento(assunto, dataInicio, dataTermino, descricao, cal, regionalSet,
                        interessadoSet, aprovado);
                eventosImportados.add(evt);
            }
        } catch (IOException | ParseException | ArrayIndexOutOfBoundsException | NullPointerException e) {
            System.out.println("erro: " + e.getMessage());
        }
        System.out.println("arquivo enviado: " + arquivo.getFileName());
        msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("arquivoEnviado"));
        FacesContext.getCurrentInstance().addMessage(null, msg);
        RequestContext.getCurrentInstance().addCallbackParam("resultado", saveStatus);
    }

    public void importaEvento() {
        FacesMessage msg;
        boolean saveStatus = eventoDao.adicionar(eventosImportados);
        if (saveStatus) {
            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info", LocaleBean.getMessage("arquivoImportado"));
        } else {
            msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "info", LocaleBean.getMessage("erroImportacao"));
        }
        FacesContext.getCurrentInstance().addMessage(null, msg);
        RequestContext.getCurrentInstance().addCallbackParam("resultado", saveStatus);
    }

    public void limpaEventosImportados() {
        eventosImportados.clear();
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info",
                LocaleBean.getMessage("listaExcluida"));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void limpaFiltro() {
        setTermoBusca(null);
        setBuscaDataInicio(null);
        setBuscaDataTermino(null);
        setBuscaInteressado(null);
        setBuscaRegional(null);
        FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "info",
                LocaleBean.getMessage("filtroVazio"));
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void checkDate(SelectEvent event) {
        if (evento.getTermino().before((Date) event.getObject())) {
            evento.setTermino((Date) event.getObject());
        }
    }

    public void checkDateBusca(SelectEvent event) {
        Date selectedDate = (Date) event.getObject();
        if (getBuscaDataTermino() != null && getBuscaDataTermino().before(selectedDate)) {
            setBuscaDataTermino(selectedDate);
        }
    }

    public void resetDateBusca() {
        setBuscaDataInicio(null);
        setBuscaDataTermino(null);
    }

    public boolean isDateBuscaValid() {
        return (getBuscaDataInicio() != null && getBuscaDataTermino() != null);
    }

    public void adicionaRegional() {
        evento.addRegional(getSelecaoRegional());
    }

    public void removeRegional() {
        Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
        Regional regional = (Regional) requestMap.get("regional");
        evento.removeRegional(regional);
    }

    public void adicionaInteressado() {
        evento.addInteressado(getSelecaoInteressado());
    }

    public void removeInteressado() {
        Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
        Interessado interessado = (Interessado) requestMap.get("interessado");
        evento.removeInteressado(interessado);
    }

    public Evento getEvento() {
        return evento;
    }

    public void setEvento(Evento evento) {
        this.evento = evento;
    }

    public Evento getItemSelecionado() {
        return itemSelecionado;
    }

    public void setItemSelecionado(Evento itemSelecionado) {
        this.itemSelecionado = itemSelecionado;
    }

    public Calendario getCalendario() {
        return calendario;
    }

    public void setCalendario(Calendario calendario) {
        System.out.println("calendario alterado: " + calendario.getAno());
        this.calendario = calendario;
    }

    public LazyDataModel<Evento> getEventos() {
        return eventos;
    }

    public Regional getSelecaoRegional() {
        return selecaoRegional;
    }

    public void setSelecaoRegional(Regional selecaoRegional) {
        this.selecaoRegional = selecaoRegional;
    }

    public Interessado getSelecaoInteressado() {
        return selecaoInteressado;
    }

    public void setSelecaoInteressado(Interessado selecaoInteressado) {
        this.selecaoInteressado = selecaoInteressado;
    }

    public List<Evento> getEventosImportados() {
        return eventosImportados;
    }

    public TipoBusca getTipoBusca() {
        return tipoBusca;
    }

    public void setTipoBusca(TipoBusca tipoBusca) {
        this.tipoBusca = tipoBusca;
    }

    public List<TipoBusca> getTipoBuscaList() {
        return TipoBusca.getValues();
    }

    public String getTermoBusca() {
        return termoBusca;
    }

    public void setTermoBusca(String termoBusca) {
        this.termoBusca = termoBusca;
    }

    public Regional getBuscaRegional() {
        return buscaRegional;
    }

    public void setBuscaRegional(Regional buscaRegional) {
        this.buscaRegional = buscaRegional;
    }

    public Interessado getBuscaInteressado() {
        return buscaInteressado;
    }

    public void setBuscaInteressado(Interessado buscaInteressado) {
        this.buscaInteressado = buscaInteressado;
    }

    public Date getBuscaDataInicio() {
        return buscaDataInicio;
    }

    public void setBuscaDataInicio(Date buscaDataInicio) {
        this.buscaDataInicio = buscaDataInicio;
    }

    public Date getBuscaDataTermino() {
        return buscaDataTermino;
    }

    public void setBuscaDataTermino(Date buscaDataTermino) {
        this.buscaDataTermino = buscaDataTermino;
    }

}