Subversion Repositories eFlore/Applications.del

Rev

Rev 1960 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1934 aurelien 1
package org.tela_botanica.del.client.cache;
2
 
3
import java.util.Arrays;
4
import java.util.List;
5
 
6
import org.tela_botanica.del.client.config.Config;
7
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation;
8
import org.tela_botanica.del.client.modeles.Image;
9
import org.tela_botanica.del.client.modeles.InformationsRecherche;
10
import org.tela_botanica.del.client.modeles.ModeTri;
11
import org.tela_botanica.del.client.modeles.Observation;
12
import org.tela_botanica.del.client.modeles.Protocole;
13
import org.tela_botanica.del.client.modeles.Utilisateur;
14
import org.tela_botanica.del.client.utils.URLUtils;
15
 
16
import com.google.gwt.core.client.GWT;
17
import com.google.gwt.user.client.Window;
18
import com.google.gwt.user.client.Window.Location;
19
 
20
public class CacheClient {
21
 
22
	private List<Protocole> listeProtocoles;
23
 
24
	private Observation observationCourante;
25
	private Image imageCourante;
26
	private String taxonPourRechercheEflore;
27
	private String idProtocoleEnAttente = null;
28
	private Protocole protocoleCourant;
29
	private String referentielCourant;
30
	private int numPageRechercheImage = 0;
31
	private int nbTotalImagesRecherchees = 0;
32
 
33
	private boolean referentielNonModifiable = false;
34
 
35
	private int pasPagination = 12;
36
	private int pageCouranteRechercheImage = 1;
37
	private int pageCouranteRechercheObservations = 1;
38
	private InformationsRecherche informationsRechercheImage;
39
	private InformationsRecherche informationsRechercheObservation;
40
	private Utilisateur utilisateur;
41
	private String pageCourante = "";
42
	private String statut;
43
	private String[] statutsPossibles = {
44
		ConstantesNavigation.PARAM_TYPE_TOUS,
45
		ConstantesNavigation.PARAM_TYPE_A_DETERMINER,
1973 aurelien 46
		ConstantesNavigation.PARAM_TYPE_A_CONFIRMER,
1934 aurelien 47
		ConstantesNavigation.PARAM_TYPE_VALIDEES
48
	};
49
	private ModeTri modeTri = ModeTri.TRI_ASCENDANT;
50
 
51
	public void supprimerFiltreStatut() {
52
		this.statut = null;
53
	}
54
 
55
	public void setFiltreStatut(String statut) {
56
		this.statut = statut;
57
	}
58
 
59
	public String getFiltreStatut() {
60
		return this.statut;
61
	}
62
 
63
	public String getPageCourante() {
64
		return pageCourante;
65
	}
66
 
67
	public void setPageCourante(String pageCourante) {
68
		pageCourante = pageCourante.replaceAll("#", "");
69
		pageCourante = pageCourante.replaceAll("page_validation", ConstantesNavigation.PAGE_DETAIL_OBS);
70
		pageCourante = pageCourante.replaceAll("page_validation_pictoflora", ConstantesNavigation.PAGE_DETAIL_IMG);
71
		this.pageCourante = pageCourante;
72
	}
73
 
74
	private static CacheClient instance;
75
 
76
	private CacheClient() {
77
		instance = this;
78
	}
79
 
80
	public void initialiserAvecParametres() {
81
		String urlCourante = Window.Location.getHref();
82
		Config config = new Config();
83
		String urlAppliImg = config.getUrl("pictoflora");
84
 
85
		setPageCourante(Location.getHash());
86
 
87
		String rechercheLibre = Location.getParameter("masque");
88
		String famille = Location.getParameter("masque.famille");
89
		String taxon = Location.getParameter("masque.ns");
90
		String genre = Location.getParameter("masque.genre");
91
		String commune = Location.getParameter("masque.commune");
92
		String dept = Location.getParameter("masque.departement");
93
		String auteur = Location.getParameter("masque.auteur");
94
		String date = Location.getParameter("masque.date");
95
		String tag = Location.getParameter("masque.tag");
96
		String tagCel = Location.getParameter("masque.tag_cel");
97
		String tagDel = Location.getParameter("masque.tag_pictoflora");
98
		String referentiel = Location.getParameter("masque.referentiel");
99
		String protocole = Location.getParameter("protocole");
100
		String statutParam = Location.getParameter("masque.type");
101
 
102
		String page = Location.getParameter("page");
103
		Integer pageInt = null;
104
		try {
105
			pageInt = Integer.parseInt(page);
106
		} catch (Exception e) {
107
			pageInt = null;
108
		}
109
 
110
		String pas = Location.getParameter("pas");
111
		Integer pasInt = null;
112
		if (pas != null) {
113
			try {
114
				pasInt = Integer.parseInt(pas);
115
			} catch (Exception e) {
116
				pasInt = null;
117
			}
118
		}
119
 
120
		InformationsRecherche rechercheParArguments = new InformationsRecherche();
121
		rechercheParArguments.setRechercheLibre(rechercheLibre);
122
		rechercheParArguments.setFamille(famille);
123
		rechercheParArguments.setTaxon(taxon);
124
		rechercheParArguments.setGenre(genre);
125
		rechercheParArguments.setCommune(commune);
126
		rechercheParArguments.setDepartement(dept);
127
		rechercheParArguments.setAuteur(auteur);
128
		rechercheParArguments.setDate(date);
129
		rechercheParArguments.setTag(tag);
130
 
131
		if (protocole != null && !protocole.equals("")) {
132
			CacheClient.getInstance().setIdProtocoleEnAttente(protocole);
133
			rechercheParArguments.setIdProtocoleSelectionne(protocole);
134
		} else if (URLUtils.getURLSpecialParameterValue() != null) {
135
			CacheClient.getInstance().setIdProtocoleEnAttente(URLUtils.getURLSpecialParameterValue());
136
			rechercheParArguments.setIdProtocoleSelectionne(URLUtils.getURLSpecialParameterValue());
137
		}
138
 
139
		if (pasInt != null) {
140
			setPasPagination(pasInt);
141
		}
142
 
143
		if (urlCourante.contains(urlAppliImg)) {
144
			rechercheParArguments.setMotClefCel(tagCel);
145
			rechercheParArguments.setMotClefDel(tagDel);
146
			if (pageInt != null) {
147
				setPageCouranteRechercheImages(pageInt);
148
			}
149
		} else {
150
			if (pageInt != null) {
151
				setPageCouranteRechercheObservations(pageInt);
152
			}
153
		}
154
 
155
		definirOrdreTriCourantParUrl();
156
		String tri = Location.getParameter("tri");
157
		if (urlCourante.contains(urlAppliImg)) {
158
			if (tri != null) {
159
				// Pour PictoFlora
160
				if (tri.equals("moyenne-arithmetique")) {
161
					rechercheParArguments.setTriParMoyenneArithmetique(modeTri);
162
				} else if (tri.equals("points")) {
163
					rechercheParArguments.setTriParNbPoints(modeTri);
164
				} else if (tri.equals("tags")) {
165
					rechercheParArguments.setTriParNbTags(modeTri);
166
				} else {
167
					rechercheParArguments.setTriParDatePublication(modeTri);
168
				}
169
			} else {
170
				// Tri par défaut pour PictoFlora
171
				rechercheParArguments.setTriParDatePublication(ModeTri.TRI_DESCENDANT);
172
			}
173
		} else {
174
			// Pour IdentiPlante
175
			if (tri != null && tri.equals("date_observation")) {
176
				rechercheParArguments.setTriParDateObservation(modeTri);
177
			} else if(tri != null && tri.equals("nb_commentaires")) {
178
				rechercheParArguments.setTriParNbCommentaires(modeTri);
179
			} else {
180
				// Tri par défaut pour IdentiPlante
181
				rechercheParArguments.setTriParDatePublication(ModeTri.TRI_DESCENDANT);
182
			}
183
		}
184
 
185
		rechercheParArguments.setMotClef(tag);
186
 
187
		// si le référentiel est passé dans l'url alors il ne doit pas être modifiable
188
		if (referentiel != null && !referentiel.equals("")) {
189
			setReferentielCourant(referentiel);
190
			rechercheParArguments.setReferentiel(referentiel);
191
			referentielNonModifiable = true;
192
		}
193
 
194
		if (Location.getParameterMap().size() == 0) {
195
			// par défaut l'application s'ouvre sur l'onglet à déterminer
196
			statut = ConstantesNavigation.PARAM_TYPE_DEFAUT;
197
		} else {
198
			if (Arrays.asList(statutsPossibles).contains(statutParam)) {
199
				statut = statutParam;
200
			} else {
201
				statut = ConstantesNavigation.PARAM_TYPE_DEFAUT;
202
			}
203
		}
204
 
205
		informationsRechercheImage = rechercheParArguments;
206
		informationsRechercheObservation = rechercheParArguments;
207
 
208
		mettreAjourUrlCourante();
209
	}
210
 
211
	private void definirOrdreTriCourantParUrl() {
212
		String ordre = Location.getParameter("ordre");
213
		if (ordre != null) {
214
			if (ordre.equals("asc")) {
215
				this.modeTri = ModeTri.TRI_ASCENDANT;
216
			} else if (ordre.equals("desc")) {
217
				this.modeTri = ModeTri.TRI_DESCENDANT;
218
			}
219
		}
220
	}
221
 
222
	public void setIdProtocoleEnAttente(String idProtocole) {
223
		idProtocoleEnAttente = idProtocole;
224
	}
225
 
226
	public String getIdProtocoleEnAttente() {
227
		return idProtocoleEnAttente;
228
	}
229
 
230
	public Utilisateur getUtilisateur() {
231
		if (this.utilisateur == null) {
232
			this.utilisateur = new Utilisateur(null, null);
233
		}
234
		return this.utilisateur;
235
	}
236
 
237
	public void setUtilisateur(Utilisateur utilisateur) {
238
		this.utilisateur = utilisateur;
239
	}
240
 
241
	public void setHome(String home) {
242
		setPageCourante(home);
243
	}
244
 
245
	public String getHome() {
246
		return "";
247
	}
248
 
249
	public Observation getObservationCourante() {
250
		return observationCourante;
251
	}
252
 
253
	public void setObservationCourante(Observation observationCourante) {
254
		this.observationCourante = observationCourante;
255
	}
256
 
257
	public static CacheClient getInstance() {
258
		if (instance == null) {
259
			instance = new CacheClient();
260
		}
261
		return instance;
262
	}
263
 
264
	public String getTaxonPourRechercheEflore() {
265
		return taxonPourRechercheEflore;
266
	}
267
 
268
	public void setTaxonPourRechercheEflore(String taxonPourRechercheEflore) {
269
		this.taxonPourRechercheEflore = taxonPourRechercheEflore;
270
	}
271
 
272
	public int getNumPageRechercheImage() {
273
		return numPageRechercheImage;
274
	}
275
 
276
	// Pour la recherche :
277
	public int getPasPagination() {
278
		return pasPagination;
279
	}
280
 
281
	public void setPasPagination(int pasPagination) {
282
		this.pasPagination = pasPagination;
283
	}
284
 
285
	public void setPageCouranteRechercheImages(int pageCouranteRecherche) {
286
		this.pageCouranteRechercheImage = pageCouranteRecherche;
287
	}
288
 
289
	public int getPageCouranteRechercheImage() {
290
		return this.pageCouranteRechercheImage;
291
	}
292
 
293
	public void setNbTotalImagesRecherchees(int nbTotalImagesRecherchees) {
294
		this.nbTotalImagesRecherchees = nbTotalImagesRecherchees;
295
	}
296
 
297
	public int getNbTotalImagesRecherchees() {
298
		return this.nbTotalImagesRecherchees;
299
	}
300
 
301
	public Image getImageCourante() {
302
		return imageCourante;
303
	}
304
 
305
	public void setImageCourante(Image imageCourante) {
306
		this.imageCourante = imageCourante;
307
	}
308
 
309
	public void setListeProtocoles(List<Protocole> listeProtocole) {
310
		this.listeProtocoles = listeProtocole;
311
	}
312
 
313
	public List<Protocole> getListeProtocoles() {
314
		return this.listeProtocoles;
315
	}
316
 
317
	public Protocole getProtocoleCourant() {
318
		return protocoleCourant;
319
	}
320
 
321
	public void setProtocoleCourant(Protocole protocoleCourant) {
322
		this.protocoleCourant = protocoleCourant;
323
	}
324
 
325
	public InformationsRecherche getInformationsRechercheImage() {
326
		if (informationsRechercheImage == null) {
327
			informationsRechercheImage = new InformationsRecherche();
328
		}
329
		return informationsRechercheImage;
330
	}
331
 
332
	public InformationsRecherche getInformationsRechercheObservation() {
333
		if (informationsRechercheObservation == null) {
334
			informationsRechercheObservation = new InformationsRecherche();
335
		}
336
		return informationsRechercheObservation;
337
	}
338
 
339
	public void setInformationsRechercheImage(InformationsRecherche informationsRechercheImage) {
340
		this.informationsRechercheImage = informationsRechercheImage;
341
	}
342
 
343
	public void setInformationsRechercheObservation(InformationsRecherche informationsRechercheObservation) {
344
		this.informationsRechercheObservation = informationsRechercheObservation;
345
	}
346
 
347
	public int getPageCouranteRechercheObservations() {
348
		return pageCouranteRechercheObservations;
349
	}
350
 
351
	public void setPageCouranteRechercheObservations(int pageCouranteRechercheObservations) {
352
		this.pageCouranteRechercheObservations = pageCouranteRechercheObservations;
353
	}
354
 
355
	public void setReferentielCourant(String referentielCourant) {
356
		this.referentielCourant = referentielCourant;
357
	}
358
 
359
	public String getReferentielCourant() {
360
		return referentielCourant;
361
	}
362
 
363
	public void setReferentielNonModifiable(boolean referentielNonModifiable) {
364
		this.referentielNonModifiable = referentielNonModifiable;
365
	}
366
 
367
	public boolean getReferentielNonModifiable() {
368
		return referentielNonModifiable;
369
	}
370
 
371
	public String getUrlPageSignalerMauvaiseId(String id) {
372
		Config config = new Config();
373
		String urlSignalerMauvaiseId = config.getUrl("identiplante");
374
		if (!GWT.isScript()) {
375
			urlSignalerMauvaiseId += "?gwt.codesvr="+Location.getParameter("gwt.codesvr")+"";
376
		}
377
		return urlSignalerMauvaiseId+"#"+ConstantesNavigation.PAGE_DETAIL_OBS+"~"+id;
378
 
379
	}
380
 
381
	public String genererUrlCourante() {
382
		String urlCourante = Window.Location.getHref();
383
		Config config = new Config();
384
		String urlAppliObs = config.getUrl("identiplante");
385
		String urlAppliImg = config.getUrl("pictoflora");
386
		String url = urlCourante;
387
		String arguments = "";
388
 
389
		if (urlCourante.contains(urlAppliImg)) {
390
			InformationsRecherche infoRecherche;
391
			infoRecherche = getInformationsRechercheImage();
392
 
393
			if (CacheClient.getInstance().getProtocoleCourant() != null) {
394
				infoRecherche.setIdProtocoleSelectionne("" + CacheClient.getInstance().getProtocoleCourant().getId());
395
			}
396
 
397
			arguments = infoRecherche.versChaineRequete();
398
			arguments += (arguments.isEmpty()) ? "" : "&";
399
			arguments += "page="+getPageCouranteRechercheImage()+"&pas="+getPasPagination();
400
 
401
			url = config.getUrl("pictoflora");
402
		} else if (urlCourante.contains(urlAppliObs)) {
403
			InformationsRecherche infoRecherche;
404
			infoRecherche = getInformationsRechercheObservation();
405
 
406
			arguments = "masque.type="+statut;
407
			arguments += "&page="+getPageCouranteRechercheObservations()+"&pas="+getPasPagination();
408
			arguments += "&"+infoRecherche.versChaineRequete();
409
 
410
			url = config.getUrl("identiplante");
411
		}
412
 
413
		if (!GWT.isScript()) {
414
			arguments += "&gwt.codesvr="+Location.getParameter("gwt.codesvr")+"";
415
		}
416
		arguments = (arguments.isEmpty()) ? "" : "?" + arguments;
417
		String signet = getPageCourante().equals("") ? "" : "#" + getPageCourante();
418
		url += arguments + signet;
419
 
420
		// remplacements batards pour corriger l'url
421
		// TODO: factoriser toute la fonction
422
		url = url.replaceAll("&#", "#");
423
		url = url.replaceAll("&&", "&");
424
		url = url.replaceAll("\\?&", "?");
425
		if (url.endsWith("&")) {
426
			url = url.substring(0, url.length()-1);
427
		}
428
 
429
		return url;
430
	}
431
 
432
	public void mettreAjourUrlCourante() {
433
		mettreAJourUrlCouranteSansRecharger(genererUrlCourante());
434
	}
435
 
436
	private static native void mettreAJourUrlCouranteSansRecharger(String nouvelleUrl) /*-{
437
		// javascript double negative trick
438
		// pour plus d'info http://stackoverflow.com/questions/4686583/can-someone-explain-this-double-negative-trick
439
		if (!!($wnd.history && $wnd.history.pushState)) {
440
			var currentState = $wnd.history.state;
441
			if (currentState != nouvelleUrl) {
442
				$wnd.history.pushState(nouvelleUrl, "", nouvelleUrl);
443
			}
444
		}
445
	}-*/;
446
}