/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
package actions;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import modelo.DeFamPer;
import modelo.DeModPer;
import modelo.Familia;
import modelo.Modelo;
import modelo.PerioPAP;
import modelo.PerioPM;
import br.blog.arruda.plot.Plot;
import service.DeFamPerAppService;
import service.FamiliaAppService;
import service.PerioPAPAppService;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.SelectOneDataModel;
/**
* DeFamPerActions � uma classe relacionada � manipula��o de tela, ou seja, a intera��o do usus�rio
* de fato dar-se-� atrav�s de objetos do tipo DeFamPerActions quando na tela de DeFamPer.
* Objetos do tipo "actions", nome aqui adotado, tamb�m s�o popularmente conhecidos como managebeans
* em outras palavras beans gerenci�veis.
*
* @author marques.araujo
*
*/
public class DeFamPerActions extends BaseActions implements Serializable {
// Services
private static DeFamPerAppService demandaFamiliaPeriodoService;
private static FamiliaAppService familiaService;
private static PerioPAPAppService perioPAPAppService;
// Paginas
public final String PAGINA_LIST = "listDeFamPer";
public final String PAGINA_GRAFICO = "graficoDeFamPer";
// Componentes de controle
private DataModel listaDeFamPer;
private DataModel listaDeFamilias;
private SelectOneDataModel<String> comboTiposDeBusca;
private List<DeModPer> listaDeModPer;
private List<DeFamPer> demandasFamilia;
// Variaveis de Tela
private DeFamPer demanda;
private Familia familiaCorrente;
private DeFamPer deFamPerCorrente;
private String campoDeBusca;
private boolean buscaEfetuada = false;
private boolean renderizarDemandas = false;
public final String BUSCA_POR_CODIGO = "C�digo";
public final String BUSCA_POR_DESCRICAO = "Descri��o";
private int pagina;
private Plot plotDeFamPer;
public DeFamPerActions(){
try {
demandaFamiliaPeriodoService = FabricaDeAppService.getAppService(DeFamPerAppService.class);
familiaService = FabricaDeAppService.getAppService(FamiliaAppService.class);
perioPAPAppService = FabricaDeAppService.getAppService(PerioPAPAppService.class);
} catch (Exception e) {
e.printStackTrace();
}
plotDeFamPer = null;
}
/**
* Exibe a tela do grafico de DeFamPer
* @return
*/
public String exibirGrafico(){
familiaCorrente = (Familia) listaDeFamilias.getRowData();
demandasFamilia = familiaCorrente.getDeFamPers();
// Aqui estamos obrigando a lista ficar ordenada, ja que definimos como a classe DeModPer deve se ordenar.
Collections.sort(demandasFamilia);
plotDeFamPer = demandaFamiliaPeriodoService.gerarDadosGrafico(demandasFamilia);
return PAGINA_GRAFICO;
}
/**
* Este metodo esta sendo usado no template principal
*
*
*/
@SuppressWarnings("unchecked")
public String exibirDemandas(){
List<Familia> familiasCadastradas = familiaService.recuperaListaDeFamilias();
if (familiasCadastradas.isEmpty()){
error("familia.FAMILIAS_NAO_CADASTRADAS");
}
return PAGINA_LIST;
}
/**
* Totaliza todos os DeFamPers do sistema com base nos dados dos seus
* respectivos DeModPers.
* @return
*/
public String totalizarTodosDeFamPers(){
//totaliza nesse ponto
demandaFamiliaPeriodoService.totalizaDeModPerParaTodosDeFamPers();
//Captura novamente a lista de familia, para vir atualizada.
listaDeFamilias = null;
return PAGINA_LIST;
}
/**
* M�todo que busca uma Familia por c�digo/descri��o aproximados
* redireciona para pagina list com a mensagem adequada: encontrado/nao encontrado
*
* @author walanem
*/
public String buscaFamilia(){
List<Familia> familiasEncontradas = null;
if (campoDeBusca.trim().isEmpty()){
error("familia.FORNECER_CAMPO_DE_BUSCA");
return PAGINA_LIST;
}
else {
listaDeFamilias = null;
if (comboTiposDeBusca.getObjetoSelecionado().equals(BUSCA_POR_CODIGO)){
familiasEncontradas = new ArrayList<Familia>(familiaService.
recuperaListaDeFamiliasPeloCodigoLike(campoDeBusca));
} else {
familiasEncontradas = new ArrayList<Familia>(familiaService.
recuperaListaDeFamiliasPorDescricao(campoDeBusca));
}
if (familiasEncontradas.isEmpty()){
error("familia.NAO_ENCONTRADA");
listaDeFamilias = null;
return PAGINA_LIST;
}else{
info("familia.ENCONTRADAS");
}
}
listaDeFamilias = new ListDataModel(familiasEncontradas);
buscaEfetuada = true;
return PAGINA_LIST;
}
public String altera(){
demandaFamiliaPeriodoService .altera(demanda);
info("defamper.SUCESSO_ALTERACAO");
buscaEfetuada = false;
listaDeFamPer = null;
listaDeFamilias = null;
plotDeFamPer = null;
return PAGINA_LIST;
}
public String cancelar(){
buscaEfetuada = false;
listaDeFamilias = null;
plotDeFamPer = null;
return PAGINA_LIST;
}
// ================================== M�todos get() e set() ================================== //
public void setDemanda(DeFamPer demanda) {
this.demanda = demanda;
}
public DeFamPer getDemanda() {
return demanda;
}
public void desabilitarDemandas(){
renderizarDemandas = false;
}
public void setRenderizarDemandas(boolean renderizarDemandas) {
this.renderizarDemandas = renderizarDemandas;
}
public boolean isRenderizarDemandas() {
return renderizarDemandas;
}
public String getCampoDeBusca() {
return campoDeBusca;
}
public boolean isBuscaEfetuada() {
return buscaEfetuada;
}
public void setCampoDeBusca(String campoDeBusca) {
this.campoDeBusca = campoDeBusca;
}
public void setBuscaEfetuada(boolean buscaEfetuada) {
this.buscaEfetuada = buscaEfetuada;
}
public void setComboTiposDeBusca(SelectOneDataModel<String> comboTiposDeBusca) {
this.comboTiposDeBusca = comboTiposDeBusca;
}
public SelectOneDataModel<String> getComboTiposDeBusca() {
if (comboTiposDeBusca == null){
List<String> tiposDeBusca = new ArrayList<String>(2);
tiposDeBusca.add(BUSCA_POR_CODIGO);
tiposDeBusca.add(BUSCA_POR_DESCRICAO);
comboTiposDeBusca = SelectOneDataModel.criaComObjetoSelecionadoSemTextoInicial(tiposDeBusca, BUSCA_POR_CODIGO);
}
return comboTiposDeBusca;
}
public void setPagina(int pagina) {
this.pagina = pagina;
}
public int getPagina() {
return pagina;
}
public void setListaDeFamilias(DataModel listaDeFamilias) {
this.listaDeFamilias = listaDeFamilias;
}
public DataModel getListaDeFamilias() {
if (listaDeFamilias == null){
List<Familia> familias = familiaService.recuperaListaDeFamiliasComDeFamPers();
for (Familia familia : familias) {
for (DeFamPer deFamper : familia.getDeFamPers()) {
PerioPM perioPMInicial = perioPAPAppService.obtemPrimeiroPerioPMdoPerioPAP(deFamper.getPerioPAP());
PerioPM perioPMFinal = perioPAPAppService.obtemUltimoPerioPMdoPerioPAP(deFamper.getPerioPAP());
PerioPAP perioPAP = deFamper.getPerioPAP();
perioPAP.setDataInicial(perioPMInicial.getDataInicial());
perioPAP.setDataFinal(perioPMFinal.getDataFinal());
}
}
for (Familia familia : familias) {
Collections.sort(familia.getDeFamPers());
}
listaDeFamilias = new ListDataModel(familias);
}
return listaDeFamilias;
}
public Familia getFamiliaCorrente() {
return familiaCorrente;
}
public void setFamiliaCorrente(Familia familiaCorrente) {
this.familiaCorrente = familiaCorrente;
}
public void setListaDeFamPer(DataModel listaDeFamPer) {
this.listaDeFamPer = listaDeFamPer;
}
public DataModel getListaDeFamPer() {
return listaDeFamPer;
}
public Plot getPlotDeFamPer() {
return plotDeFamPer;
}
public void setPlotDeFamPer(Plot plotDeFamPer) {
this.plotDeFamPer = plotDeFamPer;
}
}