Blog Zenika

#CodeTheWorld

Web

GWT Data Binding (2/3) : présentation de la problématique

Pour expliquer comment se servir de la classe Generator, nous allons nous baser sur l’exemple suivant : nous disposons d’une classe métier Personne et nous voudrions pouvoir accéder à ses propriétés juste en connaissant leurs noms.

En Java, on utiliserait la réflexion avec code suivant :

private String getAttribute(Object objet, String property) {
	Class classe = objet.getClass();
	// On suppose qu’à la propriété “property” correspond le getter getProperty()
	String getterName = "get" + property.substring(0, 1).toUpperCase() + property.substring(1);
	Method methode = classe.getMethod(getterName, null);
	String resultat = (String) methode.invoke(objet, null);
	return resultat;
}

Avec GWT, nous ne pouvons pas utiliser la réflexion. Pour implémenter la méthode getAttribute, nous allons essayer de créer dynamiquement une classe chargée d’envelopper l’objet métier (appelée par GWT.create()) et qui implémente l’interface Wrapper.

public interface Wrapper {
	// l’objet content représente l’objet enveloppé par le wrapper
	public void setContent(Object content);
	public Object getContent();
	public String getAttribute(String attr);
	public void setAttribute(String attr, String value);
}

Voici la classe que nous voulons wrapper :

public class Personne {
	private String nom;
	private String prenom;
	public Personne() {
	}
	public String getNom() {
		return nom;
	}
	public void setNom(String nom) {
		this.nom = nom;
	}
	public String getPrenom() {
		return prenom;
	}
	public void setPrenom(String prenom) {
		this.prenom = prenom;
	}
}

Et voici la classe que nous voulons récupérer en appelant GWT.create(Personne.class) :

public class PersonneWrapper implements Wrapper {
	private Personne content;
	public void setContent(Object content) {
		this.content = (Personne) content;
	}
	public Object getContent() {
		return this.content;
	}
	public String getAttribute(String attr) {
		if (attr.equals("nom")) {
			return content.getNom();
		}
		if (attr.equals("prenom")) {
			return content.getPrenom();
		}
		return null;
	}
	public void setAttribute(String attr, String value) {
		if (attr.equals("nom")) {
			this.content.setNom(value);
		} else if (attr.equals("prenom")) {
			this.content.setPrenom(value);
		}
	}
}

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

En savoir plus sur Blog Zenika

Abonnez-vous pour poursuivre la lecture et avoir accès à l’ensemble des archives.

Continue reading