1,89 → 1,39 |
package org.tela_botanica.client.modeles; |
|
import org.tela_botanica.client.http.JsonRestRequestBuilder; |
import org.tela_botanica.client.http.JsonRestRequestCallback; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.util.UtilDAO; |
|
import com.extjs.gxt.ui.client.widget.Info; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.http.client.Request; |
import com.google.gwt.http.client.RequestBuilder; |
import com.google.gwt.http.client.RequestCallback; |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.json.client.JSONArray; |
import com.google.gwt.json.client.JSONException; |
import com.google.gwt.json.client.JSONParser; |
import com.google.gwt.json.client.JSONValue; |
|
public class ProjetAsyncDao { |
private static final String SERVICE_NOM = "CoelProjet"; |
|
private ProjetListe projets = null; |
private Rafraichissable vue = null; |
private Rafraichissable vueARafraichir = null; |
|
public ProjetAsyncDao(Rafraichissable vueARafraichir) { |
vue = vueARafraichir; |
public ProjetAsyncDao(Rafraichissable vueARafraichirCourrante) { |
vueARafraichir = vueARafraichirCourrante; |
} |
|
public void selectionner() { |
|
// Appel du service JREST pour avoir toutes les personnes |
RequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM); |
|
try { |
rb.sendRequest(null, new RequestCallback() { |
|
public void onError(Request request, Throwable exception) { |
// Gestion des exceptions déclenchées par l'exécution de la requête |
GWT.log("Erreur à l'exécution du service "+SERVICE_NOM+" (selectionner)", exception); |
Info.display("Erreur de Requête", "Une erreur s'est produite lors de l'exécution de la requête."); |
final JsonRestRequestBuilder rb = UtilDAO.construireRequete(SERVICE_NOM); |
rb.envoyerRequete(null, new JsonRestRequestCallback() { |
@Override |
public void surReponse(JSONValue responseValue) { |
ProjetListe projets; |
// Si la requête est un succès, reception d'un tableau |
if (responseValue.isArray() != null) { |
final JSONArray reponse = responseValue.isArray(); |
// Transformation du tableau JSON réponse en ListePersonnes |
projets = new ProjetListe(reponse); |
} else { |
projets = new ProjetListe(); |
} |
|
public void onErrorHTTP(Request request, Response reponse) { |
// Gestion des erreurs HTTP renvoyé par Apache ou JRest |
Information info = new Information("erreur_jrest", JSONParser.parse(reponse.getText()).isArray()); |
GWT.log("Erreur JREST - Code "+reponse.getStatusCode()+"\n"+info.getMessages().toString(), null); |
Info.display("Erreur JREST - Code "+reponse.getStatusCode(), info.toString()); |
} |
|
public void onResponseReceived(Request request, Response response) { |
// Si le code de réponse HTTP ne vaut pas 200 OK, on lance le mécanise d'erreur HTTP |
if (response.getStatusCode() != 200) { |
onErrorHTTP(request, response); |
} else { |
// La requête doit renvoyer une chaîne de caratères, parsable avec JSON |
// Si ce n'est pas le cas, on log une erreur |
if (!response.getText().equals("")) { |
try { |
final JSONValue responseValue = JSONParser.parse(response.getText()); |
// Si la requête est un succès, reception d'un tableau |
if (responseValue.isArray() != null) { |
final JSONArray reponse = responseValue.isArray(); |
// Transformation du tableau JSON réponse en ListePersonnes |
projets = new ProjetListe(reponse); |
} |
} catch (JSONException e) { |
// Cette exception est levée si la chaîne de caractère n'a pu être parsée par JSON |
GWT.log("ERREUR parsing JSON", e); |
Info.display("Erreur DAO", "Échec du traitement des données des projets."); |
} |
} |
} |
|
// Quelque soit l'issue, il faut retourner une liste vide. |
if (projets == null) { |
projets = new ProjetListe(); |
} |
|
// Mise à jour du demandeur des données |
vue.rafraichir(projets); |
} |
|
}); |
} catch (RequestException e) { |
// Gestion des exceptions déclenchées par la création de la requête (url non-valide ?) |
GWT.log("Erreur à la création du service "+SERVICE_NOM+" (selectionner)", e); |
Info.display("Erreur de Requête", "Une erreur s'est produite lors de la création de la requête."); |
} |
// Mise à jour du demandeur des données |
vueARafraichir.rafraichir(projets); |
} |
}); |
} |
} |