Subversion Repositories eFlore/Applications.del

Rev

Rev 220 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
161 gduche 1
package org.tela_botanica.del.client.vues.rechercheobservations;
2
 
3
import java.util.HashMap;
4
import java.util.Iterator;
166 gduche 5
import java.util.List;
161 gduche 6
 
7
import org.tela_botanica.del.client.composants.presenteur.Presenteur;
166 gduche 8
import org.tela_botanica.del.client.modeles.Observation;
9
import org.tela_botanica.del.client.utils.MockDatasource;
161 gduche 10
 
11
import com.google.gwt.event.dom.client.ClickEvent;
12
import com.google.gwt.event.dom.client.ClickHandler;
309 aurelien 13
import com.google.gwt.event.dom.client.HasClickHandlers;
14
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
161 gduche 15
import com.google.gwt.event.dom.client.KeyCodes;
16
import com.google.gwt.event.dom.client.KeyPressEvent;
17
import com.google.gwt.event.dom.client.KeyPressHandler;
309 aurelien 18
import com.google.gwt.user.client.ui.Button;
19
import com.google.gwt.user.client.ui.HasText;
20
import com.google.gwt.user.client.ui.HasVisibility;
161 gduche 21
import com.google.gwt.user.client.ui.HasWidgets;
309 aurelien 22
import com.google.gwt.user.client.ui.IsWidget;
23
import com.google.gwt.user.client.ui.Label;
161 gduche 24
import com.google.gwt.user.client.ui.Panel;
25
import com.google.gwt.user.client.ui.RootPanel;
26
import com.google.gwt.user.client.ui.TextBox;
27
 
28
public class RechercheObservationsPresenteur extends Presenteur {
29
 
309 aurelien 30
	public abstract interface Vue extends IsWidget {
31
		public HasClickHandlers getRecherchePrincipaleHasClickHandler();
32
		public HasKeyPressHandlers getRecherchePrincipaleHasKeyPressHandlers();
33
		public HasText getRecherchePrincipaleHasText();
34
		public HasText getDepartement();
35
		public HasText getCommune();
36
		public HasText getTaxon();
37
		public HasText getFamille();
38
		public HasText getGenre();
39
		public HasText getTag();
40
		public HasText getMotCle();
41
		public HasText getAuteur();
42
		public HasText getDate();
43
		public HasClickHandlers getBoutonRecherche();
44
		public HasClickHandlers getBoutonRechercheAvancee();
45
		public HasClickHandlers getLienRechercheAvancee();
46
		public HasText getRecherchePrecedente();
47
		public HasWidgets getRechercheAvanceeHasWidget();
48
		public HasVisibility getRechercheAvanceeHasVisibility();
49
		public HasWidgets getZoneObservations();
50
		public HasWidgets getZonePagination();
51
	}
52
	private Vue vue;
53
 
166 gduche 54
	private List<Observation> observations;
55
 
309 aurelien 56
	public RechercheObservationsPresenteur(Vue vue) {
57
		this.vue = vue;
161 gduche 58
	}
59
 
60
	public void go(HasWidgets composite) {
61
		if (composite == null) {
62
			composite = RootPanel.get();
63
		}
309 aurelien 64
		composite.add(vue.asWidget());
220 gduche 65
		gererEvenements();
166 gduche 66
 
67
		// On commence par afficher la totalité des observations
68
		chercherObservations(null);
69
		afficherObservations();
161 gduche 70
	}
71
 
220 gduche 72
	protected void gererEvenements() {
161 gduche 73
 
74
		// Gestion du clic dans la zone de saisie
309 aurelien 75
		vue.getRecherchePrincipaleHasClickHandler().addClickHandler(new ClickHandler() {
161 gduche 76
 
77
			public void onClick(ClickEvent event) {
309 aurelien 78
				HasText recherchePrincipale = (HasText) event.getSource();
161 gduche 79
				if (recherchePrincipale.getText().equals("Recherche libre")) {
80
					recherchePrincipale.setText("");
81
				}
82
			}
83
		});
84
 
85
		// Gestion de l'affichage de la recherche Avancée
309 aurelien 86
		vue.getLienRechercheAvancee().addClickHandler(new ClickHandler() {
161 gduche 87
 
88
			public void onClick(ClickEvent event) {
309 aurelien 89
				HasVisibility rechercheAvancee = vue.getRechercheAvanceeHasVisibility();
161 gduche 90
				rechercheAvancee.setVisible(!rechercheAvancee.isVisible());
91
			}
92
		});
93
 
94
		// Gestion de l'évènement recherche sur le clic ou sur l'appui de la
95
		// touche Entrée
309 aurelien 96
		vue.getBoutonRecherche().addClickHandler(new ClickHandler() {
161 gduche 97
 
98
			public void onClick(ClickEvent event) {
166 gduche 99
				chercherObservations(collecterFormulaire());
100
				afficherObservations();
161 gduche 101
			}
102
		});
103
 
309 aurelien 104
		vue.getBoutonRechercheAvancee().addClickHandler(new ClickHandler() {
161 gduche 105
			public void onClick(ClickEvent event) {
166 gduche 106
				chercherObservations(collecterFormulaire());
107
				afficherObservations();
161 gduche 108
			}
109
		});
110
 
309 aurelien 111
		vue.getRecherchePrincipaleHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() {
161 gduche 112
 
113
			public void onKeyPress(KeyPressEvent event) {
114
				if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
166 gduche 115
					chercherObservations(collecterFormulaire());
116
					afficherObservations();
161 gduche 117
				}
118
			}
119
		});
120
	}
121
 
166 gduche 122
	// Gestion de la recherche d'observations :
123
	public HashMap<String, String> collecterFormulaire() {
161 gduche 124
 
166 gduche 125
		HashMap<String, String> champsRecherche = new HashMap<String, String>();
126
 
309 aurelien 127
		if (!vue.getRecherchePrincipaleHasText().getText().equals("")) {
128
			champsRecherche.put("search", vue.getRecherchePrincipaleHasText().getText());
166 gduche 129
		}
309 aurelien 130
		if (!vue.getDepartement().getText().equals("")) {
131
			champsRecherche.put("dept", vue.getDepartement().getText());
166 gduche 132
		}
309 aurelien 133
		if (!vue.getCommune().getText().equals("")) {
134
			champsRecherche.put("com", vue.getCommune().getText());
166 gduche 135
		}
309 aurelien 136
		if (!vue.getTaxon().getText().equals("")) {
137
			champsRecherche.put("taxon", vue.getTaxon().getText());
166 gduche 138
		}
309 aurelien 139
		if (!vue.getFamille().getText().equals("")) {
140
			champsRecherche.put("fam", vue.getFamille().getText());
166 gduche 141
		}
309 aurelien 142
		if (!vue.getGenre().getText().equals("")) {
143
			champsRecherche.put("gen", vue.getGenre().getText());
166 gduche 144
		}
309 aurelien 145
		if (!vue.getTag().getText().equals("")) {
146
			champsRecherche.put("tag", vue.getTag().getText());
166 gduche 147
		}
309 aurelien 148
		if (!vue.getMotCle().getText().equals("")) {
149
			champsRecherche.put("motCle", vue.getMotCle().getText());
166 gduche 150
		}
309 aurelien 151
		if (!vue.getAuteur().getText().equals("")) {
152
			champsRecherche.put("auteur", vue.getAuteur().getText());
166 gduche 153
		}
309 aurelien 154
		if (!vue.getDate().getText().equals("")) {
155
			champsRecherche.put("date", vue.getDate().getText());
166 gduche 156
		}
157
		return champsRecherche;
158
	}
159
 
160
	public void chercherObservations(HashMap<String, String> champsRecherche) {
161
 
309 aurelien 162
		vue.getRechercheAvanceeHasVisibility().setVisible(false);
166 gduche 163
		this.observations = MockDatasource.getInstance().getObservations(champsRecherche);
309 aurelien 164
		vue.getRecherchePrecedente().setText(getChaineRecherche(champsRecherche));
166 gduche 165
	}
161 gduche 166
 
166 gduche 167
	public void afficherObservations() {
161 gduche 168
 
309 aurelien 169
		vue.getZoneObservations().clear();
166 gduche 170
		for (Observation observation : observations) {
309 aurelien 171
			ObservationPresenteur presenteur = new ObservationPresenteur(new ObservationVue(), observation);
172
			presenteur.go(vue.getZoneObservations());
166 gduche 173
		}
161 gduche 174
	}
175
 
176
	private String getChaineRecherche(HashMap<String, String> valeursRecherche) {
177
		String chaineRecherche = "";
166 gduche 178
		if (valeursRecherche != null) {
179
			Iterator<String> itCles = valeursRecherche.keySet().iterator();
180
			while (itCles.hasNext()) {
181
				String cle = itCles.next();
182
				String valeur = valeursRecherche.get(cle);
183
				if (valeur != "") {
184
					chaineRecherche += cle + ":=" + valeur + " ";
185
				}
161 gduche 186
			}
187
		}
188
		return chaineRecherche;
189
	}
190
}