Subversion Repositories eFlore/Applications.del

Rev

Rev 1517 | Go to most recent revision | 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() {
32
	}
33
 
34
	public void setMode(ModeRequete mode) {
35
		this.mode = mode;
36
	}
37
 
38
	@Override
39
	public void onResponseReceived(Request request, Response response) {
40
		int statusCode = response.getStatusCode();
1667 jpm 41
		List<Integer> codeAttendu = null;
939 benjamin 42
		switch (mode) {
43
		case AJOUT:
1667 jpm 44
			codeAttendu = Arrays.asList(200, 201, 204);
939 benjamin 45
			break;
46
		case MODIFICATION:
1667 jpm 47
			codeAttendu = Arrays.asList(200, 201, 204);
939 benjamin 48
			break;
49
		case SUPPRESSION:
1667 jpm 50
			codeAttendu = Arrays.asList(200);
939 benjamin 51
			break;
52
		case LECTURE:
1667 jpm 53
			codeAttendu = Arrays.asList(200);
939 benjamin 54
			break;
55
		default:
1667 jpm 56
			codeAttendu = Arrays.asList(500);
939 benjamin 57
			break;
58
		}
1667 jpm 59
		GWT.log("Codes attendus:"+codeAttendu.toString());
60
		GWT.log("Code:"+statusCode);
61
		if (codeAttendu.contains(statusCode)) {
62
			GWT.log("Code: OK");
1517 aurelien 63
			try {
64
				T reponseParsee = parserJSON(response.getText());
65
				surRetour(reponseParsee);
66
			} catch (JSONException e) {
67
				StringUtils.logChaine("Une erreur est survenue, le serveur a répondu : "+response.getText());
68
			}
939 benjamin 69
		} else {
70
			surErreur("Erreur " + statusCode + ": " + response.getText());
71
		}
72
	}
73
 
74
	/**
75
	 * Cette methode permet de pareser le JSON retourné par le webservice pour
76
	 * le transformer en objet métier
77
	 *
78
	 * @param retourService
79
	 * @return
80
	 */
81
	public abstract T parserJSON(String retourService);
82
 
83
	@Override
84
	public void onError(Request request, Throwable exception) {
85
		surErreur(exception.getMessage());
86
	}
87
 
88
	public abstract void surRetour(T objetRetour);
89
 
90
	public void surErreur(String messageErreur) {
1667 jpm 91
		GWT.log("Erreur service : "+messageErreur);
939 benjamin 92
		Window.alert(messageErreur);
93
	}
94
}