Subversion Repositories eFlore/Applications.cel

Rev

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