/*
*
* 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.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.ajax4jsf.context.AjaxContext;
import org.jboss.util.NotImplementedException;
import DAO.exception.ObjetoNaoEncontradoException;
import modelo.CadPlan;
import modelo.Familia;
import modelo.HP;
import modelo.ModelagemFuzzy;
import modelo.Modelo;
import modelo.Parametros;
import modelo.PlPerMod;
import modelo.PlanoModelo;
import service.CadPlanAppService;
import service.ExcecaoMensAppService;
import service.HPAppService;
import service.ModelagemFuzzyAppService;
import service.ModeloAppService;
import service.PMPAppService;
import service.ParametrosAppService;
import service.PlPerModAppService;
import service.PlanoModeloAppService;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.SelectOneDataModel;
public class CadPlanActions extends BaseActions implements Serializable {
// Services
private static CadPlanAppService cadPlanService;
private static ModeloAppService modeloService;
private static ModelagemFuzzyAppService modelagemFuzzyService;
private static PMPAppService pmpService;
private static PlPerModAppService plPerModService;
private static ExcecaoMensAppService excecaoMensService;
private static PlanoModeloAppService planoModeloService;
private static HPAppService hpService;
private static ParametrosAppService parametrosService;
// Paginas
public final String PAGINA_LIST = "listCadPlan";
public final String PAGINA_NEW = "newCadPlan";
public final String PAGINA_NEW_FUZZY = "newCadPlanFuzzy";
public final String PAGINA_SHOW = "showCadPlan";
public final String PAGINA_EDIT = "editCadPlan";
public final String PAGINA_LIST_PLPERMOD = "listPlPerMod";
public final String PAGINA_LIST_EXCECAOMENS = "listExcecaoMens";
public final String PAGINA_LIST_PMP = "listPMP";
public final String PAGINA_LIST_AVALIACAOFUZZY = "listAvaliacaoFuzzy";
public final String PAGINA_DETALHAR_AVALIACAOFUZZY = "detalharAvaliacaoFuzzy";
public final String PAGINA_SELECMODEL_AVALIACAOFUZZY = "selecModelagemAvaliacaoFuzzy";
// Componentes de Controle
private DataModel listaCadPlan;
private DataModel listaPlPerModAgregado;
// Variaveis de Tela
private CadPlan cadPlanCorrente;
private CadPlan cadPlanCopiado;
private boolean renderizarTotalizacao = false;
private int pagina;
private int opcaoEscolhida;
private String codPlanCorrente;
private String descrPlanCorrente;
// Op��es de Escolha
final static int OPCAO_NOVO_CADPLAN = 0;
final static int OPCAO_COPIA_CADPLAN = 1;
final static int OPCAO_NOVO_CADPLAN_FUZZY = 2;
final static int OPCAO_GERAR_EXCECAO = 3;
final static int OPCAO_MOSTRAR_EXCECAO = 4;
private static String FINALIDADE_MODELAGEM;
//avaliacao fuzzy
private SelectOneDataModel<ModelagemFuzzy> comboModelagensFuzzy;
public CadPlanActions() throws Exception {
try {
cadPlanService = FabricaDeAppService.getAppService(CadPlanAppService.class);
modeloService = FabricaDeAppService.getAppService(ModeloAppService.class);
modelagemFuzzyService = FabricaDeAppService.getAppService(ModelagemFuzzyAppService.class);
plPerModService = FabricaDeAppService.getAppService(PlPerModAppService.class);
pmpService = FabricaDeAppService.getAppService(PMPAppService.class);
planoModeloService = FabricaDeAppService.getAppService(PlanoModeloAppService.class);
hpService = FabricaDeAppService.getAppService(HPAppService.class);
parametrosService = FabricaDeAppService.getAppService(ParametrosAppService.class);
excecaoMensService =FabricaDeAppService.getAppService(ExcecaoMensAppService.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public String copiarPlano() {
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
cadPlanCopiado = new CadPlan();
opcaoEscolhida = OPCAO_COPIA_CADPLAN;
return PAGINA_NEW;
}
public String ajustarPlano(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
return PAGINA_LIST_PLPERMOD;
}
public String gerarExcecaoMens(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
//executar service de excecaoMens para gerar as msgs de excecao
try {
excecaoMensService.gerarMensagensExcecao(cadPlanCorrente);
} catch (AplicacaoException e) {
error(e.getMessage());
}
opcaoEscolhida = OPCAO_GERAR_EXCECAO;
return PAGINA_LIST_EXCECAOMENS;
}
public String mostrarExcecaoMens(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
opcaoEscolhida = OPCAO_MOSTRAR_EXCECAO;
return PAGINA_LIST_EXCECAOMENS;
}
public String detalhar(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
//caso n�o seja um cadplan com escore calculado.
if(!cadPlanCorrente.getEscoreCalculado()){
error("cadplan.NAO_CALCULADO");
return PAGINA_LIST_AVALIACAOFUZZY;
}
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
return PAGINA_DETALHAR_AVALIACAOFUZZY;
}
public String implementaPlanoMestre(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try{
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModelo(cadPlanCorrente.getCodPlan());
}
catch(ObjetoNaoEncontradoException e){
error("cadPlan.CADPLAN_NAO_ENCONTRADO");
}
try{
pmpService.implementaPlanoMestre(cadPlanCorrente);
}
catch(AplicacaoException e){
error(e.getMessage());
return PAGINA_LIST;
}
return PAGINA_LIST_PMP;
}
public String preparaInclusao() {
List<HP> hpList = hpService.recuperaListaDeHP();
if (hpList.isEmpty()){
error("hp.NAO_CADASTRADO");
return PAGINA_LIST;
}
Parametros parametro = parametrosService.recuperaListaDeParametros().get(0);
if (!parametro.isInicPlanejamento()){
error("parametros.PLANEJAMENTO_NAO_INCIALIZADO");
return PAGINA_LIST;
}
try {
modeloService.recuperaListaDeModelos();
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_LIST;
}
cadPlanCorrente = new CadPlan();
opcaoEscolhida = OPCAO_NOVO_CADPLAN;
return PAGINA_NEW;
}
public String preparaCalcularEscores(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
FINALIDADE_MODELAGEM = "Avaliar PMP";
List<ModelagemFuzzy> modelagemFuzzys = modelagemFuzzyService.recuperaListaPaginadaDeModelagemFuzzysPorFinalidade(FINALIDADE_MODELAGEM);
if (modelagemFuzzys.isEmpty()){
error("avaliacaoFuzzy.MODELAGEM_NAO_CADASTRADA");
return PAGINA_LIST_AVALIACAOFUZZY;
}
comboModelagensFuzzy=null;
return PAGINA_SELECMODEL_AVALIACAOFUZZY;
}
public String calcularEscores(){
ModelagemFuzzy modelagemFuzzyCorrente = comboModelagensFuzzy.getObjetoSelecionado();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModeloEPlPerMods(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
try {
List<PlanoModelo> planosModelos = cadPlanService.converteSetPlanoModelosParaListaPlanoModelos(cadPlanCorrente);
cadPlanService.calcularEscores(cadPlanCorrente,modelagemFuzzyCorrente.getNomeArquivo(),planosModelos);
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_LIST_AVALIACAOFUZZY;
}
listaCadPlan = null;
return PAGINA_LIST_AVALIACAOFUZZY;
}
public String preparaInclusaoFuzzy() {
List<HP> hpList = hpService.recuperaListaDeHP();
if (hpList.isEmpty()){
error("hp.NAO_CADASTRADO");
return PAGINA_LIST;
}
FINALIDADE_MODELAGEM = "Gerar PMP";
List<ModelagemFuzzy> modelagemFuzzys = modelagemFuzzyService.recuperaListaPaginadaDeModelagemFuzzysPorFinalidade(FINALIDADE_MODELAGEM);
if (modelagemFuzzys.isEmpty()){
error("modelagemFuzzy.NAO_CADASTRADA");
return PAGINA_LIST;
}
try {
modeloService.recuperaListaDeModelos();
} catch (AplicacaoException e) {
error(e.getMessage());
return PAGINA_LIST;
}
cadPlanCorrente = new CadPlan();
opcaoEscolhida = OPCAO_NOVO_CADPLAN_FUZZY;
comboModelagensFuzzy=null;
return PAGINA_NEW_FUZZY;
}
public String inclui(){
try {
if (opcaoEscolhida == OPCAO_COPIA_CADPLAN){
cadPlanCopiado.setCodPlan(codPlanCorrente);
cadPlanCopiado.setDescrPlan(descrPlanCorrente);
cadPlanCopiado.setUsuario(sessaoUsuarioCorrente.getUsuarioLogado());
cadPlanService.copiarPlano(cadPlanCorrente, cadPlanCopiado);
} else if(opcaoEscolhida == OPCAO_NOVO_CADPLAN){
cadPlanCorrente.setCodPlan(codPlanCorrente);
cadPlanCorrente.setDescrPlan(descrPlanCorrente);
cadPlanCorrente.setUsuario(sessaoUsuarioCorrente.getUsuarioLogado());
cadPlanService.inclui(cadPlanCorrente);
}
else if(opcaoEscolhida == OPCAO_NOVO_CADPLAN_FUZZY) {
cadPlanCorrente.setUsuario(sessaoUsuarioCorrente.getUsuarioLogado());
cadPlanCorrente.setModelagemFuzzy(comboModelagensFuzzy.getObjetoSelecionado());
cadPlanService.incluiPMPFuzzy(cadPlanCorrente);
}
} catch (AplicacaoException e) {
error(e.getMessage());
if(opcaoEscolhida == OPCAO_NOVO_CADPLAN_FUZZY){
return preparaInclusaoFuzzy();
}else{
return preparaInclusao();
}
}
info("cadplan.SUCESSO_INCLUSAO");
listaCadPlan = null;
codPlanCorrente = null;
descrPlanCorrente = null;
return PAGINA_LIST;
}
public String preparaAlteracao(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
return PAGINA_EDIT;
}
public String altera() {
cadPlanService.altera(cadPlanCorrente);
info("cadplan.SUCESSO_ALTERACAO");
return PAGINA_LIST;
}
public String mostra(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
return PAGINA_SHOW;
}
public void preparaExclusao(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
}
public String exclui(){
try {
cadPlanService.exclui(cadPlanCorrente);
} catch (AplicacaoException ex) {
error(ex.getMessage());
return PAGINA_LIST;
}
info("cadplan.SUCESSO_EXCLUSAO");
listaCadPlan = null;
return PAGINA_LIST;
}
public String cancelar() {
listaCadPlan = null;
return PAGINA_LIST;
}
public String cancelarAvaliacaoFuzzy() {
listaCadPlan = null;
return PAGINA_LIST_AVALIACAOFUZZY;
}
public void imprimir(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try{
CadPlan cadplan = cadPlanService.recuperaCadPlanApenasComPlanosModelo(cadPlanCorrente.getCodPlan());
if(cadplan.getPlanosModelo().size()==0 || cadplan==null){
throw new AplicacaoException();
}
//cadPlanService.
plPerModService.gerarRelatorioAgregado(cadplan);
} catch (AplicacaoException re){
error("cadplan.NAO_ENCONTRADO");//Nao existem planos associados a este cadastro de planos.
}
}
@SuppressWarnings("unchecked")
public String totalizarPlano(){
cadPlanCorrente = (CadPlan) listaCadPlan.getRowData();
try {
cadPlanCorrente = cadPlanService.recuperaCadPlanComPlanosModeloEPlPerMods(cadPlanCorrente.getCodPlan());
} catch (ObjetoNaoEncontradoException e) {
}
pagina = ((List<CadPlan>) listaCadPlan.getWrappedData()).indexOf(cadPlanCorrente) + 1;
listaPlPerModAgregado = new ListDataModel(plPerModService.recuperaListaPlPerModAgregadoPorCadPlan(cadPlanCorrente));
renderizarTotalizacao = true;
return PAGINA_LIST;
}
public void atualizarPlanos(){
renderizarTotalizacao = false;
}
public String actionAjax(ActionEvent ev){
System.out.println("---------------------------------------------------------------------");
Map atributosDoRequest = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
Set<String> teste = atributosDoRequest.keySet();
for (String chave : teste) {
System.out.println("chave: "+chave+" | valor: "+atributosDoRequest.get(chave));
}
AjaxContext ajaxContext = (AjaxContext)atributosDoRequest.get("ajaxContext");
Map atribAjax = ajaxContext.getResponseDataMap();
System.out.println(" <<<<<<<< TESTE AJAX - Walanem >>>>>>>>> ");
Object atributosAjax = ajaxContext.getResponseData();
String areaSubmitada = ajaxContext.getSubmittedRegionClientId();
System.out.println("AREA SUBMITADA VIA AJAX = " + areaSubmitada);
System.out.println(" <<<<<<<< FIM - TESTE AJAX - Walanem >>>>>>>>> ");
Set<String> key = atribAjax.keySet();
System.out.println("ATRIBUTOS DO AJAX");
for (String string : key) {
System.out.println("chave: "+string+" | valor: "+atribAjax.get(string));
}
System.out.println("---------------------------------------------------------------------");
return PAGINA_LIST;
}
public void geraRelatorioPdf(){
throw new NotImplementedException();
}
// ================================== M�todos get() e set() ================================== //
public DataModel getListaCadPlan() {
if (listaCadPlan == null){
listaCadPlan = new ListDataModel(cadPlanService.recuperaListaDeCadPlanPorUsuario(sessaoUsuarioCorrente.getUsuarioLogado()));
}
return listaCadPlan;
}
public CadPlan getCadPlanCorrente() {
return cadPlanCorrente;
}
public void setListaCadPlan(DataModel listaCadPlan) {
this.listaCadPlan = listaCadPlan;
}
public void setCadPlanCorrente(CadPlan cadPlanCorrente) {
this.cadPlanCorrente = cadPlanCorrente;
}
public void setPagina(int pagina) {
this.pagina = pagina;
}
public int getPagina() {
return pagina;
}
public void setListaPlPerModAgregado(DataModel listaPlPerModAgregado) {
this.listaPlPerModAgregado = listaPlPerModAgregado;
}
public DataModel getListaPlPerModAgregado() {
return listaPlPerModAgregado;
}
public void setRenderizarTotalizacao(boolean renderizarTotalizacao) {
this.renderizarTotalizacao = renderizarTotalizacao;
}
public boolean isRenderizarTotalizacao() {
return renderizarTotalizacao;
}
public void setOpcaoEscolhida(int opcaoEscolhida) {
this.opcaoEscolhida = opcaoEscolhida;
}
public int getOpcaoEscolhida() {
return opcaoEscolhida;
}
public String getCodPlanCorrente() {
return codPlanCorrente;
}
public String getDescrPlanCorrente() {
return descrPlanCorrente;
}
public void setCodPlanCorrente(String codPlanCorrente) {
this.codPlanCorrente = codPlanCorrente;
}
public void setDescrPlanCorrente(String descrPlanCorrente) {
this.descrPlanCorrente = descrPlanCorrente;
}
/**
* M�todo que cria a Combobox que lista as ModelagemFuzzy cadastradas no sistema.
*
* @author felipe.arruda
*/
public SelectOneDataModel<ModelagemFuzzy> getComboModelagensFuzzy() {
if (comboModelagensFuzzy == null){
comboModelagensFuzzy = SelectOneDataModel.criaSemTextoInicial(modelagemFuzzyService.recuperaListaPaginadaDeModelagemFuzzysPorFinalidade(FINALIDADE_MODELAGEM));
}
return comboModelagensFuzzy;
}
public void setComboModelagensFuzzy(SelectOneDataModel<ModelagemFuzzy> comboModelagensFuzzy) {
this.comboModelagensFuzzy = comboModelagensFuzzy;
}
public static String getFINALIDADE_MODELAGEM() {
return FINALIDADE_MODELAGEM;
}
public static void setFINALIDADE_MODELAGEM(String fINALIDADEMODELAGEM) {
FINALIDADE_MODELAGEM = fINALIDADEMODELAGEM;
}
}