Subversion Repositories eFlore/Applications.cel

Rev

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