Subversion Repositories eFlore/Applications.coel

Rev

Rev 358 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
64 jpm 1
package org.tela_botanica.client.modeles;
2
 
3
import org.tela_botanica.client.RegistreId;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
346 gduche 5
import org.tela_botanica.client.util.UtilDAO;
64 jpm 6
 
7
import com.extjs.gxt.ui.client.Registry;
346 gduche 8
import com.extjs.gxt.ui.client.widget.Info;
132 jpm 9
import com.google.gwt.core.client.GWT;
64 jpm 10
import com.google.gwt.http.client.Request;
11
import com.google.gwt.http.client.RequestBuilder;
12
import com.google.gwt.http.client.RequestCallback;
13
import com.google.gwt.http.client.RequestException;
14
import com.google.gwt.http.client.Response;
15
import com.google.gwt.json.client.JSONArray;
16
import com.google.gwt.json.client.JSONBoolean;
17
import com.google.gwt.json.client.JSONParser;
18
import com.google.gwt.json.client.JSONString;
19
import com.google.gwt.json.client.JSONValue;
20
 
268 jp_milcent 21
/**
22
 * Modele DAO, specifique, permettant la validation, l'acces aux donnees distantes et la présentation des donnees en retour
23
 *
24
 */
69 jpm 25
public class UtilisateurAsyncDao {
268 jp_milcent 26
	private static final String SERVICE_NOM = "CoelUtilisateur";
27
 
65 jpm 28
	private Utilisateur utilisateur = null;
64 jpm 29
	private String urlServiceBase = null;
358 jp_milcent 30
	private Rafraichissable vueARafraichir = null;
64 jpm 31
 
32
	/**
33
	 * Constructeur
34
	 * @param retour : méthode appellée en retour d'appel.
35
	 */
69 jpm 36
	public UtilisateurAsyncDao(Rafraichissable r) {
358 jp_milcent 37
		vueARafraichir = r;
64 jpm 38
		urlServiceBase = ((Configuration) Registry.get(RegistreId.CONFIG)).getServiceBaseUrl();
277 jp_milcent 39
		utilisateur = (Utilisateur) Registry.get(RegistreId.UTILISATEUR_COURANT);
64 jpm 40
	}
41
 
42
	/**
43
	 * Méthode de classe d'appel du service des gestion d'identification.
44
	 */
45
	public void getEtatUtilisateur() {
46
		// Recherche identifiant utilisateur identifie
268 jp_milcent 47
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlServiceBase+SERVICE_NOM+"/") ;
64 jpm 48
		try {
49
			rb.sendRequest(null, new RequestCallback() {
50
 
51
				public void onError(Request request, Throwable exception) {
52
					// TODO : ajouter un message d'erreur en cas d'erreur de requête HTTP
53
				}
54
 
55
				public void onResponseReceived(Request request, Response response) {
56
					JSONValue jsonValue = JSONParser.parse(response.getText());
57
					JSONArray jsonArray;
58
					if ((jsonArray = jsonValue.isArray()) != null) {
59
						// Identifiant utilisateur ou identifiant de session si non identifié
66 jpm 60
						String login = ((JSONString) jsonArray.get(0)).stringValue();
64 jpm 61
						// Drapeau leve si utilisateur deja identifié
62
						boolean identifie = ((JSONBoolean) jsonArray.get(1)).booleanValue();
65 jpm 63
						utilisateur.setIdentifie(identifie);
66 jpm 64
						utilisateur.setLogin(login);
358 jp_milcent 65
						vueARafraichir.rafraichir(utilisateur);
64 jpm 66
					}
67
				}
68
			}) ;
69
		} catch (RequestException e) {
70
			e.printStackTrace();
71
		}
72
	}
73
 
74
	/**
75
	 * Méthode déconnectant un utilisateur de l'application.
76
	 * @param identifiant de l'utilisateur à déconnecter.
77
	 */
65 jpm 78
	public void deconnecterUtilisateur() {
268 jp_milcent 79
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlServiceBase+SERVICE_NOM+"/"+utilisateur.getId()) ;
64 jpm 80
		try {
81
			rb.sendRequest(null, new RequestCallback() {
82
 
83
				public void onError(Request request, Throwable exception) {
84
					// TODO : ajouter un message d'erreur en cas d'erreur de requête HTTP
85
				}
86
 
87
				public void onResponseReceived(Request request, Response response) {
88
					JSONValue jsonValue = JSONParser.parse(response.getText());
89
					JSONArray jsonArray;
90
					if ((jsonArray = jsonValue.isArray()) != null) {
91
						// Identifiant utilisateur ou identifiant de session si non identifié
132 jpm 92
						String id = ((JSONString) jsonArray.get(0)).stringValue();
64 jpm 93
						// Drapeau levé si l'utilisateur est déjà identifié
94
						boolean identifie = ((JSONBoolean) jsonArray.get(1)).booleanValue();
132 jpm 95
 
96
						// Nous réinitialisons l'utilisateur
97
						utilisateur = new Utilisateur(id, identifie);
98
 
99
						GWT.log(utilisateur.toString(), null);
358 jp_milcent 100
						vueARafraichir.rafraichir(utilisateur);
64 jpm 101
					}
102
				}
103
			}) ;
104
		} catch (RequestException e) {
105
			e.printStackTrace();
106
		}
107
	}
108
 
109
	/**
358 jp_milcent 110
	 * Méthode connectant un utilisateur à l'application.
64 jpm 111
	 * @param Utilisateur l'utilisateur courant.
112
	 */
65 jpm 113
	public void connecterUtilisateur () {
346 gduche 114
		String[] parametres = new String[2];
115
		parametres[0] = utilisateur.getLogin();
116
		parametres[1] = utilisateur.getMotDePasse();
65 jpm 117
 
346 gduche 118
		RequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM, parametres);
64 jpm 119
		try {
120
			rb.sendRequest(null, new RequestCallback() {
121
 
122
				public void onError(Request request, Throwable exception) {
346 gduche 123
					GWT.log("Erreur à l'exécution du service " + SERVICE_NOM + " (selection)", exception);
124
					Info.display("Erreur de Requête", "Une erreur s'est produite lors de l'exécution de la requête.");
64 jpm 125
				}
358 jp_milcent 126
 
127
				public void onErrorHTTP(Request request, Response reponse) {
128
					// Gestion des erreurs HTTP renvoyé par Apache ou JRest
129
					Information info = new Information("erreur_jrest", JSONParser.parse(reponse.getText()).isArray());
130
					GWT.log("Erreur JREST - Code "+reponse.getStatusCode()+"\n"+info.getMessages().toString(), null);
131
					Info.display("Erreur JREST - Code "+reponse.getStatusCode(), info.toString());
132
				}
133
 
64 jpm 134
				public void onResponseReceived(Request request, Response response) {
358 jp_milcent 135
					if (response.getStatusCode() != 200) {
136
						onErrorHTTP(request, response);
137
					} else {
138
						JSONValue jsonValue = JSONParser.parse(response.getText());
139
						JSONArray jsonArray;
140
						if ((jsonArray = jsonValue.isArray()) != null) {
141
							if (jsonArray.size() > 0) {
142
								// Identifiant de l'utilisateur ou identifiant de session si non identifié
143
								utilisateur.setId(((JSONString) jsonArray.get(0)).stringValue());
346 gduche 144
 
358 jp_milcent 145
								// Drapeau levé si l'utilisateur est déjà identifié
146
								GWT.log(jsonArray.toString(), null);
147
								utilisateur.setIdentifie(((JSONBoolean) jsonArray.get(1)).booleanValue());
148
 
149
								// Plus de deux valeurs, l'utilisateur est identifié nous récupérons des données supplémentaires
150
								if (jsonArray.size() > 2) {
151
									// Nom complet de l'utilisateur
152
									if (jsonArray.get(2).isString() != null) {
153
										utilisateur.setNomComplet(((JSONString) jsonArray.get(2)).stringValue());
154
									}
155
									// Prénom de l'utilisateur
156
									if (jsonArray.get(3).isString() != null) {
157
										utilisateur.setPrenom(((JSONString) jsonArray.get(3)).stringValue());
158
									}
159
									// Nom de l'utilisateur
160
									if (jsonArray.get(4).isString() != null) {
161
										utilisateur.setNom(((JSONString) jsonArray.get(4)).stringValue());
162
									}
163
									GWT.log(utilisateur.toString(), null);
346 gduche 164
								}
358 jp_milcent 165
								vueARafraichir.rafraichir(utilisateur);
132 jpm 166
							}
167
						}
358 jp_milcent 168
					}
64 jpm 169
				}
170
			}) ;
171
		} catch (RequestException e) {
172
			e.printStackTrace();
173
		}
174
	}
175
}