Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1941 aurelien 1
package org.tela_botanica.client.modeles.dao;
2
 
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
2602 aurelien 6
import java.util.Map;
1941 aurelien 7
 
2392 aurelien 8
import org.tela_botanica.client.cel2;
1941 aurelien 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.objets.Configuration;
2033 aurelien 11
import org.tela_botanica.client.modeles.objets.ListeChampsEtendus;
12
import org.tela_botanica.client.modeles.objets.ListeGroupesChampsEtendus;
1941 aurelien 13
import org.tela_botanica.client.modeles.objets.ListeReferentielPerso;
14
import org.tela_botanica.client.observation.ObservationModele;
15
 
2392 aurelien 16
import com.google.gwt.core.client.Callback;
1941 aurelien 17
import com.google.gwt.http.client.Request;
18
import org.tela_botanica.client.util.RequestBuilderWithCredentials;
2401 aurelien 19
import org.tela_botanica.client.util.Util;
20
 
1941 aurelien 21
import com.google.gwt.http.client.RequestCallback;
22
import com.google.gwt.http.client.RequestException;
23
import com.google.gwt.http.client.Response;
24
import com.google.gwt.http.client.URL;
25
import com.google.gwt.json.client.JSONArray;
26
import com.google.gwt.json.client.JSONObject;
27
import com.google.gwt.json.client.JSONParser;
28
import com.google.gwt.json.client.JSONValue;
2392 aurelien 29
import com.google.gwt.user.client.Window;
1941 aurelien 30
 
31
public class ListeReferentielChampsEtendusDAO {
32
 
33
 
2392 aurelien 34
	public static ListeGroupesChampsEtendus cacheGroupes;
35
	public static HashMap<String, String> cacheClesLabels;
36
	public static HashMap<String, String> cacheDescription = new HashMap<String, String>();
37
 
38
	public static String prefixePageChampEtendu = "CE";
39
 
1941 aurelien 40
	public ListeReferentielChampsEtendusDAO(ObservationModele obs) {
41
 
42
	}
43
 
44
	public void obtenirListeNomsChampsEtendus(final Rafraichissable r, String recherche) {
45
 
46
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() +
47
												"/NomsChampsEtendus/cle"+
2392 aurelien 48
												"?recherche="+URL.encode(recherche));
1941 aurelien 49
		try {
50
 
51
			rb.sendRequest(null, new RequestCallback() {
52
				@Override
53
				public void onResponseReceived(final Request request,
54
						final Response response) {
55
 
2033 aurelien 56
					ListeChampsEtendus labelCles = new ListeChampsEtendus(response.getText());
1941 aurelien 57
					r.rafraichir(labelCles, true);
58
				}
59
 
60
				@Override
61
				public void onError(Request request, Throwable exception) {
2392 aurelien 62
					// TODO Auto-generated method stub
63
				}
1941 aurelien 64
			});
65
 
66
		} catch (RequestException e) {
67
 
68
			e.printStackTrace();
69
		}
70
	}
71
 
72
	public void obtenirListeValeursChampEtendu(final Rafraichissable r, String cle, String recherche) {
73
 
74
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() +
75
												"/NomsChampsEtendus/valeur"+
76
												"?cle="+URL.encode(cle)+"&recherche="+URL.encode(recherche));
77
 
78
		try {
79
 
80
			rb.sendRequest(null, new RequestCallback() {
81
				@Override
82
				public void onResponseReceived(final Request request,
83
						final Response response) {
84
 
85
 
86
					ArrayList<String> valeurs = new ArrayList<String>();
87
					final JSONValue responseValue = JSONParser.parse(response.getText());
88
 
89
					JSONArray reponse = null;
90
					if ((reponse = responseValue.isArray()) != null) {
91
						for(int i = 0; i < reponse.size(); i++) {
92
							valeurs.add(reponse.get(i).isString().stringValue());
93
						}
94
					}
95
 
96
					r.rafraichir(valeurs, true);
97
				}
98
 
99
				@Override
100
				public void onError(Request request, Throwable exception) {
101
					// TODO Auto-generated method stub
2392 aurelien 102
				}
1941 aurelien 103
			});
104
 
105
		} catch (RequestException e) {
106
 
107
			e.printStackTrace();
108
		}
109
	}
2033 aurelien 110
 
111
	public void obtenirGroupesChampsEtendus(final Rafraichissable r) {
2392 aurelien 112
 
113
		if(cacheGroupes == null) {
114
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() +
115
					"/CatalogueChampsEtendus/groupes");
116
			try {
117
				rb.sendRequest(null, new RequestCallback() {
118
				@Override
119
				public void onResponseReceived(final Request request,
120
				final Response response) {
121
					ListeGroupesChampsEtendus valeurs = new ListeGroupesChampsEtendus(response.getText());
122
					cacheGroupes = valeurs;
123
					r.rafraichir(valeurs, true);
124
				}
125
 
126
				@Override
127
				public void onError(Request request, Throwable exception) {
128
					// TODO Auto-generated method stub
129
				}
130
			});
131
 
132
			} catch (RequestException e) {
133
				e.printStackTrace();
2033 aurelien 134
			}
2392 aurelien 135
		} else {
136
			r.rafraichir(cacheGroupes, true);
137
		}
138
	}
139
 
140
	public void obtenirCatalogueChampsEtendus(final Rafraichissable r) {
141
 
142
		if(cacheClesLabels == null) {
143
			RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET, Configuration.getServiceBaseUrl() +
144
					"/CatalogueChampsEtendus/champs");
145
			try {
146
				rb.sendRequest(null, new RequestCallback() {
147
				@Override
148
				public void onResponseReceived(final Request request,
149
				final Response response) {
150
					try {
151
						JSONValue champsJson = JSONParser.parseStrict(response.getText());
152
						JSONArray champs = champsJson.isArray();
153
 
154
						cacheClesLabels = new HashMap<String, String>(champs.size());
155
 
156
						for (int i = 0; i < champs.size(); i++) {
157
							JSONObject champ = champs.get(i).isObject();
158
							String cle = champ.get("cle").isString().stringValue();
159
							String label = champ.get("label").isString().stringValue();
160
							cacheClesLabels.put(cle, label);
161
 
162
							r.rafraichir(cacheClesLabels, true);
163
						}
164
					} catch (Exception e) {
165
						// TODO: handle exception
166
					}
167
				}
168
 
169
				@Override
170
				public void onError(Request request, Throwable exception) {
171
					// TODO Auto-generated method stub
172
				}
173
			});
2033 aurelien 174
 
2392 aurelien 175
			} catch (RequestException e) {
176
				e.printStackTrace();
177
			}
178
		} else {
179
			r.rafraichir(cacheClesLabels, true);
180
		}
181
	}
182
 
183
	public static void telechargerDescriptionWikini(final String champ, final Callback<String, String> callback) {
2401 aurelien 184
		String url = Configuration.getWikiDescriptionChampsEtendusRestUrl()+obtenirNomPageChampEtendu(champ)+"?";
2392 aurelien 185
		String options = Configuration.getWikiDescriptionChampsEtendusUrlOptions();
186
 
187
		if(cacheDescription.containsKey(champ)) {
188
			callback.onSuccess(cacheDescription.get(champ));
189
		}
2033 aurelien 190
 
2392 aurelien 191
		RequestBuilderWithCredentials rb = new RequestBuilderWithCredentials(RequestBuilderWithCredentials.GET,
192
				url + options);
193
 
194
		try {
195
			rb.sendRequest(null, new RequestCallback() {
196
 
197
				@Override
198
				public void onResponseReceived(final Request request,
199
						final Response response) {
2438 mathias 200
					try {
201
 
202
						final JSONValue responseValue = JSONParser.parse(response.getText());
203
 
204
						String description = "";
205
 
206
						JSONObject reponse = responseValue.isObject();
207
						if(reponse != null && reponse.get("texte") != null && reponse.get("texte").isString() != null) {
208
							description = reponse.get("texte").isString().stringValue();
209
						}
210
 
211
						cacheDescription.put(champ, description);
212
						callback.onSuccess(description);
213
					} catch(Exception exception) {
214
						this.onError(request, exception);
2392 aurelien 215
					}
216
				}
217
 
218
				@Override
219
				public void onError(Request request, Throwable exception) {
220
					cacheDescription.put(champ, "");
221
					callback.onFailure("");
2438 mathias 222
				}
2392 aurelien 223
			});
224
 
225
		} catch (RequestException e) {
2033 aurelien 226
			e.printStackTrace();
227
		}
228
	}
2392 aurelien 229
 
230
	// Pour obliger la page wiki a avoir été créée avant de rediriger, on utilise une requete synchrone
231
	private static native String effectuerRequeteSynchrone(String url, String contenu, String typeRequete)/*-{
232
		// tant pis pour les vieux navigateurs, ie6 etc...
233
		// tous ceux que l'on supporte connaissent XMLHttpRequest
234
    	var xhReq = new XMLHttpRequest();
235
    	xhReq.open(typeRequete, url, false);
236
 
237
    	if(typeRequete == "POST") xhReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
238
    	xhReq.send(contenu);
239
 
240
    	var serverResponse = xhReq.status + xhReq.responseText;
241
    	return serverResponse;
242
	}-*/;
243
 
2401 aurelien 244
	public static void creerPageWikini(final String cle) {
245
		String url = Configuration.getWikiDescriptionChampsEtendusRestUrl()+obtenirNomPageChampEtendu(cle)+"?";
2392 aurelien 246
		String options = Configuration.getWikiDescriptionChampsEtendusUrlOptions();
247
		String pageTpl = Configuration.getWikiDescriptionChampsEtendusUrlOptionsPageTpl();
248
		effectuerRequeteSynchrone(url + options + pageTpl, "", "GET");
249
	}
250
 
251
	public static String obtenirUrlEditionDescriptionWiki(String cle) {
2401 aurelien 252
		String url = Configuration.getWikiDescriptionChampsEtendusPageUrl()+obtenirNomPageChampEtendu(cle)+"/edit";
2392 aurelien 253
		return url;
254
	}
2401 aurelien 255
 
256
	protected static String obtenirNomPageChampEtendu(String cle) {
257
		return prefixePageChampEtendu+Util.convertirEnChaMot(cle);
258
	}
2602 aurelien 259
 
260
	public static String getUrlRequeteValeursChampEtendu(String cle) {
261
		return Configuration.getServiceBaseUrl() +
262
		"/NomsChampsEtendus/valeur"+
263
		"?cle="+URL.encode(cle)+"&recherche=";
264
	}
265
 
266
	public static String getUrlRequeteNomsChampsEtendus() {
267
		return Configuration.getServiceBaseUrl()+
268
			   "/NomsChampsEtendus/cle?recherche=";
269
	}
270
 
271
	public static Map<String, String> parserRetourListeValeursChampsEtendus(Response response) {
272
 
273
		Map<String, String> valeurs = new HashMap<String, String>();
274
		final JSONValue responseValue = JSONParser.parse(response.getText());
275
 
276
		JSONArray reponse = null;
277
		if ((reponse = responseValue.isArray()) != null) {
278
			for(int i = 0; i < reponse.size(); i++) {
279
				valeurs.put(reponse.get(i).isString().stringValue(), reponse.get(i).isString().stringValue());
280
			}
281
		}
282
 
283
		return valeurs;
284
	}
285
 
286
	public static Map<String, String> parserRetourListeNomsChampsEtendus(Response response) {
287
		final JSONValue responseValue = JSONParser.parse(response.getText());
288
 
289
		JSONObject reponse = null;
290
 
291
		cacheClesLabels = new HashMap<String, String>();
292
		if ((reponse = responseValue.isObject()) != null) {
293
			Iterator<String> it = reponse.keySet().iterator();
294
 
295
			while(it.hasNext()) {
296
				String cle = it.next();
297
				String valeur = reponse.get(cle).isString().stringValue();
298
				cacheClesLabels.put(cle, valeur);
299
			}
300
		}
301
 
302
		return cacheClesLabels;
303
	}
1941 aurelien 304
}