Subversion Repositories eFlore/Applications.cel

Rev

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

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