Rev 1317 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.modeles.dao;import java.util.Iterator;import org.tela_botanica.client.image.ImageModele;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.objets.Configuration;import org.tela_botanica.client.modeles.objets.ImageCarnet;import org.tela_botanica.client.modeles.objets.ListeImageCarnet;import org.tela_botanica.client.modeles.objets.Utilisateur;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.JSONObject;import com.google.gwt.json.client.JSONParser;import com.google.gwt.json.client.JSONValue;/*** Data Object Access communiquant avec le serveur jrest fournissant la liste* des images répondant à des critères donné** @author aurelien**/public class ListeImageAsynchroneDAO {/*** Le modèle associé au DAO*/ImageModele iModele = null;public ListeImageAsynchroneDAO(ImageModele im) {iModele = im;}/*** Setteur pour le modèle** @param im* le modèle à associer*/public void setIModele(ImageModele im) {iModele = im;}/*** Envoie une requete au serveur jrest pour obtenir une liste d'images* correspondant à des critères demandés** @param r* le rafraichissable qui a demandé les données* @param criteres* un tableau contenant les critères de selections*/public void ObtenirListeImages(final Rafraichissable r, String[][] criteres) {String requete = "";// on construit les paramètres du getif (criteres != null) {for (int i = 0; i < criteres.length; i++) {if (!criteres[i][1].equals("")) {if (i != 0) {requete += "&";}requete += criteres[i][0] + "=" + criteres[i][1];}}}// on envoie le get asynchroneRequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl()+ "/InventoryImageList/"+ Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()+ "/?"+ requete);try {rb.sendRequest(null, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {// TODO Auto-generated method stub}@Overridepublic void onResponseReceived(Request request,Response response) {final ListeImageCarnet photoData;final JSONValue responseValue = JSONParser.parse(response.getText());// si c'est un tableauif (responseValue.isArray() != null) {final JSONArray reponse = responseValue.isArray();final int taillemax = reponse.size();photoData = new ListeImageCarnet(taillemax);// on le parcourtfor (int j = 0; j < taillemax; j++) {JSONObject image = (JSONObject) reponse.get(j);ImageCarnet im = new ImageCarnet(image);// et on en extrait les données pour construire la// liste d'imagephotoData.put(im.getOrdre(), im);}} else {// si c'est un objet alors il n'y a qu'une réponseif (responseValue.isObject() != null) {photoData = new ListeImageCarnet(1);ImageCarnet im = new ImageCarnet(responseValue.isObject());// on crée une liste de 1 élement auquel on ajoute// ce qui a été reçuphotoData.put(im.getOrdre(), im);} else {// sinon on crée une liste videphotoData = new ListeImageCarnet(0);}}// dans tous les cas on transmet la liste crée au// rafraichissable en lui demandant de répandre les données// car il est// le premier à les recevoirr.rafraichir(photoData, true);}});} catch (RequestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** Met à jour les valeurs d'une liste d'image donnée dans la base de données** @param li* la liste d'image à synchroniser avec la base*/public void SynchroniserBaseDeDonnees(ListeImageCarnet li) {// on parcourt toute la liste d'imagefor (Iterator<String> listIt = li.keySet().iterator(); listIt.hasNext();) {String postData = "";ImageCarnet enCours = li.get(listIt.next());String[][] champsModifiables = enCours.obtenirChampsModifiablesImage();for (int i = 0; i < champsModifiables.length; i++) {postData += "&"+champsModifiables[i][0]+"="+champsModifiables[i][1];}// on fait un post asynchrone et on les envoie à jrestRequestBuilder rb = new RequestBuilder(RequestBuilder.POST,Configuration.getServiceBaseUrl()+ "/inventoryImage/" + Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() + "/");try {rb.sendRequest(postData, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {}@Overridepublic void onResponseReceived(Request request,Response response) {if (response.getText().equals("OK")) {return;} else {com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données");}}});} catch (RequestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/*** Supprime des image sur le serveur par rapport à leur identifant** @param ids* un tableau d'identifiants d'images à supprimer*/public void supprimerBaseDeDonnees(String[] ids) {String postData = "";// on fait un delete dans le post (jrest ne gère pas delete comme une// action à part entière)postData += "&action=DELETE";String uid = "";// on concatène les idsfor (int i = 0; i < ids.length; i++) {uid += ids[i] + ",";}// et on envoie ça au serveurRequestBuilder rb = new RequestBuilder(RequestBuilder.POST, Configuration.getServiceBaseUrl()+ "/inventoryImageList/" + Utilisateur.getInstance().getIdentifiantUtilisateurConsulte() + "/" + uid);try {rb.sendRequest(postData, new RequestCallback() {@Overridepublic void onError(Request request, Throwable exception) {// TODO Auto-generated method stub}@Overridepublic void onResponseReceived(Request request,Response response) {// quand la requête est éxecutée on le signale au modèle// poru qu'il mette à jour les données// et en notifie le médiateuriModele.requeteTerminee();}});} catch (RequestException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}