Subversion Repositories eFlore/Applications.cel

Rev

Rev 971 | Rev 1293 | 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;
12 david 2
 
411 aurelien 3
import org.tela_botanica.client.image.ImageModele;
12 david 4
import org.tela_botanica.client.interfaces.Rafraichissable;
989 aurelien 5
import org.tela_botanica.client.modeles.objets.Configuration;
6
import org.tela_botanica.client.modeles.objets.ListeObservation;
7
import org.tela_botanica.client.modeles.objets.Observation;
12 david 8
import org.tela_botanica.client.observation.ObservationModele;
730 aurelien 9
import org.tela_botanica.client.util.Util;
12 david 10
 
341 aurelien 11
import com.google.gwt.core.client.GWT;
32 jpm 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;
203 david 17
import com.google.gwt.http.client.URL;
12 david 18
import com.google.gwt.json.client.JSONArray;
965 aurelien 19
import com.google.gwt.json.client.JSONObject;
12 david 20
import com.google.gwt.json.client.JSONParser;
21
import com.google.gwt.json.client.JSONString;
22
import com.google.gwt.json.client.JSONValue;
61 jpm 23
import com.google.gwt.user.client.Window;
12 david 24
 
25
/**
54 david 26
 * DAO la liste des observations attachées a un observateur.
12 david 27
 * @author David Delon
20 david 28
 * TODO : se servir de ObservationDAO pour la lecture unitaire
12 david 29
 *
30
 */
31
public class ListeObservationAsynchroneDAO {
32
 
54 david 33
 
34
/**
35
 * Le modèle associé au DAO.
36
 */
37
 private ObservationModele observationModele = null;
411 aurelien 38
 
39
 private ImageModele imageModele = null;
54 david 40
 
41
 public ListeObservationAsynchroneDAO(final ObservationModele obs) {
42
  this.observationModele=obs;
43
 }
411 aurelien 44
 
45
 /**
46
  * Le modèle associé au DAO.
47
  */
48
 
49
  public ListeObservationAsynchroneDAO(final ImageModele img) {
50
	  this.imageModele = img;
51
  }
12 david 52
 
53
 
54
	/**
55
	 * Envoie une requete au serveur jrest pour obtenir le nombre d'observation correspondant
56
	 * à des critères données en paramètres
57
	 * @param r le rafraichissable qui demande la mise à jour
58
	 * @param criteres un tableau nom/valeur des critères pour les observations
59
	 */
54 david 60
	public final void obtenirListeObservation(final Rafraichissable r, final String utilisateur, final String[][] criteres)
965 aurelien 61
	{
12 david 62
		String requete = "" ;
63
 
64
		if(criteres != null)
65
		{
66
			// on construit les paramètres du get avec les critères (&critere1=valeur1&critere2=valeur2 etc...)
203 david 67
			// ils contiennent limite et taille page et autres filtres (communes , lieu dit etc ...)S
12 david 68
 
69
			for (int i = 0; i < criteres.length; i++) {
70
 
318 aurelien 71
				if(criteres[i][1] != null && !criteres[i][1].equals(""))
12 david 72
				{
73
					if(i!= 0)
74
					{
75
						requete += "&";
76
					}
203 david 77
					requete += criteres[i][0]+"="+URL.encodeComponent(criteres[i][1]) ;
12 david 78
				}
79
			}
157 aurelien 80
		}
12 david 81
 
32 jpm 82
		// on envoie le get asynchrone
116 aurelien 83
		RequestBuilder rb = new RequestBuilder(RequestBuilder.GET,Configuration.getServiceBaseUrl()
32 jpm 84
				+"/InventoryObservationList/"+utilisateur+"/"+requete) ;
12 david 85
 
32 jpm 86
		try {
87
			rb.sendRequest(null, new RequestCallback() {
88
 
54 david 89
				public void onError(final Request request, final Throwable exception) {
32 jpm 90
					// TODO Auto-generated method stub
12 david 91
 
32 jpm 92
				}
93
 
54 david 94
				public void onResponseReceived(final Request request,
95
						final Response response) {
12 david 96
 
32 jpm 97
					final ListeObservation observationData ;
98
					final JSONValue responseValue = JSONParser.parse(response.getText());
99
 
100
					JSONArray reponse=null;
12 david 101
 
32 jpm 102
					// si c'est un tableau
103
					if ((reponse=responseValue.isArray()) != null) {
12 david 104
 
965 aurelien 105
						JSONObject observation;
32 jpm 106
						final int taillemax = reponse.size();
107
 
108
						observationData = new ListeObservation(taillemax);
109
 
110
						for (int i = 0; i < taillemax; i++) {
20 david 111
 
965 aurelien 112
							if ((observation=reponse.get(i).isObject()) != null) {
32 jpm 113
 
971 aurelien 114
								Observation obs = new Observation(observation);
115
								observationData.put(obs.getNumeroOrdre(),obs);
32 jpm 116
							}
12 david 117
						}
32 jpm 118
					} else {
119
 
120
						observationData = new ListeObservation(0) ;
12 david 121
					}
32 jpm 122
 
123
					// dans tous les cas on transmet la liste crée au rafraichissable en lui demandant de répandre les données car il est
124
					// le premier à les recevoir
65 david 125
 
126
					// TODO : ce n'est pas ici qu'on devrait le decider ..
127
					r.rafraichir(observationData,true);
32 jpm 128
				}
129
			}) ;
130
 
131
		} catch (RequestException e) {
132
			// TODO Auto-generated catch block
133
			e.printStackTrace();
134
		}
12 david 135
	}
217 aurelien 136
 
137
	public void modifierEnMasse(final Rafraichissable r, String identifiant,
138
			final Observation obs) {
107 aurelien 139
 
217 aurelien 140
				RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,Configuration.getServiceBaseUrl()+ "/InventoryObservationList/" + identifiant + "/" + obs.getNumeroOrdre()+ "/") ;
141
 
971 aurelien 142
				String postData = "ce_utilisateur="
217 aurelien 143
					+ identifiant ;
144
				if(obs.getNomSaisi() != null) {
145
					postData += "&nom_sel=" + URL.encodeComponent(obs.getNomSaisi());
146
				}
220 aurelien 147
				if(obs.getNumeroNomenclaturalSaisi() != null) {
971 aurelien 148
					postData += "&nom_sel_nn=" + obs.getNumeroNomenclaturalSaisi();
220 aurelien 149
				}
150
 
151
				if(obs.getIdentifiantLocalite() != null) {
971 aurelien 152
					postData += "&ce_zone_geo=" + obs.getIdentifiantLocalite();
220 aurelien 153
				}
154
 
155
				if(obs.getLocalite() != null) {
971 aurelien 156
					postData += "&zone_geo=" + URL.encodeComponent(obs.getLocalite());
220 aurelien 157
				}
158
 
159
				if(obs.getDate() != null) {
160
					postData += "&date_observation=" +  obs.getDate();
161
				}
162
 
163
				if(obs.getLieudit() != null) {
164
					postData += "&lieudit="+ URL.encodeComponent(obs.getLieudit());
165
				}
166
 
167
				if(obs.getStation() != null) {
168
					postData += "&station="+ URL.encodeComponent(obs.getStation());
169
				}
170
 
171
				if(obs.getMilieu() != null) {
172
					postData += "&milieu="+ URL.encodeComponent(obs.getMilieu());
173
				}
174
 
175
				if(obs.getCommentaire() != null) {
411 aurelien 176
					postData += "&commentaire="+obs.getCommentaire();
220 aurelien 177
				}
266 aurelien 178
 
965 aurelien 179
				if(obs.getLatitude() != null ) {
971 aurelien 180
					postData += "&latitude="+URL.encodeComponent(""+obs.getLatitude());
272 aurelien 181
				}
182
 
965 aurelien 183
				if(obs.getLongitude() != null) {
971 aurelien 184
					postData += "&longitude="+URL.encodeComponent(""+obs.getLongitude());
266 aurelien 185
				}
358 aurelien 186
 
217 aurelien 187
				try {
188
 
189
					rb.sendRequest(postData, new RequestCallback() {
190
 
191
						public void onError(Request request, Throwable exception) {
192
							// TODO Auto-generated method stub
193
 
194
						}
195
 
196
						public void onResponseReceived(Request request,
197
								Response response) {
411 aurelien 198
							if(observationModele != null) {
199
								observationModele.obtenirListeObservation(r);
200
							}
217 aurelien 201
						}
202
 
203
 
204
					}) ;
205
 
206
				} catch (RequestException e) {
207
 
208
			}
209
 
210
	}
211
 
107 aurelien 212
	/**
213
	 * Supprime les observations possédant les identifiants données
214
	 * @param r le rafraichissable à avertir de la mise à jour
215
	 * @param identifiant l'identifiant utilisateur
216
	 * @param numerosOrdre les numéros d'ordre des observations séparés par des virgules
217
	 */
218
	public void supprimerListeObservation(Rafraichissable r, String identifiant, String numerosOrdre) {
219
 
220
		String postData = "";
221
		postData += "&action=DELETE";
222
 
223
		// on envoie un post avec l'id de l'image à supprimer
224
		RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
225
				Configuration.getServiceBaseUrl()
226
				+ "/inventoryObservationList/"
227
				+ identifiant
228
				+ "/"
229
				+ numerosOrdre);
230
 
231
		try {
232
			rb.sendRequest(postData, new RequestCallback() {
233
 
234
				public void onError(Request request, Throwable exception) {
235
					// TODO Auto-generated method stub
236
 
237
				}
238
 
239
				public void onResponseReceived(Request request,
240
						Response response) {
241
 
242
					if (response.getText().equals("OK")) {
243
 
244
 
245
					} else {
246
						com.google.gwt.user.client.Window
247
								.alert("Problème lors de la mise à jour des données");
248
						return ;
249
					}
250
				}
251
 
252
			});
253
 
254
			r.rafraichir("OK", true) ;
255
 
256
		} catch (RequestException e) {
257
			// TODO Auto-generated catch block
258
			e.printStackTrace();
259
		}
260
 
261
	}
12 david 262
 
263
}