Subversion Repositories eFlore/Applications.del

Rev

Rev 1953 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
939 benjamin 1
package org.tela_botanica.del.client.services.rest.async;
2
 
1667 jpm 3
import java.util.Arrays;
4
import java.util.List;
5
 
1517 aurelien 6
import org.tela_botanica.del.client.utils.StringUtils;
7
 
1667 jpm 8
import com.google.gwt.core.shared.GWT;
939 benjamin 9
import com.google.gwt.http.client.Request;
10
import com.google.gwt.http.client.RequestCallback;
11
import com.google.gwt.http.client.Response;
1517 aurelien 12
import com.google.gwt.json.client.JSONException;
939 benjamin 13
import com.google.gwt.user.client.Window;
14
 
15
/**
941 benjamin 16
 * Cette classe correspond au retour asynchrone d'un webservice php qui retourne
939 benjamin 17
 * l'objet generique T si l'appel de service est un succcès
18
 *
19
 * @author LIENS
20
 *
21
 * @param <T>
22
 */
23
public abstract class PHPCallback<T> implements RequestCallback {
24
 
25
	public enum ModeRequete {
26
		AJOUT, MODIFICATION, SUPPRESSION, LECTURE
27
	}
28
 
29
	protected ModeRequete mode;
30
 
31
	public PHPCallback() {
2077 mathias 32
		this.mode = ModeRequete.LECTURE;
939 benjamin 33
	}
34
 
35
	public void setMode(ModeRequete mode) {
36
		this.mode = mode;
37
	}
38
 
39
	@Override
40
	public void onResponseReceived(Request request, Response response) {
41
		int statusCode = response.getStatusCode();
1667 jpm 42
		List<Integer> codeAttendu = null;
939 benjamin 43
		switch (mode) {
44
		case AJOUT:
1667 jpm 45
			codeAttendu = Arrays.asList(200, 201, 204);
939 benjamin 46
			break;
47
		case MODIFICATION:
1667 jpm 48
			codeAttendu = Arrays.asList(200, 201, 204);
939 benjamin 49
			break;
50
		case SUPPRESSION:
1667 jpm 51
			codeAttendu = Arrays.asList(200);
939 benjamin 52
			break;
53
		case LECTURE:
1667 jpm 54
			codeAttendu = Arrays.asList(200);
939 benjamin 55
			break;
56
		default:
1667 jpm 57
			codeAttendu = Arrays.asList(500);
939 benjamin 58
			break;
59
		}
2077 mathias 60
		//GWT.log("Codes attendus:"+codeAttendu.toString());
61
		//GWT.log("Code:"+statusCode);
62
		if (codeAttendu != null && codeAttendu.contains(statusCode)) {
63
			//GWT.log("Code: OK");
1517 aurelien 64
			try {
65
				T reponseParsee = parserJSON(response.getText());
66
				surRetour(reponseParsee);
67
			} catch (JSONException e) {
1953 aurelien 68
				StringUtils.logVersConsole("Une erreur est survenue, le serveur a répondu : "+response.getText());
1517 aurelien 69
			}
939 benjamin 70
		} else {
71
			surErreur("Erreur " + statusCode + ": " + response.getText());
72
		}
73
	}
74
 
75
	/**
76
	 * Cette methode permet de pareser le JSON retourné par le webservice pour
77
	 * le transformer en objet métier
78
	 *
79
	 * @param retourService
80
	 * @return
81
	 */
82
	public abstract T parserJSON(String retourService);
83
 
84
	@Override
85
	public void onError(Request request, Throwable exception) {
86
		surErreur(exception.getMessage());
87
	}
88
 
89
	public abstract void surRetour(T objetRetour);
90
 
91
	public void surErreur(String messageErreur) {
1667 jpm 92
		GWT.log("Erreur service : "+messageErreur);
939 benjamin 93
		Window.alert(messageErreur);
94
	}
95
}