terça-feira, 11 de setembro de 2018

Eventos - Parte 5/5

Introdução

Nesse post vou mostrar algumas maneiras de interceptar os ações nas Actions (lista e dados). Não são necessariamente eventos, são implementações de métodos informando via anotação o momento que serão chamados, causando o mesmo efeito de um evento.

Vamos começar pelo action de lista, uma vez que a action de lista que faz a chamada a tela de dados.

@JArchCrudListBeforeCallInsert

Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão incluir da tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@JArchViewScoped
public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> {

 @Inject
 private UserInformation userInformation;

 @Override
 public String getPageData() {
  return "dadosBanco.jsf";
 }

 @JArchCrudListBeforeCallInsert
 public void antesInclusao() {
  if (!userInformation.get(UsuarioEntity.class).isMaster()) {
   throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil"));
  }
 }
}

Observe que a assinatura desse método não recebe nenhum parâmetro. Desse tipo de evento somente esse método não recebe a entidade por parâmetro.

@JArchCrudListBeforeCallChange

Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão alterar da tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@JArchViewScoped
public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> {

 @Inject
 private UserInformation userInformation;

 @Override
 public String getPageData() {
  return "dadosBanco.jsf";
 }

 @JArchCrudListBeforeCallChange
 public void antesAlteracao(BancoEntity banco) {
  if (!userInformation.get(UsuarioEntity.class).isMaster()) {
   throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil"));
  }
 }
}

Observe que a assinatura desse método recebe a entidade por parâmetro. Com exceção do @ArchCrudListBeforeCallInsert todos os demais recebem ese mesmo parâmetro.

@JArchCrudListBeforeCallClone

Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão clonar da tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@JArchViewScoped
public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> {

 @Inject
 private UserInformation userInformation;

 @Override
 public String getPageData(BancoEntity banco) {
  return "dadosBanco.jsf";
 }

 @JArchCrudListBeforeCallClone
 public void antesClonagem() {
  if (!userInformation.get(UsuarioEntity.class).isMaster()) {
   throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil"));
  }
 }
}

@JArchCrudListBeforeCallConsult

Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão consultar da tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@JArchViewScoped
public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> {

 @Inject
 private UserInformation userInformation;

 @Override
 public String getPageData() {
  return "dadosBanco.jsf";
 }

 @JArchCrudListBeforeCallConsult
 public void antesConsultar(BancoEntity banco) {
  if (!userInformation.get(UsuarioEntity.class).isMaster()) {
   throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil"));
  }
 }
}

@JArchCrudListBeforeCallDelete

Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão excluir da tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
@JArchViewScoped
public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> {

 @Inject
 private UserInformation userInformation;

 @Override
 public String getPageData() {
  return "dadosBanco.jsf";
 }

 @JArchCrudListBeforeCallDelete
 public void antesExcluir(BancoEntity banco) {
  if (!userInformation.get(UsuarioEntity.class).isMaster()) {
   throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil"));
  }
 }
}

Agora veremos os eventos que podem ser implementados na action de dados.

@JArchCrudDataStartEnviromentInsert

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de incluir na tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataStartEnviromentInsert
 public void iniciaModoInclusao() {
  getEntity().setCodigo("XXX");
  getEntity().setCodigo("Entre com o nome do banco");
 }
}

@JArchCrudDataStartEnviromentClone

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de clonar na tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataStartEnviromentClone
 public void iniciaModoClonagem() {
  getEntity().setCodigo("CLONE");
  getEntity().setNome("Nome do banco clonado");
 }
}

@JArchCrudDataStartEnviromentChange

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de alterar na tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@ArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataStartEnviromentChange
 public void iniciaModoAlteracao() {
  // Carregar componentes visuais para visualização  
 }
}

@JArchCrudDataStartEnviromentConsult

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de consultar na tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataStartEnviromentConsult
 public void iniciaModoConsulta() {
  // Carregar componentes visuais para visualização
 }
}

@JArchCrudDataStartEnviromentDelete

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de excluir na tela de lista.
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataStartEnviromentDelete
 public void iniciaModoExclusao() {
  // Carregar componentes visuais para visualização
 }
}

Existe mais dois eventos que podem ser interceptados, mas que são em um outro momento dentro da tela dados.

@JArchCrudDataBeforeSave

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento do click de confirmação na tela de dados mas antes de efetivar a gravação dos dados. 
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @JArchCrudDataBeforeSave
 public void antesSalvar() {
  // Ajusta dados conforme seleção dos componentes visuais
 }
}

@JArchCrudDataAfterSave

Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento do click de confirmação na tela de dados mas após a efetivar a gravação dos dados. 
Segue um exemplo abaixo:
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
@JArchViewScoped
public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> {

 @Override
 public String getPageList() {
  return "listaBanco.jsf";
 }

 @ArchCrudDataAfterSave
 public void depoisSalvar() {
  // Ajusta dados conforme seleção dos componentes visuais
 }
}

Conclusão

Finalizamos os posts relacionados a eventos, conforme visto nos posts anteriores existem diversos tipos de eventos no framework. Esses eventos são de grande importância para manter o código com baixo acoplamento e coeso.

Até mais,

Nenhum comentário:

Postar um comentário

Versão 23.3.0-Final

      Introdução Nesse post vou mostrar as principais novidades da versão 23.3.0, algumas correções e pequenas alterações. Alterações Além d...