Subversion Repositories eFlore/Archives.cel-v2

Rev

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

package org.tela_botanica.client.modeles;

import java.util.Iterator;

import org.tela_botanica.client.image.ImageModele;
import org.tela_botanica.client.interfaces.Rafraichissable;

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;
import com.google.gwt.user.client.HTTPRequest;
import com.google.gwt.user.client.ResponseTextHandler;

/**
 * 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 get
                if(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 asynchrone
                HTTPRequest.asyncGet("jrest/InventoryImageList/"+iModele.getIdentifiant()+"/"+requete, new ResponseTextHandler() {
                        
                        // si tout se passe bien on reçoit une réponse JSON
                        public void onCompletion(String responseText) {
                                
                                final ListeImageCarnet photoData ;

                                final JSONValue responseValue = JSONParser.parse(responseText);
                                // si c'est un tableau
                                if (responseValue.isArray() != null) {
                                        
                                        final JSONArray reponse = responseValue.isArray();

                                        final int taillemax = reponse.size();
                                        photoData = new ListeImageCarnet(taillemax);
                                        
                                        // on le parcourt
                                        for (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'image
                                                photoData.put(im.getOrdre(),im) ;
                                                
                                        }
                                }
                                else
                                {
                                        // si c'est un objet alors il n'y a qu'une réponse
                                        if(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çu
                                                photoData.put(im.getOrdre(),im) ;
                                        }
                                        else
                                        {
                                                // sinon on crée une liste vide
                                                photoData = 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 recevoir
                                r.rafraichir(photoData,true);
                        }
                });
        }
        
        /**
         * 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'image
                for(Iterator listIt = li.keySet().iterator() ; listIt.hasNext() ;)
                {
                        String postData = "" ;
                        
                        ImageCarnet enCours = (ImageCarnet)li.get(listIt.next()) ;
                        
                        // pour chaque image on extrait les informations
                        for(Iterator imgIt = enCours.keySet().iterator();imgIt.hasNext();)
                        {
                                // qu'on place dans le poste
                                String key = (String)imgIt.next() ;
                                String valeur = enCours.renvoyerValeurCorrecte(key) ;
                                valeur.replaceAll("'", "\'") ;
                                        postData += "&"+key+"="+enCours.renvoyerValeurCorrecte(key) ;
                        
                        }
                        
                                // on fait un post asynchrone et on les envoie à jrest
                                HTTPRequest.asyncPost("jrest/inventoryImage/"+iModele.getIdentifiant()+"/", postData, new ResponseTextHandler() {
                                                public void onCompletion(String responseText) {
                                                        
                                                        if(responseText.equals("OK")) 
                                                        {
                                                                return ;
                                                        }
                                                        else
                                                        {
                                                                com.google.gwt.user.client.Window.alert("Problème lors de la mise à jour des données") ;
                                                        }
                                                        
                                                }
                                                
                                        }) ;
                }
        }
        
        /**
         * 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 ids
                for (int i = 0; i < ids.length; i++) {
                        
                        uid += ids[i]+"," ;
                }
                
                // et on envoie ça au serveur
                HTTPRequest.asyncPost("jrest/inventoryImageList/"+iModele.getIdentifiant()+"/"+uid, postData, new ResponseTextHandler() {
                        public void onCompletion(String responseText) {
                                
                                // 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édiateur
                                iModele.requeteTerminee() ;
                        }
                        
                }) ;
        }
        

}