Subversion Repositories eFlore/Applications.cel

Rev

Rev 145 | Rev 989 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 aperonnet 1
package org.tela_botanica.client.modeles;
2
 
3
import org.tela_botanica.client.image.ImageModele;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import com.google.gwt.http.client.Request;
6
import com.google.gwt.http.client.RequestBuilder;
7
import com.google.gwt.http.client.RequestCallback;
8
import com.google.gwt.http.client.RequestException;
9
import com.google.gwt.http.client.Response;
10
import com.google.gwt.json.client.JSONParser;
11
import com.google.gwt.json.client.JSONString;
12
import com.google.gwt.json.client.JSONValue;
13
 
14
/**
5 aperonnet 15
 * DAO qui renvoie le nombre d'image associées à différents critères donnés
16
 * (utile pour la pagination)
17
 *
2 aperonnet 18
 * @author aurelien
5 aperonnet 19
 *
2 aperonnet 20
 */
21
public class NombreImageAsynchroneDAO {
22
 
23
	/**
24
	 * Le modèle associé au DAO
25
	 */
5 aperonnet 26
	private ImageModele iModele = null;
27
 
28
	public NombreImageAsynchroneDAO(ImageModele im) {
29
		iModele = im;
2 aperonnet 30
	}
5 aperonnet 31
 
2 aperonnet 32
	/**
33
	 * Setteur pour le modèle
5 aperonnet 34
	 *
35
	 * @param im
36
	 *            le modèlme à associer
2 aperonnet 37
	 */
5 aperonnet 38
	public void setIModele(ImageModele im) {
39
		iModele = im;
2 aperonnet 40
	}
5 aperonnet 41
 
2 aperonnet 42
	/**
5 aperonnet 43
	 * Envoie une requete au serveur jrest pour obtenir le nombre d'images
44
	 * correspondant à des critères données en paramètres
45
	 *
46
	 * @param r
47
	 *            le rafraichissable qui demande la mise à jour
48
	 * @param criteres
49
	 *            un tableau nom/valeur des critères pour les images
2 aperonnet 50
	 */
5 aperonnet 51
	public void obtenirNombreImages(final Rafraichissable r, String[][] criteres) {
52
		String requete = "";
53
 
54
		if (criteres != null) {
55
			// on construit les paramètres du get avec les critères
56
			// (&critere1=valeur1&critere2=valeur2 etc...)
2 aperonnet 57
			for (int i = 0; i < criteres.length; i++) {
5 aperonnet 58
 
59
				if (!criteres[i][1].equals("")) {
60
					if (i != 0) {
2 aperonnet 61
						requete += "&";
62
					}
5 aperonnet 63
					requete += criteres[i][0] + "=" + criteres[i][1];
2 aperonnet 64
				}
65
			}
66
		}
5 aperonnet 67
 
2 aperonnet 68
		// on fait un get asynchrone
145 aurelien 69
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, Configuration.getServiceBaseUrl()
5 aperonnet 70
				+ "/InventoryImageCount/"
965 aurelien 71
				+ Utilisateur.getInstance().getIdentifiantUtilisateurConsulte()
5 aperonnet 72
				+ "/"
73
				+ requete);
2 aperonnet 74
		try {
75
			rb.sendRequest(null, new RequestCallback() {
76
 
77
				public void onError(Request request, Throwable exception) {
78
					// TODO Auto-generated method stub
5 aperonnet 79
 
2 aperonnet 80
				}
81
 
5 aperonnet 82
				public void onResponseReceived(Request request,
83
						Response response) {
84
 
85
					final JSONValue responseValue = JSONParser.parse(response
86
							.getText());
87
 
965 aurelien 88
					// si la requete se passe bien on reçoit une chaine JSON
89
					if (responseValue.isString() != null) {
5 aperonnet 90
						// qui contient une valeur : le nombre d'images
91
						// correspondant au critères
965 aurelien 92
						JSONString reponseNombre = responseValue.isString();
5 aperonnet 93
						int maxImages = Integer.parseInt(reponseNombre
94
								.stringValue());
95
						int[] nbImages = { maxImages };
96
						// on le met dans un tableau d'entiers qu'on transmet au
97
						// demandeur de la mise à jour
98
						r.rafraichir(nbImages, true);
2 aperonnet 99
					}
5 aperonnet 100
 
2 aperonnet 101
				}
5 aperonnet 102
 
103
			});
2 aperonnet 104
		} catch (RequestException e) {
105
			// TODO Auto-generated catch block
106
			e.printStackTrace();
107
		}
5 aperonnet 108
 
2 aperonnet 109
	}
5 aperonnet 110
 
2 aperonnet 111
}