Subversion Repositories eFlore/Applications.del

Rev

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

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