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