Subversion Repositories eFlore/Applications.cel

Rev

Rev 108 | 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 java.util.Iterator;
4
 
5
import org.tela_botanica.client.image.ImageModele;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
 
8
import com.google.gwt.http.client.Request;
9
import com.google.gwt.http.client.RequestBuilder;
10
import com.google.gwt.http.client.RequestCallback;
11
import com.google.gwt.http.client.RequestException;
12
import com.google.gwt.http.client.Response;
13
import com.google.gwt.json.client.JSONArray;
14
import com.google.gwt.json.client.JSONObject;
15
import com.google.gwt.json.client.JSONParser;
16
import com.google.gwt.json.client.JSONValue;
17
 
18
/**
5 aperonnet 19
 * Data Object Access communiquant avec le serveur jrest fournissant la liste
20
 * des images répondant à des critères donné
21
 *
2 aperonnet 22
 * @author aurelien
5 aperonnet 23
 *
2 aperonnet 24
 */
25
public class ListeImageAsynchroneDAO {
5 aperonnet 26
 
2 aperonnet 27
	/**
28
	 * Le modèle associé au DAO
29
	 */
5 aperonnet 30
	ImageModele iModele = null;
31
 
32
	public ListeImageAsynchroneDAO(ImageModele im) {
33
		iModele = im;
2 aperonnet 34
	}
5 aperonnet 35
 
2 aperonnet 36
	/**
37
	 * Setteur pour le modèle
5 aperonnet 38
	 *
39
	 * @param im
40
	 *            le modèle à associer
2 aperonnet 41
	 */
5 aperonnet 42
	public void setIModele(ImageModele im) {
43
		iModele = im;
2 aperonnet 44
	}
5 aperonnet 45
 
2 aperonnet 46
	/**
5 aperonnet 47
	 * Envoie une requete au serveur jrest pour obtenir une liste d'images
48
	 * correspondant à des critères demandés
49
	 *
50
	 * @param r
51
	 *            le rafraichissable qui a demandé les données
52
	 * @param criteres
53
	 *            un tableau contenant les critères de selections
2 aperonnet 54
	 */
5 aperonnet 55
	public void ObtenirListeImages(final Rafraichissable r, String[][] criteres) {
56
 
57
		String requete = "";
58
 
2 aperonnet 59
		// on construit les paramètres du get
5 aperonnet 60
		if (criteres != null) {
2 aperonnet 61
			for (int i = 0; i < criteres.length; i++) {
5 aperonnet 62
 
63
				if (!criteres[i][1].equals("")) {
64
					if (i != 0) {
2 aperonnet 65
						requete += "&";
66
					}
5 aperonnet 67
					requete += criteres[i][0] + "=" + criteres[i][1];
68
 
2 aperonnet 69
				}
70
			}
71
		}
5 aperonnet 72
 
2 aperonnet 73
		// on envoie le get asynchrone
5 aperonnet 74
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, iModele
75
				.getConfig().getServiceBaseUrl()
76
				+ "/InventoryImageList/"
77
				+ iModele.getIdentifiant()
78
				+ "/"
79
				+ requete);
2 aperonnet 80
		try {
5 aperonnet 81
			rb.sendRequest(null, new RequestCallback() {
82
 
2 aperonnet 83
				public void onError(Request request, Throwable exception) {
84
					// TODO Auto-generated method stub
5 aperonnet 85
 
2 aperonnet 86
				}
87
 
5 aperonnet 88
				public void onResponseReceived(Request request,
89
						Response response) {
2 aperonnet 90
 
5 aperonnet 91
					final ListeImageCarnet photoData;
92
 
93
					final JSONValue responseValue = JSONParser.parse(response
94
							.getText());
2 aperonnet 95
					// si c'est un tableau
96
					if (responseValue.isArray() != null) {
5 aperonnet 97
 
2 aperonnet 98
						final JSONArray reponse = responseValue.isArray();
99
 
100
						final int taillemax = reponse.size();
101
						photoData = new ListeImageCarnet(taillemax);
5 aperonnet 102
 
2 aperonnet 103
						// on le parcourt
5 aperonnet 104
						for (int j = 0; j < taillemax; j++) {
105
 
106
							JSONObject image = (JSONObject) reponse.get(j);
107
 
108
							ImageCarnet im = new ImageCarnet(image);
109
 
110
							// et on en extrait les données pour construire la
111
							// liste d'image
112
							photoData.put(im.getOrdre(), im);
113
 
2 aperonnet 114
						}
5 aperonnet 115
					} else {
2 aperonnet 116
						// si c'est un objet alors il n'y a qu'une réponse
5 aperonnet 117
						if (responseValue.isObject() != null) {
2 aperonnet 118
							photoData = new ListeImageCarnet(1);
5 aperonnet 119
							ImageCarnet im = new ImageCarnet(responseValue
120
									.isObject());
121
							// on crée une liste de 1 élement auquel on ajoute
122
							// ce qui a été reçu
123
							photoData.put(im.getOrdre(), im);
124
						} else {
2 aperonnet 125
							// sinon on crée une liste vide
5 aperonnet 126
							photoData = new ListeImageCarnet(0);
2 aperonnet 127
						}
128
					}
5 aperonnet 129
 
130
					// dans tous les cas on transmet la liste crée au
131
					// rafraichissable en lui demandant de répandre les données
132
					// car il est
2 aperonnet 133
					// le premier à les recevoir
5 aperonnet 134
					r.rafraichir(photoData, true);
2 aperonnet 135
				}
5 aperonnet 136
			});
137
 
2 aperonnet 138
		} catch (RequestException e) {
139
			// TODO Auto-generated catch block
140
			e.printStackTrace();
141
		}
142
	}
5 aperonnet 143
 
2 aperonnet 144
	/**
145
	 * Met à jour les valeurs d'une liste d'image donnée dans la base de données
5 aperonnet 146
	 *
147
	 * @param li
148
	 *            la liste d'image à synchroniser avec la base
2 aperonnet 149
	 */
5 aperonnet 150
	public void SynchroniserBaseDeDonnees(ListeImageCarnet li) {
2 aperonnet 151
		// on parcourt toute la liste d'image
5 aperonnet 152
		for (Iterator<String> listIt = li.keySet().iterator(); listIt.hasNext();) {
153
			String postData = "";
154
 
155
			ImageCarnet enCours = li.get(listIt.next());
156
 
2 aperonnet 157
			// pour chaque image on extrait les informations
5 aperonnet 158
			for (Iterator<String> imgIt = enCours.keySet().iterator(); imgIt
159
					.hasNext();) {
2 aperonnet 160
				// qu'on place dans le poste
5 aperonnet 161
				String key = imgIt.next();
162
				String valeur = enCours.renvoyerValeurCorrecte(key);
163
				valeur.replaceAll("'", "\'");
164
				postData += "&" + key + "="
165
						+ enCours.renvoyerValeurCorrecte(key);
166
 
2 aperonnet 167
			}
5 aperonnet 168
 
169
			// on fait un post asynchrone et on les envoie à jrest
108 aurelien 170
			RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
171
					Configuration.getServiceBaseUrl()
5 aperonnet 172
					+ "/inventoryImage/" + iModele.getIdentifiant() + "/");
173
 
2 aperonnet 174
			try {
175
				rb.sendRequest(postData, new RequestCallback() {
176
 
177
					public void onError(Request request, Throwable exception) {
5 aperonnet 178
 
2 aperonnet 179
					}
180
 
181
					public void onResponseReceived(Request request,
182
							Response response) {
5 aperonnet 183
 
184
						if (response.getText().equals("OK")) {
185
							return;
186
						} else {
187
							com.google.gwt.user.client.Window
188
									.alert("Problème lors de la mise à jour des données");
2 aperonnet 189
						}
5 aperonnet 190
 
2 aperonnet 191
					}
5 aperonnet 192
 
193
				});
2 aperonnet 194
			} catch (RequestException e) {
195
				// TODO Auto-generated catch block
196
				e.printStackTrace();
197
			}
198
		}
199
	}
5 aperonnet 200
 
2 aperonnet 201
	/**
5 aperonnet 202
	 * Supprime des image sur le serveur par rapport à leur identifant
203
	 *
204
	 * @param ids
205
	 *            un tableau d'identifiants d'images à supprimer
2 aperonnet 206
	 */
5 aperonnet 207
	public void supprimerBaseDeDonnees(String[] ids) {
208
		String postData = "";
209
		// on fait un delete dans le post (jrest ne gère pas delete comme une
210
		// action à part entière)
211
		postData += "&action=DELETE";
212
 
213
		String uid = "";
214
 
2 aperonnet 215
		// on concatène les ids
216
		for (int i = 0; i < ids.length; i++) {
5 aperonnet 217
 
218
			uid += ids[i] + ",";
2 aperonnet 219
		}
5 aperonnet 220
 
2 aperonnet 221
		// et on envoie ça au serveur
145 aurelien 222
		RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, Configuration.getServiceBaseUrl()
5 aperonnet 223
				+ "/inventoryImageList/" + iModele.getIdentifiant() + "/" + uid);
2 aperonnet 224
		try {
225
			rb.sendRequest(postData, new RequestCallback() {
226
 
227
				public void onError(Request request, Throwable exception) {
228
					// TODO Auto-generated method stub
5 aperonnet 229
 
2 aperonnet 230
				}
231
 
5 aperonnet 232
				public void onResponseReceived(Request request,
233
						Response response) {
234
 
235
					// quand la requête est éxecutée on le signale au modèle
236
					// poru qu'il mette à jour les données
2 aperonnet 237
					// et en notifie le médiateur
5 aperonnet 238
					iModele.requeteTerminee();
239
 
240
				}
241
			});
242
 
2 aperonnet 243
		} catch (RequestException e) {
244
			// TODO Auto-generated catch block
245
			e.printStackTrace();
246
		}
247
	}
248
 
249
}