/**
  * Faz um teste com a conexão de dados do hibernate. Caso ocorra algum problema, exibe uma tela
  * relatando o mesmo e sai da aplicação.
  */
 public void testarConexao() {
   logger.debug("Inicializando teste de conexão com a base de dados...");
   try {
     BaseDispatchCommand comandoTestarConexao = new CommandTestarConexao();
     comandoTestarConexao.setStrMetodo(CommandTestarConexao.METODO_TESTAR_CONEXAO);
     (new Thread() {
           public void run() {
             try {
               sleep(120000);
               if (!conexaoOK) {
                 JOptionPane.showMessageDialog(
                     FrmTesteConexao.this,
                     "Não foi possível estabelecer a conexão com a base de dados!"
                         + System.getProperty("line.separator")
                         + "Verifique o arquivo de configuração e tente novamente.",
                     "Erro",
                     JOptionPane.ERROR_MESSAGE);
                 FrmTesteConexao.this.dispose();
                 AppStart.main(new String[] {});
               }
             } catch (Exception e) {
               e.printStackTrace();
             }
           }
         })
         .start();
     comandoTestarConexao.executar(new Object[0]);
     conexaoOK = true;
     logger.debug("Teste de conexão com a base de dados realizado com sucesso...");
     File arquivoSetupRealizado = new File(System.getProperty("user.home"), "dnsec-check-bd.tmp");
     if (!arquivoSetupRealizado.exists()) {
       logger.debug("Verificando existência de dados na base de dados...");
       BaseDispatchCommand commandLogin = CommandFactory.getCommand(CommandFactory.COMMAND_LOGIN);
       commandLogin.setStrMetodo("setupBancoDados");
       commandLogin.executar(null);
       arquivoSetupRealizado.createNewFile();
       logger.debug("verificação ok...");
     } else {
       logger.debug("Verificação de dados na base não necessária...");
     }
   } catch (CommandException commandException) {
     new BaseJInternalFrame().tratarMensagemErro(commandException);
     logger.fatal("Não é possível estabelecer aconexão com a base de dados " + commandException);
     System.exit(1);
   } catch (Throwable exception) {
     // Erro fatal durante a inicialização
     String msgErroPadrao = RecursosUtil.getInstance().getResource("key.erro.inicializacao.app");
     exception.printStackTrace();
     CharArrayWriter arrayMsg = new CharArrayWriter();
     PrintWriter printWriter = new PrintWriter(arrayMsg);
     exception.printStackTrace(printWriter);
     String msgErroEspecifico = arrayMsg.toString();
     JOptionPane.showMessageDialog(
         this,
         msgErroPadrao + System.getProperty("line.separator") + msgErroEspecifico,
         RecursosUtil.getInstance().getResource("key.jpanelmanutencao.erro.titulo.janela"),
         JOptionPane.ERROR_MESSAGE);
     System.exit(1);
   }
 }
Exemple #2
0
public class FrmFuncoes extends BaseJInternalFrame
    implements ActionListener, PesquisaFuncaoListener, PesquisaSistemaListener {

  private JPanelBotoesManutencao jPanelBotoesManutencao;
  private BaseJButton cmdSair;

  private BaseJLabel lblSistema;
  private BaseJLabel lblSistemaSelecionado;
  private BaseJLabel lblSistemaPai;
  private BaseJLabel lblSistemaPaiSelecionado;
  private BaseJLabel lblFuncaoPai;
  private BaseJLabel lblFuncaoPaiSelecionada;
  private BaseJLabel lblCodigo;
  private BaseJLabel lblNome;
  private BaseJLabel lblDescricao;

  private BaseJButton cmdPesquisaSistema;
  private BaseJButton cmdPesquisaSistemaPai;
  private BaseJButton cmdPesquisaFuncaoPai;
  private BaseJButton cmdConfirmarOperacao;
  private BaseJButton cmdConfirmarCancelarOperacao;

  private BaseJFormattedTextField txtCodigoFuncao;
  private BaseJTextBox txtNomeFuncao;
  private BaseJTextArea txtDescricaoFuncao;

  /**
   * Como o popup de seleção de sistema é chamado duas vezes (uma para a seleção do sistema e outra
   * para a seleção do sistema pai) é necessária uma forma de saber por qual botão a tela foi
   * chamada. As variáveis abaixo são utilizadas nesta situação.
   */
  private int TIPO_SELECAO_SISTEMA_PAI = 0;

  private int TIPO_SELECAO_SISTEMA = 1;
  private int TIPO_SELECAO_SISTEMA_ATUAL = -1;

  /** Command para funções */
  private BaseDispatchCRUDCommand baseDispatchCRUDCommand =
      CommandFactory.getCommand(CommandFactory.COMMAND_FUNCOES);

  /** Vos que encapsulam os dados da tela */
  private FuncaoTelaVo funcaoTelaVo = new FuncaoTelaVo();

  private String strMetodoCommand = "";

  /** Retorna os dados da tela encapsulados num vo */
  public FuncaoTelaVo getTelaVo() {
    try {
      funcaoTelaVo
          .getFuncao()
          .getCompId()
          .setCodFuncaoFunc(new Long(this.txtCodigoFuncao.getText().trim()));
    } catch (NumberFormatException e) {
      funcaoTelaVo.getFuncao().getCompId().setCodFuncaoFunc(null);
    }
    funcaoTelaVo.getFuncao().setNomeFunc(this.txtNomeFuncao.getText());
    funcaoTelaVo.getFuncao().setDescrFuncaoFunc(this.txtDescricaoFuncao.getText());
    return this.funcaoTelaVo;
  }

  /** Substitui os dados da tela pelos dados do vo */
  public void setTelaVo(FuncaoTelaVo funcaoTelaVo) {
    if (funcaoTelaVo.getFuncao() != null) {

      cmdPesquisaSistema.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));
      cmdPesquisaSistemaPai.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));
      cmdPesquisaFuncaoPai.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));

      lblSistemaSelecionado.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));

      lblSistemaPaiSelecionado.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));

      lblFuncaoPaiSelecionada.setText(
          RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionada"));

      this.funcaoTelaVo = funcaoTelaVo;

      if (!""
          .equals(
              StringUtil.NullToStrTrim(funcaoTelaVo.getFuncao().getCompId().getCodSistemaSist()))) {
        cmdPesquisaSistema.setText(
            RecursosUtil.getInstance()
                .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"));
        lblSistemaSelecionado.setText(funcaoTelaVo.getFuncao().getCompId().getCodSistemaSist());
      }

      if (!"".equals(StringUtil.NullToStrTrim(funcaoTelaVo.getFuncao().getCodSistemaPaiFunc()))) {
        cmdPesquisaSistemaPai.setText(
            RecursosUtil.getInstance()
                .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"));
        this.lblSistemaPaiSelecionado.setText(funcaoTelaVo.getFuncao().getCodSistemaPaiFunc());
      }

      // Dados da função pai
      if (funcaoTelaVo.getFuncao().getFuncaoPai() != null) {
        cmdPesquisaFuncaoPai.setText(
            RecursosUtil.getInstance()
                .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"));
        this.lblFuncaoPaiSelecionada.setText(
            funcaoTelaVo.getFuncao().getFuncaoPai().getCompId().getCodFuncaoFunc()
                + " - "
                + funcaoTelaVo.getFuncao().getFuncaoPai().getNomeFunc());
      }

      if (funcaoTelaVo.getFuncao().getCompId().getCodFuncaoFunc() != null) {
        this.txtCodigoFuncao.setText("" + funcaoTelaVo.getFuncao().getCompId().getCodFuncaoFunc());
      } else {
        this.txtCodigoFuncao.setText("");
      }
      this.txtNomeFuncao.setText(funcaoTelaVo.getFuncao().getNomeFunc());
      this.txtDescricaoFuncao.setText(funcaoTelaVo.getFuncao().getDescrFuncaoFunc());
    }
  }

  public FrmFuncoes() {
    super();
    this.inicializarMaximizado = false;
    setFrameIcon(GerenciadorJanelas.ICONE_FUNCAO_PEQUENO);
    this.inicializarComponentes();
    this.setTitle(RecursosUtil.getInstance().getResource("key.cadastro.funcoes.titulo.janela"));
  }

  public void atualizarEstado() {
    FrmFuncoes.this.strMetodoCommand = baseDispatchCRUDCommand.getStrMetodo();
    ActionEvent evt = new ActionEvent(new BaseJButton(), 0, "");
    FrmFuncoes.this.actionPerformed(evt);
    FrmFuncoes.this.txtCodigoFuncao.setEnabled(true);
    FrmFuncoes.this.txtNomeFuncao.setEnabled(true);
    FrmFuncoes.this.cmdPesquisaSistema.setEnabled(true);
    FrmFuncoes.this.cmdPesquisaSistemaPai.setEnabled(true);
    FrmFuncoes.this.cmdPesquisaFuncaoPai.setEnabled(true);

    // Se estiver editando o registro, não pode alterar a chave primária
    if (BaseDispatchCRUDCommand.METODO_PREPARAR_EDICAO.equals(
        baseDispatchCRUDCommand.getStrMetodo())) {
      FrmFuncoes.this.txtCodigoFuncao.setEnabled(false);
      FrmFuncoes.this.cmdPesquisaSistema.setEnabled(false);
      FrmFuncoes.this.cmdPesquisaSistemaPai.setEnabled(false);
      FrmFuncoes.this.cmdPesquisaFuncaoPai.setEnabled(false);

      // Se for uma função pré-definida pelko sistema de segurança o nome não pode ser alterado
      Funcao funcao = getTelaVo().getFuncao();
      if ((funcao.getNomeFunc().equals(Constantes.FUNC_SEC_INC_SISTEMA)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_SISTEMA)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_EXC_SISTEMA)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_INC_USUARIO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_USUARIO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_EXC_USUARIO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_INC_GRUPO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_GRUPO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_EXC_GRUPO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_INC_FUNCAO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_FUNCAO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_EXC_FUNCAO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_REL_SISTEMA)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_REL_USUARIO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_REL_GRUPO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_SEC_ALT_REL_FUNCAO)
              || funcao.getNomeFunc().equals(Constantes.FUNC_ACESSO_TODOS_GRUPOS)
              || funcao.getNomeFunc().equals(Constantes.FUNC_ACESSO_TODOS_USUARIOS)
              || funcao.getNomeFunc().equals(Constantes.FUNC_ACESSO_TODAS_FUNCOES)
              || funcao.getNomeFunc().equals(Constantes.FUNC_ACESSO_TODOS_SISTEMAS))
          && Constantes.COD_SIST_ADM.equals(funcao.getCompId().getCodSistemaSist())) {
        FrmFuncoes.this.txtNomeFuncao.setEnabled(false);
      }
    }
    centralizarJanela();
  }

  public void inicializarComponentes() {
    GridBagLayout gridBagLayout = new GridBagLayout();
    GridBagConstraints constraints = new GridBagConstraints();
    getContentPane().setLayout(gridBagLayout);
    jPanelBotoesManutencao = new JPanelBotoesManutencao(this);
    cmdSair =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.grupos.label.botao.sair"));

    int linhaAtual = 0;

    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblSistema =
        new BaseJLabel(RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.sistema"));
    getContentPane().add(lblSistema, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblSistemaSelecionado =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));
    lblSistemaSelecionado.setForeground(Color.BLUE);
    getContentPane().add(lblSistemaSelecionado, constraints);

    constraints.gridx = 2;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.EAST;
    constraints.insets = new Insets(2, 2, 2, 2);
    cmdPesquisaSistema =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"),
            GerenciadorJanelas.ICONE_SISTEMA_PEQUENO);
    getContentPane().add(cmdPesquisaSistema, constraints);

    linhaAtual++;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblSistemaPai =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.sistema.pai"));
    getContentPane().add(lblSistemaPai, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblSistemaPaiSelecionado =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));
    lblSistemaPaiSelecionado.setForeground(Color.BLUE);
    getContentPane().add(lblSistemaPaiSelecionado, constraints);

    constraints.gridx = 2;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.EAST;
    constraints.insets = new Insets(2, 2, 2, 2);
    cmdPesquisaSistemaPai =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"),
            GerenciadorJanelas.ICONE_SISTEMA_PEQUENO);
    getContentPane().add(cmdPesquisaSistemaPai, constraints);

    linhaAtual++;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblFuncaoPai =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.funcao.pai"));
    getContentPane().add(lblFuncaoPai, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblFuncaoPaiSelecionada =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionada"));
    lblFuncaoPaiSelecionada.setForeground(Color.BLUE);
    getContentPane().add(lblFuncaoPaiSelecionada, constraints);

    constraints.gridx = 2;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.CENTER;
    constraints.anchor = GridBagConstraints.EAST;
    constraints.insets = new Insets(2, 2, 2, 2);
    cmdPesquisaFuncaoPai =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"),
            GerenciadorJanelas.ICONE_FUNCAO_PEQUENO);
    getContentPane().add(cmdPesquisaFuncaoPai, constraints);

    linhaAtual++;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblCodigo =
        new BaseJLabel(RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.codigo"));
    getContentPane().add(lblCodigo, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 10;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 2;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    // constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    /*try {
    	txtCodigoFuncao = new BaseJFormattedTextField(new MaskFormatter("#####"));
    } catch (ParseException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    }*/
    NumberFormat nf = NumberFormat.getIntegerInstance();
    nf.setGroupingUsed(false);
    txtCodigoFuncao = new BaseJFormattedTextField(nf);
    // txtCodigoFuncao.setValue(new Long(1));
    getContentPane().add(txtCodigoFuncao, constraints);

    linhaAtual++;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblNome =
        new BaseJLabel(RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nome"));
    getContentPane().add(lblNome, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 10;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 2;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    // constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    txtNomeFuncao = new BaseJTextBox();
    txtNomeFuncao.setTamanhoMaximo(30);
    txtNomeFuncao.setExibirMaiuscula(false);
    getContentPane().add(txtNomeFuncao, constraints);

    linhaAtual++;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 100;
    constraints.weighty = 0;
    constraints.gridheight = 1;
    constraints.gridwidth = 1;
    constraints.fill = GridBagConstraints.NONE;
    constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    lblDescricao =
        new BaseJLabel(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.descricao"));
    getContentPane().add(lblDescricao, constraints);

    constraints.gridx = 1;
    constraints.gridy = linhaAtual;
    constraints.weightx = 0;
    constraints.weighty = 100;
    constraints.gridheight = 5;
    constraints.gridwidth = 2;
    constraints.fill = GridBagConstraints.BOTH;
    // constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    txtDescricaoFuncao = new BaseJTextArea(4, 20);
    txtDescricaoFuncao.setTamanhoMaximo(60);
    JScrollPane paneDescricao = new JScrollPane(txtDescricaoFuncao);
    getContentPane().add(paneDescricao, constraints);

    JPanel painelBotoes = new JPanel();
    cmdConfirmarOperacao =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.confirmar"),
            GerenciadorJanelas.ICONE_BOTAO_CONFIRMAR);
    cmdConfirmarCancelarOperacao =
        new BaseJButton(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.cancelar"),
            GerenciadorJanelas.ICONE_BOTAO_CANCELAR);
    painelBotoes.add(cmdConfirmarOperacao);
    painelBotoes.add(cmdConfirmarCancelarOperacao);

    linhaAtual += 5;
    constraints.gridx = 0;
    constraints.gridy = linhaAtual;
    constraints.weightx = 10;
    constraints.weighty = 0;
    constraints.gridheight = 2;
    constraints.gridwidth = 3;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    // constraints.anchor = GridBagConstraints.WEST;
    constraints.insets = new Insets(2, 2, 2, 2);
    getContentPane().add(painelBotoes, constraints);

    cmdPesquisaSistema.addActionListener(this);
    cmdPesquisaSistemaPai.addActionListener(this);
    cmdPesquisaFuncaoPai.addActionListener(this);
    cmdConfirmarOperacao.addActionListener(this);
    cmdConfirmarCancelarOperacao.addActionListener(this);

    pack();
  }

  public void desabilitarBotoes() {
    this.cmdConfirmarCancelarOperacao.setEnabled(false);
    this.cmdConfirmarOperacao.setEnabled(false);
    this.cmdPesquisaFuncaoPai.setEnabled(false);
    this.cmdPesquisaSistema.setEnabled(false);
    this.cmdPesquisaSistemaPai.setEnabled(false);
  }

  public boolean exibirMsgConfirmacao(String strMetodo) {
    if (BaseDispatchCRUDCommand.METODO_CONFIRMAR_INCLUSAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())
        || BaseDispatchCRUDCommand.METODO_CONFIRMAR_EDICAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())) {

      return true;
    }
    return false;
  }

  public boolean atualizarDadosTela(String strMetodo) {
    if (BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())
        || BaseDispatchCRUDCommand.METODO_PREPARAR_EDICAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())) {

      return true;
    }
    return false;
  }

  public void atualizarStatusBotoesManutencao(String strMetodo) {
    this.cmdConfirmarCancelarOperacao.setEnabled(true);
    this.cmdConfirmarOperacao.setEnabled(true);
    this.cmdPesquisaFuncaoPai.setEnabled(true);
    this.cmdPesquisaSistema.setEnabled(true);
    this.cmdPesquisaSistemaPai.setEnabled(true);
  }

  public void actionPerformed(ActionEvent e) {
    Object[] args = new Object[] {this.getTelaVo().getFuncao()};

    this.baseDispatchCRUDCommand.setStrMetodo(this.strMetodoCommand);

    if (e.getSource() == cmdConfirmarCancelarOperacao) {
      /** Fecha a janela e retorna para a tela de pesquisa */
      GerenciadorJanelas.getInstance().getAcaoCadastroFuncoes(getParent()).actionPerformed(e);
      // GerenciadorJanelas.removePesquisaFuncaoListener(this);
      // GerenciadorJanelas.removePesquisaSistemaListener(this);
      this.setVisible(false);
      return;
    }

    if (e.getSource() == this.cmdConfirmarOperacao) {
      if ((BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO.equals(
          baseDispatchCRUDCommand.getStrMetodo()))) {
        baseDispatchCRUDCommand.setMetodoAnterior(BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO);
        baseDispatchCRUDCommand.setStrMetodo(BaseDispatchCRUDCommand.METODO_CONFIRMAR_INCLUSAO);
        args = new Object[] {this.getTelaVo().getFuncao()};
      } else {
        if (BaseDispatchCRUDCommand.METODO_PREPARAR_EDICAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())) {
          baseDispatchCRUDCommand.setMetodoAnterior(BaseDispatchCRUDCommand.METODO_PREPARAR_EDICAO);
          baseDispatchCRUDCommand.setStrMetodo(BaseDispatchCRUDCommand.METODO_CONFIRMAR_EDICAO);
          args = new Object[] {this.getTelaVo().getFuncao()};
        } else {
          // Botão não deveria estar habilitado!
        }
      }
    }

    /*Botões de pesquisa de sistemas*/
    if (e.getSource() == cmdPesquisaSistema || e.getSource() == cmdPesquisaSistemaPai) {
      if (e.getSource() == cmdPesquisaSistema) {
        if (cmdPesquisaSistema
            .getText()
            .equals(
                RecursosUtil.getInstance()
                    .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"))) {
          // Cancelando o sistema selecionado
          this.TIPO_SELECAO_SISTEMA_ATUAL = -1;
          getTelaVo().getFuncao().setSistema(null);
          lblSistemaSelecionado.setText(
              RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));
          cmdPesquisaSistema.setText(
              RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));
          return;
        } else {
          // Pesquisando
          this.TIPO_SELECAO_SISTEMA_ATUAL = this.TIPO_SELECAO_SISTEMA;
        }
      } else {
        if (cmdPesquisaSistemaPai
            .getText()
            .equals(
                RecursosUtil.getInstance()
                    .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"))) {
          // Cancelando o sistema selecionado
          this.TIPO_SELECAO_SISTEMA_ATUAL = -1;
          getTelaVo().getFuncao().setCodSistemaPaiFunc(null);
          lblSistemaPaiSelecionado.setText(
              RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionado"));
          cmdPesquisaSistemaPai.setText(
              RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));
          return;
        } else {
          // Pesquisando
          this.TIPO_SELECAO_SISTEMA_ATUAL = this.TIPO_SELECAO_SISTEMA_PAI;
        }
      }

      /* Abre o popup de pesquisa de sistemas,
       * configurando o listener de retorno como sendo
       * a intância atual
       * */
      List listenersSistemasList = new LinkedList();
      listenersSistemasList.add(this);
      GerenciadorJanelas.getInstance()
          .getAcaoPesquisaSistemas(getParent(), listenersSistemasList, true, false)
          .actionPerformed(e);
      return;
    }

    /*Botões de pesquisa de funções*/
    if (e.getSource() == cmdPesquisaFuncaoPai) {
      if (cmdPesquisaFuncaoPai
          .getText()
          .equals(
              RecursosUtil.getInstance()
                  .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"))) {
        // Cancelando a função pai selecionada
        getTelaVo().getFuncao().setFuncaoPai(null);
        getTelaVo().getFuncao().setCodFuncaoPaiFunc(null);
        lblFuncaoPaiSelecionada.setText(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.nao.selecionada"));
        cmdPesquisaFuncaoPai.setText(
            RecursosUtil.getInstance().getResource("key.cadastro.funcao.label.botao.pesquisar"));
        return;
      }

      /* Abre o popup de pesquisa de funções,
       * configurando o listener de retorno como sendo
       * a intância atual
       * */
      List listenersFuncoesList = new LinkedList();
      listenersFuncoesList.add(this);
      GerenciadorJanelas.getInstance()
          .getAcaoPesquisaFuncoes(getParent(), listenersFuncoesList, Collections.EMPTY_LIST, false)
          .actionPerformed(e);
      return;
    }

    if (baseDispatchCRUDCommand != null) {
      try {
        this.desabilitarBotoes();
        Object objRetorno[] = baseDispatchCRUDCommand.executar(args);

        if (this.exibirMsgConfirmacao(baseDispatchCRUDCommand.getStrMetodo())) {
          JOptionPane.showMessageDialog(
              this,
              RecursosUtil.getInstance()
                  .getResource("key.jpanelmanutencao.action.realizada.com.sucesso"),
              RecursosUtil.getInstance()
                  .getResource("key.jpanelmanutencao.action.realizada.com.sucesso.titulo.janela"),
              JOptionPane.INFORMATION_MESSAGE);
          if (BaseDispatchCRUDCommand.METODO_CONFIRMAR_INCLUSAO.equals(
                  baseDispatchCRUDCommand.getStrMetodo())
              && JOptionPane.showConfirmDialog(
                      this, "Deseja cadastrar mais funções?", "", JOptionPane.YES_NO_OPTION)
                  == JOptionPane.OK_OPTION) {
            baseDispatchCRUDCommand.setStrMetodo(BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO);
            FuncaoTelaVo funcaoTelaVO = getTelaVo();
            funcaoTelaVo.getFuncao().getCompId().setCodFuncaoFunc(null);
            GerenciadorJanelas.getInstance()
                .getAcaoJanelaCadastroFuncoes(
                    getParent(),
                    BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO,
                    getTelaVo().getFuncao())
                .actionPerformed(e);
            return;
          } else {
            this.setVisible(false);
            this.setTelaVo(new FuncaoTelaVo());
            /*Fecha a janela e retorna para a tela de pesquisa*/
            GerenciadorJanelas.getInstance().getAcaoCadastroFuncoes(getParent()).actionPerformed(e);
          }
        }

        if (this.atualizarDadosTela(baseDispatchCRUDCommand.getStrMetodo())) {
          FuncaoTelaVo funcaoTelaVo = new FuncaoTelaVo();
          funcaoTelaVo.setFuncao((Funcao) objRetorno[0]);
          this.setTelaVo(funcaoTelaVo);
          this.cmdPesquisaSistema.requestFocus();
        }

      } catch (CommandException commandException) {
        super.tratarMensagemErro(commandException);
        /*
         * Se estava numa operação de gravação volta para o status anterior
         * */
        if (BaseDispatchCRUDCommand.METODO_CONFIRMAR_INCLUSAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())) {
          baseDispatchCRUDCommand.setStrMetodo(BaseDispatchCRUDCommand.METODO_PREPARAR_INCLUSAO);
          baseDispatchCRUDCommand.setMetodoAnterior("");
        } else if (BaseDispatchCRUDCommand.METODO_CONFIRMAR_EDICAO.equals(
            baseDispatchCRUDCommand.getStrMetodo())) {
          baseDispatchCRUDCommand.setStrMetodo(BaseDispatchCRUDCommand.METODO_PREPARAR_EDICAO);
          baseDispatchCRUDCommand.setMetodoAnterior("");
        }
      }
    } else {
      JOptionPane.showMessageDialog(
          this,
          RecursosUtil.getInstance().getResource("key.jpanelmanutencao.action.nao.conigurada"),
          RecursosUtil.getInstance()
              .getResource("key.jpanelmanutencao.action.nao.conigurada.titulo.janela"),
          JOptionPane.WARNING_MESSAGE);
    }
    this.atualizarStatusBotoesManutencao(baseDispatchCRUDCommand.getStrMetodo());
  }

  /** Callback para a tela de pesquisa de funções Seta no vo a função selecionada atualmente */
  public void funcaoSelecionada(Funcao funcao) {
    this.getTelaVo().getFuncao().setFuncaoPai(funcao);
    this.getTelaVo().getFuncao().setCodFuncaoPaiFunc(funcao.getCompId().getCodFuncaoFunc());
    this.getTelaVo().getFuncao().setCodSistemaPaiFunc(funcao.getCompId().getCodSistemaSist());
    this.getTelaVo().getFuncao().setSistema(funcao.getSistema());
    this.getTelaVo()
        .getFuncao()
        .getCompId()
        .setCodSistemaSist(funcao.getSistema().getCodSistemaSist());
    this.setTelaVo(this.getTelaVo());
  }

  /**
   * Indica para a tela de pesquisa de funções que quando uma função for selecionada a tela de
   * pesquisa deve ser fechada
   */
  public boolean fecharJanelaPesquisaFuncao() {
    return true;
  }

  /**
   * Seta no vo os dados do sistema selecionado e do sistema pai selecionado Callback da janela de
   * pesquisa de sistemas
   */
  public void sistemaSelecionado(Sistema sistema) {
    if (this.TIPO_SELECAO_SISTEMA_ATUAL == TIPO_SELECAO_SISTEMA) {
      getTelaVo().getFuncao().setSistema(sistema);
      getTelaVo().getFuncao().getCompId().setCodSistemaSist(sistema.getCodSistemaSist());
      cmdPesquisaSistema.setText(
          RecursosUtil.getInstance()
              .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"));
      this.lblSistemaSelecionado.setText(sistema.getCodSistemaSist());
    } else if (this.TIPO_SELECAO_SISTEMA_ATUAL == TIPO_SELECAO_SISTEMA_PAI) {
      getTelaVo().getFuncao().setCodSistemaPaiFunc(sistema.getCodSistemaSist());
      cmdPesquisaSistemaPai.setText(
          RecursosUtil.getInstance()
              .getResource("key.cadastro.funcao.label.botao.pesquisar.cancela.pesquisa"));
      this.lblSistemaPaiSelecionado.setText(sistema.getCodSistemaSist());
    }
  }

  public boolean fecharJanelaPesquisaSistema() {
    return true;
  }

  public BaseDispatchCRUDCommand getBaseDispatchCRUDCommand() {
    return baseDispatchCRUDCommand;
  }

  public void setBaseDispatchCRUDCommand(BaseDispatchCRUDCommand baseDispatchCRUDCommand) {
    this.baseDispatchCRUDCommand = baseDispatchCRUDCommand;
  }

  public static void main(String[] args) {
    new FrmFuncoes().show();
  }
}