Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
989 aurelien 1
package org.tela_botanica.client.modeles.dao;
2 aperonnet 2
 
3
/**
4
 * Modele DAO, specifique, permettant la validation, l'acces aux donnees distantes et la présentation des donnees en retour
5
 *
6
 */
7
 
12 david 8
import org.tela_botanica.client.CarnetEnLigneModele;
2621 aurelien 9
import org.tela_botanica.client.i18n.Msg;
12 david 10
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 11
import org.tela_botanica.client.modeles.objets.Configuration;
12
import org.tela_botanica.client.modeles.objets.Utilisateur;
2 aperonnet 13
 
33 jpm 14
import com.google.gwt.http.client.Request;
1918 aurelien 15
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
2806 aurelien 16
import org.tela_botanica.client.util.Util;
17
 
33 jpm 18
import com.google.gwt.http.client.RequestCallback;
19
import com.google.gwt.http.client.RequestException;
20
import com.google.gwt.http.client.Response;
2806 aurelien 21
import com.google.gwt.http.client.URL;
937 aurelien 22
import com.google.gwt.json.client.JSONObject;
2 aperonnet 23
import com.google.gwt.json.client.JSONParser;
2806 aurelien 24
import com.google.gwt.json.client.JSONString;
2 aperonnet 25
import com.google.gwt.json.client.JSONValue;
2806 aurelien 26
import com.google.gwt.user.client.Timer;
676 aurelien 27
import com.google.gwt.user.client.Window;
2 aperonnet 28
 
29
public class UtilisateurAsynchroneDAO {
30
 
31
	/**
12 david 32
	 * Le modèle associé au DAO
2 aperonnet 33
	 */
12 david 34
	private CarnetEnLigneModele carnetEnLigneModele = null ;
2806 aurelien 35
	private Timer rafraichisseurJeton;
12 david 36
 
37
	/**
38
	 * Constructeur
39
	 */
40
 
937 aurelien 41
	public UtilisateurAsynchroneDAO(CarnetEnLigneModele carnetEnLigneModele) {
12 david 42
		this.carnetEnLigneModele=carnetEnLigneModele;
2 aperonnet 43
	}
44
	/**
12 david 45
	 * Methode de classe d'appel du service gestion identification
46
	 * @param baseURL : URL du service
47
	 * @param retour : methode appelle en retour d'appel
2 aperonnet 48
	 */
12 david 49
 
2806 aurelien 50
	public void getEtatUtilisateur(final Rafraichissable r) {
51
		String url = Configuration.getIdentificationBaseUrl()+"/identite/";
2 aperonnet 52
		// Recherche identifiant utilisateur identifie
2806 aurelien 53
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;
33 jpm 54
 
55
		try {
56
 
57
			rb.sendRequest(null, new RequestCallback() {
2 aperonnet 58
 
1293 aurelien 59
				@Override
33 jpm 60
				public void onError(Request request, Throwable exception) {
676 aurelien 61
 
2 aperonnet 62
				}
63
 
1293 aurelien 64
				@Override
33 jpm 65
				public void onResponseReceived(Request request,
66
						Response response) {
676 aurelien 67
					if(response.getText().isEmpty()) {
2621 aurelien 68
						Window.alert(Msg.get("erreur-contacter-serveur"));
676 aurelien 69
					} else {
70
 
71
						JSONValue jsonValue = JSONParser.parse(response.getText());
2806 aurelien 72
						JSONObject objetJsonUtilisateur = jsonValue.isObject();
140 aurelien 73
 
2806 aurelien 74
						if (objetJsonUtilisateur != null && objetJsonUtilisateur.get("session") != null) {
676 aurelien 75
 
2806 aurelien 76
							// Drapeau leve si utilisateur deja identifie
77
							boolean identifie = objetJsonUtilisateur.get("session").isBoolean().booleanValue();
78
							if(identifie) {
79
								if(objetJsonUtilisateur.get("token").isString() != null) {
80
									String token = ((JSONString) objetJsonUtilisateur.get("token")).stringValue();
81
									Utilisateur.setJeton(token);
82
									int dureeJeton = (int)objetJsonUtilisateur.get("duration").isNumber().doubleValue();
83
									gererTimerRafraichissementJeton(dureeJeton, r);
84
								}
85
							}
676 aurelien 86
						}
2806 aurelien 87
						// dans tous les cas même si l'on est pas identifié par le sso, ceci permet d'obtenir
88
						// une session temporaire
89
						obtenirInfosComplementairesUtilisateur(r);
676 aurelien 90
					}
33 jpm 91
				}
92
			}) ;
937 aurelien 93
 
33 jpm 94
		} catch (RequestException e) {
937 aurelien 95
 
33 jpm 96
		}
2 aperonnet 97
	}
2806 aurelien 98
 
99
	public void obtenirInfosComplementairesUtilisateur(final Rafraichissable r) {
33 jpm 100
 
2806 aurelien 101
		String url = Configuration.getServiceBaseUrl()+"/User/";
102
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;
103
		try {
33 jpm 104
			rb.sendRequest(null, new RequestCallback() {
2 aperonnet 105
 
1293 aurelien 106
				@Override
33 jpm 107
				public void onError(Request request, Throwable exception) {
2806 aurelien 108
 
33 jpm 109
				}
110
 
1293 aurelien 111
				@Override
33 jpm 112
				public void onResponseReceived(Request request,
113
						Response response) {
114
 
2806 aurelien 115
					if(response.getText().isEmpty()) {
116
						Window.alert(Msg.get("erreur-contacter-serveur"));
117
					} else {
596 aurelien 118
 
2806 aurelien 119
						JSONValue jsonValue = JSONParser.parse(response.getText());
120
						JSONObject objetJsonUtilisateur;
121
 
122
						if ((objetJsonUtilisateur = jsonValue.isObject()) != null) {
123
								Utilisateur utilisateur = Utilisateur.InitialiserInstance(objetJsonUtilisateur);
124
								if(r != null) {
125
									r.rafraichir(utilisateur,true);
126
								}
127
						} else {
128
 
129
						}
130
					}
33 jpm 131
				}
2806 aurelien 132
			}) ;
33 jpm 133
		} catch (RequestException e) {
937 aurelien 134
 
33 jpm 135
		}
2 aperonnet 136
	}
137
 
2806 aurelien 138
	public void deconnecterUtilisateur(final Rafraichissable r, String user) {
139
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getIdentificationBaseUrl()+ "/deconnexion/") ;
33 jpm 140
 
141
		try {
142
 
143
			rb.sendRequest(null, new RequestCallback() {
12 david 144
 
1293 aurelien 145
				@Override
33 jpm 146
				public void onError(Request request, Throwable exception) {
147
					// TODO Auto-generated method stub
148
 
149
				}
2 aperonnet 150
 
1293 aurelien 151
				@Override
33 jpm 152
				public void onResponseReceived(Request request,
2806 aurelien 153
						Response response) {
154
					Utilisateur.setJeton("");
155
					gererTimerRafraichissementJeton(0, r);
156
					obtenirInfosComplementairesUtilisateur(r);
157
				}
158
			}) ;
159
 
160
		} catch (RequestException e) {
33 jpm 161
 
2806 aurelien 162
		}
163
	}
164
 
165
	public void connecterUtilisateur (final Rafraichissable r, String login, String password) {
166
 
167
		//connexion?login=aurelien@tela-botanica.org&password=Canard123$
168
		if(!login.isEmpty() && !password.isEmpty()) {
169
			String url = Configuration.getIdentificationBaseUrl() + "/connexion?login=" + URL.encodeComponent(login) + "&password=" + URL.encodeComponent(password);
170
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, url) ;
171
 
172
			try {
173
 
174
				rb.sendRequest(null, new RequestCallback() {
175
 
176
					@Override
177
					public void onError(Request request, Throwable exception) {
178
						// TODO Auto-generated method stub
12 david 179
 
2806 aurelien 180
					}
181
 
182
					@Override
183
					public void onResponseReceived(Request request,
184
							Response response) {
185
 
186
						JSONValue jsonValue = JSONParser.parse(response.getText());
187
						JSONObject objetJsonUtilisateur = jsonValue.isObject();
188
 
189
						if (objetJsonUtilisateur != null && objetJsonUtilisateur.get("session") != null) {
190
							if(objetJsonUtilisateur.get("token").isString() != null) {
191
								String token = ((JSONString) objetJsonUtilisateur.get("token")).stringValue();
192
								Utilisateur.setJeton(token);
193
								int dureeJeton = (int)objetJsonUtilisateur.get("duration").isNumber().doubleValue();
194
								gererTimerRafraichissementJeton(dureeJeton, r);
195
							}
196
							obtenirInfosComplementairesUtilisateur(r);
197
						}
198
					}
199
				}) ;
33 jpm 200
 
2806 aurelien 201
			} catch (RequestException e) {
33 jpm 202
 
2806 aurelien 203
				e.printStackTrace() ;
204
			}
205
		}
206
	}
207
 
208
	private void gererTimerRafraichissementJeton(int duree, final Rafraichissable r) {
209
		// Rafraîchissement automatique du jeton - s'annule lorsque le jeton devient nul
210
		if (!Utilisateur.getJeton().isEmpty() && duree > 0) {
33 jpm 211
 
2806 aurelien 212
			if (rafraichisseurJeton == null) { // on sait jamais
213
				// 3/4 de la durée de vie du jeton, en millisecondes (ça laisse de la marge)
214
				int delaiRepetition = (duree * 1000) * 3 / 4;
215
				rafraichisseurJeton = new Timer() {
216
					@Override
217
					public void run() {
218
						// Appel de l'annuaire pour rafraîchir le jeton (cb nul pour l'instant)
219
						// @TODO gérer le possible changement de profil / coordonnées de l'utilisateur
220
						// en cours de connexion
221
						getEtatUtilisateur(null);
222
					}
223
				};
224
				rafraichisseurJeton.scheduleRepeating(delaiRepetition);
225
			}
226
		} else {
227
			if (rafraichisseurJeton != null) { // on sait jamais non plus
228
				rafraichisseurJeton.cancel();
229
				rafraichisseurJeton = null;
230
			}
33 jpm 231
		}
2 aperonnet 232
	}
233
 
596 aurelien 234
	public void accepterLicence(String identifiantUtilisateur) {
235
 
1918 aurelien 236
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.POST,Configuration.getServiceBaseUrl() + "/LicenceUtilisateur/"+identifiantUtilisateur) ;
596 aurelien 237
 
238
		try {
239
 
965 aurelien 240
			String postData = "licence=1";
596 aurelien 241
 
242
			rb.sendRequest(postData, new RequestCallback() {
12 david 243
 
1293 aurelien 244
				@Override
596 aurelien 245
				public void onError(Request request, Throwable exception) {
246
					// TODO Auto-generated method stub
247
 
248
				}
12 david 249
 
1293 aurelien 250
				@Override
596 aurelien 251
				public void onResponseReceived(Request request,
252
						Response response) {
253
 
937 aurelien 254
				}
596 aurelien 255
			}) ;
256
 
257
		} catch (RequestException e) {
258
 
259
			e.printStackTrace() ;
937 aurelien 260
		}
596 aurelien 261
	}
937 aurelien 262
}