ZenContact 5 : Présentation du métier


Cette partie n'est pas liée à Wicket et concerne l'introduction de l'objet métier contact, ainsi que d'une façon de le stocker au niveau de l'application. Cela permettra néanmoins de présenter quelques concepts du framework. Une fois ces éléments stockés en mémoire, nous verrons comment les afficher dans le billet suivant.

L'objet contact, que nous créerons dans le package com.zenika.wicket.modele, aura quatre attributs:

  • Le prénom, de type String
  • Le nom, de type String
  • La date de naissance, de type Date
  • L'email, de type String

Cet objet contact devra implémenter l'interface Serializable et nous lui créerons un constructeur par défaut, ainsi qu'un constructeur prenant en compte les 4 attributs.

  1. package com.zenika.wicket.modele;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Date;
  5.  
  6. public class Contact implements Serializable, Comparable<Contact> {
  7.  
  8. private static final long serialVersionUID = -3554648643802782650L;
  9.  
  10. private String nom;
  11. private String prenom;
  12. private Date dateNaissance;
  13. private String email;
  14.  
  15. public Contact(String prenom, String nom, Date dateNaissance, String email) {
  16. super();
  17. this.dateNaissance = dateNaissance;
  18. this.email = email;
  19. this.nom = nom;
  20. this.prenom = prenom;
  21. }
  22.  
  23. public Contact() {
  24. // TODO Auto-generated constructor stub
  25. }
  26.  
  27. public String getNom() {
  28. return nom;
  29. }
  30.  
  31. public void setNom(String nom) {
  32. this.nom = nom;
  33. }
  34.  
  35. public String getPrenom() {
  36. return prenom;
  37. }
  38.  
  39. public void setPrenom(String prenom) {
  40. this.prenom = prenom;
  41. }
  42.  
  43. public Date getDateNaissance() {
  44. return dateNaissance;
  45. }
  46.  
  47. public void setDateNaissance(Date dateNaissance) {
  48. this.dateNaissance = dateNaissance;
  49. }
  50.  
  51. public String getEmail() {
  52. return email;
  53. }
  54.  
  55. public void setEmail(String email) {
  56. this.email = email;
  57. }
  58.  
  59. public String toString() {
  60. return "Nom : " + nom;
  61. }
  62.  
  63. public int compareTo(Contact contact) {
  64.  
  65. if (this.getNom().equals(contact.getNom())) {
  66. return this.getPrenom().compareTo(contact.getPrenom());
  67. }
  68.  
  69. return this.getNom().compareTo(contact.getNom());
  70. }
  71.  
  72. }

Une fois cet objet contact créé, nous allons prévoir un mécanisme de stockage en mémoire extrêmement simpliste et utiliserons pour se faire la classe ZenContactApplication dont il existe une instance unique pour une application web.

  1. public class ZenContactApplication extends WebApplication {
  2.  
  3. private SortedSet<Contact> contacts = new TreeSet<Contact>();
  4.  
  5. @Override
  6. protected void init() {
  7. contacts.add(new Contact("Nicolas", "Andre", null, null));
  8. contacts.add(new Contact("Carl", "Azoury", null, null));
  9. }
  10.  
  11. @Override
  12. public Class getHomePage() {
  13. return WelcomePage.class;
  14. }
  15.  
  16. public static ZenContactApplication get() {
  17. return (ZenContactApplication) Application.get();
  18. }
  19.  
  20. public SortedSet<Contact> getContacts() {
  21. return contacts;
  22. }
  23.  
  24. public List<Contact> getContactsList() {
  25. return new LinkedList<Contact>(contacts);
  26. }
  27. }
  • Ligne 3, ajout de la variable contacts et de son getter en ligne 20
  • Lignes 6,7,8 et 9 : Ajout de deux contacts dans la méthode init(). Quand l'application démarre nous aurons ainsi deux contacts d'initialisés
  • Lignes 16 et 17, ajout de la méthode static get() qui utilise la méthode utilitaire static get() de la classe Application de Wicket. Ceci permettra d'appeler cette méthode sans avoir à caster le type de l'application
  • Pour terminer, ajoutez une méthode permettant de récupérer les contacts sous forme de liste, cf. la ligne 24.

Maintenant que nous avons ce "référentiel" et cet objet métier, nous allons modifier la page qui affiche la liste des contacts pour afficher ceux stockés au niveau de l'application lors du démarrage de celle-ci.

Précédent : ZenContact 4 : La navigation entre pages Suivant : ZenContact 6 : Afficher une liste de contacts


Commentaires

1. Le Lundi 15 février 2010, 11:21 par Cyril

Je sais que ce n'était pas vraiment l'objet du post, mais l'override de compareTo() de l'objet Contact sans override d'equals()
rend la relation d'ordre non consistante avec l'égalité.

SortedSet se base sur compareTo() alors que Set sur equals().
Il est alors possible de ne pas ajouter un élément au sortedSet (c1.compareTo(c2) == 0) alors qu'il aurait été possible de le faire dans un set (c1.equals(c2) == false). => casse le contrat de l'interface Set.

Rendre la relation d'ordre consistante avec l'égalité n'est pas obligatoire juste recommandé.
Est-ce que concretement ça a un impact ? Je ne sais pas.

Sinon, j'aime beaucoup le titre du blog.

2. Le Lundi 15 février 2010, 16:25 par cazoury

Bonjour Cyril,

Merci pour votre retour et content que le titre vous plaise :) Il est vrai sinon que le override d'equals() est recommandé et c'est ce que l'on a régulièrement de toutes façons quand l'on traite avec des vrais objets métiers et qu'on utilise un outil de persistance comme Hibernate. Dans notre cas très simple cela n'a pas d'impact.

Carl

Fil des commentaires de ce billet