• Nenhum resultado encontrado

E.2 Grau de severidade

3.15 Classe Controller Noticia

A Figura 3.5 apresenta a UI, gerada pelos códigos 3.14 e 3.15.

Figura 3.5: UIs CRUD notícia com anotações do modelo de apresentação

Os atributos titulo, materia e imagem são do tipo String, mas estão anotados com tipos diferentes de anotações. O atributo titulo foi anotado com o tipo @Html, que permite a modificação de propriedades compartilhadas por todos widgets. Foi atribuído ao elemento displayNameo valor "Título", corrigindo assim, a acentuação do rótulo do

Widget. Também foi aplicado, ao Widget, um texto de ajuda “digite o título”, com o uso do elementoplaceHolder.

O atributo materia foi anotado com o tipo de anotação @Html.TextArea. Quando um atributo é anotado [email protected] UI é apresentado com um editor WYSIWYG (what you see is what you get), o que permite ao usuário aplicar estilos ao texto. Essa configuração pode ser removida, de forma que apenas um elemento TextAreaseja exibido, para isso o elementoeditor, do tipo de anotaçã[email protected], deve estar configurado comfalse.

O atributo imagem foi anotado com o tipo de anotação @Html.Input. Por padrão, todo atributo do tipo String é um elemento Inputdo tipotext. Quando o elemento é ano- tado com @Html.Input é possível alterar o tipo do elemento Input, por meio do ele- mento inputType. No exemplo, foi atribuído ao elemento inputType o enumerador

InputType.FILE, desta forma, o campo será apresentado como um campo de upload, além disso, a UI ao ser gerada estará apta para realizar upload de arquivos. Os arqui-

vos serão armazenados em um diretório do servidor e seu caminho será armazenado no atributo.

O atributodataPublicacaoé do tipoDateque pode ser utilizado, em Java, para armaze- nar data e hora. Sempre que este tipo é utilizado, o padrão JPA exige que seja informado a forma de mapeamento para o banco de dados. É possível mapear o atributo como uma data, uma hora ou como uma data e hora. O mapeamento é realizado com o tipo de anotação @Temporal. O framework ObCrud utiliza essa informação para gerar um widget apropriado para atributo.

3.2.3

Validação de dados

O ObCrud utiliza a Bean Validation API (BERNARD; PETERSON, 2009) para realizar a validação de campos do formulário (widgets). O Código 3.16 apresenta a utilização dos tipos de anotação para validação de dados. A Figura 3.6 apresenta a UI gerada, por meio da classe

Medico, após uma tentativa de cadastro com valores inválidos.

1 @Entity

2 public class Medico {

3

4 @Id

5 @GeneratedValue

6 private Integer idMedico;

7

8 @NotNull

9 private String nome;

10

11 @NotNull

12 @Size(min = 3, message="O número do CRM deve possuir no mínimo 3 dígitos") 13 private String crm; 14 15 @ValidCPF 16 private String cpf; 17 18 //getter e setter 19 20 }

Código 3.16: Classe para validação de dados

Figura 3.6: Exemplo de UIs com validação de dados

A linha 8 utiliza o tipo de anotação@NotNullpara informar que o atributonomenão pode ser nulo, ou seja, seu preenchimento é obrigatório. O atributocrm, linha 13, utiliza os tipos de anotação @NotNull, linha 11, e @Size, linha 12, desta forma o valor do atributo não pode ser nulo e seu comprimento não pode ser inferior a 3 caracteres, conforme definido no elemento min. O elemento message do tipo de anotação @Sizefoi configurado para alterar a mensagem exibida no caso de falha da validação. Por fim, o atributocpfutiliza a anotação@ValidCPF, apresentada no Código 2.28. As anotações@NotNulle@Sizesão tipos incorporados a Bean Validation API, enquanto que a anotação@ValidCPFé um tipo criado pelo usuário.

O ObCrud realiza a validação de dados em dois momentos. No primeiro momento, a validação é realizada no lado cliente (client-side), utilizando os novos recursos do HTML 5. No segundo momento, a validação é realizada no lado do servidor (server-side), neste momento a Bean Validation API é acionada. A Figura 3.6 (a) apresenta a UI para adicionar médico, após a tentativa de salvar o registro sem os campos estarem preenchidos. Neste caso, foi realizada a validação no client-side. Na Figura 3.6 (b) o campo nome havia sido preenchido, ocpfnão estava preenchido e ocrmpossuía apenas um caractere. No segundo foi realizada a validação no server-side.

O HTML 5 não possibilita realizar todos os tipos de validação, por isso a Bean Validator API é essencial. Além disso, o ObCrud, foi projetado para implementar serviços web (RESTful), neste caso, a validação pode ocorrer somente no server-side. A validação no client-side busca reduzir, quando possível, a carga de trabalho do servidor e agilizar o preenchimento dos dados, visto que a validação no client-side é mais rápida do que no server-side.

3.2.4

Geração de UIs com associações entre classes de domínio

Nos exemplos anteriores, as UIs foram geradas a partir de uma única classe do modelo de domínio. No desenvolvimento de sistemas reais é comum a existência de diversas classes inter-associadas. Uma associação de classes, em Java, consiste na definição de um atributo em uma classe, cujo tipo é outra classe. A Figura 3.7 apresenta um diagrama de classes, onde a classeCirurgiaestá associada as classesMedicoePaciente.

A associação apresentada na Figura 3.7 entre a classePacienteeCirurgiaé uma associa- ção de multiplicidade um para muitos, assim em código Java, a classePacientepossuirá uma lista de atributos do tipo Cirurgia, enquanto que a classe Cirurgiapossuirá um atributo do tipoPaciente. O Código 3.17 apresenta a implementação, em Java, da classe

Pacientemostrada na Figura 3.7.

1 @Entity

2 public class Paciente {

3 @Id

4 @GeneratedValue

5 private int idPaciente;

6 private String nome;

7 private String cpf;

8

9 @OneToMany(mappedBy = "paciente", cascade = CascadeType.ALL)

10 private List<Cirurgia> cirurgias = new ArrayList<>();

11 //getter e setter

12 }