Subversion Repositories eFlore/Applications.del

Rev

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

package org.tela_botanica.del.client.services.rest.async;

import java.util.Arrays;
import java.util.List;

import org.tela_botanica.del.client.utils.StringUtils;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONException;
import com.google.gwt.user.client.Window;

/**
 * Cette classe correspond au retour asynchrone d'un webservice php qui retourne
 * l'objet generique T si l'appel de service est un succcès
 * 
 * @author LIENS
 * 
 * @param <T>
 */
public abstract class PHPCallback<T> implements RequestCallback {

        public enum ModeRequete {
                AJOUT, MODIFICATION, SUPPRESSION, LECTURE
        }

        protected ModeRequete mode;

        public PHPCallback() {
                this.mode = ModeRequete.LECTURE;
        }

        public void setMode(ModeRequete mode) {
                this.mode = mode;
        }

        @Override
        public void onResponseReceived(Request request, Response response) {
                int statusCode = response.getStatusCode();
                List<Integer> codeAttendu = null;
                switch (mode) {
                case AJOUT:
                        codeAttendu = Arrays.asList(200, 201, 204);
                        break;
                case MODIFICATION:
                        codeAttendu = Arrays.asList(200, 201, 204);
                        break;
                case SUPPRESSION:
                        codeAttendu = Arrays.asList(200);
                        break;
                case LECTURE:
                        codeAttendu = Arrays.asList(200);
                        break;
                default:
                        codeAttendu = Arrays.asList(500);
                        break;
                }
                //GWT.log("Codes attendus:"+codeAttendu.toString());
                //GWT.log("Code:"+statusCode);
                if (codeAttendu != null && codeAttendu.contains(statusCode)) {
                        //GWT.log("Code: OK");
                        try {
                                T reponseParsee = parserJSON(response.getText());
                                surRetour(reponseParsee);
                        } catch (JSONException e) {
                                StringUtils.logVersConsole("Une erreur est survenue, le serveur a répondu : "+response.getText());
                        }               
                } else {
                        surErreur("Erreur " + statusCode + ": " + response.getText());
                }
        }

        /**
         * Cette methode permet de pareser le JSON retourné par le webservice pour
         * le transformer en objet métier
         * 
         * @param retourService
         * @return
         */
        public abstract T parserJSON(String retourService);

        @Override
        public void onError(Request request, Throwable exception) {
                surErreur(exception.getMessage());
        }

        public abstract void surRetour(T objetRetour);

        public void surErreur(String messageErreur) {
                GWT.log("Erreur service : "+messageErreur);
                Window.alert(messageErreur);
        }
}